Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9eff3be693 | |||
| aa296f5f64 | |||
| 7d2a1568e8 | |||
| aaadbdf765 | |||
| 1152dcc3ea |
+44
-46
@@ -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,5 +1,6 @@
|
||||
# SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
version: '3'
|
||||
services:
|
||||
nextclouddev:
|
||||
build: .
|
||||
|
||||
@@ -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
|
||||
+11
-13
@@ -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
|
||||
@@ -31,9 +29,9 @@ package-lock.json @nextcloud/server-dependabot
|
||||
/apps/contactsinteraction/lib @kesselb @SebastianKrupinski
|
||||
/apps/contactsinteraction/tests @kesselb @SebastianKrupinski
|
||||
/apps/dashboard/appinfo/info.xml @julien-nc @juliusknorr
|
||||
/apps/dav/lib/CalDAV @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/apps/dav/lib/CalDAV @st3iny @SebastianKrupinski @tcitworld
|
||||
/apps/dav/lib/CardDAV @hamza221 @SebastianKrupinski
|
||||
/apps/dav/tests/unit/CalDAV @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/apps/dav/tests/unit/CalDAV @st3iny @SebastianKrupinski @tcitworld
|
||||
/apps/dav/tests/unit/CardDAV @hamza221 @SebastianKrupinski
|
||||
/apps/encryption/appinfo/info.xml @come-nc @icewind1991
|
||||
/apps/federatedfilesharing/appinfo/info.xml @icewind1991 @danxuliu
|
||||
@@ -50,7 +48,7 @@ package-lock.json @nextcloud/server-dependabot
|
||||
/apps/sharebymail/appinfo/info.xml @Altahrim @skjnldsv
|
||||
/apps/systemtags/appinfo/info.xml @Antreesy @marcelklehr
|
||||
/apps/theming/appinfo/info.xml @skjnldsv @juliusknorr
|
||||
/apps/twofactor_backupcodes/appinfo/info.xml @miaulalala @ChristophWurst
|
||||
/apps/twofactor_backupcodes/appinfo/info.xml @st3iny @miaulalala @ChristophWurst
|
||||
/apps/updatenotification/appinfo/info.xml @JuliaKirschenheuter @sorbaugh
|
||||
/apps/user_ldap/appinfo/info.xml @come-nc @blizzz
|
||||
/apps/user_status/appinfo/info.xml @Antreesy @nickvergessen
|
||||
@@ -72,9 +70,9 @@ package-lock.json @nextcloud/server-dependabot
|
||||
|
||||
# Two-Factor Authentication
|
||||
# https://github.com/nextcloud/wg-two-factor-authentication#members
|
||||
**/TwoFactorAuth @ChristophWurst @miaulalala @nickvergessen
|
||||
/apps/twofactor_backupcodes @ChristophWurst @miaulalala @nickvergessen
|
||||
/core/templates/twofactor* @ChristophWurst @miaulalala @nickvergessen
|
||||
**/TwoFactorAuth @ChristophWurst @miaulalala @nickvergessen @st3iny
|
||||
/apps/twofactor_backupcodes @ChristophWurst @miaulalala @nickvergessen @st3iny
|
||||
/core/templates/twofactor* @ChristophWurst @miaulalala @nickvergessen @st3iny
|
||||
|
||||
# Limit login to IP
|
||||
# Watch login routes for https://github.com/nextcloud/limit_login_to_ip
|
||||
@@ -96,16 +94,16 @@ ResponseDefinitions.php @provokateurin @nextcloud/server-backend
|
||||
*/Notifications/* @nickvergessen @nextcloud/talk-backend
|
||||
|
||||
# Groupware team
|
||||
/build/integration/dav_features/caldav.feature @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/build/integration/dav_features/caldav.feature @st3iny @SebastianKrupinski @tcitworld
|
||||
/build/integration/dav_features/carddav.feature @hamza221 @SebastianKrupinski
|
||||
/lib/private/Calendar @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/lib/private/Calendar @st3iny @SebastianKrupinski @tcitworld
|
||||
/lib/private/Contacts @hamza221 @SebastianKrupinski
|
||||
/lib/public/Calendar @ChristophWurst @SebastianKrupinski @tcitworld
|
||||
/lib/public/Calendar @st3iny @SebastianKrupinski @tcitworld
|
||||
/lib/public/Contacts @hamza221 @SebastianKrupinski
|
||||
|
||||
# Desktop client teamn
|
||||
/apps/dav/lib/Connector/Sabre/BlockLegacyClientPlugin.php @nextcloud/desktop
|
||||
|
||||
# Personal interest
|
||||
*/Activity/* @nickvergessen @nextcloud/server-backend
|
||||
/apps/workflowengine/lib @nickvergessen @blizzz
|
||||
*/Activity/* @nickvergessen @nextcloud/server-backend
|
||||
/apps/workflowengine/lib @nickvergessen @blizzz
|
||||
|
||||
+42
-4
@@ -38,10 +38,7 @@ updates:
|
||||
|
||||
# Main master npm frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/frontend"
|
||||
- "/build/frontend-legacy"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
@@ -124,6 +121,28 @@ updates:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
|
||||
- package-ecosystem: composer
|
||||
target-branch: stable30
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/integration"
|
||||
- "/vendor-bin/cs-fixer"
|
||||
- "/vendor-bin/openapi-extractor"
|
||||
- "/vendor-bin/phpunit"
|
||||
- "/vendor-bin/psalm"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
ignore:
|
||||
# only patch updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
|
||||
# frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable31
|
||||
@@ -143,3 +162,22 @@ updates:
|
||||
# no major updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable30
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
ignore:
|
||||
# no major updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
|
||||
@@ -32,18 +32,16 @@ jobs:
|
||||
build-mode: none
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@5d5cd550d3e189c569da8f16ea8de2d821c9bf7a # v3.31.2
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.build-mode }}
|
||||
config-file: ./.github/codeql-config.yml
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@5d5cd550d3e189c569da8f16ea8de2d821c9bf7a # v3.31.2
|
||||
uses: github/codeql-action/analyze@v3
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -194,7 +194,6 @@ jobs:
|
||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||
SPLIT: ${{ matrix.total-containers }}
|
||||
SPLIT_INDEX: ${{ matrix.containers == 'component' && 0 || matrix.containers }}
|
||||
SPLIT_RANDOM_SEED: ${{ github.run_id }}
|
||||
SETUP_TESTING: ${{ matrix.containers == 'setup' && 'true' || '' }}
|
||||
|
||||
- name: Upload snapshots and videos
|
||||
@@ -206,19 +205,20 @@ jobs:
|
||||
cypress/snapshots
|
||||
cypress/videos
|
||||
|
||||
- name: Show logs
|
||||
- name: Extract NC logs
|
||||
if: failure() && matrix.containers != 'component'
|
||||
run: |
|
||||
for id in $(docker ps -aq); do
|
||||
docker container inspect "$id" --format '=== Logs for container {{.Name}} ==='
|
||||
docker logs "$id" >> nextcloud.log
|
||||
done
|
||||
echo '=== Nextcloud server logs ==='
|
||||
docker exec nextcloud-e2e-test-server_${{ env.APP_NAME }} cat data/nextcloud.log
|
||||
run: docker logs nextcloud-cypress-tests_${{ env.APP_NAME }} > nextcloud.log
|
||||
|
||||
- name: Upload NC logs
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: failure() && matrix.containers != 'component'
|
||||
with:
|
||||
name: nc_logs_${{ matrix.containers }}
|
||||
path: nextcloud.log
|
||||
|
||||
- name: Create data dir archive
|
||||
if: failure() && matrix.containers != 'component'
|
||||
run: docker exec nextcloud-e2e-test-server_${{ env.APP_NAME }} tar -cvjf - data > data.tar
|
||||
run: docker exec nextcloud-cypress-tests_${{ env.APP_NAME }} tar -cvjf - data > data.tar
|
||||
|
||||
- name: Upload data dir archive
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -5,10 +5,9 @@ name: PHPUnit 32bits
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- "version.php"
|
||||
- ".github/workflows/phpunit-32bits.yml"
|
||||
- "tests/phpunit-autotest.xml"
|
||||
- "lib/private/Snowflake/*"
|
||||
- 'version.php'
|
||||
- '.github/workflows/phpunit-32bits.yml'
|
||||
- 'tests/phpunit-autotest.xml'
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "15 1 * * 1-6"
|
||||
@@ -31,7 +30,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ["8.2", "8.3", "8.4"]
|
||||
php-versions: ['8.2', '8.3', '8.4']
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
@@ -52,7 +51,8 @@ jobs:
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, imagick, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite, apcu, ldap
|
||||
coverage: none
|
||||
ini-file: development
|
||||
ini-values: apc.enabled=on, apc.enable_cli=on, disable_functions= # https://github.com/shivammathur/setup-php/discussions/573
|
||||
ini-values:
|
||||
apc.enabled=on, apc.enable_cli=on, disable_functions= # https://github.com/shivammathur/setup-php/discussions/573
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
@@ -61,13 +61,13 @@ jobs:
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
# To keep the matrix smaller we ignore PostgreSQL versions in between as we already test the minimum and the maximum
|
||||
postgres-versions: ['14', '18']
|
||||
postgres-versions: ['13', '17']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
postgres-versions: '18'
|
||||
postgres-versions: '17'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
- php-versions: '8.4'
|
||||
postgres-versions: '18'
|
||||
postgres-versions: '17'
|
||||
|
||||
name: PostgreSQL ${{ matrix.postgres-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
||||
|
||||
@@ -86,7 +86,7 @@ jobs:
|
||||
POSTGRES_USER: root
|
||||
POSTGRES_PASSWORD: rootpassword
|
||||
POSTGRES_DB: nextcloud
|
||||
options: --mount type=tmpfs,destination=/var/lib/postgresql --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
options: --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
|
||||
+8
-1
@@ -11,7 +11,7 @@
|
||||
/apps/inc.php
|
||||
/assets
|
||||
/.htaccess
|
||||
node_modules/
|
||||
/node_modules
|
||||
/translationfiles
|
||||
/translationtool.phar
|
||||
|
||||
@@ -55,6 +55,10 @@ node_modules/
|
||||
/apps/files_external/3rdparty/irodsphp/prods/test*
|
||||
/apps/files_external/tests/config.*.php
|
||||
|
||||
# apps modules
|
||||
/apps/*/node_modules
|
||||
|
||||
|
||||
# ignore themes except the example and the README
|
||||
/themes/*
|
||||
!/themes/example
|
||||
@@ -127,6 +131,9 @@ nbproject
|
||||
# Tests
|
||||
/tests/phpunit.xml
|
||||
|
||||
# Node Modules
|
||||
/build/node_modules/
|
||||
|
||||
# nodejs
|
||||
/build/bin
|
||||
/build/lib/
|
||||
|
||||
+1
-1
Submodule 3rdparty updated: f5e230b126...96a5d7fdbe
+1
-1
@@ -178,7 +178,7 @@ SPDX-FileCopyrightText = "2020 Nextcloud GmbH and Nextcloud contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
|
||||
[[annotations]]
|
||||
path = ["cypress/tsconfig.json", "cypress/fixtures/appstore/apps.json", "dist/*.css"]
|
||||
path = ["cypress/tsconfig.json", "cypress/fixtures/appstore/apps.json", "dist/icons.css"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2022 Nextcloud GmbH and Nextcloud contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -14,7 +14,10 @@ if (PHP_VERSION_ID < 50600) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException($err);
|
||||
trigger_error(
|
||||
$err,
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
@@ -26,23 +26,12 @@ use Composer\Semver\VersionParser;
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
|
||||
* @internal
|
||||
*/
|
||||
private static $selfDir = null;
|
||||
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $installedIsLocalDir;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
@@ -320,24 +309,6 @@ class InstalledVersions
|
||||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
|
||||
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
|
||||
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
|
||||
// so we have to assume it does not, and that may result in duplicate data being returned when listing
|
||||
// all installed packages for example
|
||||
self::$installedIsLocalDir = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private static function getSelfDir()
|
||||
{
|
||||
if (self::$selfDir === null) {
|
||||
self::$selfDir = strtr(__DIR__, '\\', '/');
|
||||
}
|
||||
|
||||
return self::$selfDir;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -351,27 +322,19 @@ class InstalledVersions
|
||||
}
|
||||
|
||||
$installed = array();
|
||||
$copiedLocalDir = false;
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
$selfDir = self::getSelfDir();
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
$vendorDir = strtr($vendorDir, '\\', '/');
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||
$required = require $vendorDir.'/composer/installed.php';
|
||||
self::$installedByVendor[$vendorDir] = $required;
|
||||
$installed[] = $required;
|
||||
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
|
||||
self::$installed = $required;
|
||||
self::$installedIsLocalDir = true;
|
||||
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
self::$installed = $installed[count($installed) - 1];
|
||||
}
|
||||
}
|
||||
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
|
||||
$copiedLocalDir = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,7 +350,7 @@ class InstalledVersions
|
||||
}
|
||||
}
|
||||
|
||||
if (self::$installed !== array() && !$copiedLocalDir) {
|
||||
if (self::$installed !== array()) {
|
||||
$installed[] = self::$installed;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,10 @@ if (PHP_VERSION_ID < 50600) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException($err);
|
||||
trigger_error(
|
||||
$err,
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
@@ -26,23 +26,12 @@ use Composer\Semver\VersionParser;
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
|
||||
* @internal
|
||||
*/
|
||||
private static $selfDir = null;
|
||||
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $installedIsLocalDir;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
@@ -320,24 +309,6 @@ class InstalledVersions
|
||||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
|
||||
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
|
||||
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
|
||||
// so we have to assume it does not, and that may result in duplicate data being returned when listing
|
||||
// all installed packages for example
|
||||
self::$installedIsLocalDir = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private static function getSelfDir()
|
||||
{
|
||||
if (self::$selfDir === null) {
|
||||
self::$selfDir = strtr(__DIR__, '\\', '/');
|
||||
}
|
||||
|
||||
return self::$selfDir;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -351,27 +322,19 @@ class InstalledVersions
|
||||
}
|
||||
|
||||
$installed = array();
|
||||
$copiedLocalDir = false;
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
$selfDir = self::getSelfDir();
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
$vendorDir = strtr($vendorDir, '\\', '/');
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||
$required = require $vendorDir.'/composer/installed.php';
|
||||
self::$installedByVendor[$vendorDir] = $required;
|
||||
$installed[] = $required;
|
||||
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
|
||||
self::$installed = $required;
|
||||
self::$installedIsLocalDir = true;
|
||||
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
self::$installed = $installed[count($installed) - 1];
|
||||
}
|
||||
}
|
||||
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
|
||||
$copiedLocalDir = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,7 +350,7 @@ class InstalledVersions
|
||||
}
|
||||
}
|
||||
|
||||
if (self::$installed !== array() && !$copiedLocalDir) {
|
||||
if (self::$installed !== array()) {
|
||||
$installed[] = self::$installed;
|
||||
}
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ class RequestHandlerController extends Controller {
|
||||
*
|
||||
* @param string $recipientProvider The address of the recipent's provider
|
||||
* @param string $token The token used for the invitation
|
||||
* @param string $userID The userID of the recipient at the recipient's provider
|
||||
* @param string $userId The userId of the recipient at the recipient's provider
|
||||
* @param string $email The email address of the recipient
|
||||
* @param string $name The display name of the recipient
|
||||
*
|
||||
@@ -251,8 +251,8 @@ class RequestHandlerController extends Controller {
|
||||
#[PublicPage]
|
||||
#[NoCSRFRequired]
|
||||
#[BruteForceProtection(action: 'inviteAccepted')]
|
||||
public function inviteAccepted(string $recipientProvider, string $token, string $userID, string $email, string $name): JSONResponse {
|
||||
$this->logger->debug('Processing share invitation for ' . $userID . ' with token ' . $token . ' and email ' . $email . ' and name ' . $name);
|
||||
public function inviteAccepted(string $recipientProvider, string $token, string $userId, string $email, string $name): JSONResponse {
|
||||
$this->logger->debug('Processing share invitation for ' . $userId . ' with token ' . $token . ' and email ' . $email . ' and name ' . $name);
|
||||
|
||||
$updated = $this->timeFactory->getTime();
|
||||
|
||||
@@ -309,7 +309,7 @@ class RequestHandlerController extends Controller {
|
||||
$invitation->setRecipientEmail($email);
|
||||
$invitation->setRecipientName($name);
|
||||
$invitation->setRecipientProvider($recipientProvider);
|
||||
$invitation->setRecipientUserId($userID);
|
||||
$invitation->setRecipientUserId($userId);
|
||||
$invitation->setAcceptedAt($updated);
|
||||
$invitation = $this->federatedInviteMapper->update($invitation);
|
||||
|
||||
|
||||
@@ -354,7 +354,7 @@
|
||||
"required": [
|
||||
"recipientProvider",
|
||||
"token",
|
||||
"userID",
|
||||
"userId",
|
||||
"email",
|
||||
"name"
|
||||
],
|
||||
@@ -367,9 +367,9 @@
|
||||
"type": "string",
|
||||
"description": "The token used for the invitation"
|
||||
},
|
||||
"userID": {
|
||||
"userId": {
|
||||
"type": "string",
|
||||
"description": "The userID of the recipient at the recipient's provider"
|
||||
"description": "The userId of the recipient at the recipient's provider"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
|
||||
@@ -14,7 +14,10 @@ if (PHP_VERSION_ID < 50600) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException($err);
|
||||
trigger_error(
|
||||
$err,
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
@@ -26,23 +26,12 @@ use Composer\Semver\VersionParser;
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
|
||||
* @internal
|
||||
*/
|
||||
private static $selfDir = null;
|
||||
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $installedIsLocalDir;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
@@ -320,24 +309,6 @@ class InstalledVersions
|
||||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
|
||||
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
|
||||
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
|
||||
// so we have to assume it does not, and that may result in duplicate data being returned when listing
|
||||
// all installed packages for example
|
||||
self::$installedIsLocalDir = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private static function getSelfDir()
|
||||
{
|
||||
if (self::$selfDir === null) {
|
||||
self::$selfDir = strtr(__DIR__, '\\', '/');
|
||||
}
|
||||
|
||||
return self::$selfDir;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -351,27 +322,19 @@ class InstalledVersions
|
||||
}
|
||||
|
||||
$installed = array();
|
||||
$copiedLocalDir = false;
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
$selfDir = self::getSelfDir();
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
$vendorDir = strtr($vendorDir, '\\', '/');
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||
$required = require $vendorDir.'/composer/installed.php';
|
||||
self::$installedByVendor[$vendorDir] = $required;
|
||||
$installed[] = $required;
|
||||
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
|
||||
self::$installed = $required;
|
||||
self::$installedIsLocalDir = true;
|
||||
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
self::$installed = $installed[count($installed) - 1];
|
||||
}
|
||||
}
|
||||
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
|
||||
$copiedLocalDir = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,7 +350,7 @@ class InstalledVersions
|
||||
}
|
||||
}
|
||||
|
||||
if (self::$installed !== array() && !$copiedLocalDir) {
|
||||
if (self::$installed !== array()) {
|
||||
$installed[] = self::$installed;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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" : "Не ўдалося загрузіць спіс каментарыяў",
|
||||
|
||||
@@ -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" : "Не ўдалося загрузіць спіс каментарыяў",
|
||||
|
||||
@@ -17,7 +17,6 @@ OC.L10N.register(
|
||||
"Delete comment" : "Smazat komentář",
|
||||
"Cancel edit" : "Zrušit úpravu",
|
||||
"New comment" : "Nový komentář",
|
||||
"Write a comment …" : "Napsat komentář …",
|
||||
"Post comment" : "Odeslat komentář",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ pro zmínění, : pro emotikony, / pro inteligentní výběr",
|
||||
"Could not reload comments" : "Znovunačtení komentářů se nezdařilo",
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
"Delete comment" : "Smazat komentář",
|
||||
"Cancel edit" : "Zrušit úpravu",
|
||||
"New comment" : "Nový komentář",
|
||||
"Write a comment …" : "Napsat komentář …",
|
||||
"Post comment" : "Odeslat komentář",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ pro zmínění, : pro emotikony, / pro inteligentní výběr",
|
||||
"Could not reload comments" : "Znovunačtení komentářů se nezdařilo",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -17,7 +17,6 @@ OC.L10N.register(
|
||||
"Delete comment" : "Delete comment",
|
||||
"Cancel edit" : "Cancel edit",
|
||||
"New comment" : "New comment",
|
||||
"Write a comment …" : "Write a comment …",
|
||||
"Post comment" : "Post comment",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for mentions, : for emoji, / for smart picker",
|
||||
"Could not reload comments" : "Could not reload comments",
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
"Delete comment" : "Delete comment",
|
||||
"Cancel edit" : "Cancel edit",
|
||||
"New comment" : "New comment",
|
||||
"Write a comment …" : "Write a comment …",
|
||||
"Post comment" : "Post comment",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ for mentions, : for emoji, / for smart picker",
|
||||
"Could not reload comments" : "Could not reload comments",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -17,7 +17,6 @@ OC.L10N.register(
|
||||
"Delete comment" : "Elimina commento",
|
||||
"Cancel edit" : "Annulla modifica",
|
||||
"New comment" : "Nuovo commento",
|
||||
"Write a comment …" : "Scrivi un commento ...",
|
||||
"Post comment" : "Pubblica commento",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ per menzioni, : per emoji, / per selettore intelligente",
|
||||
"Could not reload comments" : "Impossibile ricaricare i commenti",
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
"Delete comment" : "Elimina commento",
|
||||
"Cancel edit" : "Annulla modifica",
|
||||
"New comment" : "Nuovo commento",
|
||||
"Write a comment …" : "Scrivi un commento ...",
|
||||
"Post comment" : "Pubblica commento",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ per menzioni, : per emoji, / per selettore intelligente",
|
||||
"Could not reload comments" : "Impossibile ricaricare i commenti",
|
||||
|
||||
@@ -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" : "Не удалось перезагрузить комментарии",
|
||||
|
||||
@@ -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" : "Не удалось перезагрузить комментарии",
|
||||
|
||||
@@ -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" : "Коментари не могу поново да се учитају",
|
||||
|
||||
@@ -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" : "Коментари не могу поново да се учитају",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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" : "Не вдалося перезавантажити коментарі",
|
||||
|
||||
@@ -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" : "Не вдалося перезавантажити коментарі",
|
||||
|
||||
@@ -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" : "無法重新加載評論",
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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'),
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -24,9 +24,10 @@ use Test\TestCase;
|
||||
/**
|
||||
* Class ApplicationTest
|
||||
*
|
||||
* @group DB
|
||||
*
|
||||
* @package OCA\Comments\Tests\Unit\AppInfo
|
||||
*/
|
||||
#[\PHPUnit\Framework\Attributes\Group('DB')]
|
||||
class ApplicationTest extends TestCase {
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
@@ -14,7 +14,10 @@ if (PHP_VERSION_ID < 50600) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException($err);
|
||||
trigger_error(
|
||||
$err,
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
@@ -26,23 +26,12 @@ use Composer\Semver\VersionParser;
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
|
||||
* @internal
|
||||
*/
|
||||
private static $selfDir = null;
|
||||
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $installedIsLocalDir;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
@@ -320,24 +309,6 @@ class InstalledVersions
|
||||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
|
||||
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
|
||||
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
|
||||
// so we have to assume it does not, and that may result in duplicate data being returned when listing
|
||||
// all installed packages for example
|
||||
self::$installedIsLocalDir = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private static function getSelfDir()
|
||||
{
|
||||
if (self::$selfDir === null) {
|
||||
self::$selfDir = strtr(__DIR__, '\\', '/');
|
||||
}
|
||||
|
||||
return self::$selfDir;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -351,27 +322,19 @@ class InstalledVersions
|
||||
}
|
||||
|
||||
$installed = array();
|
||||
$copiedLocalDir = false;
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
$selfDir = self::getSelfDir();
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
$vendorDir = strtr($vendorDir, '\\', '/');
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||
$required = require $vendorDir.'/composer/installed.php';
|
||||
self::$installedByVendor[$vendorDir] = $required;
|
||||
$installed[] = $required;
|
||||
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
|
||||
self::$installed = $required;
|
||||
self::$installedIsLocalDir = true;
|
||||
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
self::$installed = $installed[count($installed) - 1];
|
||||
}
|
||||
}
|
||||
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
|
||||
$copiedLocalDir = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,7 +350,7 @@ class InstalledVersions
|
||||
}
|
||||
}
|
||||
|
||||
if (self::$installed !== array() && !$copiedLocalDir) {
|
||||
if (self::$installed !== array()) {
|
||||
$installed[] = self::$installed;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;");
|
||||
@@ -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;"
|
||||
}
|
||||
@@ -17,7 +17,9 @@ use Sabre\VObject\Component\VCard;
|
||||
use Sabre\VObject\UUIDUtil;
|
||||
use Test\TestCase;
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\Group('DB')]
|
||||
/**
|
||||
* @group DB
|
||||
*/
|
||||
class RecentContactMapperTest extends TestCase {
|
||||
private RecentContactMapper $recentContactMapper;
|
||||
private ITimeFactory $time;
|
||||
|
||||
@@ -14,7 +14,10 @@ if (PHP_VERSION_ID < 50600) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException($err);
|
||||
trigger_error(
|
||||
$err,
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
@@ -26,23 +26,12 @@ use Composer\Semver\VersionParser;
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
|
||||
* @internal
|
||||
*/
|
||||
private static $selfDir = null;
|
||||
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $installedIsLocalDir;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
@@ -320,24 +309,6 @@ class InstalledVersions
|
||||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
|
||||
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
|
||||
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
|
||||
// so we have to assume it does not, and that may result in duplicate data being returned when listing
|
||||
// all installed packages for example
|
||||
self::$installedIsLocalDir = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private static function getSelfDir()
|
||||
{
|
||||
if (self::$selfDir === null) {
|
||||
self::$selfDir = strtr(__DIR__, '\\', '/');
|
||||
}
|
||||
|
||||
return self::$selfDir;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -351,27 +322,19 @@ class InstalledVersions
|
||||
}
|
||||
|
||||
$installed = array();
|
||||
$copiedLocalDir = false;
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
$selfDir = self::getSelfDir();
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
$vendorDir = strtr($vendorDir, '\\', '/');
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||
$required = require $vendorDir.'/composer/installed.php';
|
||||
self::$installedByVendor[$vendorDir] = $required;
|
||||
$installed[] = $required;
|
||||
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
|
||||
self::$installed = $required;
|
||||
self::$installedIsLocalDir = true;
|
||||
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
self::$installed = $installed[count($installed) - 1];
|
||||
}
|
||||
}
|
||||
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
|
||||
$copiedLocalDir = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,7 +350,7 @@ class InstalledVersions
|
||||
}
|
||||
}
|
||||
|
||||
if (self::$installed !== array() && !$copiedLocalDir) {
|
||||
if (self::$installed !== array()) {
|
||||
$installed[] = self::$installed;
|
||||
}
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -20,7 +20,6 @@ OC.L10N.register(
|
||||
"Edit widgets" : "Modifica widget",
|
||||
"Get more widgets from the App Store" : "Ottieni altri widget dal negozio delle applicazioni",
|
||||
"Weather service" : "Servizio meteo",
|
||||
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Per la tua riservatezza, i dati meteorologici sono richiesti dal tuo server {productName} per tuo conto, per cui il servizio meteo non riceve informazioni personali.",
|
||||
"Weather data from Met.no" : "Dati meteo da Met.no",
|
||||
"geocoding with Nominatim" : "geocodifica conh Nominatim",
|
||||
"elevation data from OpenTopoData" : "dati di elevazione da OpenTopoData",
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
"Edit widgets" : "Modifica widget",
|
||||
"Get more widgets from the App Store" : "Ottieni altri widget dal negozio delle applicazioni",
|
||||
"Weather service" : "Servizio meteo",
|
||||
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Per la tua riservatezza, i dati meteorologici sono richiesti dal tuo server {productName} per tuo conto, per cui il servizio meteo non riceve informazioni personali.",
|
||||
"Weather data from Met.no" : "Dati meteo da Met.no",
|
||||
"geocoding with Nominatim" : "geocodifica conh Nominatim",
|
||||
"elevation data from OpenTopoData" : "dati di elevazione da OpenTopoData",
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -14,7 +14,10 @@ if (PHP_VERSION_ID < 50600) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException($err);
|
||||
trigger_error(
|
||||
$err,
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
@@ -26,23 +26,12 @@ use Composer\Semver\VersionParser;
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
|
||||
* @internal
|
||||
*/
|
||||
private static $selfDir = null;
|
||||
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $installedIsLocalDir;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
@@ -320,24 +309,6 @@ class InstalledVersions
|
||||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
|
||||
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
|
||||
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
|
||||
// so we have to assume it does not, and that may result in duplicate data being returned when listing
|
||||
// all installed packages for example
|
||||
self::$installedIsLocalDir = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private static function getSelfDir()
|
||||
{
|
||||
if (self::$selfDir === null) {
|
||||
self::$selfDir = strtr(__DIR__, '\\', '/');
|
||||
}
|
||||
|
||||
return self::$selfDir;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -351,27 +322,19 @@ class InstalledVersions
|
||||
}
|
||||
|
||||
$installed = array();
|
||||
$copiedLocalDir = false;
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
$selfDir = self::getSelfDir();
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
$vendorDir = strtr($vendorDir, '\\', '/');
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||
$required = require $vendorDir.'/composer/installed.php';
|
||||
self::$installedByVendor[$vendorDir] = $required;
|
||||
$installed[] = $required;
|
||||
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
|
||||
self::$installed = $required;
|
||||
self::$installedIsLocalDir = true;
|
||||
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
||||
self::$installed = $installed[count($installed) - 1];
|
||||
}
|
||||
}
|
||||
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
|
||||
$copiedLocalDir = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,7 +350,7 @@ class InstalledVersions
|
||||
}
|
||||
}
|
||||
|
||||
if (self::$installed !== array() && !$copiedLocalDir) {
|
||||
if (self::$installed !== array()) {
|
||||
$installed[] = self::$installed;
|
||||
}
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
+6
-6
@@ -272,6 +272,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "آخر يوم (متضمن)",
|
||||
"Out of office replacement (optional)" : "البديل لمن هو خارج المكتب (إختياري)",
|
||||
"Name of the replacement" : "اسم البديل",
|
||||
"No results." : "لا نتائج",
|
||||
"Start typing." : "أبدا الكتابة",
|
||||
"Short absence status" : "حالة الغياب القصير",
|
||||
"Long absence Message" : "رسالة الغياب الطويل",
|
||||
"Save" : "حفظ",
|
||||
@@ -298,6 +300,10 @@ OC.L10N.register(
|
||||
"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?" : "استيراد ملف .cvf جديد سوف يؤدي إلى حذف جهات الاتصال التلقائية الحالية واستبدالها بالجديدة. هل ترغب في الاستمرار؟",
|
||||
"Availability" : "أوقات التواجد ",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "إذا قمت بضبط ساعات عملك، سيرى الآخرون متى تكون خارج المكتب عندما يقومون بحجز اجتماع معك.",
|
||||
"Absence" : "غياب",
|
||||
"Configure your next absence period." : "تهيئة فترة غيابك القادمة.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "قم أيضاً بتنصيب {calendarappstoreopen} تطبيق التقويم {linkclose}, أو {calendardocopen} أوصل جهازك و موبايلك للمُزامنة ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "رجاءُ، تأكّد من الإعداد الصحيح لـ {emailopen} خادم البريد الالكتروني {linkclose}.",
|
||||
"Calendar server" : "خادم التقويم",
|
||||
@@ -310,17 +316,11 @@ 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",
|
||||
"Availability" : "أوقات التواجد ",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "إذا قمت بضبط ساعات عملك، سيرى الآخرون متى تكون خارج المكتب عندما يقومون بحجز اجتماع معك.",
|
||||
"Absence" : "غياب",
|
||||
"Configure your next absence period." : "تهيئة فترة غيابك القادمة.",
|
||||
"There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.",
|
||||
"Please contact the organizer directly." : "يرجى الاتصال بالمنظم مباشرةً",
|
||||
"Are you accepting the invitation?" : "هل تقبل الدعوة؟",
|
||||
"Tentative" : "مبدئي",
|
||||
"Your attendance was updated successfully." : "حضورك تم تحديثه بنجاحٍ",
|
||||
"No results." : "لا نتائج",
|
||||
"Start typing." : "أبدا الكتابة",
|
||||
"Time zone:" : "منطقة زمنية:"
|
||||
},
|
||||
"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;");
|
||||
|
||||
@@ -270,6 +270,8 @@
|
||||
"Last day (inclusive)" : "آخر يوم (متضمن)",
|
||||
"Out of office replacement (optional)" : "البديل لمن هو خارج المكتب (إختياري)",
|
||||
"Name of the replacement" : "اسم البديل",
|
||||
"No results." : "لا نتائج",
|
||||
"Start typing." : "أبدا الكتابة",
|
||||
"Short absence status" : "حالة الغياب القصير",
|
||||
"Long absence Message" : "رسالة الغياب الطويل",
|
||||
"Save" : "حفظ",
|
||||
@@ -296,6 +298,10 @@
|
||||
"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?" : "استيراد ملف .cvf جديد سوف يؤدي إلى حذف جهات الاتصال التلقائية الحالية واستبدالها بالجديدة. هل ترغب في الاستمرار؟",
|
||||
"Availability" : "أوقات التواجد ",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "إذا قمت بضبط ساعات عملك، سيرى الآخرون متى تكون خارج المكتب عندما يقومون بحجز اجتماع معك.",
|
||||
"Absence" : "غياب",
|
||||
"Configure your next absence period." : "تهيئة فترة غيابك القادمة.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "قم أيضاً بتنصيب {calendarappstoreopen} تطبيق التقويم {linkclose}, أو {calendardocopen} أوصل جهازك و موبايلك للمُزامنة ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "رجاءُ، تأكّد من الإعداد الصحيح لـ {emailopen} خادم البريد الالكتروني {linkclose}.",
|
||||
"Calendar server" : "خادم التقويم",
|
||||
@@ -308,17 +314,11 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "أرسل إشعارات للتذكير إلى المشتركين بالتقويم كذلك",
|
||||
"Reminders are always sent to organizers and attendees." : "إشعارات التذكير يتم إرسالها دائماً إلى مُنظّم أو مُنظّمي الحدث و المستهدفين بحضوره.",
|
||||
"Enable notifications for events via push" : "تمكين الإشعارات حول الأحداث عن طريق أسلوب دفع الإشعارات Push",
|
||||
"Availability" : "أوقات التواجد ",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "إذا قمت بضبط ساعات عملك، سيرى الآخرون متى تكون خارج المكتب عندما يقومون بحجز اجتماع معك.",
|
||||
"Absence" : "غياب",
|
||||
"Configure your next absence period." : "تهيئة فترة غيابك القادمة.",
|
||||
"There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.",
|
||||
"Please contact the organizer directly." : "يرجى الاتصال بالمنظم مباشرةً",
|
||||
"Are you accepting the invitation?" : "هل تقبل الدعوة؟",
|
||||
"Tentative" : "مبدئي",
|
||||
"Your attendance was updated successfully." : "حضورك تم تحديثه بنجاحٍ",
|
||||
"No results." : "لا نتائج",
|
||||
"Start typing." : "أبدا الكتابة",
|
||||
"Time zone:" : "منطقة زمنية:"
|
||||
},"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;"
|
||||
}
|
||||
@@ -198,6 +198,10 @@ OC.L10N.register(
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "Hebo un error mentanto se guardaba la configuración",
|
||||
"Reset to default" : "Reafitar los valores",
|
||||
"Availability" : "Disponibilidá",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configures les hores llaborales, les demás persones van ver cuando coles de la oficina al acutar una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configura'l próximu periodu d'ausencia",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instala tamién l'{calendarappstoreopen}aplicación Calendariu{linkclose} o {calendardocopen}conecta'l veceru pa ordenadores y/o móviles pa sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrate de que configuresti afayadizamente'l {emailopen}sirvidor de corréu electrónicu{linkclose}.",
|
||||
"Calendar server" : "Sirvidor de calendarios",
|
||||
@@ -210,10 +214,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Unvia tamién avisos de recordatoriu pa les persones coles que se compartiere'l calendariu",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios únviense siempres a organizadores y asistentes",
|
||||
"Enable notifications for events via push" : "Acriva los avisos automáticos pa los eventos",
|
||||
"Availability" : "Disponibilidá",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configures les hores llaborales, les demás persones van ver cuando coles de la oficina al acutar una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configura'l próximu periodu d'ausencia",
|
||||
"There was an error updating your attendance status." : "Hebo un error al anovar l'estáu de l'asistencia.",
|
||||
"Please contact the organizer directly." : "Ponte en contautu direutamente cola organización.",
|
||||
"Are you accepting the invitation?" : "¿Aceptes la invitación?",
|
||||
|
||||
@@ -196,6 +196,10 @@
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "Hebo un error mentanto se guardaba la configuración",
|
||||
"Reset to default" : "Reafitar los valores",
|
||||
"Availability" : "Disponibilidá",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configures les hores llaborales, les demás persones van ver cuando coles de la oficina al acutar una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configura'l próximu periodu d'ausencia",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instala tamién l'{calendarappstoreopen}aplicación Calendariu{linkclose} o {calendardocopen}conecta'l veceru pa ordenadores y/o móviles pa sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrate de que configuresti afayadizamente'l {emailopen}sirvidor de corréu electrónicu{linkclose}.",
|
||||
"Calendar server" : "Sirvidor de calendarios",
|
||||
@@ -208,10 +212,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Unvia tamién avisos de recordatoriu pa les persones coles que se compartiere'l calendariu",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios únviense siempres a organizadores y asistentes",
|
||||
"Enable notifications for events via push" : "Acriva los avisos automáticos pa los eventos",
|
||||
"Availability" : "Disponibilidá",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configures les hores llaborales, les demás persones van ver cuando coles de la oficina al acutar una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configura'l próximu periodu d'ausencia",
|
||||
"There was an error updating your attendance status." : "Hebo un error al anovar l'estáu de l'asistencia.",
|
||||
"Please contact the organizer directly." : "Ponte en contautu direutamente cola organización.",
|
||||
"Are you accepting the invitation?" : "¿Aceptes la invitación?",
|
||||
|
||||
+3
-4
@@ -186,12 +186,14 @@ OC.L10N.register(
|
||||
"Delete slot" : "Изтриване на слот",
|
||||
"No working hours set" : "Няма зададено работно време",
|
||||
"Add slot" : "Добавяне на слот",
|
||||
"Weekdays" : "Делнични дни",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично задаване на потребителският статус на „Не безпокойте“ извън достъпността, за заглушаване на всички известия.",
|
||||
"Cancel" : "Отказ",
|
||||
"Import" : "Импортиране /внасяне/",
|
||||
"Error while saving settings" : "Грешка при запазване на настройките",
|
||||
"Reset to default" : "Настройки по подразбиране",
|
||||
"Availability" : "Работно време",
|
||||
"Absence" : "Отсъствия",
|
||||
"Configure your next absence period." : "Задай своето съобщение за отсъствие.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Също така инсталирайте приложението {calendarappstoreopen}Календар{linkclose} или {calendardocopen}, свържете вашия настолен компютър и мобилен телефон за синхронизиране ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Моля, уверете се, че сте настроили правилно {emailopen} имейл сървъра{linkclose}.",
|
||||
"Calendar server" : "Сървър на календар",
|
||||
@@ -204,9 +206,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",
|
||||
"Availability" : "Работно време",
|
||||
"Absence" : "Отсъствия",
|
||||
"Configure your next absence period." : "Задай своето съобщение за отсъствие.",
|
||||
"There was an error updating your attendance status." : "Възникна грешка при актуализиране на състоянието на присъствието Ви.",
|
||||
"Please contact the organizer directly." : "Моля, свържете се директно с организатора.",
|
||||
"Are you accepting the invitation?" : "Приемате ли поканата?",
|
||||
|
||||
@@ -184,12 +184,14 @@
|
||||
"Delete slot" : "Изтриване на слот",
|
||||
"No working hours set" : "Няма зададено работно време",
|
||||
"Add slot" : "Добавяне на слот",
|
||||
"Weekdays" : "Делнични дни",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично задаване на потребителският статус на „Не безпокойте“ извън достъпността, за заглушаване на всички известия.",
|
||||
"Cancel" : "Отказ",
|
||||
"Import" : "Импортиране /внасяне/",
|
||||
"Error while saving settings" : "Грешка при запазване на настройките",
|
||||
"Reset to default" : "Настройки по подразбиране",
|
||||
"Availability" : "Работно време",
|
||||
"Absence" : "Отсъствия",
|
||||
"Configure your next absence period." : "Задай своето съобщение за отсъствие.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Също така инсталирайте приложението {calendarappstoreopen}Календар{linkclose} или {calendardocopen}, свържете вашия настолен компютър и мобилен телефон за синхронизиране ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Моля, уверете се, че сте настроили правилно {emailopen} имейл сървъра{linkclose}.",
|
||||
"Calendar server" : "Сървър на календар",
|
||||
@@ -202,9 +204,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Изпращане на известия за напомняния и до споделящите календар",
|
||||
"Reminders are always sent to organizers and attendees." : "Напомнянията винаги се изпращат до организаторите и присъстващите.",
|
||||
"Enable notifications for events via push" : "Активиране на известията за събития чрез push",
|
||||
"Availability" : "Работно време",
|
||||
"Absence" : "Отсъствия",
|
||||
"Configure your next absence period." : "Задай своето съобщение за отсъствие.",
|
||||
"There was an error updating your attendance status." : "Възникна грешка при актуализиране на състоянието на присъствието Ви.",
|
||||
"Please contact the organizer directly." : "Моля, свържете се директно с организатора.",
|
||||
"Are you accepting the invitation?" : "Приемате ли поканата?",
|
||||
|
||||
+6
-6
@@ -272,6 +272,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Darrer dia (inclòs)",
|
||||
"Out of office replacement (optional)" : "Substitució fora de l'oficina (opcional)",
|
||||
"Name of the replacement" : "Nom del substitut",
|
||||
"No results." : "Cap resultat.",
|
||||
"Start typing." : "Comença a escriure.",
|
||||
"Short absence status" : "Estat d'absència breu",
|
||||
"Long absence Message" : "Missatge d'absència llarga",
|
||||
"Save" : "Desa",
|
||||
@@ -291,6 +293,10 @@ OC.L10N.register(
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "S'ha produït un error en desar els paràmetres",
|
||||
"Reset to default" : "Reinicialitza els valors per defecte",
|
||||
"Availability" : "Disponibilitat",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, la resta de persones veuran quan sou fora de l'oficina quan planifiquin una reunió.",
|
||||
"Absence" : "Absència",
|
||||
"Configure your next absence period." : "Configureu el pròxim període d'absència.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal·leu també {calendarappstoreopen}l'aplicació Calendari{linkclose} o {calendardocopen}connecteu el vostre dispositiu d'escriptori i el mòbil per a sincronitzar-los ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assegureu-vos de configurar correctament el{emailopen}servidor de correu electrònic{linkclose}.",
|
||||
"Calendar server" : "Servidor de calendari",
|
||||
@@ -303,17 +309,11 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Envia també notificacions de recordatori als usuaris amb qui s'ha compartit el calendari",
|
||||
"Reminders are always sent to organizers and attendees." : "Sempre s'envien recordatoris als organitzadors i als assistents.",
|
||||
"Enable notifications for events via push" : "Habilita les notificacions automàtiques per als esdeveniments",
|
||||
"Availability" : "Disponibilitat",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, la resta de persones veuran quan sou fora de l'oficina quan planifiquin una reunió.",
|
||||
"Absence" : "Absència",
|
||||
"Configure your next absence period." : "Configureu el pròxim període d'absència.",
|
||||
"There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat d'assistència.",
|
||||
"Please contact the organizer directly." : "Contacteu amb l'organització directament.",
|
||||
"Are you accepting the invitation?" : "Accepteu la invitació?",
|
||||
"Tentative" : "Provisional",
|
||||
"Your attendance was updated successfully." : "S'ha actualitzat correctament l'assistència.",
|
||||
"No results." : "Cap resultat.",
|
||||
"Start typing." : "Comença a escriure.",
|
||||
"Time zone:" : "Fus horari:"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -270,6 +270,8 @@
|
||||
"Last day (inclusive)" : "Darrer dia (inclòs)",
|
||||
"Out of office replacement (optional)" : "Substitució fora de l'oficina (opcional)",
|
||||
"Name of the replacement" : "Nom del substitut",
|
||||
"No results." : "Cap resultat.",
|
||||
"Start typing." : "Comença a escriure.",
|
||||
"Short absence status" : "Estat d'absència breu",
|
||||
"Long absence Message" : "Missatge d'absència llarga",
|
||||
"Save" : "Desa",
|
||||
@@ -289,6 +291,10 @@
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "S'ha produït un error en desar els paràmetres",
|
||||
"Reset to default" : "Reinicialitza els valors per defecte",
|
||||
"Availability" : "Disponibilitat",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, la resta de persones veuran quan sou fora de l'oficina quan planifiquin una reunió.",
|
||||
"Absence" : "Absència",
|
||||
"Configure your next absence period." : "Configureu el pròxim període d'absència.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal·leu també {calendarappstoreopen}l'aplicació Calendari{linkclose} o {calendardocopen}connecteu el vostre dispositiu d'escriptori i el mòbil per a sincronitzar-los ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assegureu-vos de configurar correctament el{emailopen}servidor de correu electrònic{linkclose}.",
|
||||
"Calendar server" : "Servidor de calendari",
|
||||
@@ -301,17 +307,11 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Envia també notificacions de recordatori als usuaris amb qui s'ha compartit el calendari",
|
||||
"Reminders are always sent to organizers and attendees." : "Sempre s'envien recordatoris als organitzadors i als assistents.",
|
||||
"Enable notifications for events via push" : "Habilita les notificacions automàtiques per als esdeveniments",
|
||||
"Availability" : "Disponibilitat",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configureu el vostre horari laboral, la resta de persones veuran quan sou fora de l'oficina quan planifiquin una reunió.",
|
||||
"Absence" : "Absència",
|
||||
"Configure your next absence period." : "Configureu el pròxim període d'absència.",
|
||||
"There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat d'assistència.",
|
||||
"Please contact the organizer directly." : "Contacteu amb l'organització directament.",
|
||||
"Are you accepting the invitation?" : "Accepteu la invitació?",
|
||||
"Tentative" : "Provisional",
|
||||
"Your attendance was updated successfully." : "S'ha actualitzat correctament l'assistència.",
|
||||
"No results." : "Cap resultat.",
|
||||
"Start typing." : "Comença a escriure.",
|
||||
"Time zone:" : "Fus horari:"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+6
-7
@@ -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.",
|
||||
@@ -280,6 +279,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Poslední den (včetně)",
|
||||
"Out of office replacement (optional)" : "Zástup když mimo kancelář (volitelné)",
|
||||
"Name of the replacement" : "Jméno zástupu",
|
||||
"No results." : "Nic nenalezeno.",
|
||||
"Start typing." : "Začněte psát.",
|
||||
"Short absence status" : "Stav krátké nepřítomnosti",
|
||||
"Long absence Message" : "Zpráva pro dlouhou nepřítomnost",
|
||||
"Save" : "Uložit",
|
||||
@@ -314,6 +315,10 @@ OC.L10N.register(
|
||||
"Import calendar event" : "Naimportovat událost kalendáře",
|
||||
"Uploading a new event will overwrite the existing one." : "Nahrání nové události přepíše tu existující.",
|
||||
"Upload event" : "Nahrát událost",
|
||||
"Availability" : "Dostupnost",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Když sem zadáte svou pracovní dobu, ostatní lidé při rezervování schůzky uvidí, kdy jste mimo kancelář.",
|
||||
"Absence" : "Nepřítomnost",
|
||||
"Configure your next absence period." : "Nastavte období své nepřítomnosti.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Také nainstalujte {calendarappstoreopen}aplikaci Kalendář{linkclose}, nebo {calendardocopen}připojte svůj počítač a telefon pro synchronizaci ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Ověřte, že jste správně nastavili {emailopen}e-mailový server{linkclose}.",
|
||||
"Calendar server" : "Kalendářový server",
|
||||
@@ -328,17 +333,11 @@ OC.L10N.register(
|
||||
"Enable notifications for events via push" : "Upozorňovat na události prostřednictvím služby push",
|
||||
"Example content" : "Obsah pro ukázku",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Obsah pro ukázku slouží pro předvedení funkcí Nextcloud. Výchozí obsah je dodáván s Nextcloud a je možné ho nahradit uživatelsky určeným.",
|
||||
"Availability" : "Dostupnost",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Když sem zadáte svou pracovní dobu, ostatní lidé při rezervování schůzky uvidí, kdy jste mimo kancelář.",
|
||||
"Absence" : "Nepřítomnost",
|
||||
"Configure your next absence period." : "Nastavte období své nepřítomnosti.",
|
||||
"There was an error updating your attendance status." : "Vyskytla se chyba při aktualizaci vašeho stavu účasti.",
|
||||
"Please contact the organizer directly." : "Kontaktujte organizátora přímo.",
|
||||
"Are you accepting the invitation?" : "Přijímáte pozvání?",
|
||||
"Tentative" : "Nezávazně",
|
||||
"Your attendance was updated successfully." : "Vaše účast byla úspěšně aktualizována.",
|
||||
"No results." : "Nic nenalezeno.",
|
||||
"Start typing." : "Začněte psát.",
|
||||
"Time zone:" : "Časové pásmo:"
|
||||
},
|
||||
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
|
||||
|
||||
@@ -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.",
|
||||
@@ -278,6 +277,8 @@
|
||||
"Last day (inclusive)" : "Poslední den (včetně)",
|
||||
"Out of office replacement (optional)" : "Zástup když mimo kancelář (volitelné)",
|
||||
"Name of the replacement" : "Jméno zástupu",
|
||||
"No results." : "Nic nenalezeno.",
|
||||
"Start typing." : "Začněte psát.",
|
||||
"Short absence status" : "Stav krátké nepřítomnosti",
|
||||
"Long absence Message" : "Zpráva pro dlouhou nepřítomnost",
|
||||
"Save" : "Uložit",
|
||||
@@ -312,6 +313,10 @@
|
||||
"Import calendar event" : "Naimportovat událost kalendáře",
|
||||
"Uploading a new event will overwrite the existing one." : "Nahrání nové události přepíše tu existující.",
|
||||
"Upload event" : "Nahrát událost",
|
||||
"Availability" : "Dostupnost",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Když sem zadáte svou pracovní dobu, ostatní lidé při rezervování schůzky uvidí, kdy jste mimo kancelář.",
|
||||
"Absence" : "Nepřítomnost",
|
||||
"Configure your next absence period." : "Nastavte období své nepřítomnosti.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Také nainstalujte {calendarappstoreopen}aplikaci Kalendář{linkclose}, nebo {calendardocopen}připojte svůj počítač a telefon pro synchronizaci ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Ověřte, že jste správně nastavili {emailopen}e-mailový server{linkclose}.",
|
||||
"Calendar server" : "Kalendářový server",
|
||||
@@ -326,17 +331,11 @@
|
||||
"Enable notifications for events via push" : "Upozorňovat na události prostřednictvím služby push",
|
||||
"Example content" : "Obsah pro ukázku",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Obsah pro ukázku slouží pro předvedení funkcí Nextcloud. Výchozí obsah je dodáván s Nextcloud a je možné ho nahradit uživatelsky určeným.",
|
||||
"Availability" : "Dostupnost",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Když sem zadáte svou pracovní dobu, ostatní lidé při rezervování schůzky uvidí, kdy jste mimo kancelář.",
|
||||
"Absence" : "Nepřítomnost",
|
||||
"Configure your next absence period." : "Nastavte období své nepřítomnosti.",
|
||||
"There was an error updating your attendance status." : "Vyskytla se chyba při aktualizaci vašeho stavu účasti.",
|
||||
"Please contact the organizer directly." : "Kontaktujte organizátora přímo.",
|
||||
"Are you accepting the invitation?" : "Přijímáte pozvání?",
|
||||
"Tentative" : "Nezávazně",
|
||||
"Your attendance was updated successfully." : "Vaše účast byla úspěšně aktualizována.",
|
||||
"No results." : "Nic nenalezeno.",
|
||||
"Start typing." : "Začněte psát.",
|
||||
"Time zone:" : "Časové pásmo:"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
|
||||
}
|
||||
+6
-12
@@ -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.",
|
||||
@@ -280,6 +274,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Sidste dag (indklusiv)",
|
||||
"Out of office replacement (optional)" : "Ikke på kontoret udskiftning (valgfrit)",
|
||||
"Name of the replacement" : "Navn på udskiftning",
|
||||
"No results." : "Ingen resultater.",
|
||||
"Start typing." : "Begynd at skrive.",
|
||||
"Short absence status" : "Kort fraværsstatus",
|
||||
"Long absence Message" : "Langt fravær besked",
|
||||
"Save" : "Gem",
|
||||
@@ -314,6 +310,10 @@ OC.L10N.register(
|
||||
"Import calendar event" : "Importér kalenderbegivenhed",
|
||||
"Uploading a new event will overwrite the existing one." : "Upload af en ny begivenhed vil overskrive den eksisterende.",
|
||||
"Upload event" : "Upload begivenhed",
|
||||
"Availability" : "tilgængelighed",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Hvis du konfigurerer dine arbejdstider, vil andre se, når du er fraværende, når de booker et møde.",
|
||||
"Absence" : "Fravær",
|
||||
"Configure your next absence period." : "Konfigurer din næste fraværsperiode.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installer også {calendarappstoreopen}Kalender-appen{linkclose}, eller {calendardocopen}tilslut dit skrivebord og din mobil til synkronisering ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Sørg for at konfigurere {emailopen}e-mail-serveren{linkclose} korrekt.",
|
||||
"Calendar server" : "Kalenderserver",
|
||||
@@ -328,17 +328,11 @@ OC.L10N.register(
|
||||
"Enable notifications for events via push" : "Aktiver notifikationer for begivenheder via push",
|
||||
"Example content" : "Eksempelindhold",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Eksempelindhold fremviser funktionerne i Nextcloud. Standardindhold leveres med Nextcloud, og kan erstattes af brugerdefineret indhold.",
|
||||
"Availability" : "tilgængelighed",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Hvis du konfigurerer dine arbejdstider, vil andre se, når du er fraværende, når de booker et møde.",
|
||||
"Absence" : "Fravær",
|
||||
"Configure your next absence period." : "Konfigurer din næste fraværsperiode.",
|
||||
"There was an error updating your attendance status." : "Der opstod en fejl under opdatering af din fremmødestatus.",
|
||||
"Please contact the organizer directly." : "Kontakt venligst arrangøren direkte.",
|
||||
"Are you accepting the invitation?" : "Accepter du invitationen?",
|
||||
"Tentative" : "Foreløbig",
|
||||
"Your attendance was updated successfully." : "Dit tilstedeværelse blev opdateret.",
|
||||
"No results." : "Ingen resultater.",
|
||||
"Start typing." : "Begynd at skrive.",
|
||||
"Time zone:" : "Tidszone:"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
+6
-12
@@ -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.",
|
||||
@@ -278,6 +272,8 @@
|
||||
"Last day (inclusive)" : "Sidste dag (indklusiv)",
|
||||
"Out of office replacement (optional)" : "Ikke på kontoret udskiftning (valgfrit)",
|
||||
"Name of the replacement" : "Navn på udskiftning",
|
||||
"No results." : "Ingen resultater.",
|
||||
"Start typing." : "Begynd at skrive.",
|
||||
"Short absence status" : "Kort fraværsstatus",
|
||||
"Long absence Message" : "Langt fravær besked",
|
||||
"Save" : "Gem",
|
||||
@@ -312,6 +308,10 @@
|
||||
"Import calendar event" : "Importér kalenderbegivenhed",
|
||||
"Uploading a new event will overwrite the existing one." : "Upload af en ny begivenhed vil overskrive den eksisterende.",
|
||||
"Upload event" : "Upload begivenhed",
|
||||
"Availability" : "tilgængelighed",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Hvis du konfigurerer dine arbejdstider, vil andre se, når du er fraværende, når de booker et møde.",
|
||||
"Absence" : "Fravær",
|
||||
"Configure your next absence period." : "Konfigurer din næste fraværsperiode.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installer også {calendarappstoreopen}Kalender-appen{linkclose}, eller {calendardocopen}tilslut dit skrivebord og din mobil til synkronisering ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Sørg for at konfigurere {emailopen}e-mail-serveren{linkclose} korrekt.",
|
||||
"Calendar server" : "Kalenderserver",
|
||||
@@ -326,17 +326,11 @@
|
||||
"Enable notifications for events via push" : "Aktiver notifikationer for begivenheder via push",
|
||||
"Example content" : "Eksempelindhold",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Eksempelindhold fremviser funktionerne i Nextcloud. Standardindhold leveres med Nextcloud, og kan erstattes af brugerdefineret indhold.",
|
||||
"Availability" : "tilgængelighed",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Hvis du konfigurerer dine arbejdstider, vil andre se, når du er fraværende, når de booker et møde.",
|
||||
"Absence" : "Fravær",
|
||||
"Configure your next absence period." : "Konfigurer din næste fraværsperiode.",
|
||||
"There was an error updating your attendance status." : "Der opstod en fejl under opdatering af din fremmødestatus.",
|
||||
"Please contact the organizer directly." : "Kontakt venligst arrangøren direkte.",
|
||||
"Are you accepting the invitation?" : "Accepter du invitationen?",
|
||||
"Tentative" : "Foreløbig",
|
||||
"Your attendance was updated successfully." : "Dit tilstedeværelse blev opdateret.",
|
||||
"No results." : "Ingen resultater.",
|
||||
"Start typing." : "Begynd at skrive.",
|
||||
"Time zone:" : "Tidszone:"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+13
-13
@@ -280,6 +280,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Letzter Tag (inklusiv)",
|
||||
"Out of office replacement (optional)" : "Abwesenheitsvertretung (optional)",
|
||||
"Name of the replacement" : "Name der Vertretung",
|
||||
"No results." : "Keine Ergebnisse",
|
||||
"Start typing." : "Mit dem Schreiben beginnen.",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstatus",
|
||||
"Long absence Message" : "Lange Abwesenheitsnachricht",
|
||||
"Save" : "Speichern",
|
||||
@@ -306,14 +308,18 @@ 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",
|
||||
"Configure your next absence period." : "Richte deinen nächsten Abwesenheitszeitraum ein.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installiere außerdem die {calendarappstoreopen}Kalender-App{linkclose} oder {calendardocopen}verbinde deinen Desktop & Mobilgerät zur Synchronisierung ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Bitte stelle sicher, dass du {emailopen}den E-Mail Server{linkclose} ordnungsgemäß einrichtest.",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
@@ -328,17 +334,11 @@ OC.L10N.register(
|
||||
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
|
||||
"Example content" : "Beispielsinhalt",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Beispielinhalte dienen dazu, die Funktionen von Nextcloud vorzustellen. Standardinhalte werden mit Nextcloud ausgeliefert und können durch benutzerdefinierte Inhalte ersetzt werden.",
|
||||
"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",
|
||||
"Configure your next absence period." : "Richte deinen nächsten Abwesenheitszeitraum ein.",
|
||||
"There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren deines Teilnehmerstatus aufgetreten.",
|
||||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
"Tentative" : "Vorläufig",
|
||||
"Your attendance was updated successfully." : "Dein Teilnehmerstatus wurde aktualisiert.",
|
||||
"No results." : "Keine Ergebnisse",
|
||||
"Start typing." : "Mit dem Schreiben beginnen.",
|
||||
"Time zone:" : "Zeitzone:"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
+13
-13
@@ -278,6 +278,8 @@
|
||||
"Last day (inclusive)" : "Letzter Tag (inklusiv)",
|
||||
"Out of office replacement (optional)" : "Abwesenheitsvertretung (optional)",
|
||||
"Name of the replacement" : "Name der Vertretung",
|
||||
"No results." : "Keine Ergebnisse",
|
||||
"Start typing." : "Mit dem Schreiben beginnen.",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstatus",
|
||||
"Long absence Message" : "Lange Abwesenheitsnachricht",
|
||||
"Save" : "Speichern",
|
||||
@@ -304,14 +306,18 @@
|
||||
"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",
|
||||
"Configure your next absence period." : "Richte deinen nächsten Abwesenheitszeitraum ein.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installiere außerdem die {calendarappstoreopen}Kalender-App{linkclose} oder {calendardocopen}verbinde deinen Desktop & Mobilgerät zur Synchronisierung ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Bitte stelle sicher, dass du {emailopen}den E-Mail Server{linkclose} ordnungsgemäß einrichtest.",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
@@ -326,17 +332,11 @@
|
||||
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
|
||||
"Example content" : "Beispielsinhalt",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Beispielinhalte dienen dazu, die Funktionen von Nextcloud vorzustellen. Standardinhalte werden mit Nextcloud ausgeliefert und können durch benutzerdefinierte Inhalte ersetzt werden.",
|
||||
"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",
|
||||
"Configure your next absence period." : "Richte deinen nächsten Abwesenheitszeitraum ein.",
|
||||
"There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren deines Teilnehmerstatus aufgetreten.",
|
||||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
"Tentative" : "Vorläufig",
|
||||
"Your attendance was updated successfully." : "Dein Teilnehmerstatus wurde aktualisiert.",
|
||||
"No results." : "Keine Ergebnisse",
|
||||
"Start typing." : "Mit dem Schreiben beginnen.",
|
||||
"Time zone:" : "Zeitzone:"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -280,6 +280,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Letzter Tag (inklusiv)",
|
||||
"Out of office replacement (optional)" : "Abwesenheitsvertretung (optional)",
|
||||
"Name of the replacement" : "Name der Vertretung",
|
||||
"No results." : "Keine Ergebnisse.",
|
||||
"Start typing." : "Anfangen zu tippen.",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstatus",
|
||||
"Long absence Message" : "Lange Abwesenheitsnachricht",
|
||||
"Save" : "Speichern",
|
||||
@@ -314,6 +316,10 @@ OC.L10N.register(
|
||||
"Import calendar event" : "Kalendertermin importieren",
|
||||
"Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Termins wird den bestehenden Termin überschreiben.",
|
||||
"Upload event" : "Termin 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 Sie Ihre Arbeitszeiten angeben, können andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.",
|
||||
"Absence" : "Abwesenheit",
|
||||
"Configure your next absence period." : "Richten Sie ihren nächsten Abwesenheitszeitraum ein.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installieren Sie außerdem die {calendarappstoreopen}Kalender-App{linkclose} oder {calendardocopen}verbinden Sie Ihren Desktop & Mobilgerät zur Synchronisierung ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Bitte stellen Sie sicher, dass Sie {emailopen}den E-Mail Server{linkclose} ordnungsgemäß eingerichtet haben.",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
@@ -328,17 +334,11 @@ OC.L10N.register(
|
||||
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
|
||||
"Example content" : "Beispielsinhalt",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Beispielinhalte dienen dazu, die Funktionen von Nextcloud vorzustellen. Standardinhalte werden mit Nextcloud ausgeliefert und können durch benutzerdefinierte Inhalte ersetzt werden.",
|
||||
"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 Sie Ihre Arbeitszeiten angeben, können andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.",
|
||||
"Absence" : "Abwesenheit",
|
||||
"Configure your next absence period." : "Richten Sie ihren nächsten Abwesenheitszeitraum ein.",
|
||||
"There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren Ihres Teilnehmerstatus aufgetreten.",
|
||||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
"Tentative" : "Vorläufig",
|
||||
"Your attendance was updated successfully." : "Ihr Teilnehmerstatus wurde aktualisiert.",
|
||||
"No results." : "Keine Ergebnisse.",
|
||||
"Start typing." : "Anfangen zu tippen.",
|
||||
"Time zone:" : "Zeitzone:"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -278,6 +278,8 @@
|
||||
"Last day (inclusive)" : "Letzter Tag (inklusiv)",
|
||||
"Out of office replacement (optional)" : "Abwesenheitsvertretung (optional)",
|
||||
"Name of the replacement" : "Name der Vertretung",
|
||||
"No results." : "Keine Ergebnisse.",
|
||||
"Start typing." : "Anfangen zu tippen.",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstatus",
|
||||
"Long absence Message" : "Lange Abwesenheitsnachricht",
|
||||
"Save" : "Speichern",
|
||||
@@ -312,6 +314,10 @@
|
||||
"Import calendar event" : "Kalendertermin importieren",
|
||||
"Uploading a new event will overwrite the existing one." : "Das Hochladen eines neuen Termins wird den bestehenden Termin überschreiben.",
|
||||
"Upload event" : "Termin 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 Sie Ihre Arbeitszeiten angeben, können andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.",
|
||||
"Absence" : "Abwesenheit",
|
||||
"Configure your next absence period." : "Richten Sie ihren nächsten Abwesenheitszeitraum ein.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installieren Sie außerdem die {calendarappstoreopen}Kalender-App{linkclose} oder {calendardocopen}verbinden Sie Ihren Desktop & Mobilgerät zur Synchronisierung ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Bitte stellen Sie sicher, dass Sie {emailopen}den E-Mail Server{linkclose} ordnungsgemäß eingerichtet haben.",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
@@ -326,17 +332,11 @@
|
||||
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
|
||||
"Example content" : "Beispielsinhalt",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Beispielinhalte dienen dazu, die Funktionen von Nextcloud vorzustellen. Standardinhalte werden mit Nextcloud ausgeliefert und können durch benutzerdefinierte Inhalte ersetzt werden.",
|
||||
"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 Sie Ihre Arbeitszeiten angeben, können andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.",
|
||||
"Absence" : "Abwesenheit",
|
||||
"Configure your next absence period." : "Richten Sie ihren nächsten Abwesenheitszeitraum ein.",
|
||||
"There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren Ihres Teilnehmerstatus aufgetreten.",
|
||||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
"Tentative" : "Vorläufig",
|
||||
"Your attendance was updated successfully." : "Ihr Teilnehmerstatus wurde aktualisiert.",
|
||||
"No results." : "Keine Ergebnisse.",
|
||||
"Start typing." : "Anfangen zu tippen.",
|
||||
"Time zone:" : "Zeitzone:"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+6
-6
@@ -280,6 +280,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Τελευταία ημέρα (συμπεριλαμβανομένης)",
|
||||
"Out of office replacement (optional)" : "Αντικαταστάτης εκτός γραφείου (προαιρετικό)",
|
||||
"Name of the replacement" : "Όνομα του αντικαταστάτη",
|
||||
"No results." : "Κανένα αποτέλεσμα.",
|
||||
"Start typing." : "Ξεκινήστε να πληκτρολογείτε.",
|
||||
"Short absence status" : "Σύντομη κατάσταση απουσίας",
|
||||
"Long absence Message" : "Μήνυμα παρατεταμένης απουσίας",
|
||||
"Save" : "Αποθήκευση",
|
||||
@@ -314,6 +316,10 @@ OC.L10N.register(
|
||||
"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" : "Απουσία",
|
||||
"Configure your next absence period." : "Ρυθμίστε την επόμενη περίοδο απουσίας σας.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Εγκαταστήστε επίσης την {calendarappstoreopen}Εφαρμογή ημερολογίου{linkclose}, ή {calendardocopen}συνδέστε τον υπολογιστή & το κινητό σας για συγχρονισμό ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Παρακαλώ σιγουρευτείτε για την σωστή ρύθμιση {emailopen}του διακομιστή αλληλογραφίας{linkclose}.",
|
||||
"Calendar server" : "Διακομιστής ημερολογίου",
|
||||
@@ -328,17 +334,11 @@ OC.L10N.register(
|
||||
"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 και μπορεί να αντικατασταθεί από προσαρμοσμένο περιεχόμενο.",
|
||||
"Availability" : "Διαθεσιμότητα",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Εάν ρυθμίσετε τις ώρες εργασίας σας, άλλοι άνθρωποι θα βλέπουν πότε είστε εκτός γραφείου όταν κλείνουν μια συνάντηση.",
|
||||
"Absence" : "Απουσία",
|
||||
"Configure your next absence period." : "Ρυθμίστε την επόμενη περίοδο απουσίας σας.",
|
||||
"There was an error updating your attendance status." : "Σφάλμα ενημέρωσης κατάστασής σας.",
|
||||
"Please contact the organizer directly." : "Παρακαλώ επικοινωνήστε απ' ευθείας με τον διοργανωτή.",
|
||||
"Are you accepting the invitation?" : "Αποδέχεστε την πρόσκληση;",
|
||||
"Tentative" : "Δοκιμαστικό",
|
||||
"Your attendance was updated successfully." : "Η παρουσία σας ενημερώθηκε με επιτυχία.",
|
||||
"No results." : "Κανένα αποτέλεσμα.",
|
||||
"Start typing." : "Ξεκινήστε να πληκτρολογείτε.",
|
||||
"Time zone:" : "Ζώνη ώρας:"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -278,6 +278,8 @@
|
||||
"Last day (inclusive)" : "Τελευταία ημέρα (συμπεριλαμβανομένης)",
|
||||
"Out of office replacement (optional)" : "Αντικαταστάτης εκτός γραφείου (προαιρετικό)",
|
||||
"Name of the replacement" : "Όνομα του αντικαταστάτη",
|
||||
"No results." : "Κανένα αποτέλεσμα.",
|
||||
"Start typing." : "Ξεκινήστε να πληκτρολογείτε.",
|
||||
"Short absence status" : "Σύντομη κατάσταση απουσίας",
|
||||
"Long absence Message" : "Μήνυμα παρατεταμένης απουσίας",
|
||||
"Save" : "Αποθήκευση",
|
||||
@@ -312,6 +314,10 @@
|
||||
"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" : "Απουσία",
|
||||
"Configure your next absence period." : "Ρυθμίστε την επόμενη περίοδο απουσίας σας.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Εγκαταστήστε επίσης την {calendarappstoreopen}Εφαρμογή ημερολογίου{linkclose}, ή {calendardocopen}συνδέστε τον υπολογιστή & το κινητό σας για συγχρονισμό ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Παρακαλώ σιγουρευτείτε για την σωστή ρύθμιση {emailopen}του διακομιστή αλληλογραφίας{linkclose}.",
|
||||
"Calendar server" : "Διακομιστής ημερολογίου",
|
||||
@@ -326,17 +332,11 @@
|
||||
"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 και μπορεί να αντικατασταθεί από προσαρμοσμένο περιεχόμενο.",
|
||||
"Availability" : "Διαθεσιμότητα",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Εάν ρυθμίσετε τις ώρες εργασίας σας, άλλοι άνθρωποι θα βλέπουν πότε είστε εκτός γραφείου όταν κλείνουν μια συνάντηση.",
|
||||
"Absence" : "Απουσία",
|
||||
"Configure your next absence period." : "Ρυθμίστε την επόμενη περίοδο απουσίας σας.",
|
||||
"There was an error updating your attendance status." : "Σφάλμα ενημέρωσης κατάστασής σας.",
|
||||
"Please contact the organizer directly." : "Παρακαλώ επικοινωνήστε απ' ευθείας με τον διοργανωτή.",
|
||||
"Are you accepting the invitation?" : "Αποδέχεστε την πρόσκληση;",
|
||||
"Tentative" : "Δοκιμαστικό",
|
||||
"Your attendance was updated successfully." : "Η παρουσία σας ενημερώθηκε με επιτυχία.",
|
||||
"No results." : "Κανένα αποτέλεσμα.",
|
||||
"Start typing." : "Ξεκινήστε να πληκτρολογείτε.",
|
||||
"Time zone:" : "Ζώνη ώρας:"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -280,6 +280,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Last day (inclusive)",
|
||||
"Out of office replacement (optional)" : "Out of office replacement (optional)",
|
||||
"Name of the replacement" : "Name of the replacement",
|
||||
"No results." : "No results.",
|
||||
"Start typing." : "Start typing.",
|
||||
"Short absence status" : "Short absence status",
|
||||
"Long absence Message" : "Long absence Message",
|
||||
"Save" : "Save",
|
||||
@@ -314,6 +316,10 @@ OC.L10N.register(
|
||||
"Import calendar event" : "Import calendar event",
|
||||
"Uploading a new event will overwrite the existing one." : "Uploading a new event will overwrite the existing one.",
|
||||
"Upload event" : "Upload event",
|
||||
"Availability" : "Availability",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "If you configure your working hours, other people will see when you are out of office when they book a meeting.",
|
||||
"Absence" : "Absence",
|
||||
"Configure your next absence period." : "Configure your next absence period.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Please make sure to properly set up {emailopen}the email server{linkclose}.",
|
||||
"Calendar server" : "Calendar server",
|
||||
@@ -328,17 +334,11 @@ OC.L10N.register(
|
||||
"Enable notifications for events via push" : "Enable notifications for events via push",
|
||||
"Example content" : "Example content",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content.",
|
||||
"Availability" : "Availability",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "If you configure your working hours, other people will see when you are out of office when they book a meeting.",
|
||||
"Absence" : "Absence",
|
||||
"Configure your next absence period." : "Configure your next absence period.",
|
||||
"There was an error updating your attendance status." : "There was an error updating your attendance status.",
|
||||
"Please contact the organizer directly." : "Please contact the organiser directly.",
|
||||
"Are you accepting the invitation?" : "Are you accepting the invitation?",
|
||||
"Tentative" : "Tentative",
|
||||
"Your attendance was updated successfully." : "Your attendance was updated successfully.",
|
||||
"No results." : "No results.",
|
||||
"Start typing." : "Start typing.",
|
||||
"Time zone:" : "Time zone:"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -278,6 +278,8 @@
|
||||
"Last day (inclusive)" : "Last day (inclusive)",
|
||||
"Out of office replacement (optional)" : "Out of office replacement (optional)",
|
||||
"Name of the replacement" : "Name of the replacement",
|
||||
"No results." : "No results.",
|
||||
"Start typing." : "Start typing.",
|
||||
"Short absence status" : "Short absence status",
|
||||
"Long absence Message" : "Long absence Message",
|
||||
"Save" : "Save",
|
||||
@@ -312,6 +314,10 @@
|
||||
"Import calendar event" : "Import calendar event",
|
||||
"Uploading a new event will overwrite the existing one." : "Uploading a new event will overwrite the existing one.",
|
||||
"Upload event" : "Upload event",
|
||||
"Availability" : "Availability",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "If you configure your working hours, other people will see when you are out of office when they book a meeting.",
|
||||
"Absence" : "Absence",
|
||||
"Configure your next absence period." : "Configure your next absence period.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Please make sure to properly set up {emailopen}the email server{linkclose}.",
|
||||
"Calendar server" : "Calendar server",
|
||||
@@ -326,17 +332,11 @@
|
||||
"Enable notifications for events via push" : "Enable notifications for events via push",
|
||||
"Example content" : "Example content",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content.",
|
||||
"Availability" : "Availability",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "If you configure your working hours, other people will see when you are out of office when they book a meeting.",
|
||||
"Absence" : "Absence",
|
||||
"Configure your next absence period." : "Configure your next absence period.",
|
||||
"There was an error updating your attendance status." : "There was an error updating your attendance status.",
|
||||
"Please contact the organizer directly." : "Please contact the organiser directly.",
|
||||
"Are you accepting the invitation?" : "Are you accepting the invitation?",
|
||||
"Tentative" : "Tentative",
|
||||
"Your attendance was updated successfully." : "Your attendance was updated successfully.",
|
||||
"No results." : "No results.",
|
||||
"Start typing." : "Start typing.",
|
||||
"Time zone:" : "Time zone:"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
+6
-6
@@ -280,6 +280,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Último día (incluido)",
|
||||
"Out of office replacement (optional)" : "Sustituto durante vacaciones/ausencia (opcional)",
|
||||
"Name of the replacement" : "Nombre del sustituto",
|
||||
"No results." : "Sin resultados.",
|
||||
"Start typing." : "Empiece a escribir.",
|
||||
"Short absence status" : "Estado de ausencia corta",
|
||||
"Long absence Message" : "Mensaje de ausencia larga",
|
||||
"Save" : "Guardar",
|
||||
@@ -314,6 +316,10 @@ OC.L10N.register(
|
||||
"Import calendar event" : "Importar evento del calendario",
|
||||
"Uploading a new event will overwrite the existing one." : "Cargar un evento nuevo sobrescribirá el existente. ",
|
||||
"Upload event" : "Cargar evento",
|
||||
"Availability" : "Disponibilidad",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configure el siguiente periodo en que estará ausente",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor web{linkclose}",
|
||||
"Calendar server" : "Servidor de calendario",
|
||||
@@ -328,17 +334,11 @@ OC.L10N.register(
|
||||
"Enable notifications for events via push" : "Activar notificaciones push para eventos",
|
||||
"Example content" : "Contenido de ejemplo",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "El contenido de ejemplo sirve para mostrar las características de Nextcloud. Se proporciona un contenido predeterminado con Nextcloud, y puede ser reemplazado por un contenido personalizado.",
|
||||
"Availability" : "Disponibilidad",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configure el siguiente periodo en que estará ausente",
|
||||
"There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
"Tentative" : "Provisional",
|
||||
"Your attendance was updated successfully." : "Tu asistencia se ha actualizado con éxito.",
|
||||
"No results." : "Sin resultados.",
|
||||
"Start typing." : "Empiece a escribir.",
|
||||
"Time zone:" : "Zona horaria:"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -278,6 +278,8 @@
|
||||
"Last day (inclusive)" : "Último día (incluido)",
|
||||
"Out of office replacement (optional)" : "Sustituto durante vacaciones/ausencia (opcional)",
|
||||
"Name of the replacement" : "Nombre del sustituto",
|
||||
"No results." : "Sin resultados.",
|
||||
"Start typing." : "Empiece a escribir.",
|
||||
"Short absence status" : "Estado de ausencia corta",
|
||||
"Long absence Message" : "Mensaje de ausencia larga",
|
||||
"Save" : "Guardar",
|
||||
@@ -312,6 +314,10 @@
|
||||
"Import calendar event" : "Importar evento del calendario",
|
||||
"Uploading a new event will overwrite the existing one." : "Cargar un evento nuevo sobrescribirá el existente. ",
|
||||
"Upload event" : "Cargar evento",
|
||||
"Availability" : "Disponibilidad",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configure el siguiente periodo en que estará ausente",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor web{linkclose}",
|
||||
"Calendar server" : "Servidor de calendario",
|
||||
@@ -326,17 +332,11 @@
|
||||
"Enable notifications for events via push" : "Activar notificaciones push para eventos",
|
||||
"Example content" : "Contenido de ejemplo",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "El contenido de ejemplo sirve para mostrar las características de Nextcloud. Se proporciona un contenido predeterminado con Nextcloud, y puede ser reemplazado por un contenido personalizado.",
|
||||
"Availability" : "Disponibilidad",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configure el siguiente periodo en que estará ausente",
|
||||
"There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
"Tentative" : "Provisional",
|
||||
"Your attendance was updated successfully." : "Tu asistencia se ha actualizado con éxito.",
|
||||
"No results." : "Sin resultados.",
|
||||
"Start typing." : "Empiece a escribir.",
|
||||
"Time zone:" : "Zona horaria:"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -185,6 +185,7 @@ OC.L10N.register(
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar la configuración.",
|
||||
"Reset to default" : "Restablecer al predeterminado",
|
||||
"Availability" : "Disponibilidad",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "También instala la {calendarappstoreopen}aplicación Calendario{linkclose}, o {calendardocopen}conecta tu escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrate de configurar correctamente {emailopen}el servidor de correo electrónico{linkclose}.",
|
||||
"Calendar server" : "Servidor de calendario",
|
||||
@@ -197,7 +198,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorios a los asistentes del calendario también",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push",
|
||||
"Availability" : "Disponibilidad",
|
||||
"There was an error updating your attendance status." : "Hubo un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente al organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar la configuración.",
|
||||
"Reset to default" : "Restablecer al predeterminado",
|
||||
"Availability" : "Disponibilidad",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "También instala la {calendarappstoreopen}aplicación Calendario{linkclose}, o {calendardocopen}conecta tu escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Asegúrate de configurar correctamente {emailopen}el servidor de correo electrónico{linkclose}.",
|
||||
"Calendar server" : "Servidor de calendario",
|
||||
@@ -195,7 +196,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorios a los asistentes del calendario también",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push",
|
||||
"Availability" : "Disponibilidad",
|
||||
"There was an error updating your attendance status." : "Hubo un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente al organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
|
||||
@@ -202,6 +202,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Último día (inclusivo)",
|
||||
"Out of office replacement (optional)" : "Reemplazo para cuando fuera de la oficina (opcional)",
|
||||
"Name of the replacement" : "Nombre del reemplazo",
|
||||
"No results." : "Sin resultados.",
|
||||
"Start typing." : "Empezar a escribir.",
|
||||
"Short absence status" : "Estado de ausencia corta",
|
||||
"Long absence Message" : "Mensaje de ausencia larga",
|
||||
"Save" : "Guardar",
|
||||
@@ -221,6 +223,10 @@ OC.L10N.register(
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar la configuración",
|
||||
"Reset to default" : "Restablecer al predeterminado",
|
||||
"Availability" : "Disponibilidad",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuándo está fuera de la oficina cuando agenden una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configure su siguiente periodo de ausencia.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}aplicación de calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor de correo electrónico{linkclose}",
|
||||
"Calendar server" : "Servidor del calendario",
|
||||
@@ -233,17 +239,11 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios se envían siempre a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push",
|
||||
"Availability" : "Disponibilidad",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuándo está fuera de la oficina cuando agenden una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configure su siguiente periodo de ausencia.",
|
||||
"There was an error updating your attendance status." : "Ocurrió un error al actualizar su estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacte al organizador directamente.",
|
||||
"Are you accepting the invitation?" : "¿Acepta la invitación?",
|
||||
"Tentative" : "Tentativo",
|
||||
"Your attendance was updated successfully." : "Su asistencia se actualizó correctamente.",
|
||||
"No results." : "Sin resultados.",
|
||||
"Start typing." : "Empezar a escribir.",
|
||||
"Time zone:" : "Zona horaria:"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -200,6 +200,8 @@
|
||||
"Last day (inclusive)" : "Último día (inclusivo)",
|
||||
"Out of office replacement (optional)" : "Reemplazo para cuando fuera de la oficina (opcional)",
|
||||
"Name of the replacement" : "Nombre del reemplazo",
|
||||
"No results." : "Sin resultados.",
|
||||
"Start typing." : "Empezar a escribir.",
|
||||
"Short absence status" : "Estado de ausencia corta",
|
||||
"Long absence Message" : "Mensaje de ausencia larga",
|
||||
"Save" : "Guardar",
|
||||
@@ -219,6 +221,10 @@
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar la configuración",
|
||||
"Reset to default" : "Restablecer al predeterminado",
|
||||
"Availability" : "Disponibilidad",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuándo está fuera de la oficina cuando agenden una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configure su siguiente periodo de ausencia.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}aplicación de calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor de correo electrónico{linkclose}",
|
||||
"Calendar server" : "Servidor del calendario",
|
||||
@@ -231,17 +237,11 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios se envían siempre a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push",
|
||||
"Availability" : "Disponibilidad",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuándo está fuera de la oficina cuando agenden una reunión.",
|
||||
"Absence" : "Ausencia",
|
||||
"Configure your next absence period." : "Configure su siguiente periodo de ausencia.",
|
||||
"There was an error updating your attendance status." : "Ocurrió un error al actualizar su estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacte al organizador directamente.",
|
||||
"Are you accepting the invitation?" : "¿Acepta la invitación?",
|
||||
"Tentative" : "Tentativo",
|
||||
"Your attendance was updated successfully." : "Su asistencia se actualizó correctamente.",
|
||||
"No results." : "Sin resultados.",
|
||||
"Start typing." : "Empezar a escribir.",
|
||||
"Time zone:" : "Zona horaria:"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -280,6 +280,8 @@ OC.L10N.register(
|
||||
"Last day (inclusive)" : "Viimane päev (kaasaarvatud)",
|
||||
"Out of office replacement (optional)" : "Asendaja äraoleku ajaks (valikuline)",
|
||||
"Name of the replacement" : "Asendaja nimi",
|
||||
"No results." : "Vasteid ei leitud.",
|
||||
"Start typing." : "Alusta kirjutamist.",
|
||||
"Short absence status" : "Äraoleku lühinimi",
|
||||
"Long absence Message" : "Äraoleku pikk sõnum",
|
||||
"Save" : "Salvesta",
|
||||
@@ -314,6 +316,10 @@ OC.L10N.register(
|
||||
"Import calendar event" : "Impordi kalendrisündmus",
|
||||
"Uploading a new event will overwrite the existing one." : "Uue sündmuse üleslaadimisel asendatakse olemasolevad.",
|
||||
"Upload event" : "Laadi sündmus üles",
|
||||
"Availability" : "Saadavus",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Kui seadistad oma tööajad, siis teised saavad kohtumise broneerimisel arvestada sellega, millal sind kohal pole.",
|
||||
"Absence" : "Äraolek",
|
||||
"Configure your next absence period." : "Seadista järgmise äraoleku ajavahemik.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Palun paigalda ka {calendarappstoreopen}Kalendrirakendus{linkclose} või {calendardocopen}lisa sünkroniseerimine oma töölaule ja nutiseadmesse ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Palun kontrolli, et {emailopen}e-posti server{linkclose} on seadistatud korrektselt.",
|
||||
"Calendar server" : "Kalendriserver",
|
||||
@@ -328,17 +334,11 @@ OC.L10N.register(
|
||||
"Enable notifications for events via push" : "Võta kasutusele tõuketeenustepõhised teavitused",
|
||||
"Example content" : "Sisunäidis",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Sisunäidis annab ülevaate Nexctcloudi võimalustest. Vaikimisi sisu tuleb Nexctcloudi paigaldusega kaasa ja seda saab alati oma sisuga asendada.",
|
||||
"Availability" : "Saadavus",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Kui seadistad oma tööajad, siis teised saavad kohtumise broneerimisel arvestada sellega, millal sind kohal pole.",
|
||||
"Absence" : "Äraolek",
|
||||
"Configure your next absence period." : "Seadista järgmise äraoleku ajavahemik.",
|
||||
"There was an error updating your attendance status." : "Sinu osalemise oleku muutmisel tekkis viga.",
|
||||
"Please contact the organizer directly." : "Palun võta ühendust korraldajaga otse.",
|
||||
"Are you accepting the invitation?" : "Kas sa nõustud kutsega?",
|
||||
"Tentative" : "Esialgne",
|
||||
"Your attendance was updated successfully." : "Sinu osalemise oleku muutmine õnnestus.",
|
||||
"No results." : "Vasteid ei leitud.",
|
||||
"Start typing." : "Alusta kirjutamist.",
|
||||
"Time zone:" : "Ajavöönd:"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user