mirror of
https://github.com/nextcloud/server.git
synced 2026-04-27 01:00:20 -04:00
Merge branch 'master' into release/23.0.0beta1
This commit is contained in:
commit
52bff6af47
892 changed files with 14758 additions and 2768 deletions
78
.github/workflows/ftp.yml
vendored
Normal file
78
.github/workflows/ftp.yml
vendored
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
name: FTP
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- stable*
|
||||
paths:
|
||||
- 'apps/files_external/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'apps/files_external/**'
|
||||
|
||||
env:
|
||||
APP_NAME: files_external
|
||||
|
||||
jobs:
|
||||
ftp-tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
# do not stop on another job's failure
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0']
|
||||
ftpd: ['proftpd', 'vsftpd', 'pure-ftpd']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.ftpd }}
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Set up ftpd
|
||||
run: |
|
||||
sudo mkdir /tmp/ftp
|
||||
sudo chown -R 0777 /tmp/ftp
|
||||
if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then docker run --name ftp -d --net host -e FTP_USERNAME=test -e FTP_PASSWORD=test -v /tmp/ftp:/home/test hauptmedia/proftpd; fi
|
||||
if [[ "${{ matrix.ftpd }}" == 'vsftpd' ]]; then docker run --name ftp -d --net host -e FTP_USER=test -e FTP_PASS=test -e PASV_ADDRESS=127.0.0.1 -v /tmp/ftp:/home/vsftpd/test fauria/vsftpd; fi
|
||||
if [[ "${{ matrix.ftpd }}" == 'pure-ftpd' ]]; then docker run --name ftp -d --net host -e "PUBLICHOST=localhost" -e FTP_USER_NAME=test -e FTP_USER_PASS=test -e FTP_USER_HOME=/home/test -v /tmp/ftp2:/home/test -v /tmp/ftp2:/etc/pure-ftpd/passwd stilliard/pure-ftpd; fi
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
tools: phpunit
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
mkdir data
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
|
||||
./occ app:enable --force ${{ env.APP_NAME }}
|
||||
php -S localhost:8080 &
|
||||
- name: smoketest ftp
|
||||
run: |
|
||||
php -r 'var_dump(file_put_contents("ftp://test:test@localhost/ftp.txt", "asd"));'
|
||||
php -r 'var_dump(file_get_contents("ftp://test:test@localhost/ftp.txt"));'
|
||||
php -r 'var_dump(mkdir("ftp://test:test@localhost/asdads"));'
|
||||
ls -l /tmp/ftp
|
||||
- name: PHPUnit
|
||||
run: |
|
||||
echo "<?php return ['run' => true,'host' => 'localhost','user' => 'test','password' => 'test', 'root' => ''];" > apps/${{ env.APP_NAME }}/tests/config.ftp.php
|
||||
phpunit --configuration tests/phpunit-autotest-external.xml apps/files_external/tests/Storage/FtpTest.php
|
||||
- name: ftpd logs
|
||||
if: always()
|
||||
run: |
|
||||
docker logs ftp
|
||||
|
||||
ftp-summary:
|
||||
runs-on: ubuntu-latest
|
||||
needs: ftp-tests
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.ftp-tests.result != 'success' }}; then exit 1; fi
|
||||
2
.mailmap
2
.mailmap
|
|
@ -82,6 +82,7 @@ Dan Callahan <dan.callahan@gmail.com>
|
|||
Dan Jones <dan@danneh.org>
|
||||
Daniel <daniel@mars.(none)>
|
||||
Daniel Hansson <enoch85@gmail.com>
|
||||
Daniel Kesselberg <mail@danielkesselberg.de> kesselb <mail@danielkesselberg.de>
|
||||
Daniel Köb <daniel.koeb@peony.at>
|
||||
Daniel Molkentin <daniel@molkentin.de>
|
||||
Daniele E. Domenichelli <daniele.domenichelli@gmail.com>
|
||||
|
|
@ -214,6 +215,7 @@ Lennart Rosam <lennart.rosam@medien-systempartner.de>
|
|||
Sebastian Döll <sebastian.doell@libasys.de> libasys <sebastian.doell@libasys.de>
|
||||
Lode Hoste <zillode@zillode.be>
|
||||
lolozere <laurent@chedanne.pro>
|
||||
Louis Chemineau <louis@chmn.me> Louis Chemineau <6653109+artonge@users.noreply.github.com>
|
||||
Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it>
|
||||
Lukas Reschke <lukas@statuscode.ch> Lukas Reschke <lukas@owncloud.com>
|
||||
Lukas Reschke <lukas@statuscode.ch> Lukas Reschke <lukas@owncloud.org>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'name' => '__root__',
|
||||
'dev' => false,
|
||||
),
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -5,7 +5,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'name' => '__root__',
|
||||
'dev' => false,
|
||||
),
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'name' => '__root__',
|
||||
'dev' => false,
|
||||
),
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'name' => '__root__',
|
||||
'dev' => false,
|
||||
),
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -5,7 +5,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'name' => '__root__',
|
||||
'dev' => false,
|
||||
),
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
|
|
|
|||
9
apps/contactsinteraction/l10n/da.js
Normal file
9
apps/contactsinteraction/l10n/da.js
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
OC.L10N.register(
|
||||
"contactsinteraction",
|
||||
{
|
||||
"Recently contacted" : "Nylig kontaktet",
|
||||
"Contacts Interaction" : "Kontakter Interaktion",
|
||||
"Manages interaction between users and contacts" : "Håndterer interaktion mellem brugere og kontakter",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Indsaml data om bruger- og kontaktinteraktioner og angiv en adressebog til dataene"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
7
apps/contactsinteraction/l10n/da.json
Normal file
7
apps/contactsinteraction/l10n/da.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{ "translations": {
|
||||
"Recently contacted" : "Nylig kontaktet",
|
||||
"Contacts Interaction" : "Kontakter Interaktion",
|
||||
"Manages interaction between users and contacts" : "Håndterer interaktion mellem brugere og kontakter",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Indsaml data om bruger- og kontaktinteraktioner og angiv en adressebog til dataene"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -60,6 +60,7 @@
|
|||
|
||||
<settings>
|
||||
<admin>OCA\DAV\Settings\CalDAVSettings</admin>
|
||||
<personal>OCA\DAV\Settings\AvailabilitySettings</personal>
|
||||
</settings>
|
||||
|
||||
<activity>
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ return array(
|
|||
'OCA\\DAV\\BackgroundJob\\RegisterRegenerateBirthdayCalendars' => $baseDir . '/../lib/BackgroundJob/RegisterRegenerateBirthdayCalendars.php',
|
||||
'OCA\\DAV\\BackgroundJob\\UpdateCalendarResourcesRoomsBackgroundJob' => $baseDir . '/../lib/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\UploadCleanup' => $baseDir . '/../lib/BackgroundJob/UploadCleanup.php',
|
||||
'OCA\\DAV\\BulkUpload\\BulkUploadPlugin' => $baseDir . '/../lib/BulkUpload/BulkUploadPlugin.php',
|
||||
'OCA\\DAV\\BulkUpload\\MultipartRequestParser' => $baseDir . '/../lib/BulkUpload/MultipartRequestParser.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Backend' => $baseDir . '/../lib/CalDAV/Activity/Backend.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Filter\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Filter/Calendar.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Filter\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Filter/Todo.php',
|
||||
|
|
@ -33,6 +35,8 @@ return array(
|
|||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => $baseDir . '/../lib/CalDAV/Activity/Setting/Calendar.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => $baseDir . '/../lib/CalDAV/Activity/Setting/Event.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => $baseDir . '/../lib/CalDAV/Activity/Setting/Todo.php',
|
||||
'OCA\\DAV\\CalDAV\\Auth\\CustomPrincipalPlugin' => $baseDir . '/../lib/CalDAV/Auth/CustomPrincipalPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\Auth\\PublicPrincipalPlugin' => $baseDir . '/../lib/CalDAV/Auth/PublicPrincipalPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\BirthdayCalendar\\EnablePlugin' => $baseDir . '/../lib/CalDAV/BirthdayCalendar/EnablePlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\BirthdayService' => $baseDir . '/../lib/CalDAV/BirthdayService.php',
|
||||
'OCA\\DAV\\CalDAV\\CachedSubscription' => $baseDir . '/../lib/CalDAV/CachedSubscription.php',
|
||||
|
|
@ -43,6 +47,7 @@ return array(
|
|||
'OCA\\DAV\\CalDAV\\CalendarImpl' => $baseDir . '/../lib/CalDAV/CalendarImpl.php',
|
||||
'OCA\\DAV\\CalDAV\\CalendarManager' => $baseDir . '/../lib/CalDAV/CalendarManager.php',
|
||||
'OCA\\DAV\\CalDAV\\CalendarObject' => $baseDir . '/../lib/CalDAV/CalendarObject.php',
|
||||
'OCA\\DAV\\CalDAV\\CalendarProvider' => $baseDir . '/../lib/CalDAV/CalendarProvider.php',
|
||||
'OCA\\DAV\\CalDAV\\CalendarRoot' => $baseDir . '/../lib/CalDAV/CalendarRoot.php',
|
||||
'OCA\\DAV\\CalDAV\\ICSExportPlugin\\ICSExportPlugin' => $baseDir . '/../lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\IRestorable' => $baseDir . '/../lib/CalDAV/IRestorable.php',
|
||||
|
|
@ -272,6 +277,7 @@ return array(
|
|||
'OCA\\DAV\\Search\\EventsSearchProvider' => $baseDir . '/../lib/Search/EventsSearchProvider.php',
|
||||
'OCA\\DAV\\Search\\TasksSearchProvider' => $baseDir . '/../lib/Search/TasksSearchProvider.php',
|
||||
'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php',
|
||||
'OCA\\DAV\\Settings\\AvailabilitySettings' => $baseDir . '/../lib/Settings/AvailabilitySettings.php',
|
||||
'OCA\\DAV\\Settings\\CalDAVSettings' => $baseDir . '/../lib/Settings/CalDAVSettings.php',
|
||||
'OCA\\DAV\\Storage\\PublicOwnerWrapper' => $baseDir . '/../lib/Storage/PublicOwnerWrapper.php',
|
||||
'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => $baseDir . '/../lib/SystemTag/SystemTagMappingNode.php',
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ class ComposerStaticInitDAV
|
|||
'OCA\\DAV\\BackgroundJob\\RegisterRegenerateBirthdayCalendars' => __DIR__ . '/..' . '/../lib/BackgroundJob/RegisterRegenerateBirthdayCalendars.php',
|
||||
'OCA\\DAV\\BackgroundJob\\UpdateCalendarResourcesRoomsBackgroundJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/UpdateCalendarResourcesRoomsBackgroundJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\UploadCleanup' => __DIR__ . '/..' . '/../lib/BackgroundJob/UploadCleanup.php',
|
||||
'OCA\\DAV\\BulkUpload\\BulkUploadPlugin' => __DIR__ . '/..' . '/../lib/BulkUpload/BulkUploadPlugin.php',
|
||||
'OCA\\DAV\\BulkUpload\\MultipartRequestParser' => __DIR__ . '/..' . '/../lib/BulkUpload/MultipartRequestParser.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Backend' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Backend.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Filter\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Filter/Calendar.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Filter\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Filter/Todo.php',
|
||||
|
|
@ -48,6 +50,8 @@ class ComposerStaticInitDAV
|
|||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Calendar' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Calendar.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Event' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Event.php',
|
||||
'OCA\\DAV\\CalDAV\\Activity\\Setting\\Todo' => __DIR__ . '/..' . '/../lib/CalDAV/Activity/Setting/Todo.php',
|
||||
'OCA\\DAV\\CalDAV\\Auth\\CustomPrincipalPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Auth/CustomPrincipalPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\Auth\\PublicPrincipalPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/Auth/PublicPrincipalPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\BirthdayCalendar\\EnablePlugin' => __DIR__ . '/..' . '/../lib/CalDAV/BirthdayCalendar/EnablePlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\BirthdayService' => __DIR__ . '/..' . '/../lib/CalDAV/BirthdayService.php',
|
||||
'OCA\\DAV\\CalDAV\\CachedSubscription' => __DIR__ . '/..' . '/../lib/CalDAV/CachedSubscription.php',
|
||||
|
|
@ -58,6 +62,7 @@ class ComposerStaticInitDAV
|
|||
'OCA\\DAV\\CalDAV\\CalendarImpl' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarImpl.php',
|
||||
'OCA\\DAV\\CalDAV\\CalendarManager' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarManager.php',
|
||||
'OCA\\DAV\\CalDAV\\CalendarObject' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarObject.php',
|
||||
'OCA\\DAV\\CalDAV\\CalendarProvider' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarProvider.php',
|
||||
'OCA\\DAV\\CalDAV\\CalendarRoot' => __DIR__ . '/..' . '/../lib/CalDAV/CalendarRoot.php',
|
||||
'OCA\\DAV\\CalDAV\\ICSExportPlugin\\ICSExportPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\IRestorable' => __DIR__ . '/..' . '/../lib/CalDAV/IRestorable.php',
|
||||
|
|
@ -287,6 +292,7 @@ class ComposerStaticInitDAV
|
|||
'OCA\\DAV\\Search\\EventsSearchProvider' => __DIR__ . '/..' . '/../lib/Search/EventsSearchProvider.php',
|
||||
'OCA\\DAV\\Search\\TasksSearchProvider' => __DIR__ . '/..' . '/../lib/Search/TasksSearchProvider.php',
|
||||
'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php',
|
||||
'OCA\\DAV\\Settings\\AvailabilitySettings' => __DIR__ . '/..' . '/../lib/Settings/AvailabilitySettings.php',
|
||||
'OCA\\DAV\\Settings\\CalDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CalDAVSettings.php',
|
||||
'OCA\\DAV\\Storage\\PublicOwnerWrapper' => __DIR__ . '/..' . '/../lib/Storage/PublicOwnerWrapper.php',
|
||||
'OCA\\DAV\\SystemTag\\SystemTagMappingNode' => __DIR__ . '/..' . '/../lib/SystemTag/SystemTagMappingNode.php',
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'name' => '__root__',
|
||||
'dev' => false,
|
||||
),
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../',
|
||||
'aliases' => array(),
|
||||
'reference' => 'dbf7905149222115a2cd0334efcf8c93afa8683e',
|
||||
'reference' => '7239b3d560b52ed604484a0a549dd5805e3f21e4',
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2122
apps/dav/js/settings-personal-availability.js
Normal file
2122
apps/dav/js/settings-personal-availability.js
Normal file
File diff suppressed because one or more lines are too long
1
apps/dav/js/settings-personal-availability.js.map
Normal file
1
apps/dav/js/settings-personal-availability.js.map
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -88,6 +88,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Venç en %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Punt final de WebDAV",
|
||||
"Save" : "Desa",
|
||||
"Calendar server" : "Servidor de calendari",
|
||||
"Send invitations to attendees" : "Envia invitacions als assistents",
|
||||
"Automatically generate a birthday calendar" : "Genera automàticament un calendari d’aniversari",
|
||||
|
|
@ -102,7 +103,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Si us plau contacteu amb l'organitzador directament.",
|
||||
"Are you accepting the invitation?" : "Accepteu la invitació?",
|
||||
"Tentative" : "Provisional",
|
||||
"Save" : "Desa",
|
||||
"Your attendance was updated successfully." : "La vostra assistència ha estat actualitzada correctament.",
|
||||
"Calendar and tasks" : "Calendari i tasques"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@
|
|||
"Due on %s" : "Venç en %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Punt final de WebDAV",
|
||||
"Save" : "Desa",
|
||||
"Calendar server" : "Servidor de calendari",
|
||||
"Send invitations to attendees" : "Envia invitacions als assistents",
|
||||
"Automatically generate a birthday calendar" : "Genera automàticament un calendari d’aniversari",
|
||||
|
|
@ -100,7 +101,6 @@
|
|||
"Please contact the organizer directly." : "Si us plau contacteu amb l'organitzador directament.",
|
||||
"Are you accepting the invitation?" : "Accepteu la invitació?",
|
||||
"Tentative" : "Provisional",
|
||||
"Save" : "Desa",
|
||||
"Your attendance was updated successfully." : "La vostra assistència ha estat actualitzada correctament.",
|
||||
"Calendar and tasks" : "Calendari i tasques"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Termín do %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV endpoint",
|
||||
"Save" : "Uložit",
|
||||
"Calendar server" : "Kalendářový server",
|
||||
"Send invitations to attendees" : "Poslat pozvánky na adresy účastníků",
|
||||
"Automatically generate a birthday calendar" : "Automaticky vytvořit kalendář s narozeninami",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Kontaktujte organizátora přímo.",
|
||||
"Are you accepting the invitation?" : "Přijímáte pozvání?",
|
||||
"Tentative" : "Nezávazně",
|
||||
"Save" : "Uložit",
|
||||
"Your attendance was updated successfully." : "Vaše účast byla úspěšně aktualizována.",
|
||||
"Calendar and tasks" : "Kalendář a úkoly"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Termín do %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV endpoint",
|
||||
"Save" : "Uložit",
|
||||
"Calendar server" : "Kalendářový server",
|
||||
"Send invitations to attendees" : "Poslat pozvánky na adresy účastníků",
|
||||
"Automatically generate a birthday calendar" : "Automaticky vytvořit kalendář s narozeninami",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Kontaktujte organizátora přímo.",
|
||||
"Are you accepting the invitation?" : "Přijímáte pozvání?",
|
||||
"Tentative" : "Nezávazně",
|
||||
"Save" : "Uložit",
|
||||
"Your attendance was updated successfully." : "Vaše účast byla úspěšně aktualizována.",
|
||||
"Calendar and tasks" : "Kalendář a úkoly"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ OC.L10N.register(
|
|||
"You deleted calendar {calendar}" : "Du slettede kalenderen {calendar}",
|
||||
"{actor} updated calendar {calendar}" : "{actor} opdaterede kalenderen {calendar}",
|
||||
"You updated calendar {calendar}" : "Du opdaterede kalenderen {calendar}",
|
||||
"{actor} restored calendar {calendar}" : "{actor} gendannede kalender {calendar}",
|
||||
"You restored calendar {calendar}" : "Du gendannede kalender {calendar}",
|
||||
"You shared calendar {calendar} as public link" : "Du har delt kalenderen {calendar} som offentligt link",
|
||||
"You removed public link for calendar {calendar}" : "Du har fjernet det offentlige link til kalenderen {calendar}",
|
||||
"{actor} shared calendar {calendar} with you" : "{actor} delte kalenderen {calendar} med dig",
|
||||
|
|
@ -29,6 +31,8 @@ OC.L10N.register(
|
|||
"You deleted event {event} from calendar {calendar}" : "Du slettede begivenheden {event} fra kalenderen {calendar}",
|
||||
"{actor} updated event {event} in calendar {calendar}" : "{actor} opdaterede begivenheden {event} i kalenderen {calendar}",
|
||||
"You updated event {event} in calendar {calendar}" : "Du opdaterede begivenheden {event} i kalenderen {calendar}",
|
||||
"{actor} restored event {event} of calendar {calendar}" : "{actor} gendannede begivenhed {event} i kalender {calendar}",
|
||||
"You restored event {event} of calendar {calendar}" : "Du gendannede begivenhed {begivenhed} i kalender {kalender}",
|
||||
"Busy" : "Optaget",
|
||||
"{actor} created todo {todo} in list {calendar}" : "{actor} oprettede en opgave {todo} i listen {calendar}",
|
||||
"You created todo {todo} in list {calendar}" : "Du oprettede opgaven {todo} i listen {calendar}",
|
||||
|
|
@ -40,10 +44,12 @@ OC.L10N.register(
|
|||
"You solved todo {todo} in list {calendar}" : "Du løste opgaven {todo} i listen {calendar}",
|
||||
"{actor} reopened todo {todo} in list {calendar}" : "{actor} genåbnede opgaven {todo} i listen {calendar}",
|
||||
"You reopened todo {todo} in list {calendar}" : "Du genåbnede opgaven {todo} i listen {calendar}",
|
||||
"Calendar, contacts and tasks" : "Kalender, kontakter og opgaver",
|
||||
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> er blevet ændret",
|
||||
"A calendar <strong>event</strong> was modified" : "En kalender <strong>begivenhed</strong> er blevet ændret",
|
||||
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>opgave</strong> blev ændret",
|
||||
"Contact birthdays" : "Kontakt fødselsdag",
|
||||
"Death of %s" : "Død af%s",
|
||||
"Calendar:" : "Kalender:",
|
||||
"Date:" : "Dato:",
|
||||
"Where:" : "Hvor:",
|
||||
|
|
@ -63,22 +69,29 @@ OC.L10N.register(
|
|||
"%1$s via %2$s" : "%1$s via %2$s",
|
||||
"Invitation canceled" : "Invitation annulleret",
|
||||
"Invitation updated" : "Invitation opdateret ",
|
||||
"Invitation" : "Invitation",
|
||||
"Title:" : "Titel:",
|
||||
"Time:" : "Tid:",
|
||||
"Location:" : "Sted:",
|
||||
"Link:" : "Link:",
|
||||
"Organizer:" : "Arrangør:",
|
||||
"Attendees:" : "Deltagere:",
|
||||
"Accept" : "Accepter",
|
||||
"Decline" : "Afvis",
|
||||
"More options …" : "Flere indstillinger…",
|
||||
"Contacts" : "Kontakter",
|
||||
"System is in maintenance mode." : "Systemet er i vedligeholdelsestilstand.",
|
||||
"Upgrade needed" : "Opgradering er nødvendig",
|
||||
"Tasks" : "Opgaver",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV endpoint",
|
||||
"Save" : "Gem",
|
||||
"Calendar server" : "Kalenderserver",
|
||||
"Send invitations to attendees" : "Send invitation til deltagere",
|
||||
"Automatically generate a birthday calendar" : "Generer en fødselsdagskalender automatisk",
|
||||
"Birthday calendars will be generated by a background job." : "Fødselsdagskalendere vil blive oprettet af et job, der kører i baggrunden.",
|
||||
"Hence they will not be available immediately after enabling but will show up after some time." : "Derfor vil de ikke blive synlige med det samme efter aktivering, men vil vise sig efter noget tid.",
|
||||
"Are you accepting the invitation?" : "Accepter du invitationen?",
|
||||
"Tentative" : "Foreløbig",
|
||||
"Save" : "Gem"
|
||||
"Tentative" : "Foreløbig"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
"You deleted calendar {calendar}" : "Du slettede kalenderen {calendar}",
|
||||
"{actor} updated calendar {calendar}" : "{actor} opdaterede kalenderen {calendar}",
|
||||
"You updated calendar {calendar}" : "Du opdaterede kalenderen {calendar}",
|
||||
"{actor} restored calendar {calendar}" : "{actor} gendannede kalender {calendar}",
|
||||
"You restored calendar {calendar}" : "Du gendannede kalender {calendar}",
|
||||
"You shared calendar {calendar} as public link" : "Du har delt kalenderen {calendar} som offentligt link",
|
||||
"You removed public link for calendar {calendar}" : "Du har fjernet det offentlige link til kalenderen {calendar}",
|
||||
"{actor} shared calendar {calendar} with you" : "{actor} delte kalenderen {calendar} med dig",
|
||||
|
|
@ -27,6 +29,8 @@
|
|||
"You deleted event {event} from calendar {calendar}" : "Du slettede begivenheden {event} fra kalenderen {calendar}",
|
||||
"{actor} updated event {event} in calendar {calendar}" : "{actor} opdaterede begivenheden {event} i kalenderen {calendar}",
|
||||
"You updated event {event} in calendar {calendar}" : "Du opdaterede begivenheden {event} i kalenderen {calendar}",
|
||||
"{actor} restored event {event} of calendar {calendar}" : "{actor} gendannede begivenhed {event} i kalender {calendar}",
|
||||
"You restored event {event} of calendar {calendar}" : "Du gendannede begivenhed {begivenhed} i kalender {kalender}",
|
||||
"Busy" : "Optaget",
|
||||
"{actor} created todo {todo} in list {calendar}" : "{actor} oprettede en opgave {todo} i listen {calendar}",
|
||||
"You created todo {todo} in list {calendar}" : "Du oprettede opgaven {todo} i listen {calendar}",
|
||||
|
|
@ -38,10 +42,12 @@
|
|||
"You solved todo {todo} in list {calendar}" : "Du løste opgaven {todo} i listen {calendar}",
|
||||
"{actor} reopened todo {todo} in list {calendar}" : "{actor} genåbnede opgaven {todo} i listen {calendar}",
|
||||
"You reopened todo {todo} in list {calendar}" : "Du genåbnede opgaven {todo} i listen {calendar}",
|
||||
"Calendar, contacts and tasks" : "Kalender, kontakter og opgaver",
|
||||
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> er blevet ændret",
|
||||
"A calendar <strong>event</strong> was modified" : "En kalender <strong>begivenhed</strong> er blevet ændret",
|
||||
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>opgave</strong> blev ændret",
|
||||
"Contact birthdays" : "Kontakt fødselsdag",
|
||||
"Death of %s" : "Død af%s",
|
||||
"Calendar:" : "Kalender:",
|
||||
"Date:" : "Dato:",
|
||||
"Where:" : "Hvor:",
|
||||
|
|
@ -61,22 +67,29 @@
|
|||
"%1$s via %2$s" : "%1$s via %2$s",
|
||||
"Invitation canceled" : "Invitation annulleret",
|
||||
"Invitation updated" : "Invitation opdateret ",
|
||||
"Invitation" : "Invitation",
|
||||
"Title:" : "Titel:",
|
||||
"Time:" : "Tid:",
|
||||
"Location:" : "Sted:",
|
||||
"Link:" : "Link:",
|
||||
"Organizer:" : "Arrangør:",
|
||||
"Attendees:" : "Deltagere:",
|
||||
"Accept" : "Accepter",
|
||||
"Decline" : "Afvis",
|
||||
"More options …" : "Flere indstillinger…",
|
||||
"Contacts" : "Kontakter",
|
||||
"System is in maintenance mode." : "Systemet er i vedligeholdelsestilstand.",
|
||||
"Upgrade needed" : "Opgradering er nødvendig",
|
||||
"Tasks" : "Opgaver",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV endpoint",
|
||||
"Save" : "Gem",
|
||||
"Calendar server" : "Kalenderserver",
|
||||
"Send invitations to attendees" : "Send invitation til deltagere",
|
||||
"Automatically generate a birthday calendar" : "Generer en fødselsdagskalender automatisk",
|
||||
"Birthday calendars will be generated by a background job." : "Fødselsdagskalendere vil blive oprettet af et job, der kører i baggrunden.",
|
||||
"Hence they will not be available immediately after enabling but will show up after some time." : "Derfor vil de ikke blive synlige med det samme efter aktivering, men vil vise sig efter noget tid.",
|
||||
"Are you accepting the invitation?" : "Accepter du invitationen?",
|
||||
"Tentative" : "Foreløbig",
|
||||
"Save" : "Gem"
|
||||
"Tentative" : "Foreløbig"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Fällig am %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-Endpunkt",
|
||||
"Save" : "Speichern",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
|
||||
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
"Tentative" : "Vorläufig",
|
||||
"Save" : "Speichern",
|
||||
"Your attendance was updated successfully." : "Dein Teilnehmerstatus wurde aktualisiert.",
|
||||
"Calendar and tasks" : "Kalender und Aufgaben"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Fällig am %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-Endpunkt",
|
||||
"Save" : "Speichern",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
|
||||
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
"Tentative" : "Vorläufig",
|
||||
"Save" : "Speichern",
|
||||
"Your attendance was updated successfully." : "Dein Teilnehmerstatus wurde aktualisiert.",
|
||||
"Calendar and tasks" : "Kalender und Aufgaben"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Fällig am %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-Endpunkt",
|
||||
"Save" : "Speichern",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
|
||||
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
"Tentative" : "Vorläufig",
|
||||
"Save" : "Speichern",
|
||||
"Your attendance was updated successfully." : "Ihr Teilnehmerstatus wurde aktualisiert.",
|
||||
"Calendar and tasks" : "Kalender und Aufgaben"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Fällig am %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-Endpunkt",
|
||||
"Save" : "Speichern",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
"Send invitations to attendees" : "Einladungen an die Teilnehmer versenden",
|
||||
"Automatically generate a birthday calendar" : "Automatisch einen Kalender für Geburtstage erstellen",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
"Tentative" : "Vorläufig",
|
||||
"Save" : "Speichern",
|
||||
"Your attendance was updated successfully." : "Ihr Teilnehmerstatus wurde aktualisiert.",
|
||||
"Calendar and tasks" : "Kalender und Aufgaben"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Ενημερώσατε το ημερολόγιο {ημερολόγιο}",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Τερματικό WebDAV",
|
||||
"Save" : "Αποθήκευση",
|
||||
"Calendar server" : "Διακομιστής ημερολογίου",
|
||||
"Send invitations to attendees" : "Αποστολή προσκλήσεων στους συμμετέχοντες.",
|
||||
"Automatically generate a birthday calendar" : "Δημιουργία ημερολογίου γενεθλίων αυτόματα",
|
||||
|
|
@ -102,7 +103,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Παρακαλώ επικοινωνήστε απ' ευθείας με τον διοργανωτή.",
|
||||
"Are you accepting the invitation?" : "Αποδέχεστε την πρόσκληση;",
|
||||
"Tentative" : "Δοκιμαστικό",
|
||||
"Save" : "Αποθήκευση",
|
||||
"Your attendance was updated successfully." : "Η παρουσία σας ενημερώθηκε με επιτυχία.",
|
||||
"Calendar and tasks" : "Ημερολόγιο και εργασίες"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@
|
|||
"Due on %s" : "Ενημερώσατε το ημερολόγιο {ημερολόγιο}",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Τερματικό WebDAV",
|
||||
"Save" : "Αποθήκευση",
|
||||
"Calendar server" : "Διακομιστής ημερολογίου",
|
||||
"Send invitations to attendees" : "Αποστολή προσκλήσεων στους συμμετέχοντες.",
|
||||
"Automatically generate a birthday calendar" : "Δημιουργία ημερολογίου γενεθλίων αυτόματα",
|
||||
|
|
@ -100,7 +101,6 @@
|
|||
"Please contact the organizer directly." : "Παρακαλώ επικοινωνήστε απ' ευθείας με τον διοργανωτή.",
|
||||
"Are you accepting the invitation?" : "Αποδέχεστε την πρόσκληση;",
|
||||
"Tentative" : "Δοκιμαστικό",
|
||||
"Save" : "Αποθήκευση",
|
||||
"Your attendance was updated successfully." : "Η παρουσία σας ενημερώθηκε με επιτυχία.",
|
||||
"Calendar and tasks" : "Ημερολόγιο και εργασίες"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ OC.L10N.register(
|
|||
"Tasks" : "Taskoj",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-finpunkto",
|
||||
"Save" : "Konservi",
|
||||
"Calendar server" : "Kalendara servilo",
|
||||
"Send invitations to attendees" : "Sendi invitojn al ĉeestantoj",
|
||||
"Automatically generate a birthday calendar" : "Aŭtomate estigi datrevenan kalendaron",
|
||||
|
|
@ -90,7 +91,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Bv. senpere kontakti la organizanton.",
|
||||
"Are you accepting the invitation?" : "Ĉu vi akceptas la inviton?",
|
||||
"Tentative" : "Nekonfirmita",
|
||||
"Save" : "Konservi",
|
||||
"Your attendance was updated successfully." : "Via ĉeesto sukcese ĝisdatiĝis."
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@
|
|||
"Tasks" : "Taskoj",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-finpunkto",
|
||||
"Save" : "Konservi",
|
||||
"Calendar server" : "Kalendara servilo",
|
||||
"Send invitations to attendees" : "Sendi invitojn al ĉeestantoj",
|
||||
"Automatically generate a birthday calendar" : "Aŭtomate estigi datrevenan kalendaron",
|
||||
|
|
@ -88,7 +89,6 @@
|
|||
"Please contact the organizer directly." : "Bv. senpere kontakti la organizanton.",
|
||||
"Are you accepting the invitation?" : "Ĉu vi akceptas la inviton?",
|
||||
"Tentative" : "Nekonfirmita",
|
||||
"Save" : "Konservi",
|
||||
"Your attendance was updated successfully." : "Via ĉeesto sukcese ĝisdatiĝis."
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Finaliza el %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Extremo de WebDAV",
|
||||
"Save" : "Guardar",
|
||||
"Calendar server" : "Servidor de calendario",
|
||||
"Send invitations to attendees" : "Enviar invitaciones a los asistentes",
|
||||
"Automatically generate a birthday calendar" : "Generar automáticamente un calendario de cumpleaños",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
"Tentative" : "Provisional",
|
||||
"Save" : "Guardar",
|
||||
"Your attendance was updated successfully." : "Tu asistencia se ha actualizado con éxito.",
|
||||
"Calendar and tasks" : "Calendario y tareas"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Finaliza el %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Extremo de WebDAV",
|
||||
"Save" : "Guardar",
|
||||
"Calendar server" : "Servidor de calendario",
|
||||
"Send invitations to attendees" : "Enviar invitaciones a los asistentes",
|
||||
"Automatically generate a birthday calendar" : "Generar automáticamente un calendario de cumpleaños",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
"Tentative" : "Provisional",
|
||||
"Save" : "Guardar",
|
||||
"Your attendance was updated successfully." : "Tu asistencia se ha actualizado con éxito.",
|
||||
"Calendar and tasks" : "Calendario y tareas"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "%s-(e)an epemuga",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV amaiera-puntua",
|
||||
"Save" : "Gorde",
|
||||
"Calendar server" : "Egutegi-zerbitzaria",
|
||||
"Send invitations to attendees" : "Gonbidatutakoei gonbidapenak bidali",
|
||||
"Automatically generate a birthday calendar" : "Automatikoki sortu urtebetetzeen egutegia",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.",
|
||||
"Are you accepting the invitation?" : "Gonbidapena onartzen duzu?",
|
||||
"Tentative" : "Behin behinekoa",
|
||||
"Save" : "Gorde",
|
||||
"Your attendance was updated successfully." : "Zure parte-hartzea ondo eguneratu da.",
|
||||
"Calendar and tasks" : "Egutegia eta atazak"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "%s-(e)an epemuga",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV amaiera-puntua",
|
||||
"Save" : "Gorde",
|
||||
"Calendar server" : "Egutegi-zerbitzaria",
|
||||
"Send invitations to attendees" : "Gonbidatutakoei gonbidapenak bidali",
|
||||
"Automatically generate a birthday calendar" : "Automatikoki sortu urtebetetzeen egutegia",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.",
|
||||
"Are you accepting the invitation?" : "Gonbidapena onartzen duzu?",
|
||||
"Tentative" : "Behin behinekoa",
|
||||
"Save" : "Gorde",
|
||||
"Your attendance was updated successfully." : "Zure parte-hartzea ondo eguneratu da.",
|
||||
"Calendar and tasks" : "Egutegia eta atazak"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@ OC.L10N.register(
|
|||
"Untitled task" : "Nimetön tehtävä",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-päätepiste",
|
||||
"Save" : "Tallenna",
|
||||
"Calendar server" : "Kalenteripalvelin",
|
||||
"Send invitations to attendees" : "Lähetä kutsut osallistujille",
|
||||
"Automatically generate a birthday calendar" : "Luo syntymäpäiväkalenteri automaattisesti",
|
||||
|
|
@ -117,7 +118,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Ota yhteys suoraan järjestäjään.",
|
||||
"Are you accepting the invitation?" : "Hyväksytkö kutsun?",
|
||||
"Tentative" : "Alustava",
|
||||
"Save" : "Tallenna",
|
||||
"Your attendance was updated successfully." : "Osallistumisesi päivitettiin onnistuneesti.",
|
||||
"Calendar and tasks" : "Kalenteri ja tehtävät"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@
|
|||
"Untitled task" : "Nimetön tehtävä",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-päätepiste",
|
||||
"Save" : "Tallenna",
|
||||
"Calendar server" : "Kalenteripalvelin",
|
||||
"Send invitations to attendees" : "Lähetä kutsut osallistujille",
|
||||
"Automatically generate a birthday calendar" : "Luo syntymäpäiväkalenteri automaattisesti",
|
||||
|
|
@ -115,7 +116,6 @@
|
|||
"Please contact the organizer directly." : "Ota yhteys suoraan järjestäjään.",
|
||||
"Are you accepting the invitation?" : "Hyväksytkö kutsun?",
|
||||
"Tentative" : "Alustava",
|
||||
"Save" : "Tallenna",
|
||||
"Your attendance was updated successfully." : "Osallistumisesi päivitettiin onnistuneesti.",
|
||||
"Calendar and tasks" : "Kalenteri ja tehtävät"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Echéance le %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Point d'accès WebDAV",
|
||||
"Save" : "Enregistrer",
|
||||
"Calendar server" : "Serveur de calendrier",
|
||||
"Send invitations to attendees" : "Envoyer des invitations aux participants",
|
||||
"Automatically generate a birthday calendar" : "Générer automatiquement un agenda d'anniversaire",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Merci de contacter l'organisateur directement.",
|
||||
"Are you accepting the invitation?" : "Acceptez-vous l'invitation ?",
|
||||
"Tentative" : "Provisoire",
|
||||
"Save" : "Enregistrer",
|
||||
"Your attendance was updated successfully." : "Votre présence a été mise à jour avec succès.",
|
||||
"Calendar and tasks" : "Agenda et tâches"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Echéance le %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Point d'accès WebDAV",
|
||||
"Save" : "Enregistrer",
|
||||
"Calendar server" : "Serveur de calendrier",
|
||||
"Send invitations to attendees" : "Envoyer des invitations aux participants",
|
||||
"Automatically generate a birthday calendar" : "Générer automatiquement un agenda d'anniversaire",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Merci de contacter l'organisateur directement.",
|
||||
"Are you accepting the invitation?" : "Acceptez-vous l'invitation ?",
|
||||
"Tentative" : "Provisoire",
|
||||
"Save" : "Enregistrer",
|
||||
"Your attendance was updated successfully." : "Votre présence a été mise à jour avec succès.",
|
||||
"Calendar and tasks" : "Agenda et tâches"
|
||||
},"pluralForm" :"nplurals=2; plural=(n > 1);"
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Caduca o %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Terminación WebDAV",
|
||||
"Save" : "Gardar",
|
||||
"Calendar server" : "Servidor do calendario",
|
||||
"Send invitations to attendees" : "Enviar convites aos asistentes",
|
||||
"Automatically generate a birthday calendar" : "Xerar automaticamente o calendario de aniversarios",
|
||||
|
|
@ -102,7 +103,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Contacte directamente co organizador.",
|
||||
"Are you accepting the invitation?" : "Acepta vostede o convite?",
|
||||
"Tentative" : "Tentativa",
|
||||
"Save" : "Gardar",
|
||||
"Your attendance was updated successfully." : "A súa asistencia foi actualizada satisfactoriamente.",
|
||||
"Calendar and tasks" : "Calendario e tarefas"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@
|
|||
"Due on %s" : "Caduca o %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Terminación WebDAV",
|
||||
"Save" : "Gardar",
|
||||
"Calendar server" : "Servidor do calendario",
|
||||
"Send invitations to attendees" : "Enviar convites aos asistentes",
|
||||
"Automatically generate a birthday calendar" : "Xerar automaticamente o calendario de aniversarios",
|
||||
|
|
@ -100,7 +101,6 @@
|
|||
"Please contact the organizer directly." : "Contacte directamente co organizador.",
|
||||
"Are you accepting the invitation?" : "Acepta vostede o convite?",
|
||||
"Tentative" : "Tentativa",
|
||||
"Save" : "Gardar",
|
||||
"Your attendance was updated successfully." : "A súa asistencia foi actualizada satisfactoriamente.",
|
||||
"Calendar and tasks" : "Calendario e tarefas"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ OC.L10N.register(
|
|||
"Completed on %s" : "הושלמה ב־%s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "נקודת קצה WebDAV",
|
||||
"Save" : "שמירה",
|
||||
"Calendar server" : "שרת לוח שנה",
|
||||
"Send invitations to attendees" : "שליחת הזמנות למשתתפים",
|
||||
"Automatically generate a birthday calendar" : "יצירת יומן ימי הולדת אוטומטית",
|
||||
|
|
@ -100,7 +101,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "נא ליצור קשר עם הגוף מארגן ישירות.",
|
||||
"Are you accepting the invitation?" : "האם להיענות להזמנה?",
|
||||
"Tentative" : "טנטטיבית",
|
||||
"Save" : "שמירה",
|
||||
"Your attendance was updated successfully." : "ההשתתפות שלך עודכנה בהצלחה.",
|
||||
"Calendar and tasks" : "לוח שנה ומשימות"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@
|
|||
"Completed on %s" : "הושלמה ב־%s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "נקודת קצה WebDAV",
|
||||
"Save" : "שמירה",
|
||||
"Calendar server" : "שרת לוח שנה",
|
||||
"Send invitations to attendees" : "שליחת הזמנות למשתתפים",
|
||||
"Automatically generate a birthday calendar" : "יצירת יומן ימי הולדת אוטומטית",
|
||||
|
|
@ -98,7 +99,6 @@
|
|||
"Please contact the organizer directly." : "נא ליצור קשר עם הגוף מארגן ישירות.",
|
||||
"Are you accepting the invitation?" : "האם להיענות להזמנה?",
|
||||
"Tentative" : "טנטטיבית",
|
||||
"Save" : "שמירה",
|
||||
"Your attendance was updated successfully." : "ההשתתפות שלך עודכנה בהצלחה.",
|
||||
"Calendar and tasks" : "לוח שנה ומשימות"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Treba završiti do %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV krajnja točka",
|
||||
"Save" : "Spremi",
|
||||
"Calendar server" : "Poslužitelj kalendara",
|
||||
"Send invitations to attendees" : "Pošaljite pozive sudionicima",
|
||||
"Automatically generate a birthday calendar" : "Automatski generiraj kalendar rođendana",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Izravno se obratite organizatoru.",
|
||||
"Are you accepting the invitation?" : "Prihvaćate li poziv?",
|
||||
"Tentative" : "Uvjetno",
|
||||
"Save" : "Spremi",
|
||||
"Your attendance was updated successfully." : "Vaša je prisutnost uspješno ažurirana.",
|
||||
"Calendar and tasks" : "Kalendar i zadaci"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Treba završiti do %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV krajnja točka",
|
||||
"Save" : "Spremi",
|
||||
"Calendar server" : "Poslužitelj kalendara",
|
||||
"Send invitations to attendees" : "Pošaljite pozive sudionicima",
|
||||
"Automatically generate a birthday calendar" : "Automatski generiraj kalendar rođendana",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Izravno se obratite organizatoru.",
|
||||
"Are you accepting the invitation?" : "Prihvaćate li poziv?",
|
||||
"Tentative" : "Uvjetno",
|
||||
"Save" : "Spremi",
|
||||
"Your attendance was updated successfully." : "Vaša je prisutnost uspješno ažurirana.",
|
||||
"Calendar and tasks" : "Kalendar i zadaci"
|
||||
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "%s időpontban esedékes",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV végpont",
|
||||
"Save" : "Mentés",
|
||||
"Calendar server" : "Naptár szerver",
|
||||
"Send invitations to attendees" : "Meghívó küldése a résztvevőknek",
|
||||
"Automatically generate a birthday calendar" : "Születésnapokat tartalmazó naptár automatikus létrehozása",
|
||||
|
|
@ -101,7 +102,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Kérlek vedd fel közvetlenül a kapcsolatot a szervezővel.",
|
||||
"Are you accepting the invitation?" : "Elfogadod az meghívást?",
|
||||
"Tentative" : "Valószínűleg",
|
||||
"Save" : "Mentés",
|
||||
"Your attendance was updated successfully." : "A részvételed frissítése sikerült.",
|
||||
"Calendar and tasks" : "Naptár és feladatok"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@
|
|||
"Due on %s" : "%s időpontban esedékes",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV végpont",
|
||||
"Save" : "Mentés",
|
||||
"Calendar server" : "Naptár szerver",
|
||||
"Send invitations to attendees" : "Meghívó küldése a résztvevőknek",
|
||||
"Automatically generate a birthday calendar" : "Születésnapokat tartalmazó naptár automatikus létrehozása",
|
||||
|
|
@ -99,7 +100,6 @@
|
|||
"Please contact the organizer directly." : "Kérlek vedd fel közvetlenül a kapcsolatot a szervezővel.",
|
||||
"Are you accepting the invitation?" : "Elfogadod az meghívást?",
|
||||
"Tentative" : "Valószínűleg",
|
||||
"Save" : "Mentés",
|
||||
"Your attendance was updated successfully." : "A részvételed frissítése sikerült.",
|
||||
"Calendar and tasks" : "Naptár és feladatok"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@ OC.L10N.register(
|
|||
"Untitled task" : "Ónefnt verkefni",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-endapunktur",
|
||||
"Save" : "Vista",
|
||||
"Calendar server" : "Dagatalaþjónn",
|
||||
"Send invitations to attendees" : "Senda boð til þátttakenda",
|
||||
"Automatically generate a birthday calendar" : "Útbúa fæðingardagatal sjálfvirkt",
|
||||
|
|
@ -88,7 +89,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Hafðu samband beint við skipuleggjendurna.",
|
||||
"Are you accepting the invitation?" : "Ætlar þú að samþykkja boðið?",
|
||||
"Tentative" : "Bráðabirgða",
|
||||
"Save" : "Vista",
|
||||
"Your attendance was updated successfully." : "Mætingarstaða þín var uppfærð."
|
||||
},
|
||||
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@
|
|||
"Untitled task" : "Ónefnt verkefni",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV-endapunktur",
|
||||
"Save" : "Vista",
|
||||
"Calendar server" : "Dagatalaþjónn",
|
||||
"Send invitations to attendees" : "Senda boð til þátttakenda",
|
||||
"Automatically generate a birthday calendar" : "Útbúa fæðingardagatal sjálfvirkt",
|
||||
|
|
@ -86,7 +87,6 @@
|
|||
"Please contact the organizer directly." : "Hafðu samband beint við skipuleggjendurna.",
|
||||
"Are you accepting the invitation?" : "Ætlar þú að samþykkja boðið?",
|
||||
"Tentative" : "Bráðabirgða",
|
||||
"Save" : "Vista",
|
||||
"Your attendance was updated successfully." : "Mætingarstaða þín var uppfærð."
|
||||
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
|
||||
}
|
||||
|
|
@ -92,6 +92,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Scade il %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Terminatore WebDAV",
|
||||
"Save" : "Salva",
|
||||
"Calendar server" : "Server di calendari",
|
||||
"Send invitations to attendees" : "Invia gli inviti ai partecipanti",
|
||||
"Automatically generate a birthday calendar" : "Genera automaticamente un calendario dei compleanni",
|
||||
|
|
@ -106,7 +107,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Contatta direttamente l'amministratore.",
|
||||
"Are you accepting the invitation?" : "Accetti l'invito?",
|
||||
"Tentative" : "Provvisorio",
|
||||
"Save" : "Salva",
|
||||
"Your attendance was updated successfully." : "La tua partecipazione è stata aggiornata correttamente.",
|
||||
"Calendar and tasks" : "Calendario e attività"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@
|
|||
"Due on %s" : "Scade il %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Terminatore WebDAV",
|
||||
"Save" : "Salva",
|
||||
"Calendar server" : "Server di calendari",
|
||||
"Send invitations to attendees" : "Invia gli inviti ai partecipanti",
|
||||
"Automatically generate a birthday calendar" : "Genera automaticamente un calendario dei compleanni",
|
||||
|
|
@ -104,7 +105,6 @@
|
|||
"Please contact the organizer directly." : "Contatta direttamente l'amministratore.",
|
||||
"Are you accepting the invitation?" : "Accetti l'invito?",
|
||||
"Tentative" : "Provvisorio",
|
||||
"Save" : "Salva",
|
||||
"Your attendance was updated successfully." : "La tua partecipazione è stata aggiornata correttamente.",
|
||||
"Calendar and tasks" : "Calendario e attività"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "期限日:%s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAVエンドポイント",
|
||||
"Save" : "保存",
|
||||
"Calendar server" : "カレンダーサーバー",
|
||||
"Send invitations to attendees" : "参加者に招待状を送信する",
|
||||
"Automatically generate a birthday calendar" : "自動的に誕生日カレンダーを生成する",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "主催者に直接お問い合わせください。",
|
||||
"Are you accepting the invitation?" : "招待を受け入れていますか?",
|
||||
"Tentative" : "暫定的",
|
||||
"Save" : "保存",
|
||||
"Your attendance was updated successfully." : "出席は正常に更新されました。",
|
||||
"Calendar and tasks" : "カレンダーとタスク"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "期限日:%s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAVエンドポイント",
|
||||
"Save" : "保存",
|
||||
"Calendar server" : "カレンダーサーバー",
|
||||
"Send invitations to attendees" : "参加者に招待状を送信する",
|
||||
"Automatically generate a birthday calendar" : "自動的に誕生日カレンダーを生成する",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "主催者に直接お問い合わせください。",
|
||||
"Are you accepting the invitation?" : "招待を受け入れていますか?",
|
||||
"Tentative" : "暫定的",
|
||||
"Save" : "保存",
|
||||
"Your attendance was updated successfully." : "出席は正常に更新されました。",
|
||||
"Calendar and tasks" : "カレンダーとタスク"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "만료일: %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV 종단점",
|
||||
"Save" : "저장",
|
||||
"Calendar server" : "달력 서버",
|
||||
"Send invitations to attendees" : "참석자에게 초대장 보내기",
|
||||
"Automatically generate a birthday calendar" : "자동으로 생일 달력 생성",
|
||||
|
|
@ -133,7 +134,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "주최자에게 직접 연락하십시오.",
|
||||
"Are you accepting the invitation?" : "초대를 수락하시겠습니까?",
|
||||
"Tentative" : "예정됨",
|
||||
"Save" : "저장",
|
||||
"Your attendance was updated successfully." : "참석 정보를 업데이트했습니다.",
|
||||
"Calendar and tasks" : "달력과 작업"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@
|
|||
"Due on %s" : "만료일: %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV 종단점",
|
||||
"Save" : "저장",
|
||||
"Calendar server" : "달력 서버",
|
||||
"Send invitations to attendees" : "참석자에게 초대장 보내기",
|
||||
"Automatically generate a birthday calendar" : "자동으로 생일 달력 생성",
|
||||
|
|
@ -131,7 +132,6 @@
|
|||
"Please contact the organizer directly." : "주최자에게 직접 연락하십시오.",
|
||||
"Are you accepting the invitation?" : "초대를 수락하시겠습니까?",
|
||||
"Tentative" : "예정됨",
|
||||
"Save" : "저장",
|
||||
"Your attendance was updated successfully." : "참석 정보를 업데이트했습니다.",
|
||||
"Calendar and tasks" : "달력과 작업"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ OC.L10N.register(
|
|||
"Tasks" : "Užduotys",
|
||||
"Untitled task" : "Užduotis be pavadinimo",
|
||||
"WebDAV" : "WebDAV",
|
||||
"Save" : "Įrašyti",
|
||||
"Calendar server" : "Kalendoriaus serveris",
|
||||
"Send invitations to attendees" : "Siųsti pakvietimus kviestiniams",
|
||||
"Automatically generate a birthday calendar" : "Automatiškai sukurti gimtadienių kalendorių",
|
||||
|
|
@ -107,7 +108,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Prašome susisiekti su organizatoriumi tiesiogiai.",
|
||||
"Are you accepting the invitation?" : "Ar priimate pakvietimą?",
|
||||
"Tentative" : "Preliminarus",
|
||||
"Save" : "Įrašyti",
|
||||
"Calendar and tasks" : "Kalendorius ir užduotys"
|
||||
},
|
||||
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@
|
|||
"Tasks" : "Užduotys",
|
||||
"Untitled task" : "Užduotis be pavadinimo",
|
||||
"WebDAV" : "WebDAV",
|
||||
"Save" : "Įrašyti",
|
||||
"Calendar server" : "Kalendoriaus serveris",
|
||||
"Send invitations to attendees" : "Siųsti pakvietimus kviestiniams",
|
||||
"Automatically generate a birthday calendar" : "Automatiškai sukurti gimtadienių kalendorių",
|
||||
|
|
@ -105,7 +106,6 @@
|
|||
"Please contact the organizer directly." : "Prašome susisiekti su organizatoriumi tiesiogiai.",
|
||||
"Are you accepting the invitation?" : "Ar priimate pakvietimą?",
|
||||
"Tentative" : "Preliminarus",
|
||||
"Save" : "Įrašyti",
|
||||
"Calendar and tasks" : "Kalendorius ir užduotys"
|
||||
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
|
||||
}
|
||||
|
|
@ -88,6 +88,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Истекува на %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV крајна точка",
|
||||
"Save" : "Зачувај",
|
||||
"Calendar server" : "Календар сервер",
|
||||
"Send invitations to attendees" : "Испрати покани на учесниците",
|
||||
"Automatically generate a birthday calendar" : "Автоматско генерирање на календар со родендени",
|
||||
|
|
@ -102,7 +103,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Контактирајте го организаторот директно.",
|
||||
"Are you accepting the invitation?" : "Дали ја прифаќате поканата?",
|
||||
"Tentative" : "Прелиминарно",
|
||||
"Save" : "Зачувај",
|
||||
"Your attendance was updated successfully." : "Вашето присуство е успешно ажурирано.",
|
||||
"Calendar and tasks" : "Календар и задачи"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@
|
|||
"Due on %s" : "Истекува на %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV крајна точка",
|
||||
"Save" : "Зачувај",
|
||||
"Calendar server" : "Календар сервер",
|
||||
"Send invitations to attendees" : "Испрати покани на учесниците",
|
||||
"Automatically generate a birthday calendar" : "Автоматско генерирање на календар со родендени",
|
||||
|
|
@ -100,7 +101,6 @@
|
|||
"Please contact the organizer directly." : "Контактирајте го организаторот директно.",
|
||||
"Are you accepting the invitation?" : "Дали ја прифаќате поканата?",
|
||||
"Tentative" : "Прелиминарно",
|
||||
"Save" : "Зачувај",
|
||||
"Your attendance was updated successfully." : "Вашето присуство е успешно ажурирано.",
|
||||
"Calendar and tasks" : "Календар и задачи"
|
||||
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Forfaller på %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV endepunkt",
|
||||
"Save" : "Lagre",
|
||||
"Calendar server" : "Kalenderserver",
|
||||
"Send invitations to attendees" : "Send invitasjoner til oppmøtte",
|
||||
"Automatically generate a birthday calendar" : "Lag fødelsdagskalender automatisk",
|
||||
|
|
@ -102,7 +103,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Ta kontakt med arrangøren direkte.",
|
||||
"Are you accepting the invitation?" : "Aksepterer du invitasjonen?",
|
||||
"Tentative" : "Foreløpig",
|
||||
"Save" : "Lagre",
|
||||
"Your attendance was updated successfully." : "Deltakelsen din ble oppdatert.",
|
||||
"Calendar and tasks" : "Kalender og oppgaver"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@
|
|||
"Due on %s" : "Forfaller på %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV endepunkt",
|
||||
"Save" : "Lagre",
|
||||
"Calendar server" : "Kalenderserver",
|
||||
"Send invitations to attendees" : "Send invitasjoner til oppmøtte",
|
||||
"Automatically generate a birthday calendar" : "Lag fødelsdagskalender automatisk",
|
||||
|
|
@ -100,7 +101,6 @@
|
|||
"Please contact the organizer directly." : "Ta kontakt med arrangøren direkte.",
|
||||
"Are you accepting the invitation?" : "Aksepterer du invitasjonen?",
|
||||
"Tentative" : "Foreløpig",
|
||||
"Save" : "Lagre",
|
||||
"Your attendance was updated successfully." : "Deltakelsen din ble oppdatert.",
|
||||
"Calendar and tasks" : "Kalender og oppgaver"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Verwacht op %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV eindpunt",
|
||||
"Save" : "Opslaan",
|
||||
"Calendar server" : "Agendaserver",
|
||||
"Send invitations to attendees" : "Verzend uitnodigingen naar deelnemers",
|
||||
"Automatically generate a birthday calendar" : "Genereer verjaardagskalender automatisch",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Neem rechtstreeks contact op met de organisator.",
|
||||
"Are you accepting the invitation?" : "Neem je de uitnodiging aan?",
|
||||
"Tentative" : "Onder voorbehoud",
|
||||
"Save" : "Opslaan",
|
||||
"Your attendance was updated successfully." : "Je deelname is succesvol bijgewerkt.",
|
||||
"Calendar and tasks" : "Agenda en taken"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Verwacht op %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV eindpunt",
|
||||
"Save" : "Opslaan",
|
||||
"Calendar server" : "Agendaserver",
|
||||
"Send invitations to attendees" : "Verzend uitnodigingen naar deelnemers",
|
||||
"Automatically generate a birthday calendar" : "Genereer verjaardagskalender automatisch",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Neem rechtstreeks contact op met de organisator.",
|
||||
"Are you accepting the invitation?" : "Neem je de uitnodiging aan?",
|
||||
"Tentative" : "Onder voorbehoud",
|
||||
"Save" : "Opslaan",
|
||||
"Your attendance was updated successfully." : "Je deelname is succesvol bijgewerkt.",
|
||||
"Calendar and tasks" : "Agenda en taken"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Na dzień %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Adres WebDAV",
|
||||
"Save" : "Zapisz",
|
||||
"Calendar server" : "Serwer kalendarza",
|
||||
"Send invitations to attendees" : "Wyślij zaproszenia do uczestników",
|
||||
"Automatically generate a birthday calendar" : "Automatycznie generuj kalendarz urodzin",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Skontaktuj się bezpośrednio z orgnizatorem.",
|
||||
"Are you accepting the invitation?" : "Czy akceptujesz zaproszenie?",
|
||||
"Tentative" : "Niepewne",
|
||||
"Save" : "Zapisz",
|
||||
"Your attendance was updated successfully." : "Twoja obecność została pomyślnie zaktualizowana.",
|
||||
"Calendar and tasks" : "Kalendarz i zadania"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Na dzień %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Adres WebDAV",
|
||||
"Save" : "Zapisz",
|
||||
"Calendar server" : "Serwer kalendarza",
|
||||
"Send invitations to attendees" : "Wyślij zaproszenia do uczestników",
|
||||
"Automatically generate a birthday calendar" : "Automatycznie generuj kalendarz urodzin",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Skontaktuj się bezpośrednio z orgnizatorem.",
|
||||
"Are you accepting the invitation?" : "Czy akceptujesz zaproszenie?",
|
||||
"Tentative" : "Niepewne",
|
||||
"Save" : "Zapisz",
|
||||
"Your attendance was updated successfully." : "Twoja obecność została pomyślnie zaktualizowana.",
|
||||
"Calendar and tasks" : "Kalendarz i zadania"
|
||||
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Vence em %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Endpoint WebDAV",
|
||||
"Save" : "Salvar",
|
||||
"Calendar server" : "Servidor de calendário",
|
||||
"Send invitations to attendees" : "Enviar convites aos participantes",
|
||||
"Automatically generate a birthday calendar" : "Gerar um calendário de aniversários automaticamente",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Por favor, contate o organizador diretamente.",
|
||||
"Are you accepting the invitation?" : "Você está aceitando o convite?",
|
||||
"Tentative" : "Tentativa",
|
||||
"Save" : "Salvar",
|
||||
"Your attendance was updated successfully." : "Sua presença foi atualizada com sucesso.",
|
||||
"Calendar and tasks" : "Calendário e tarefas"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Vence em %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Endpoint WebDAV",
|
||||
"Save" : "Salvar",
|
||||
"Calendar server" : "Servidor de calendário",
|
||||
"Send invitations to attendees" : "Enviar convites aos participantes",
|
||||
"Automatically generate a birthday calendar" : "Gerar um calendário de aniversários automaticamente",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Por favor, contate o organizador diretamente.",
|
||||
"Are you accepting the invitation?" : "Você está aceitando o convite?",
|
||||
"Tentative" : "Tentativa",
|
||||
"Save" : "Salvar",
|
||||
"Your attendance was updated successfully." : "Sua presença foi atualizada com sucesso.",
|
||||
"Calendar and tasks" : "Calendário e tarefas"
|
||||
},"pluralForm" :"nplurals=2; plural=(n > 1);"
|
||||
|
|
|
|||
|
|
@ -120,6 +120,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "До %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "точка подключения WebDAV",
|
||||
"Save" : "Сохранить",
|
||||
"Calendar server" : "Сервер календаря",
|
||||
"Send invitations to attendees" : "Отправить приглашения",
|
||||
"Automatically generate a birthday calendar" : "Создавать календарь дней рождения автоматически",
|
||||
|
|
@ -134,7 +135,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Обратитесь к организатору напрямую.",
|
||||
"Are you accepting the invitation?" : "Принять приглашение?",
|
||||
"Tentative" : "Под вопросом",
|
||||
"Save" : "Сохранить",
|
||||
"Your attendance was updated successfully." : "Статус участия обновлён.",
|
||||
"Calendar and tasks" : "Календарь и задачи"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@
|
|||
"Due on %s" : "До %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "точка подключения WebDAV",
|
||||
"Save" : "Сохранить",
|
||||
"Calendar server" : "Сервер календаря",
|
||||
"Send invitations to attendees" : "Отправить приглашения",
|
||||
"Automatically generate a birthday calendar" : "Создавать календарь дней рождения автоматически",
|
||||
|
|
@ -132,7 +133,6 @@
|
|||
"Please contact the organizer directly." : "Обратитесь к организатору напрямую.",
|
||||
"Are you accepting the invitation?" : "Принять приглашение?",
|
||||
"Tentative" : "Под вопросом",
|
||||
"Save" : "Сохранить",
|
||||
"Your attendance was updated successfully." : "Статус участия обновлён.",
|
||||
"Calendar and tasks" : "Календарь и задачи"
|
||||
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "iscadet su %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "puntu finale WebDAV ",
|
||||
"Save" : "Sarva",
|
||||
"Calendar server" : "Serbidore calendàriu",
|
||||
"Send invitations to attendees" : "Imbia invitos de partetzipatziones",
|
||||
"Automatically generate a birthday calendar" : "Gènera in automàticu su calendàriu de cumpleannos",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Pro praghere, cuntata deretu a s'organizadore.",
|
||||
"Are you accepting the invitation?" : "Cheres atzetare s'invitu?",
|
||||
"Tentative" : "Intentu",
|
||||
"Save" : "Sarva",
|
||||
"Your attendance was updated successfully." : "Sa partetzipatzione tua est istada agiornada in manera curreta.",
|
||||
"Calendar and tasks" : "Calendàrios e fainas"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "iscadet su %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "puntu finale WebDAV ",
|
||||
"Save" : "Sarva",
|
||||
"Calendar server" : "Serbidore calendàriu",
|
||||
"Send invitations to attendees" : "Imbia invitos de partetzipatziones",
|
||||
"Automatically generate a birthday calendar" : "Gènera in automàticu su calendàriu de cumpleannos",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Pro praghere, cuntata deretu a s'organizadore.",
|
||||
"Are you accepting the invitation?" : "Cheres atzetare s'invitu?",
|
||||
"Tentative" : "Intentu",
|
||||
"Save" : "Sarva",
|
||||
"Your attendance was updated successfully." : "Sa partetzipatzione tua est istada agiornada in manera curreta.",
|
||||
"Calendar and tasks" : "Calendàrios e fainas"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Termín do %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Koncový bod WebDAV",
|
||||
"Save" : "Uložiť",
|
||||
"Calendar server" : "Kalendárový server",
|
||||
"Send invitations to attendees" : "Odoslanie pozvánok účastníkom",
|
||||
"Automatically generate a birthday calendar" : "Automaticky generovať narodeninový kalendár",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Prosím kontaktujte priamo organizátora.",
|
||||
"Are you accepting the invitation?" : "Príjmate pozvánku?",
|
||||
"Tentative" : "Neistý",
|
||||
"Save" : "Uložiť",
|
||||
"Your attendance was updated successfully." : "Vaša účasť bola aktualizovaná úspešne.",
|
||||
"Calendar and tasks" : "Kalendár a úlohy"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "Termín do %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Koncový bod WebDAV",
|
||||
"Save" : "Uložiť",
|
||||
"Calendar server" : "Kalendárový server",
|
||||
"Send invitations to attendees" : "Odoslanie pozvánok účastníkom",
|
||||
"Automatically generate a birthday calendar" : "Automaticky generovať narodeninový kalendár",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Prosím kontaktujte priamo organizátora.",
|
||||
"Are you accepting the invitation?" : "Príjmate pozvánku?",
|
||||
"Tentative" : "Neistý",
|
||||
"Save" : "Uložiť",
|
||||
"Your attendance was updated successfully." : "Vaša účasť bola aktualizovaná úspešne.",
|
||||
"Calendar and tasks" : "Kalendár a úlohy"
|
||||
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Poteče %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Končna točka WebDAV",
|
||||
"Save" : "Shrani",
|
||||
"Calendar server" : "Strežnik koledarja",
|
||||
"Send invitations to attendees" : "Pošlji povabilo udeležencem",
|
||||
"Automatically generate a birthday calendar" : "Samodejno ustvari koledar rojstnih dni",
|
||||
|
|
@ -103,7 +104,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Z organizatorjem stopite v stik neposredno.",
|
||||
"Are you accepting the invitation?" : "Ali želite sprejeti povabilo?",
|
||||
"Tentative" : "Začasno",
|
||||
"Save" : "Shrani",
|
||||
"Your attendance was updated successfully." : "Vaša prisotnost je uspešno posodobljena.",
|
||||
"Calendar and tasks" : "Koledar in naloge"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@
|
|||
"Due on %s" : "Poteče %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Končna točka WebDAV",
|
||||
"Save" : "Shrani",
|
||||
"Calendar server" : "Strežnik koledarja",
|
||||
"Send invitations to attendees" : "Pošlji povabilo udeležencem",
|
||||
"Automatically generate a birthday calendar" : "Samodejno ustvari koledar rojstnih dni",
|
||||
|
|
@ -101,7 +102,6 @@
|
|||
"Please contact the organizer directly." : "Z organizatorjem stopite v stik neposredno.",
|
||||
"Are you accepting the invitation?" : "Ali želite sprejeti povabilo?",
|
||||
"Tentative" : "Začasno",
|
||||
"Save" : "Shrani",
|
||||
"Your attendance was updated successfully." : "Vaša prisotnost je uspešno posodobljena.",
|
||||
"Calendar and tasks" : "Koledar in naloge"
|
||||
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Рок је %s",
|
||||
"WebDAV" : "ВебДАВ",
|
||||
"WebDAV endpoint" : "WebDAV крајња тачка",
|
||||
"Save" : "Сачувај",
|
||||
"Calendar server" : "Календар сервера",
|
||||
"Send invitations to attendees" : "Пошаљи позивницу учесницима",
|
||||
"Automatically generate a birthday calendar" : "Аутоматски изгенериши календар рођендана",
|
||||
|
|
@ -102,7 +103,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Контактирајте директно организатора.",
|
||||
"Are you accepting the invitation?" : "Да ли прихватате позивницу?",
|
||||
"Tentative" : "Условна потврда",
|
||||
"Save" : "Сачувај",
|
||||
"Your attendance was updated successfully." : "Ваше присуство је успешно ажурирано.",
|
||||
"Calendar and tasks" : "Календар и задаци"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@
|
|||
"Due on %s" : "Рок је %s",
|
||||
"WebDAV" : "ВебДАВ",
|
||||
"WebDAV endpoint" : "WebDAV крајња тачка",
|
||||
"Save" : "Сачувај",
|
||||
"Calendar server" : "Календар сервера",
|
||||
"Send invitations to attendees" : "Пошаљи позивницу учесницима",
|
||||
"Automatically generate a birthday calendar" : "Аутоматски изгенериши календар рођендана",
|
||||
|
|
@ -100,7 +101,6 @@
|
|||
"Please contact the organizer directly." : "Контактирајте директно организатора.",
|
||||
"Are you accepting the invitation?" : "Да ли прихватате позивницу?",
|
||||
"Tentative" : "Условна потврда",
|
||||
"Save" : "Сачувај",
|
||||
"Your attendance was updated successfully." : "Ваше присуство је успешно ажурирано.",
|
||||
"Calendar and tasks" : "Календар и задаци"
|
||||
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "Slutar den %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV endpoint",
|
||||
"Save" : "Spara",
|
||||
"Calendar server" : "Kalenderserver",
|
||||
"Send invitations to attendees" : "Skicka inbjudan till deltagare",
|
||||
"Automatically generate a birthday calendar" : "Generera en födelsedagskalender automatiskt",
|
||||
|
|
@ -132,7 +133,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Vänligen kontakta arrangören direkt.",
|
||||
"Are you accepting the invitation?" : "Acceptera inbjudan?",
|
||||
"Tentative" : "Preliminärt",
|
||||
"Save" : "Spara",
|
||||
"Your attendance was updated successfully." : "Dina närvaro uppdaterades.",
|
||||
"Calendar and tasks" : "Kalender och uppgifter"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@
|
|||
"Due on %s" : "Slutar den %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV endpoint",
|
||||
"Save" : "Spara",
|
||||
"Calendar server" : "Kalenderserver",
|
||||
"Send invitations to attendees" : "Skicka inbjudan till deltagare",
|
||||
"Automatically generate a birthday calendar" : "Generera en födelsedagskalender automatiskt",
|
||||
|
|
@ -130,7 +131,6 @@
|
|||
"Please contact the organizer directly." : "Vänligen kontakta arrangören direkt.",
|
||||
"Are you accepting the invitation?" : "Acceptera inbjudan?",
|
||||
"Tentative" : "Preliminärt",
|
||||
"Save" : "Spara",
|
||||
"Your attendance was updated successfully." : "Dina närvaro uppdaterades.",
|
||||
"Calendar and tasks" : "Kalender och uppgifter"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "%s tarihine kadar",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV bağlantı noktası",
|
||||
"Save" : "Kaydet",
|
||||
"Calendar server" : "Takvim sunucusu",
|
||||
"Send invitations to attendees" : "Katılımcılara çağrıları gönder",
|
||||
"Automatically generate a birthday calendar" : "Doğum günü takvimi otomatik oluşturulsun",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Lütfen düzenleyici ile doğrudan görüşün.",
|
||||
"Are you accepting the invitation?" : "Çağrıyı kabul ediyor musunuz?",
|
||||
"Tentative" : "Kesin değil",
|
||||
"Save" : "Kaydet",
|
||||
"Your attendance was updated successfully." : "Katılımınız güncellendi.",
|
||||
"Calendar and tasks" : "Takvim ve görevler"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "%s tarihine kadar",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV bağlantı noktası",
|
||||
"Save" : "Kaydet",
|
||||
"Calendar server" : "Takvim sunucusu",
|
||||
"Send invitations to attendees" : "Katılımcılara çağrıları gönder",
|
||||
"Automatically generate a birthday calendar" : "Doğum günü takvimi otomatik oluşturulsun",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "Lütfen düzenleyici ile doğrudan görüşün.",
|
||||
"Are you accepting the invitation?" : "Çağrıyı kabul ediyor musunuz?",
|
||||
"Tentative" : "Kesin değil",
|
||||
"Save" : "Kaydet",
|
||||
"Your attendance was updated successfully." : "Katılımınız güncellendi.",
|
||||
"Calendar and tasks" : "Takvim ve görevler"
|
||||
},"pluralForm" :"nplurals=2; plural=(n > 1);"
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ OC.L10N.register(
|
|||
"Untitled task" : "Завдання без назви",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Точка доступу WebDAV",
|
||||
"Save" : "Зберегти",
|
||||
"Calendar server" : "Сервер календаря",
|
||||
"Send invitations to attendees" : "Надіслати запрошення учасникам",
|
||||
"Automatically generate a birthday calendar" : "Автоматично згенерувати календар днів народження",
|
||||
|
|
@ -93,7 +94,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "Будь-ласка повідомте організатора.",
|
||||
"Are you accepting the invitation?" : "Чи приймаєте ви запрошення?",
|
||||
"Tentative" : "Попередній",
|
||||
"Save" : "Зберегти",
|
||||
"Your attendance was updated successfully." : "Ваша участь успішно оновлена."
|
||||
},
|
||||
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@
|
|||
"Untitled task" : "Завдання без назви",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "Точка доступу WebDAV",
|
||||
"Save" : "Зберегти",
|
||||
"Calendar server" : "Сервер календаря",
|
||||
"Send invitations to attendees" : "Надіслати запрошення учасникам",
|
||||
"Automatically generate a birthday calendar" : "Автоматично згенерувати календар днів народження",
|
||||
|
|
@ -91,7 +92,6 @@
|
|||
"Please contact the organizer directly." : "Будь-ласка повідомте організатора.",
|
||||
"Are you accepting the invitation?" : "Чи приймаєте ви запрошення?",
|
||||
"Tentative" : "Попередній",
|
||||
"Save" : "Зберегти",
|
||||
"Your attendance was updated successfully." : "Ваша участь успішно оновлена."
|
||||
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
|
||||
}
|
||||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "到期于%s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV端点",
|
||||
"Save" : "保存",
|
||||
"Calendar server" : "日历服务器",
|
||||
"Send invitations to attendees" : "向与会者发送邀请",
|
||||
"Automatically generate a birthday calendar" : "自动生成生日日历",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "请直接联系组织者。",
|
||||
"Are you accepting the invitation?" : "您是否接受邀请?",
|
||||
"Tentative" : "暂定",
|
||||
"Save" : "保存",
|
||||
"Your attendance was updated successfully." : "您的出席状态更新成功。",
|
||||
"Calendar and tasks" : "日历和任务"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "到期于%s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV端点",
|
||||
"Save" : "保存",
|
||||
"Calendar server" : "日历服务器",
|
||||
"Send invitations to attendees" : "向与会者发送邀请",
|
||||
"Automatically generate a birthday calendar" : "自动生成生日日历",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "请直接联系组织者。",
|
||||
"Are you accepting the invitation?" : "您是否接受邀请?",
|
||||
"Tentative" : "暂定",
|
||||
"Save" : "保存",
|
||||
"Your attendance was updated successfully." : "您的出席状态更新成功。",
|
||||
"Calendar and tasks" : "日历和任务"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "完成日期 %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV 端點",
|
||||
"Save" : "儲存",
|
||||
"Calendar server" : "日曆伺服器",
|
||||
"Send invitations to attendees" : "發送邀請函給參加者",
|
||||
"Automatically generate a birthday calendar" : "自動建立生日日曆",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "請直接聯繫絡主辦人",
|
||||
"Are you accepting the invitation?" : "接受邀請嗎?",
|
||||
"Tentative" : "暫定",
|
||||
"Save" : "儲存",
|
||||
"Your attendance was updated successfully." : "您的參與狀況成功更新",
|
||||
"Calendar and tasks" : "日曆和任務"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "完成日期 %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV 端點",
|
||||
"Save" : "儲存",
|
||||
"Calendar server" : "日曆伺服器",
|
||||
"Send invitations to attendees" : "發送邀請函給參加者",
|
||||
"Automatically generate a birthday calendar" : "自動建立生日日曆",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "請直接聯繫絡主辦人",
|
||||
"Are you accepting the invitation?" : "接受邀請嗎?",
|
||||
"Tentative" : "暫定",
|
||||
"Save" : "儲存",
|
||||
"Your attendance was updated successfully." : "您的參與狀況成功更新",
|
||||
"Calendar and tasks" : "日曆和任務"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ OC.L10N.register(
|
|||
"Due on %s" : "到期於 %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV 端點",
|
||||
"Save" : "儲存",
|
||||
"Calendar server" : "日曆伺服器",
|
||||
"Send invitations to attendees" : "發送邀請函給參加者",
|
||||
"Automatically generate a birthday calendar" : "自動生成生日日曆",
|
||||
|
|
@ -135,7 +136,6 @@ OC.L10N.register(
|
|||
"Please contact the organizer directly." : "請直接聯絡主辦人。",
|
||||
"Are you accepting the invitation?" : "您接受邀請嗎?",
|
||||
"Tentative" : "暫定",
|
||||
"Save" : "儲存",
|
||||
"Your attendance was updated successfully." : "您的參與狀態成功更新。",
|
||||
"Calendar and tasks" : "日曆與工作項目"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@
|
|||
"Due on %s" : "到期於 %s",
|
||||
"WebDAV" : "WebDAV",
|
||||
"WebDAV endpoint" : "WebDAV 端點",
|
||||
"Save" : "儲存",
|
||||
"Calendar server" : "日曆伺服器",
|
||||
"Send invitations to attendees" : "發送邀請函給參加者",
|
||||
"Automatically generate a birthday calendar" : "自動生成生日日曆",
|
||||
|
|
@ -133,7 +134,6 @@
|
|||
"Please contact the organizer directly." : "請直接聯絡主辦人。",
|
||||
"Are you accepting the invitation?" : "您接受邀請嗎?",
|
||||
"Tentative" : "暫定",
|
||||
"Save" : "儲存",
|
||||
"Your attendance was updated successfully." : "您的參與狀態成功更新。",
|
||||
"Calendar and tasks" : "日曆與工作項目"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
|
|
|
|||
100
apps/dav/lib/BulkUpload/BulkUploadPlugin.php
Normal file
100
apps/dav/lib/BulkUpload/BulkUploadPlugin.php
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021, Louis Chemineau <louis@chmn.me>
|
||||
*
|
||||
* @author Louis Chemineau <louis@chmn.me>
|
||||
*
|
||||
* @license AGPL-3.0
|
||||
*
|
||||
* This code is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License, version 3,
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\DAV\BulkUpload;
|
||||
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Sabre\DAV\Server;
|
||||
use Sabre\DAV\ServerPlugin;
|
||||
use Sabre\HTTP\RequestInterface;
|
||||
use Sabre\HTTP\ResponseInterface;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\AppFramework\Http;
|
||||
|
||||
class BulkUploadPlugin extends ServerPlugin {
|
||||
|
||||
/** @var Folder */
|
||||
private $userFolder;
|
||||
|
||||
/** @var LoggerInterface */
|
||||
private $logger;
|
||||
|
||||
public function __construct(Folder $userFolder, LoggerInterface $logger) {
|
||||
$this->userFolder = $userFolder;
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register listener on POST requests with the httpPost method.
|
||||
*/
|
||||
public function initialize(Server $server): void {
|
||||
$server->on('method:POST', [$this, 'httpPost'], 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle POST requests on /dav/bulk
|
||||
* - parsing is done with a MultipartContentsParser object
|
||||
* - writing is done with the userFolder service
|
||||
*
|
||||
* Will respond with an object containing an ETag for every written files.
|
||||
*/
|
||||
public function httpPost(RequestInterface $request, ResponseInterface $response): bool {
|
||||
// Limit bulk upload to the /dav/bulk endpoint
|
||||
if ($request->getPath() !== "bulk") {
|
||||
return true;
|
||||
}
|
||||
|
||||
$multiPartParser = new MultipartRequestParser($request);
|
||||
$writtenFiles = [];
|
||||
|
||||
while (!$multiPartParser->isAtLastBoundary()) {
|
||||
try {
|
||||
[$headers, $content] = $multiPartParser->parseNextPart();
|
||||
} catch (\Exception $e) {
|
||||
// Return early if an error occurs during parsing.
|
||||
$this->logger->error($e->getMessage());
|
||||
$response->setStatus(Http::STATUS_BAD_REQUEST);
|
||||
$response->setBody(json_encode($writtenFiles));
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
$node = $this->userFolder->newFile($headers['x-file-path'], $content);
|
||||
$writtenFiles[$headers['x-file-path']] = [
|
||||
"error" => false,
|
||||
"etag" => $node->getETag(),
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
$this->logger->error($e->getMessage(), ['path' => $headers['x-file-path']]);
|
||||
$writtenFiles[$headers['x-file-path']] = [
|
||||
"error" => true,
|
||||
"message" => $e->getMessage(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$response->setStatus(Http::STATUS_OK);
|
||||
$response->setBody(json_encode($writtenFiles));
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
239
apps/dav/lib/BulkUpload/MultipartRequestParser.php
Normal file
239
apps/dav/lib/BulkUpload/MultipartRequestParser.php
Normal file
|
|
@ -0,0 +1,239 @@
|
|||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021, Louis Chemineau <louis@chmn.me>
|
||||
*
|
||||
* @author Louis Chemineau <louis@chmn.me>
|
||||
*
|
||||
* @license AGPL-3.0
|
||||
*
|
||||
* This code is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License, version 3,
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\DAV\BulkUpload;
|
||||
|
||||
use Sabre\HTTP\RequestInterface;
|
||||
use Sabre\DAV\Exception;
|
||||
use Sabre\DAV\Exception\BadRequest;
|
||||
use Sabre\DAV\Exception\LengthRequired;
|
||||
use OCP\AppFramework\Http;
|
||||
|
||||
class MultipartRequestParser {
|
||||
|
||||
/** @var resource */
|
||||
private $stream;
|
||||
|
||||
/** @var string */
|
||||
private $boundary = "";
|
||||
|
||||
/** @var string */
|
||||
private $lastBoundary = "";
|
||||
|
||||
/**
|
||||
* @throws BadRequest
|
||||
*/
|
||||
public function __construct(RequestInterface $request) {
|
||||
$stream = $request->getBody();
|
||||
$contentType = $request->getHeader('Content-Type');
|
||||
|
||||
if (!is_resource($stream)) {
|
||||
throw new BadRequest('Body should be of type resource');
|
||||
}
|
||||
|
||||
if ($contentType === null) {
|
||||
throw new BadRequest("Content-Type can not be null");
|
||||
}
|
||||
|
||||
$this->stream = $stream;
|
||||
|
||||
$boundary = $this->parseBoundaryFromHeaders($contentType);
|
||||
$this->boundary = '--'.$boundary."\r\n";
|
||||
$this->lastBoundary = '--'.$boundary."--\r\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the boundary from the Content-Type header.
|
||||
* Example: Content-Type: "multipart/related; boundary=boundary_bf38b9b4b10a303a28ed075624db3978"
|
||||
*
|
||||
* @throws BadRequest
|
||||
*/
|
||||
private function parseBoundaryFromHeaders(string $contentType): string {
|
||||
try {
|
||||
[$mimeType, $boundary] = explode(';', $contentType);
|
||||
[$boundaryKey, $boundaryValue] = explode('=', $boundary);
|
||||
} catch (\Exception $e) {
|
||||
throw new BadRequest("Error while parsing boundary in Content-Type header.", Http::STATUS_BAD_REQUEST, $e);
|
||||
}
|
||||
|
||||
$boundaryValue = trim($boundaryValue);
|
||||
|
||||
// Remove potential quotes around boundary value.
|
||||
if (substr($boundaryValue, 0, 1) == '"' && substr($boundaryValue, -1) == '"') {
|
||||
$boundaryValue = substr($boundaryValue, 1, -1);
|
||||
}
|
||||
|
||||
if (trim($mimeType) !== 'multipart/related') {
|
||||
throw new BadRequest('Content-Type must be multipart/related');
|
||||
}
|
||||
|
||||
if (trim($boundaryKey) !== 'boundary') {
|
||||
throw new BadRequest('Boundary is invalid');
|
||||
}
|
||||
|
||||
return $boundaryValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the stream's cursor is sitting right before the provided string.
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
private function isAt(string $expectedContent): bool {
|
||||
$expectedContentLength = strlen($expectedContent);
|
||||
|
||||
$content = fread($this->stream, $expectedContentLength);
|
||||
if ($content === false) {
|
||||
throw new Exception('An error occurred while checking content');
|
||||
}
|
||||
|
||||
$seekBackResult = fseek($this->stream, -$expectedContentLength, SEEK_CUR);
|
||||
if ($seekBackResult === -1) {
|
||||
throw new Exception("Unknown error while seeking content", Http::STATUS_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
return $expectedContent === $content;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check whether the stream's cursor is sitting right before the boundary.
|
||||
*/
|
||||
private function isAtBoundary(): bool {
|
||||
return $this->isAt($this->boundary);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the stream's cursor is sitting right before the last boundary.
|
||||
*/
|
||||
public function isAtLastBoundary(): bool {
|
||||
return $this->isAt($this->lastBoundary);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse and return the next part of the multipart headers.
|
||||
*
|
||||
* Example:
|
||||
* --boundary_azertyuiop
|
||||
* Header1: value
|
||||
* Header2: value
|
||||
*
|
||||
* Content of
|
||||
* the part
|
||||
*
|
||||
*/
|
||||
public function parseNextPart(): array {
|
||||
$this->readBoundary();
|
||||
|
||||
$headers = $this->readPartHeaders();
|
||||
|
||||
$content = $this->readPartContent($headers["content-length"], $headers["x-file-md5"]);
|
||||
|
||||
return [$headers, $content];
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the boundary and check its content.
|
||||
*
|
||||
* @throws BadRequest
|
||||
*/
|
||||
private function readBoundary(): string {
|
||||
if (!$this->isAtBoundary()) {
|
||||
throw new BadRequest("Boundary not found where it should be.");
|
||||
}
|
||||
|
||||
return fread($this->stream, strlen($this->boundary));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the headers of a part of the multipart body.
|
||||
*
|
||||
* @throws Exception
|
||||
* @throws BadRequest
|
||||
* @throws LengthRequired
|
||||
*/
|
||||
private function readPartHeaders(): array {
|
||||
$headers = [];
|
||||
|
||||
while (($line = fgets($this->stream)) !== "\r\n") {
|
||||
if ($line === false) {
|
||||
throw new Exception('An error occurred while reading headers of a part');
|
||||
}
|
||||
|
||||
try {
|
||||
[$key, $value] = explode(':', $line, 2);
|
||||
$headers[strtolower(trim($key))] = trim($value);
|
||||
} catch (\Exception $e) {
|
||||
throw new BadRequest('An error occurred while parsing headers of a part', Http::STATUS_BAD_REQUEST, $e);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($headers["content-length"])) {
|
||||
throw new LengthRequired("The Content-Length header must not be null.");
|
||||
}
|
||||
|
||||
if (!isset($headers["x-file-md5"])) {
|
||||
throw new BadRequest("The X-File-MD5 header must not be null.");
|
||||
}
|
||||
|
||||
return $headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the content of a part of the multipart body.
|
||||
*
|
||||
* @throws Exception
|
||||
* @throws BadRequest
|
||||
*/
|
||||
private function readPartContent(int $length, string $md5): string {
|
||||
$computedMd5 = $this->computeMd5Hash($length);
|
||||
|
||||
if ($md5 !== $computedMd5) {
|
||||
throw new BadRequest("Computed md5 hash is incorrect.");
|
||||
}
|
||||
|
||||
$content = stream_get_line($this->stream, $length);
|
||||
|
||||
if ($content === false) {
|
||||
throw new Exception("Fail to read part's content.");
|
||||
}
|
||||
|
||||
if (feof($this->stream)) {
|
||||
throw new Exception("Unexpected EOF while reading stream.");
|
||||
}
|
||||
|
||||
// Read '\r\n'.
|
||||
stream_get_contents($this->stream, 2);
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the MD5 hash of the next x bytes.
|
||||
*/
|
||||
private function computeMd5Hash(int $length): string {
|
||||
$context = hash_init('md5');
|
||||
hash_update_stream($context, $this->stream, $length);
|
||||
fseek($this->stream, -$length, SEEK_CUR);
|
||||
return hash_final($context);
|
||||
}
|
||||
}
|
||||
38
apps/dav/lib/CalDAV/Auth/CustomPrincipalPlugin.php
Normal file
38
apps/dav/lib/CalDAV/Auth/CustomPrincipalPlugin.php
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* CalDAV App
|
||||
*
|
||||
* @copyright 2021 Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* @author Anna Larch <anna.larch@gmx.net>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\DAV\CalDAV\Auth;
|
||||
|
||||
use Sabre\DAV\Auth\Plugin;
|
||||
|
||||
/**
|
||||
* Set a custom principal uri to allow public requests to its calendar
|
||||
*/
|
||||
class CustomPrincipalPlugin extends Plugin {
|
||||
public function setCurrentPrincipal(?string $currentPrincipal): void {
|
||||
$this->currentPrincipal = $currentPrincipal;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue