Compare commits

..

12 Commits

Author SHA1 Message Date
C Montero-Luque ab84f785d3 8.2 RC3 2015-10-16 14:30:26 -04:00
Thomas Müller dc3aee5acc Merge pull request #19783 from owncloud/stable8.2_backport_19727
[Stable8.2] Return path instead of itemsource
2015-10-15 19:58:05 +02:00
Morris Jobke 2729c0417d Merge pull request #19796 from owncloud/stable8.2-language-compat
[stable8.2] Remove arbitrary expression in empty
2015-10-15 10:41:58 +02:00
Frank Karlitschek 614a22cf32 Merge pull request #19763 from owncloud/backport-19744
Backport admin checkboxes #19744 to stable8.2
2015-10-14 21:18:55 -03:00
Lukas Reschke 6f20f60f5c Remove arbitrary expression in empty
Those are only allowed in PHP 5.5, thus making our code incompatible with PHP 5.4

Fixes https://github.com/owncloud/core/issues/19793
2015-10-14 22:40:31 +02:00
Roeland Jago Douma 8ac5398f4e Return path instead of itemsource
Fixes #19678

Errors should contain paths and not internal ids
2015-10-14 15:46:10 +02:00
Lukas Reschke c8da73667b Merge pull request #19781 from owncloud/revert-19768-stable8.2-passwordchange-hidestrengthify
Revert "[stable8.2] Properly hide strengthify after password change"
2015-10-14 15:09:14 +02:00
Lukas Reschke a50643ebc9 Revert "[stable8.2] Properly hide strengthify after password change" 2015-10-14 15:09:07 +02:00
Lukas Reschke 718edf7828 Merge pull request #19768 from owncloud/stable8.2-passwordchange-hidestrengthify
[stable8.2] Properly hide strengthify after password change
2015-10-14 15:08:45 +02:00
Vincent Petry baac1ad489 Properly hide strengthify after password change 2015-10-14 14:13:41 +02:00
Hendrik Leppelsack ee80cea2bd apply new checkbox style to admin settings 2015-10-14 13:08:06 +02:00
C Montero-Luque 06bfe1139b 8.2 RC2 2015-10-13 19:13:27 -04:00
8964 changed files with 416985 additions and 966212 deletions
-12
View File
@@ -1,12 +0,0 @@
codecov:
branch: master
coverage:
precision: 2
round: down
range: "70...100"
status:
project: off
patch: off
comment: off
-699
View File
@@ -1,699 +0,0 @@
clone:
git:
image: plugins/git
depth: 1
pipeline:
jsunit:
image: nextcloudci/jsunit:jsunit-5
commands:
- ./autotest-js.sh
- curl -o codecov.sh https://codecov.io/bash
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5; fi"
when:
matrix:
TESTS: jsunit
checkers:
image: nextcloudci/php7.0:php7.0-16
commands:
- ./autotest-checkers.sh
when:
matrix:
TESTS: checkers
syntax-php5.6:
image: nextcloudci/php5.6:php5.6-8
commands:
- composer install
- ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
when:
matrix:
TESTS: syntax-php5.6
syntax-php7.0:
image: nextcloudci/php7.0:php7.0-16
commands:
- composer install
- ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
when:
matrix:
TESTS: syntax-php7.0
syntax-php7.1:
image: nextcloudci/php7.1:php7.1-15
commands:
- composer install
- ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
when:
matrix:
TESTS: syntax-php7.1
litmus-v1:
image: nextcloudci/litmus-php7.0:litmus-php7.0-6
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/litmus-v1/script.sh
when:
matrix:
TESTS: litmus-v1
litmus-v2:
image: nextcloudci/litmus-php7.0:litmus-php7.0-6
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/litmus-v2/script.sh
when:
matrix:
TESTS: litmus-v2
caldavtester-new-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-6
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/caldav/install.sh
- bash apps/dav/tests/travis/caldav/script-new-endpoint.sh
when:
matrix:
TESTS: caldavtester-new-endpoint
caldavtester-old-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-6
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/caldav/install.sh
- bash apps/dav/tests/travis/caldav/script-old-endpoint.sh
when:
matrix:
TESTS: caldavtester-old-endpoint
carddavtester-new-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-6
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/carddav/install.sh
- bash apps/dav/tests/travis/carddav/script-new-endpoint.sh
when:
matrix:
TESTS: carddavtester-new-endpoint
carddavtester-old-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-6
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/carddav/install.sh
- bash apps/dav/tests/travis/carddav/script-old-endpoint.sh
when:
matrix:
TESTS: carddavtester-old-endpoint
sqlite-php7.0-samba-native:
image: nextcloudci/samba-native-php7.0:samba-native-php7.0-3
commands:
- smbd -D -FS &
- ./autotest-external.sh sqlite smb-linux
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
when:
matrix:
TESTS: sqlite-php7.0-samba-native
sqlite-php7.0-samba-non-native:
image: nextcloudci/samba-non-native-php7.0:samba-non-native-php7.0-4
commands:
- smbd -D -FS &
- ./autotest-external.sh sqlite smb-linux
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
when:
matrix:
TESTS: sqlite-php7.0-samba-non-native
sqlite-php7.0-webdav-apache:
image: nextcloudci/webdav-apache-php7.0
commands:
- apache2
- ./autotest-external.sh sqlite webdav-apachedrone
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-webdav-apachedrone.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-webdav-apachedrone.xml; fi"
when:
matrix:
TESTS: sqlite-php7.0-webdav-apache
nodb-php5.6:
image: nextcloudci/php5.6:php5.6-8
commands:
- NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite
when:
matrix:
DB: NODB
PHP: 5.6
nodb-php7.0:
image: nextcloudci/php7.0:php7.0-16
commands:
- NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite
when:
matrix:
DB: NODB
PHP: "7.0"
nodb-php7.1:
image: nextcloudci/php7.1:php7.1-15
commands:
- NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite
when:
matrix:
DB: NODB
PHP: 7.1
sqlite-php5.6:
image: nextcloudci/php5.6:php5.6-8
commands:
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite
when:
matrix:
DB: sqlite
PHP: 5.6
sqlite-php7.0:
image: nextcloudci/php7.0:php7.0-16
commands:
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite
when:
matrix:
DB: sqlite
PHP: "7.0"
sqlite-php7.1:
image: nextcloudci/php7.1:php7.1-15
commands:
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite
when:
matrix:
DB: sqlite
PHP: 7.1
mysql-php5.6:
image: nextcloudci/php5.6:php5.6-8
commands:
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysql
when:
matrix:
DB: mysql
PHP: 5.6
postgres-php5.6:
image: nextcloudci/php5.6:php5.6-8
commands:
- sleep 10 # gives the database enough time to initialize
- POSTGRES=${POSTGRES} NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh pgsql
when:
matrix:
DB: postgres
PHP: 5.6
mysqlmb4-php5.6:
image: nextcloudci/php5.6:php5.6-8
commands:
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh mysqlmb4
when:
matrix:
DB: mysqlmb4
PHP: 5.6
integration-capabilities_features:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh capabilities_features/capabilities.feature
when:
matrix:
TESTS: integration-capabilities_features
integration-federation_features:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh federation_features/federated.feature
when:
matrix:
TESTS: integration-federation_features
integration-auth:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/auth.feature
when:
matrix:
TESTS: integration-auth
integration-maintenance-mode:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/maintenance-mode.feature
when:
matrix:
TESTS: integration-maintenance-mode
integration-ratelimiting:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- ./occ config:system:set redis host --value=cache
- ./occ config:system:set redis port --value=6379 --type=integer
- ./occ config:system:set redis timeout --value=0 --type=integer
- ./occ config:system:set --type string --value "\\OC\\Memcache\\Redis" memcache.local
- ./occ config:system:set --type string --value "\\OC\\Memcache\\Redis" memcache.distributed
- ./occ app:enable testing
- cd build/integration
- ./run.sh features/ratelimiting.feature
when:
matrix:
TESTS: integration-ratelimiting
integration-carddav:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/carddav.feature
when:
matrix:
TESTS: integration-carddav
integration-dav-v2:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/dav-v2.feature
when:
matrix:
TESTS: integration-dav-v2
integration-ocs-v1:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/ocs-v1.feature
when:
matrix:
TESTS: integration-ocs-v1
integration-sharing-v1:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/sharing-v1.feature
when:
matrix:
TESTS: integration-sharing-v1
integration-sharing-v1-part2:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/sharing-v1-part2.feature
when:
matrix:
TESTS: integration-sharing-v1-part2
integration-sharing-v1-part3:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/sharing-v1-part3.feature
when:
matrix:
TESTS: integration-sharing-v1-part3
integration-checksums-v1:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/checksums.feature
when:
matrix:
TESTS: integration-checksums
integration-external-storage:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/external-storage.feature
when:
matrix:
TESTS: integration-external-storage
integration-provisioning-v1:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/provisioning-v1.feature
when:
matrix:
TESTS: integration-provisioning-v1
integration-tags:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/tags.feature
when:
matrix:
TESTS: integration-tags
integration-caldav:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/caldav.feature
when:
matrix:
TESTS: integration-caldav
integration-comments:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/comments.feature
when:
matrix:
TESTS: integration-comments
integration-favorites:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/favorites.feature
when:
matrix:
TESTS: integration-favorites
integration-provisioning-v2:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/provisioning-v2.feature
when:
matrix:
TESTS: integration-provisioning-v2
integration-webdav-related:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/webdav-related.feature
when:
matrix:
TESTS: integration-webdav-related
integration-sharees-features:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh sharees_features/sharees.feature
when:
matrix:
TESTS: integration-sharees-features
integration-sharees-v2-features:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh sharees_features/sharees_provisioningapiv2.feature
when:
matrix:
TESTS: integration-sharees-v2-features
integration-setup-features:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- cd build/integration
- ./run.sh setup_features/setup.feature
when:
matrix:
TESTS: integration-setup-features
integration-filesdrop-features:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh filesdrop_features/filesdrop.feature
when:
matrix:
TESTS: integration-filesdrop-features
integration-transfer-ownership-features:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/transfer-ownership.feature
when:
matrix:
TESTS: integration-transfer-ownership-features
integration-ldap-features:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- ./occ app:enable user_ldap
- cd build/integration
- ./run.sh ldap_features/ldap-ocs.feature
when:
matrix:
TESTS: integration-ldap-features
integration-trashbin:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/trashbin.feature
when:
matrix:
TESTS: integration-trashbin
acceptance-access-levels:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- tests/acceptance/run-local.sh --timeout-multiplier 10 --nextcloud-server-domain acceptance-access-levels --selenium-server selenium:4444 allow-git-repository-modifications features/access-levels.feature
when:
matrix:
TESTS-ACCEPTANCE: access-levels
acceptance-app-files:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- tests/acceptance/run-local.sh --timeout-multiplier 10 --nextcloud-server-domain acceptance-app-files --selenium-server selenium:4444 allow-git-repository-modifications features/app-files.feature
when:
matrix:
TESTS-ACCEPTANCE: app-files
acceptance-app-theming:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- tests/acceptance/run-local.sh --timeout-multiplier 10 --nextcloud-server-domain acceptance-app-theming --selenium-server selenium:4444 allow-git-repository-modifications features/app-theming.feature
when:
matrix:
TESTS-ACCEPTANCE: app-theming
acceptance-login:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- tests/acceptance/run-local.sh --timeout-multiplier 10 --nextcloud-server-domain acceptance-login --selenium-server selenium:4444 allow-git-repository-modifications features/login.feature
when:
matrix:
TESTS-ACCEPTANCE: login
nodb-codecov:
image: nextcloudci/php7.0:php7.0-16
commands:
- phpenmod xdebug
- TEST_SELECTION=NODB ./autotest.sh sqlite
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
when:
matrix:
TESTS: nodb-codecov
db-codecov:
image: nextcloudci/php7.0:php7.0-16
commands:
- phpenmod xdebug
- TEST_SELECTION=QUICKDB ./autotest.sh sqlite
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
when:
matrix:
TESTS: db-codecov
object-store:
image: nextcloudci/php7.0:php7.0-16
commands:
- phpenmod xdebug
- TEST_SELECTION=PRIMARY-${OBJECT_STORE} ./autotest.sh sqlite
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
when:
matrix:
TESTS: object-store
memcache-memcached:
image: nextcloudci/php7.0-memcached:php7.0-memcached-8
commands:
- phpenmod xdebug
- service memcached restart
- ./autotest.sh sqlite tests/lib/Memcache/MemcachedTest.php
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
when:
matrix:
TEST: memcache-memcached
memcache-redis-cluster:
image: nextcloudci/php7.0:php7.0-17
commands:
- phpenmod xdebug
- sleep 20
- ./autotest.sh sqlite tests/lib/Memcache/RedisTest.php
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
when:
matrix:
TEST: memcache-redis-cluster
matrix:
include:
- TESTS: checkers
- TESTS: nodb-codecov
ENABLE_REDIS: true
- TESTS: db-codecov
ENABLE_REDIS: true
- TESTS: integration-capabilities_features
- TESTS: integration-federation_features
- TESTS: integration-maintenance-mode
- TESTS: integration-ratelimiting
ENABLE_REDIS: true
- TESTS: integration-auth
- TESTS: integration-carddav
- TESTS: integration-dav-v2
- TESTS: integration-ocs-v1
- TESTS: integration-sharing-v1
- TESTS: integration-sharing-v1-part2
- TESTS: integration-sharing-v1-part3
- TESTS: integration-checksums
- TESTS: integration-external-storage
- TESTS: integration-provisioning-v1
- TESTS: integration-tags
- TESTS: integration-caldav
- TESTS: integration-comments
- TESTS: integration-favorites
- TESTS: integration-provisioning-v2
- TESTS: integration-webdav-related
- TESTS: integration-sharees-features
- TESTS: integration-sharees-v2-features
- TESTS: integration-setup-features
- TESTS: integration-filesdrop-features
- TESTS: integration-transfer-ownership-features
- TESTS: integration-ldap-features
- TESTS: integration-trashbin
- TESTS: acceptance
TESTS-ACCEPTANCE: access-levels
- TESTS: acceptance
TESTS-ACCEPTANCE: app-files
- TESTS: acceptance
TESTS-ACCEPTANCE: app-theming
- TESTS: acceptance
TESTS-ACCEPTANCE: login
- TESTS: jsunit
- TESTS: syntax-php5.6
- TESTS: syntax-php7.0
- TESTS: syntax-php7.1
- TESTS: litmus-v1
- TESTS: litmus-v2
- TESTS: caldavtester-old-endpoint
- TESTS: caldavtester-new-endpoint
- TESTS: carddavtester-new-endpoint
- TESTS: carddavtester-old-endpoint
- TESTS: object-store
OBJECT_STORE: s3
- TESTS: sqlite-php7.0-samba-native
- TESTS: sqlite-php7.0-samba-non-native
- TEST: memcache-memcached
- TEST: memcache-redis-cluster
ENABLE_REDIS_CLUSTER: true
- TESTS: sqlite-php7.0-webdav-apache
ENABLE_REDIS: true
- DB: NODB
PHP: 5.6
ENABLE_REDIS: true
- DB: NODB
PHP: 7.0
ENABLE_REDIS: true
- DB: NODB
PHP: 7.1
ENABLE_REDIS: true
- DB: sqlite
PHP: 5.6
ENABLE_REDIS: true
- DB: sqlite
PHP: 7.0
ENABLE_REDIS: true
- DB: sqlite
PHP: 7.1
ENABLE_REDIS: true
- DB: mysql
PHP: 5.6
ENABLE_REDIS: true
- DB: postgres
PHP: 5.6
ENABLE_REDIS: true
- DB: mysqlmb4
PHP: 5.6
ENABLE_REDIS: true
services:
cache:
image: redis
when:
matrix:
ENABLE_REDIS: true
cache-cluster:
image: morrisjobke/redis-cluster
when:
matrix:
ENABLE_REDIS_CLUSTER: true
postgres:
image: postgres:9
environment:
- POSTGRES_USER=oc_autotest
- POSTGRES_DB=oc_autotest_dummy
- POSTGRES_PASSWORD=owncloud
tmpfs:
- /var/lib/postgresql/data
when:
matrix:
DB: postgres
mysql:
image: mysql:5.7.22
environment:
- MYSQL_ROOT_PASSWORD=owncloud
- MYSQL_USER=oc_autotest
- MYSQL_PASSWORD=owncloud
- MYSQL_DATABASE=oc_autotest
tmpfs:
- /var/lib/mysql
when:
matrix:
DB: mysql
mysqlmb4:
image: mysql:5.7.22
environment:
- MYSQL_ROOT_PASSWORD=owncloud
- MYSQL_USER=oc_autotest
- MYSQL_PASSWORD=owncloud
- MYSQL_DATABASE=oc_autotest
command: [ "--innodb_large_prefix=true", "--innodb_file_format=barracuda", "--innodb_file_per_table=true" ]
tmpfs:
- /var/lib/mysql
when:
matrix:
DB: mysqlmb4
fake-s3:
image: lphoward/fake-s3
when:
matrix:
OBJECT_STORE: s3
selenium:
image: selenium/standalone-firefox:2.53.1-beryllium
environment:
# Reduce default log level for Selenium server (INFO) as it is too
# verbose.
- JAVA_OPTS=-Dselenium.LOGGER.level=WARNING
when:
matrix:
TESTS: acceptance
branches: [ master, stable* ]
+7 -28
View File
@@ -3,38 +3,23 @@
/owncloud
/config/config.php
/config/*.config.php
/config/mimetype*.json
/config/mount.php
/apps/inc.php
/assets
/.htaccess
/translationfiles
/translationtool.phar
# ignore all apps except core ones
/apps*/*
!/apps/comments
!/apps/dav
!/apps/files
!/apps/federation
!/apps/federatedfilesharing
!/apps/sharebymail
!/apps/files_encryption
!/apps/encryption
!/apps/encryption_dummy
!/apps/files_external
!/apps/files_sharing
!/apps/files_trashbin
!/apps/files_versions
!/apps/lookup_server_connector
!/apps/user_ldap
!/apps/oauth2
!/apps/provisioning_api
!/apps/systemtags
!/apps/testing
!/apps/admin_audit
!/apps/updatenotification
!/apps/theming
!/apps/twofactor_backupcodes
!/apps/workflowengine
!/apps/user_webdavauth
!apps/provisioning_api
/apps/files_external/3rdparty/irodsphp/PHPUnitTest
/apps/files_external/3rdparty/irodsphp/web
/apps/files_external/3rdparty/irodsphp/prods/test
@@ -43,6 +28,7 @@
/apps/files_external/tests/config.*.php
# ignore themes except the example and the README
/themes/*
!/themes/example
@@ -76,7 +62,7 @@ RCS/*
.project
.settings
# netbeans
# netbeans
nbproject
# phpStorm
@@ -92,10 +78,7 @@ nbproject
# vim ex mode
.vimrc
# ack(-grep)
.ackrc
# Mac OS
.DS_Store
@@ -110,11 +93,9 @@ nbproject
/build/node_modules/
# nodejs
/build/bin
/build/lib/
/build/jsdocs/
/npm-debug.log
/PhantomJS_*
# puphpet
puphpet
@@ -126,7 +107,6 @@ Vagrantfile
# Tests - auto-generated files
/data-autotest
/tests/coverage*
/tests/css
/tests/karma-coverage
/tests/autoconfig*
/tests/autotest*
@@ -134,4 +114,3 @@ Vagrantfile
/tests/data/testimage-copy.png
/config/config-autotest-backup.php
/config/autoconfig.php
clover.xml
+1 -1
View File
@@ -1,3 +1,3 @@
[submodule "3rdparty"]
path = 3rdparty
url = https://github.com/nextcloud/3rdparty.git
url = https://github.com/owncloud/3rdparty.git
+15 -35
View File
@@ -1,12 +1,10 @@
# Version: 8.2.0
<IfModule mod_headers.c>
<IfModule mod_setenvif.c>
<IfModule mod_fcgid.c>
<IfModule mod_fcgid.c>
<IfModule mod_setenvif.c>
SetEnvIfNoCase ^Authorization$ "(.+)" XAUTHORIZATION=$1
RequestHeader set XAuthorization %{XAUTHORIZATION}e env=XAUTHORIZATION
</IfModule>
<IfModule mod_proxy_fcgi.c>
SetEnvIfNoCase Authorization "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
</IfModule>
<IfModule mod_env.c>
@@ -14,24 +12,18 @@
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
Header set X-Robots-Tag "none"
Header set X-Download-Options "noopen"
Header set X-Permitted-Cross-Domain-Policies "none"
Header set X-Frame-Options "SAMEORIGIN"
SetEnv modHeadersAvailable true
</IfModule>
# Add cache control for static resources
<FilesMatch "\.(css|js|svg|gif)$">
Header set Cache-Control "max-age=15778463"
</FilesMatch>
# Let browsers cache WOFF files for a week
<FilesMatch "\.woff$">
Header set Cache-Control "max-age=604800"
# Add cache control for CSS and JS files
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=7200, public"
</FilesMatch>
</IfModule>
<IfModule mod_php5.c>
php_value upload_max_filesize 511M
php_value post_max_size 511M
php_value upload_max_filesize 513M
php_value post_max_size 513M
php_value memory_limit 512M
php_value mbstring.func_overload 0
php_value always_populate_raw_post_data -1
@@ -41,30 +33,18 @@
SetEnv htaccessWorking true
</IfModule>
</IfModule>
<IfModule mod_php7.c>
php_value upload_max_filesize 511M
php_value post_max_size 511M
php_value memory_limit 512M
php_value mbstring.func_overload 0
php_value default_charset 'UTF-8'
php_value output_buffering 0
<IfModule mod_env.c>
SetEnv htaccessWorking true
</IfModule>
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} DavClnt
RewriteRule ^$ /remote.php/webdav/ [L,R=302]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/carddav /remote.php/carddav/ [R=301,L]
RewriteRule ^\.well-known/caldav /remote.php/caldav/ [R=301,L]
RewriteRule ^apps/calendar/caldav\.php remote.php/caldav/ [QSA,L]
RewriteRule ^apps/contacts/carddav\.php remote.php/carddav/ [QSA,L]
RewriteRule ^remote/(.*) remote.php [QSA,L]
RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteCond %{REQUEST_URI} !^/.well-known/(acme-challenge|pki-validation)/.*
RewriteRule ^(?:\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
RewriteRule ^(build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteRule ^(\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>
<IfModule mod_mime.c>
AddType image/svg+xml svg svgz
-2
View File
@@ -1,2 +0,0 @@
pattern = "(?i):shipit:|:\\+1:|LGTM|👍"
self_approval_off = true
+26 -35
View File
@@ -16,8 +16,8 @@ Andreas Schönebeck <aschoenebeck@web.de>
Andreas Ergenzinger <andreas.ergenzinger@gmx.de> AndreasErgenzinger <andreas.ergenzinger@gmx.de>
Andrew Brown <andrew@casabrown.com>
André Gaul <gaul@web-yard.de>
Arthur Schiwon <blizzz@arthur-schiwon.de> Arthur Schiwon <blizzz@owncloud.com>
Arthur Schiwon <blizzz@arthur-schiwon.de> blizzz <blizzz@owncloud.com>
Arthur Schiwon <blizzz@owncloud.com> Arthur Schiwon <blizzz@arthur-schiwon.de>
Arthur Schiwon <blizzz@owncloud.com> blizzz <blizzz@owncloud.com>
Artur Duque de Souza <asouza@kde.org>
Axel Roenn <axel@mpim-bonn.mpg.de>
Bagera <victor@baquero-wihlborg.se>
@@ -30,16 +30,14 @@ Benjamin Diele <benjamin@diele.be>
Benjamin Liles <benliles@arch.tamu.edu>
Bernhard Posselt <dev@bernhard-posselt.com> Bernhard Posselt <nukeawhale@gmail.com>
Bernhard Posselt <dev@bernhard-posselt.com> Bernhard Posselt <Raydiation@users.noreply.github.com>
Bernhard Posselt <dev@bernhard-posselt.com> Bernhard Posselt <BernhardPosselt@users.noreply.github.com>
Bernhard Reiter <ockham@raz.or.at>
Birk Borkason <daniel.niccoli@gmail.com>
Björn Schießle <bjoern@schiessle.org> Bjoern Schiessle <schiesbn@woody.(none)>
Björn Schießle <bjoern@schiessle.org> Björn Schießle <schiessle@owncloud.com>
Björn Schießle <bjoern@schiessle.org> Björn Schießle <schiesbn@potato.(none)>
Björn Schießle <bjoern@schiessle.org> Björn Schiessle <schiessle@owncloud.com>
Björn Schießle <bjoern@schiessle.org> Bjoern Schießle <schiessle@owncloud.com>
Björn Schießle <bjoern@schiessle.org> Bjoern Schiessle <schiessle@owncloud.com>
Björn Schießle <bjoern@schiessle.org> Björn Schießle <schiessle@owncloud.com>
Björn Schießle <schiessle@owncloud.com> Bjoern Schiessle <schiesbn@woody.(none)>
Björn Schießle <schiessle@owncloud.com> Björn Schießle <bjoern@schiessle.org>
Björn Schießle <schiessle@owncloud.com> Björn Schießle <schiesbn@potato.(none)>
Björn Schießle <schiessle@owncloud.com> Björn Schiessle <schiessle@owncloud.com>
Björn Schießle <schiessle@owncloud.com> Bjoern Schießle <schiessle@owncloud.com>
Björn Schießle <schiessle@owncloud.com> Bjoern Schiessle <schiessle@owncloud.com>
BlackEagle <ike.devolder@gmail.com>
Boris Rybalkin <ribalkin@gmail.com>
Borjan Tchakaloff <borjan@tchakaloff.fr>
@@ -63,8 +61,6 @@ Christian Berendt <berendt@b1-systems.de>
Christian Kampka <christian@kampka.net>
Christian Koch <koch.chris@gmail.com>
Christian Reiner <github@christian-reiner.info> Christian Reiner <arkascha@balder.site>
Christoph Wurst <christoph@owncloud.com> Christoph Wurst <ChristophWurst@users.noreply.github.com>
Christoph Wurst <christoph@owncloud.com> Christoph Wurst <christoph@winzerhof-wurst.at>
Christopher Bunn <b11.chris@gmail.com>
Christopher Schäpers <kondou@ts.unde.re> Christopher <kondou@ts.unde.re>
Christopher Schäpers <kondou@ts.unde.re> kondou <kondou@ts.unde.re>
@@ -127,13 +123,12 @@ Florian Vichot <florian.vichot@gmail.com>
Florin Peter <github@florin-peter.de> Florin Peter <fp@datawerk.de>
Florin Peter <github@florin-peter.de> FlorinPeter <github@florin-peter.de>
Francesco Piraneo G. <fpiraneo@iface.ch>
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <frank@dev.(none)>
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <frank@devel.(none)>
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <frank@oc.(none)>
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <frank@owncloud.org>
Frank Karlitschek <frank@karlitschek.de> Frank Karlitschek <karlitschek@kde.org>
Frank Karlitschek <frank@owncloud.org> Frank Karlitschek <frank@dev.(none)>
Frank Karlitschek <frank@owncloud.org> Frank Karlitschek <frank@devel.(none)>
Frank Karlitschek <frank@owncloud.org> Frank Karlitschek <frank@oc.(none)>
Frank Karlitschek <frank@owncloud.org> Frank Karlitschek <karlitschek@gmx.de>
Frank Karlitschek <frank@owncloud.org> Frank Karlitschek <karlitschek@kde.org>
François Kubler <francois@kubler.org>
Frédéric Fortier <frederic.fortier@oronospolytechnique.com> Frédéric Fortier <frederic.fortier@polymtl.ca>
Frederik Gladhorn <gladhorn@kde.org>
Gadzy <dev@gadzy.fr>
ganomi <ganomi@gmail.com>
@@ -178,13 +173,12 @@ Jean-Louis Dupond <jean-louis@dupond.be>
Jenkins for ownCloud <owncloud-bot@tmit.eu> Jenkins for ownCloud <thomas.mueller@tmit.eu>
Jens-Christian Fischer <jens-christian.fischer@switch.ch>
Jernej Virag <jernej.virag@gmail.com>
Jesus Macias <jmacias@full-on-net.com>
Jesus Macias Portela <jesus.macias.portela@gmail.com>
Jesús Macias <jmacias@solidgear.es> Jesus Macias <jmacias@full-on-net.com>
jknockaert <jasper@knockaert.nl>
Joan <aseques@gmail.com>
Joar Wandborg <git@wandborg.com>
Joas Schilling <coding@schilljs.com> Joas Schilling <nickvergessen@gmx.de>
Joas Schilling <coding@schilljs.com> Joas Schilling <nickvergessen@owncloud.com>
Joas Schilling <nickvergessen@owncloud.com> Joas Schilling <nickvergessen@gmx.de>
joel hansson <joel.hansson@gmail.com>
Johan Björk <johanimon@gmail.com>
Johannes Twittmann <github.com@deryo.de>
@@ -211,8 +205,8 @@ Sebastian Döll <sebastian.doell@libasys.de> libasys <sebastian.doell@libasys.de
Lode Hoste <zillode@zillode.be>
lolozere <laurent@chedanne.pro>
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>
Lukas Reschke <lukas@owncloud.com> Lukas Reschke <lukas@owncloud.org>
Lukas Reschke <lukas@owncloud.com> Lukas Reschke <lukas@statuscode.ch>
Luke Policinski <lpolicinski@gmail.com>
Lyonel Vincent <lyonel@ezix.org>
macjohnny <estebanmarin@gmx.ch>
@@ -303,18 +297,16 @@ Riccardo Iaconelli <riccardo@kde.org>
Richard Clarkson <robert@trash-mail.com>
rnveach <rveach02@gmail.com>
Robert Jäckel <rjaeckel@users.noreply.github.com>
Robin Appelman <robin@icewind.nl> icewind1991 <icewind1991@gmail.com>
Robin Appelman <robin@icewind.nl> icewind1991 <robin@icewind.nl>
Robin Appelman <robin@icewind.nl> Robin <Robin Appelman icewind1991@gmail.com>
Robin Appelman <robin@icewind.nl> Robin <robin@Amaya.(none)>
Robin Appelman <robin@icewind.nl> Robin Appelman <icewind1991@gmail.com>
Robin Appelman <robin@icewind.nl> Robin Appelman <icewind1991@gmail>
Robin Appelman <robin@icewind.nl> Robin Appelman <icewind@owncloud.com>
Robin McCorkell <robin@mccorkell.me.uk> Robin McCorkell <rmccorkell@karoshi.org.uk>
Robin McCorkell <robin@mccorkell.me.uk> Robin McCorkell <rmccorkell@owncloud.com>
Robin Appelman <icewind@owncloud.com> icewind1991 <icewind1991@gmail.com>
Robin Appelman <icewind@owncloud.com> icewind1991 <robin@icewind.nl>
Robin Appelman <icewind@owncloud.com> Robin <Robin Appelman icewind1991@gmail.com>
Robin Appelman <icewind@owncloud.com> Robin <robin@Amaya.(none)>
Robin Appelman <icewind@owncloud.com> Robin Appelman <icewind1991@gmail.com>
Robin Appelman <icewind@owncloud.com> Robin Appelman <icewind1991@gmail>
Robin Appelman <icewind@owncloud.com> Robin Appelman <robin@icewind.nl>
Robin McCorkell <rmccorkell@karoshi.org.uk> Robin McCorkell <rmccorkell@owncloud.com>
Rodrigo Hjort <rodrigo.hjort@gmail.com>
Roeland Jago Douma <roeland@famdouma.nl> Roeland Jago Douma <rullzer@owncloud.com>
Roeland Jago Douma <roeland@famdouma.nl> Roeland Douma <rullzer@users.noreply.github.com>
Roeland Jago Douma <roeland@famdouma.nl>
rok <brejktru@gmail.com>
Roland Hager <roland.hager@tu-berlin.de>
Roland van Laar <roland@micite.net>
@@ -374,7 +366,6 @@ TheSFReader <TheSFReader@gmail.com>
Thibaut GRIDEL <tgridel@free.fr>
thomas <thomas@thomas-VirtualBox.(none)>
Thomas Müller <thomas.mueller@tmit.eu> Thomas Mueller <thomas.mueller@tmit.eu>
Thomas Müller <thomas.mueller@tmit.eu> Thomas Müller <DeepDiver1975@users.noreply.github.com>
Thomas Olsen <tol@tanghus>
Thomas Schmidt <tschmidt@suse.de>
Thomas Tanghus <thomas@tanghus.net>
-34
View File
@@ -1,34 +0,0 @@
{
"maxReviewers": 3,
"numFilesToCheck": 5,
"alwaysNotifyForPaths": [
{
"name": "nickvergessen",
"files": [
"lib/private/Activity/**",
"lib/private/Notification/**",
"lib/public/Activity/**",
"lib/public/Notification/**"
]
},
{
"name": "Xenopathic",
"files": [
"apps/files_external/**"
]
}
],
"userBlacklist": [
"DeepDiver1975",
"nextcloud-bot",
"owncloud-bot",
"PVince81",
"scrutinizer-auto-fixer",
"th3fallen",
"zander",
"luckydonald",
"jancborchardt"
],
"createReviewRequest": true,
"createComment": false
}
+5 -8
View File
@@ -1,6 +1,3 @@
before_commands:
- 'git submodule update --init --recursive'
filter:
excluded_paths:
- '3rdparty/*'
@@ -9,7 +6,6 @@ filter:
- 'l10n/*'
- 'core/l10n/*'
- 'apps/*/l10n/*'
- 'apps/*/tests/*'
- 'lib/l10n/*'
- 'core/vendor/*'
- 'core/js/tests/lib/*.js'
@@ -17,11 +13,12 @@ filter:
- 'core/js/jquery-showpassword.js'
- 'core/js/jquery-tipsy.js'
- 'core/js/placeholders.js'
- 'settings/l10n/*'
- 'tests/*'
- 'build/*'
- 'lib/composer/*'
imports:
- javascript
- php
tools:
external_code_coverage:
timeout: 7200 # Timeout in seconds. 120 minutes
-129
View File
@@ -1,129 +0,0 @@
[main]
host = https://www.transifex.com
lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja
[nextcloud.core]
file_filter = translationfiles/<lang>/core.po
source_file = translationfiles/templates/core.pot
source_lang = en
type = PO
[nextcloud.files]
file_filter = translationfiles/<lang>/files.po
source_file = translationfiles/templates/files.pot
source_lang = en
type = PO
[nextcloud.settings-1]
file_filter = translationfiles/<lang>/settings.po
source_file = translationfiles/templates/settings.pot
source_lang = en
type = PO
[nextcloud.lib]
file_filter = translationfiles/<lang>/lib.po
source_file = translationfiles/templates/lib.pot
source_lang = en
type = PO
[nextcloud.dav]
file_filter = translationfiles/<lang>/dav.po
source_file = translationfiles/templates/dav.pot
source_lang = en
type = PO
[nextcloud.files_encryption]
file_filter = translationfiles/<lang>/encryption.po
source_file = translationfiles/templates/encryption.pot
source_lang = en
type = PO
[nextcloud.files_external]
file_filter = translationfiles/<lang>/files_external.po
source_file = translationfiles/templates/files_external.pot
source_lang = en
type = PO
[nextcloud.files_sharing]
file_filter = translationfiles/<lang>/files_sharing.po
source_file = translationfiles/templates/files_sharing.pot
source_lang = en
type = PO
[nextcloud.files_trashbin]
file_filter = translationfiles/<lang>/files_trashbin.po
source_file = translationfiles/templates/files_trashbin.pot
source_lang = en
type = PO
[nextcloud.files_versions]
file_filter = translationfiles/<lang>/files_versions.po
source_file = translationfiles/templates/files_versions.pot
source_lang = en
type = PO
[nextcloud.user_ldap]
file_filter = translationfiles/<lang>/user_ldap.po
source_file = translationfiles/templates/user_ldap.pot
source_lang = en
type = PO
[nextcloud.comments]
file_filter = translationfiles/<lang>/comments.po
source_file = translationfiles/templates/comments.pot
source_lang = en
type = PO
[nextcloud.federatedfilesharing]
file_filter = translationfiles/<lang>/federatedfilesharing.po
source_file = translationfiles/templates/federatedfilesharing.pot
source_lang = en
type = PO
[nextcloud.federation]
file_filter = translationfiles/<lang>/federation.po
source_file = translationfiles/templates/federation.pot
source_lang = en
type = PO
[nextcloud.oauth2]
file_filter = translationfiles/<lang>/oauth2.po
source_file = translationfiles/templates/oauth2.pot
source_lang = en
type = PO
[nextcloud.sharebymail]
file_filter = translationfiles/<lang>/sharebymail.po
source_file = translationfiles/templates/sharebymail.pot
source_lang = en
type = PO
[nextcloud.systemtags]
file_filter = translationfiles/<lang>/systemtags.po
source_file = translationfiles/templates/systemtags.pot
source_lang = en
type = PO
[nextcloud.updatenotification]
file_filter = translationfiles/<lang>/updatenotification.po
source_file = translationfiles/templates/updatenotification.pot
source_lang = en
type = PO
[nextcloud.theming]
file_filter = translationfiles/<lang>/theming.po
source_file = translationfiles/templates/theming.pot
source_lang = en
type = PO
[nextcloud.twofactor_backupcodes]
file_filter = translationfiles/<lang>/twofactor_backupcodes.po
source_file = translationfiles/templates/twofactor_backupcodes.pot
source_lang = en
type = PO
[nextcloud.workflowengine]
file_filter = translationfiles/<lang>/workflowengine.po
source_file = translationfiles/templates/workflowengine.pot
source_lang = en
type = PO
+2 -2
View File
@@ -1,5 +1,5 @@
upload_max_filesize=511M
post_max_size=511M
upload_max_filesize=513M
post_max_size=513M
memory_limit=512M
mbstring.func_overload=0
always_populate_raw_post_data=-1
+23 -216
View File
@@ -1,219 +1,26 @@
Nextcloud is written by:
- AW-UC <git@a-wesemann.de>
- Aaron Wood <aaronjwood@gmail.com>
- Achim Königs <garfonso@tratschtante.de>
- Adam Williamson <awilliam@redhat.com>
- Administrator <Administrator@WINDOWS-2012>
- Aldo "xoen" Giambelluca <xoen@xoen.org>
- Alex Weirig <alex.weirig@technolink.lu>
- Alexander Bergolth <leo@strike.wu.ac.at>
- Andreas Fischer <bantu@owncloud.com>
- Andrew Brown <andrew@casabrown.com>
- André Gaul <gaul@web-yard.de>
- Arthur Schiwon <blizzz@arthur-schiwon.de>
- Bart Visscher <bartv@thisnet.nl>
- Bartek Przybylski <bart.p.pl@gmail.com>
- Bastien Ho <bastienho@urbancube.fr>
- Benjamin Diele <benjamin@diele.be>
- Benjamin Liles <benliles@arch.tamu.edu>
- Bernhard Posselt <dev@bernhard-posselt.com>
- Bernhard Reiter <ockham@raz.or.at>
- Birk Borkason <daniel.niccoli@gmail.com>
- Bjoern Schiessle <bjoern@schiessle.org>
- Björn Schießle <bjoern@schiessle.org>
- Borjan Tchakaloff <borjan@tchakaloff.fr>
- Brice Maron <brice@bmaron.net>
- Byron Marohn <combustible@live.com>
- Carla Schroder <carla@owncloud.com>
- Carlos Cerrillo <ccerrillo@gmail.com>
- Carlos Damken <carlos@damken.com>
- Christian Berendt <berendt@b1-systems.de>
- Christian Jürges <christian@eqipe.ch>
- Christian Kampka <christian@kampka.net>
- Christian Weiske <cweiske@cweiske.de>
- Christoph Schaefer <christophł@wolkesicher.de>
- Christoph Wurst <christoph@owncloud.com>
- Christopher Schäpers <kondou@ts.unde.re>
- Christopher T. Johnson <ctjctj@gmail.com>
- Clark Tomlinson <fallen013@gmail.com>
- Craig Morrissey <craig@owncloud.com>
- Dan Bartram <daneybartram@gmail.com>
- Daniel Hansson <enoch85@gmail.com>
- Daniel Jagszent <daniel@jagszent.de>
- Daniel Molkentin <daniel@molkentin.de>
- Daniel Tosello <tosello.daniel@gmail.com>
- David Prévot <taffit@debian.org>
- David Toledo <dtoledo@solidgear.es>
- Dominik Schmidt <dev@dominik-schmidt.de>
- Fabian Henze <flyser42@gmx.de>
- Faruk Uzun <farukuzun@collabora.com>
- Felix Böhm <felixboehm@gmx.de>
- Felix Moeller <mail@felixmoeller.de>
- Florian Preinstorfer <nblock@archlinux.us>
- Florian Pritz <bluewind@xinu.at>
- Florin Peter <github@florin-peter.de>
- Francesco Rovelli <francesco.rovelli@gmail.com>
- Frank Karlitschek <frank@karlitschek.de>
- François Kubler <francois@kubler.org>
- Frédéric Fortier <frederic.fortier@oronospolytechnique.com>
- Gadzy <dev@gadzy.fr>
- Georg Ehrke <georg@owncloud.com>
- Guillaume AMAT <guillaume.amat@informatique-libre.com>
- Hasso Tepper <hasso@zone.ee>
- Hendrik Leppelsack <hendrik@leppelsack.de>
- Hugo Gonzalez Labrador <hglavra@gmail.com>
- Individual IT Services <info@individual-it.net>
- Jakob Sack <mail@jakobsack.de>
- Jan-Christoph Borchardt <hey@jancborchardt.net>
- Jarrett <JetUni@users.noreply.github.com>
- Jean-Louis Dupond <jean-louis@dupond.be>
- Jens-Christian Fischer <jens-christian.fischer@switch.ch>
- Jesús Macias <jmacias@solidgear.es>
- Joachim Bauch <bauch@struktur.de>
- Joachim Sokolowski <github@sokolowski.org>
- Joas Schilling <coding@schilljs.com>
- Johan Björk <johanimon@gmail.com>
- Johannes Ernst <jernst@indiecomputing.com>
- Johannes Willnecker <johannes@willnecker.com>
- Jonny007-MKD <1-23-4-5@web.de>
- Juan Pablo Villafáñez <jvillafanez@solidgear.es>
- Julius Haertl <jus@bitgrid.net>
- Jörn Friedrich Dreyer <jfd@butonic.de>
- Kamil Domanski <kdomanski@kdemail.net>
- Klaas Freitag <freitag@owncloud.com>
- Lars <winnetou+github@catolic.de>
- Laurens Post <Crote@users.noreply.github.com>
- Laurens Post <lkpost@scept.re>
- Lennart Rosam <hello@takuto.de>
- Lennart Rosam <lennart.rosam@medien-systempartner.de>
- Leonardo Diez <leio10@users.noreply.github.com>
- Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it>
- Lukas Reschke <lukas@statuscode.ch>
- Luke Policinski <lpolicinski@gmail.com>
- Lyonel Vincent <lyonel@ezix.org>
- Manish Bisht <manish.bisht490@gmail.com>
- Mario Kolling <mario.kolling@serpro.gov.br>
- Markus Goetz <markus@woboq.com>
- Martin Konrad <info@martin-konrad.net>
- Martin Konrad <konrad@frib.msu.edu>
- Martin Mattel <martin.mattel@diemattels.at>
- Marvin Thomas Rabe <mrabe@marvinrabe.de>
- Masaki Kawabata Neto <masaki.kawabata@gmail.com>
- Michael Gapczynski <GapczynskiM@gmail.com>
- Michael Göhler <somebody.here@gmx.de>
- Michael Kuhn <suraia@ikkoku.de>
- Michael Roitzsch <reactorcontrol@icloud.com>
- Michael Roth <michael.roth@rz.uni-augsburg.de>
- Michael U <mdusher@users.noreply.github.com>
- Miguel Prokop <miguel.prokop@vtu.com>
- Mitar <mitar.git@tnode.com>
- Morris Jobke <hey@morrisjobke.de>
- Nicolai Ehemann <en@enlightened.de>
- Nicolas Grekas <nicolas.grekas@gmail.com>
- Nmz <nemesiz@nmz.lt>
- Normal Ra <normalraw@gmail.com>
- Oliver Gasser <oliver.gasser@gmail.com>
- Oliver Kohl D.Sc. <oliver@kohl.bz>
- Olivier Paroz <github@oparoz.com>
- Otto Sabart <ottosabart@seberm.com>
- Owen Winkler <a_github@midnightcircus.com>
- Pascal de Bruijn <pmjdebruijn@pcode.nl>
- Patrick Paysant <ppaysant@linagora.com>
- Pellaeon Lin <nfsmwlin@gmail.com>
- Petr Svoboda <weits666@gmail.com>
- Phiber2000 <phiber2000@gmx.de>
- Phil Davis <phil.davis@inf.org>
- Philipp Kapfer <philipp.kapfer@gmx.at>
- Philippe Jung <phil.jung@free.fr>
- Pierre Jochem <pierrejochem@msn.com>
- Pierre Ozoux <pierre@ozoux.net>
- Piotr Filiciak <piotr@filiciak.pl>
- Qingping Hou <dave2008713@gmail.com>
- Raghu Nayyar <hey@raghunayyar.com>
- Raghu Nayyar <me@iraghu.com>
- Ralph Krimmel <rkrimme1@gwdg.de>
- Ramiro Aparicio <rapariciog@gmail.com>
- Randolph Carter <RandolphCarter@fantasymail.de>
- RealRancor <Fisch.666@gmx.de>
- Remco Brenninkmeijer <requist1@starmail.nl>
- Renaud Fortier <Renaud.Fortier@fsaa.ulaval.ca>
- Robin Appelman <robin@icewind.nl>
- Robin McCorkell <robin@mccorkell.me.uk>
- Roeland Jago Douma <roeland@famdouma.nl>
- Roman Geber <rgeber@owncloudapps.com>
- Roman Kreisel <mail@romankreisel.de>
- Ross Nicoll <jrn@jrn.me.uk>
- SA <stephen@mthosting.net>
- Sam Tuke <mail@samtuke.com>
- Sander <brantje@gmail.com>
- Sean Comeau <sean@ftlnetworks.ca>
- Sebastian Döll <sebastian.doell@libasys.de>
- Senorsen <senorsen.zhang@gmail.com>
- Serge Martin <edb@sigluy.net>
- Sergio Bertolin <sbertolin@solidgear.es>
- Sergio Bertolín <sbertolin@solidgear.es>
- Simon Könnecke <simonkoennecke@gmail.com>
- Sjors van der Pluijm <sjors@desjors.nl>
- Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
- Stefan Rado <owncloud@sradonia.net>
- Stefan Weil <sw@weilnetz.de>
- Steffen Lindner <mail@steffen-lindner.de>
- Stephan Peijnik <speijnik@anexia-it.com>
- TheSFReader <TheSFReader@gmail.com>
- Thibaut GRIDEL <tgridel@free.fr>
- Thomas Citharel <tcit@tcit.fr>
- Thomas Müller <thomas.mueller@tmit.eu>
- Thomas Pulzer <t.pulzer@kniel.de>
- Thomas Tanghus <thomas@tanghus.net>
- Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
- Tim Dettrick <t.dettrick@uq.edu.au>
- Tobia De Koninck <tobia@ledfan.be>
- Tobias Kaminsky <tobias@kaminsky.me>
- Tom Needham <tom@owncloud.com>
- Torben Dannhauer <torben@dannhauer.de>
- Victor Dubiniuk <dubiniuk@owncloud.com>
- Viktor Szépe <viktor@szepe.net>
- Vincent Chan <plus.vincchan@gmail.com>
- Vincent Cloutier <vincent1cloutier@gmail.com>
- Vincent Petry <pvince81@owncloud.com>
- Volkan Gezer <volkangezer@gmail.com>
- adrien <adrien.waksberg@believedigital.com>
- alexweirig <alex.weirig@technolink.lu>
- brumsel <brumsel@losecatcher.de>
- cetra3 <peter@parashift.com.au>
- cmeh <cmeh@users.noreply.github.com>
- dampfklon <me@dampfklon.de>
- davidgumberg <davidnoizgumberg@gmail.com>
- davitol <dtoledo@solidgear.es>
- derkostka <sebastian.kostka@gmail.com>
- eduardo <eduardo@vnexu.net>
- fabian <fabian@web2.0-apps.de>
- felixboehm <felix@webhippie.de>
- goodkiller <markopraakli@gmail.com>
- helix84 <helix84@centrum.sk>
- hkjolhede <hkjolhede@gmail.com>
- ideaship <ideaship@users.noreply.github.com>
- j-ed <juergen@eisfair.org>
- jknockaert <jasper@knockaert.nl>
- josh4trunks <joshruehlig@gmail.com>
- karakayasemi <karakayasemi@itu.edu.tr>
- macjohnny <estebanmarin@gmx.ch>
- martin-rueegg <martin.rueegg@metaworx.ch>
- martin.mattel@diemattels.at <martin.mattel@diemattels.at>
- michag86 <micha_g@arcor.de>
- mmccarn <mmccarn-github@mmsionline.us>
- nishiki <nishiki@yaegashi.fr>
- oparoz <owncloud@interfasys.ch>
- root <root@oc.(none)>
- scambra <sergio@entrecables.com>
- scolebrook <scolebrook@mac.com>
- shkdee <louis.traynard@m4x.org>
- sualko <klaus@jsxc.org>
- tbartenstein <tbartenstein@users.noreply.github.com>
- tbelau666 <thomas.belau@gmx.de>
- unclejamal3000 <andreas.pramhaas@posteo.de>
- v1r0x <vinzenz.rosenkranz@gmail.com>
- voxsim <Simon Vocella>
ownCloud is written by:
Frank Karlitschek
Robin Appelman
Jakob Sack
Jan-Christoph Borchardt
Michael Gapczynski
Arthur Schiwon
Bart Visscher
Georg Ehrke
Brice Maron
Tom Needham
Marvin Thomas Rabe
Florian Pritz
Bartek Przybylski
Thomas Müller
Klaas Freitag
Sam Tuke
Simon Birnbach
Lukas Reschke
Christian Reiner
Daniel Molkentin
Vincent Petry
With help from many libraries and frameworks including:
Open Collaboration Services
-20
View File
@@ -1,20 +0,0 @@
ChangeLog
=========
NC 11 (2016-12-13)
------------------
* PHP 5.4 and 5.5 no longer supported
* PHP 7.1 support
* OC_L10N removed use \OCP\IL10N (#1948)
* Preview handling is improved by sharing previews:
* Preview sharing (shared files/external storages)
* Previews are stored in the AppData
* Previews are served faster by not first converting them to image objects
* Core preview route changed:
* Route for the urlgenerator changed from 'core_ajax_preview' to 'core.Preview.getPreview'
* $urlGenerator->linkToRoute('core_ajax_preview', ...) => $urlGenerator->linkToRoute('core.Preview.getPreview', ...)
* Avatars are cached
* Avatars are moved to AppData
* For existing avatars this happens automatically in a background job which means that on upgrade you might
not see your avatar right away. However after the job has run it should show up again automatically.
+32 -38
View File
@@ -1,6 +1,6 @@
## Submitting issues
If you have questions about how to install or use Nextcloud, please direct these to our [forum][forum]. We are also available on [IRC][irc].
If you have questions about how to install or use ownCloud, please direct these to the [mailing list][mailinglist] or our [forum][forum]. We are also available on [IRC][irc].
### Short version
@@ -11,58 +11,52 @@ If you have questions about how to install or use Nextcloud, please direct these
- Go to one of the repositories, click "issues" and type any word in the top search/command bar.
- You can also filter by appending e. g. "state:open" to the search string.
- More info on [search syntax within github](https://help.github.com/articles/searching-issues)
* This repository ([server](https://github.com/nextcloud/server/issues)) is *only* for issues within the Nextcloud Server code. This also includes the apps: files, encryption, external storage, sharing, deleted files, versions, LDAP, and WebDAV Auth
* __SECURITY__: Report any potential security bug to us via [our HackerOne page](https://hackerone.com/nextcloud) or security@nextcloud.com following our [security policy](https://nextcloud.com/security/) instead of filing an issue in our bug tracker.
* The issues in other components should be reported in their respective repositories: You will find them in our [GitHub Organization](https://github.com/nextcloud/)
* This repository ([core](https://github.com/owncloud/core/issues)) is *only* for issues within the ownCloud core code. This also includes the apps: files, encryption, external storage, sharing, deleted files, versions, LDAP, and WebDAV Auth
* __SECURITY__: Report any potential security bug to security@owncloud.com following our [security policy](https://owncloud.org/security/) instead of filing an issue in our bug tracker
* The issues in other components should be reported in their respective repositories:
- [Android client](https://github.com/owncloud/android/issues)
- [iOS client](https://github.com/owncloud/ios-issues/issues)
- [Desktop client](https://github.com/owncloud/mirall/issues)
- [Documentation](https://github.com/owncloud/documentation/issues)
- Apps:
- [Activity](https://github.com/owncloud/activity/issues)
- [Bookmarks](https://github.com/owncloud/bookmarks/issues)
- [Calendar](https://github.com/owncloud/calendar/issues)
- [Contacts](https://github.com/owncloud/contacts/issues)
- [Documents](https://github.com/owncloud/documents/issues)
- [Gallery](https://github.com/owncloud/gallery/issues)
- [Mail](https://github.com/owncloud/mail/issues)
- [Music](https://github.com/owncloud/music/issues)
- [News](https://github.com/owncloud/news/issues)
- [Notes](https://github.com/owncloud/notes/issues)
- [Shorty](https://github.com/owncloud/shorty/issues)
- [Tasks](https://github.com/owncloud/tasks/issues)
- [All other apps](https://github.com/owncloud/apps/issues)
* Report the issue using our [template][template], it includes all the information we need to track down the issue.
Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues.
[template]: https://raw.githubusercontent.com/nextcloud/server/master/issue_template.md
[forum]: https://help.nextcloud.com/
[irc]: https://webchat.freenode.net/?channels=nextcloud
[template]: https://raw.github.com/owncloud/core/master/issue_template.md
[mailinglist]: https://mailman.owncloud.org/mailman/listinfo/owncloud
[forum]: https://forum.owncloud.org/
[irc]: https://webchat.freenode.net/?channels=owncloud&uio=d4
## Contributing to Source Code
Thanks for wanting to contribute source code to Nextcloud. That's great!
Thanks for wanting to contribute source code to ownCloud. That's great!
Please read the [Developer Manuals][devmanual] to learn how to create your first application or how to test the Nextcloud code with PHPUnit.
Before we're able to merge your code into the ownCloud core, you need to sign our [Contributor Agreement][agreement].
### Tests
Please read the [Developer Manuals][devmanual] to learn how to create your first application or how to test the ownCloud code with PHPUnit.
In order to constantly increase the quality of our software we can no longer accept pull request which submit un-tested code.
It is a must have that changed and added code segments are unit tested.
In some areas unit testing is hard (aka almost impossible) as of today - in these areas refactoring WHILE fixing a bug is encouraged to enable unit testing.
### Sign your work
We use the Developer Certificate of Origin (DCO) as a additional safeguard
for the Nextcloud project. This is a well established and widely used
mechanism to assure contributors have confirmed their right to license
their contribution under the project's license.
Please read [contribute/developer-certificate-of-origin][dcofile].
If you can certify it, then just add a line to every git commit message:
````
Signed-off-by: Random J Developer <random@developer.example.org>
````
Use your real name (sorry, no pseudonyms or anonymous contributions).
If you set your `user.name` and `user.email` git configs, you can sign your
commit automatically with `git commit -s`. You can also use git [aliases](https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases)
like `git config --global alias.ci 'commit -s'`. Now you can commit with
`git ci` and the commit will be signed.
### Apply a license
In case you are not sure how to add or update the license header correctly please have a look at [contribute/HowToApplyALicense.md][applyalicense]
[devmanual]: https://docs.nextcloud.org/server/12/developer_manual/
[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin
[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md
[agreement]: https://owncloud.org/about/contributor-agreement/
[devmanual]: https://owncloud.org/dev
## Translations
Please submit translations via [Transifex][transifex].
[transifex]: https://www.transifex.com/nextcloud
[transifex]: https://www.transifex.com/projects/p/owncloud/
View File
+3 -3
View File
@@ -1,5 +1,5 @@
Files in Nextcloud are licensed under the Affero General Public License version 3,
the text of which can be found in COPYING, or any later version of the AGPL,
Files in ownCloud are licensed under the Affero General Public License version 3,
the text of which can be found in COPYING-AGPL, or any later version of the AGPL,
unless otherwise noted.
Licensing of components:
@@ -12,4 +12,4 @@ Licensing of components:
All unmodified files from these and other sources retain their original copyright
and license notices: see the relevant individual files.
Attribution information for Nextcloud is contained in the AUTHORS file.
Attribution information for ownCloud is contained in the AUTHORS file.
+26 -54
View File
@@ -1,66 +1,38 @@
# Nextcloud Server
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nextcloud/server/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/nextcloud/server/?branch=master)
[![codecov](https://codecov.io/gh/nextcloud/server/branch/master/graph/badge.svg)](https://codecov.io/gh/nextcloud/server)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/209/badge)](https://bestpractices.coreinfrastructure.org/projects/209)
[![irc](https://img.shields.io/badge/IRC-%23nextcloud%20on%20freenode-orange.svg)](https://webchat.freenode.net/?channels=nextcloud)
[![irc](https://img.shields.io/badge/IRC-%23nextcloud--dev%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-dev)
# ownCloud
**A safe home for all your data.**
[ownCloud](http://ownCloud.org) gives you freedom and control over your own data.
A personal cloud which runs on your own server.
![](https://github.com/nextcloud/screenshots/blob/master/files/filelist.png)
### Build Status on [Jenkins CI](https://ci.owncloud.org/)
Git master: [![Build Status](https://ci.owncloud.org/job/server-master-linux/badge/icon)](https://ci.owncloud.org/job/server-master-linux/)
## Why is this so awesome?
Quality:
- Scrutinizer: [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/owncloud/core/badges/quality-score.png?s=ce2f5ded03d4ac628e9ee5c767243fa7412e644f)](https://scrutinizer-ci.com/g/owncloud/core/)
- CodeClimate: [![Code Climate](https://codeclimate.com/github/owncloud/core/badges/gpa.svg)](https://codeclimate.com/github/owncloud/core)
* :file_folder: **Access your Data** You can store your files, contacts, calendars and more on a server of your choosing.
* :package: **Sync your Data** You keep your files, contacts, calendars and more synchronized amongst your devices.
* :arrows_counterclockwise: **Share your Data** …by giving others access to the stuff you want them to see or to collaborate with.
* :rocket: **Expandable with dozens of Apps** ...like [Calendar](https://github.com/nextcloud/calendar), [Contacts](https://github.com/nextcloud/contacts), [Mail](https://github.com/nextcloud/mail) and all those you can discover in our [App Store](https://apps.nextcloud.com)
* :lock: **Security** with our encryption mechanisms, [HackerOne bounty program](https://hackerone.com/nextcloud) and two-factor authentification.
Dependencies:
*You want to learn more about how you can use Nextcloud to access, share and protect your files, calendars, contacts, communication & more at home and at your Enterprise?* [**Learn about all our Features**](https://nextcloud.com/features).
[![Dependency Status](https://www.versioneye.com/user/projects/54f4a2384f3108959a000a16/badge.svg?style=flat)](https://www.versioneye.com/user/projects/54f4a2384f3108959a000a16)
## Get your Nextcloud
[![Dependency Status](https://www.versioneye.com/user/projects/54d1f76f3ca0840b190000c0/badge.svg?style=flat)](https://www.versioneye.com/user/projects/54d1f76f3ca0840b190000c0)
- [**Install** a server by yourself on your own hardware or by using one of our ready to use **Appliances**](https://nextcloud.com/install/#instructions-server)
- [Buy one of the awesome **devices** coming with a preinstalled Nextcloud](https://nextcloud.com/devices/)
- [Find a service **provider** who is hosting Nextcloud for you or your company](https://nextcloud.com/providers/)
### Installation instructions
https://doc.owncloud.org/server/8.2/developer_manual/app/index.html
*Enterprise? Public Sector or Education user? You may want to have a look into the [**Enterprise Support Subscription**](https://nextcloud.com/enterprise/) provided by the Nextcloud GmbH*
### Contribution Guidelines
https://owncloud.org/contribute/
## Get in touch
### Get in touch
* [Forum](https://forum.owncloud.org)
* [Mailing list](https://mailman.owncloud.org/mailman/listinfo)
* [IRC channel](https://webchat.freenode.net/?channels=owncloud)
* [Twitter](https://twitter.com/ownClouders)
* :clipboard: [Forum](https://help.nextcloud.com)
* :busts_in_silhouette: [Facebook](https://facebook.com/nextclouders)
* :hatching_chick: [Twitter](https://twitter.com/Nextclouders)
### Important notice on translations
Please submit translations via Transifex:
https://www.transifex.com/projects/p/owncloud/
[…learn more about how to get support for Nextcloud here!](https://nextcloud.com/support)
[![Transifex](https://www.transifex.com/projects/p/owncloud/resource/core/chart/image_png)](https://www.transifex.com/projects/p/owncloud/)
## Contribution Guidelines
All contributions to this repository from June, 16 2016 on are considered to be
licensed under the AGPLv3 or any later version.
Nextcloud doesn't require a CLA (Contributor License Agreement).
The copyright belongs to all the individual contributors. Therefore we recommend
that every contributor adds following line to the header of a file, if they
changed it substantially:
```
@copyright Copyright (c) <year>, <your name> (<your email address>)
```
Please read the [Code of Conduct](https://nextcloud.com/community/code-of-conduct/). This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other.
Please review the [guidelines for contributing](https://github.com/nextcloud/server/blob/master/CONTRIBUTING.md) to this repository.
More information how to contribute: [https://nextcloud.com/contribute/](https://nextcloud.com/contribute/)
## Running master checkouts
Third-party components are handled as git submodules which have to be initialized first. So aside from the regular git checkout invoking `git submodule update --init` or a similar command is needed, for details see Git documentation.
Several apps by default included in regular releases like [firstrunwizard](https://github.com/nextcloud/firstrunwizard) or [gallery](https://github.com/nextcloud/gallery) are missing in `master` and have to be installed manually as required.
That aside Git checkouts can be handled the same as release archives.
Note they should never be used on production systems.
For more detailed information about translations:
http://doc.owncloud.org/server/8.2/developer_manual/core/translation.html
-37
View File
@@ -1,37 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
$logger = \OC::$server->getLogger();
$userSession = \OC::$server->getUserSession();
$groupManager = \OC::$server->getGroupManager();
$eventDispatcher = \OC::$server->getEventDispatcher();
$auditLogger = new \OCA\Admin_Audit\AuditLogger(
$logger,
$userSession,
$groupManager,
$eventDispatcher
);
$auditLogger->registerHooks();
-15
View File
@@ -1,15 +0,0 @@
<?xml version="1.0"?>
<info>
<id>admin_audit</id>
<name>Auditing / Logging</name>
<description>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</description>
<licence>AGPL</licence>
<author>Nextcloud</author>
<version>1.2.0</version>
<dependencies>
<nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
<logging/>
</types>
</info>
-88
View File
@@ -1,88 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit\Actions;
use OCP\ILogger;
class Action {
/** @var ILogger */
private $logger;
/**
* @param ILogger $logger
*/
public function __construct(ILogger $logger) {
$this->logger = $logger;
}
/**
* Log a single action with a log level of info
*
* @param string $text
* @param array $params
* @param array $elements
* @param bool $obfuscateParameters
*/
public function log($text,
array $params,
array $elements,
$obfuscateParameters = false) {
foreach($elements as $element) {
if(!isset($params[$element])) {
if ($obfuscateParameters) {
$this->logger->critical(
'$params["'.$element.'"] was missing.',
['app' => 'admin_audit']
);
} else {
$this->logger->critical(
sprintf(
'$params["'.$element.'"] was missing. Transferred value: %s',
print_r($params, true)
),
['app' => 'admin_audit']
);
}
return;
}
}
$replaceArray = [];
foreach($elements as $element) {
if($params[$element] instanceof \DateTime) {
$params[$element] = $params[$element]->format('Y-m-d H:i:s');
}
$replaceArray[] = $params[$element];
}
$this->logger->info(
vsprintf(
$text,
$replaceArray
),
[
'app' => 'admin_audit'
]
);
}
}
-60
View File
@@ -1,60 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit\Actions;
/**
* Class Auth logs all auth related actions
*
* @package OCA\Admin_Audit\Actions
*/
class Auth extends Action {
public function loginAttempt(array $params) {
$this->log(
'Login attempt: "%s"',
$params,
[
'uid',
],
true
);
}
public function loginSuccessful(array $params) {
$this->log(
'Login successful: "%s"',
$params,
[
'uid',
],
true
);
}
public function logout(array $params) {
$this->log(
'Logout occurred',
[],
[]
);
}
}
-164
View File
@@ -1,164 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit\Actions;
/**
* Class Files logs the actions to files
*
* @package OCA\Admin_Audit\Actions
*/
class Files extends Action {
/**
* Logs file read actions
*
* @param array $params
*/
public function read(array $params) {
$this->log(
'File accessed: "%s"',
$params,
[
'path',
]
);
}
/**
* Logs rename actions of files
*
* @param array $params
*/
public function rename(array $params) {
$this->log(
'File renamed: "%s" to "%s"',
$params,
[
'oldpath',
'newpath',
]
);
}
/**
* Logs creation of files
*
* @param array $params
*/
public function create(array $params) {
if ($params['path'] === '/' || $params['path'] === '' || $params['path'] === null) {
return;
}
$this->log(
'File created: "%s"',
$params,
[
'path',
]
);
}
/**
* Logs copying of files
*
* @param array $params
*/
public function copy(array $params) {
$this->log(
'File copied: "%s" to "%s"',
$params,
[
'oldpath',
'newpath',
]
);
}
/**
* Logs writing of files
*
* @param array $params
*/
public function write(array $params) {
if ($params['path'] === '/' || $params['path'] === '' || $params['path'] === null) {
return;
}
$this->log(
'File written to: "%s"',
$params,
[
'path',
]
);
}
/**
* Logs update of files
*
* @param array $params
*/
public function update(array $params) {
$this->log(
'File updated: "%s"',
$params,
[
'path',
]
);
}
/**
* Logs deletions of files
*
* @param array $params
*/
public function delete(array $params) {
$this->log(
'File deleted: "%s"',
$params,
[
'path',
]
);
}
/**
* Logs preview access to a file
*
* @param array $params
*/
public function preview(array $params) {
$this->log(
'Preview accessed: "%s" (width: "%s", height: "%s" crop: "%s", mode: "%s")',
$params,
[
'path',
'width',
'height',
'crop',
'mode'
]
);
}
}
@@ -1,108 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roger Szabo <roger.szabo@web.de>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit\Actions;
use OCA\Admin_Audit\Actions\Action;
use OCP\IGroup;
use OCP\IUser;
/**
* Class GroupManagement logs all group manager related events
*
* @package OCA\Admin_Audit
*/
class GroupManagement extends Action {
/**
* log add user to group event
*
* @param IGroup $group
* @param IUser $user
*/
public function addUser(IGroup $group, IUser $user) {
$this->log('User "%s" added to group "%s"',
[
'group' => $group->getGID(),
'user' => $user->getUID()
],
[
'user', 'group'
]
);
}
/**
* log remove user from group event
*
* @param IGroup $group
* @param IUser $user
*/
public function removeUser(IGroup $group, IUser $user) {
$this->log('User "%s" removed from group "%s"',
[
'group' => $group->getGID(),
'user' => $user->getUID()
],
[
'user', 'group'
]
);
}
/**
* log create group to group event
*
* @param IGroup $group
*/
public function createGroup(IGroup $group) {
$this->log('Group created: "%s"',
[
'group' => $group->getGID()
],
[
'group'
]
);
}
/**
* log delete group to group event
*
* @param IGroup $group
*/
public function deleteGroup(IGroup $group) {
$this->log('Group deleted: "%s"',
[
'group' => $group->getGID()
],
[
'group'
]
);
}
}
-191
View File
@@ -1,191 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit\Actions;
use OCP\Share;
/**
* Class Sharing logs the sharing actions
*
* @package OCA\Admin_Audit\Actions
*/
class Sharing extends Action {
/**
* Logs sharing of data
*
* @param array $params
*/
public function shared(array $params) {
if($params['shareType'] === Share::SHARE_TYPE_LINK) {
$this->log(
'The %s "%s" with ID "%s" has been shared via link with permissions "%s" (Share ID: %s)',
$params,
[
'itemType',
'itemTarget',
'itemSource',
'permissions',
'id',
]
);
} elseif($params['shareType'] === Share::SHARE_TYPE_USER) {
$this->log(
'The %s "%s" with ID "%s" has been shared to the user "%s" with permissions "%s" (Share ID: %s)',
$params,
[
'itemType',
'itemTarget',
'itemSource',
'shareWith',
'permissions',
'id',
]
);
} elseif($params['shareType'] === Share::SHARE_TYPE_GROUP) {
$this->log(
'The %s "%s" with ID "%s" has been shared to the group "%s" with permissions "%s" (Share ID: %s)',
$params,
[
'itemType',
'itemTarget',
'itemSource',
'shareWith',
'permissions',
'id',
]
);
}
}
/**
* Logs unsharing of data
*
* @param array $params
*/
public function unshare(array $params) {
if($params['shareType'] === Share::SHARE_TYPE_LINK) {
$this->log(
'The %s "%s" with ID "%s" has been unshared (Share ID: %s)',
$params,
[
'itemType',
'fileTarget',
'itemSource',
'id',
]
);
} elseif($params['shareType'] === Share::SHARE_TYPE_USER) {
$this->log(
'The %s "%s" with ID "%s" has been unshared from the user "%s" (Share ID: %s)',
$params,
[
'itemType',
'fileTarget',
'itemSource',
'shareWith',
'id',
]
);
} elseif($params['shareType'] === Share::SHARE_TYPE_GROUP) {
$this->log(
'The %s "%s" with ID "%s" has been unshared from the group "%s" (Share ID: %s)',
$params,
[
'itemType',
'fileTarget',
'itemSource',
'shareWith',
'id',
]
);
}
}
/**
* Logs the updating of permission changes for shares
*
* @param array $params
*/
public function updatePermissions(array $params) {
$this->log(
'The permissions of the shared %s "%s" with ID "%s" have been changed to "%s"',
$params,
[
'itemType',
'path',
'itemSource',
'permissions',
]
);
}
/**
* Logs the password changes for a share
*
* @param array $params
*/
public function updatePassword(array $params) {
$this->log(
'The password of the publicly shared %s "%s" with ID "%s" has been changed',
$params,
[
'itemType',
'token',
'itemSource',
]
);
}
/**
* Logs the expiration date changes for a share
*
* @param array $params
*/
public function updateExpirationDate(array $params) {
$this->log(
'The expiration date of the publicly shared %s with ID "%s" has been changed to "%s"',
$params,
[
'itemType',
'itemSource',
'date',
]
);
}
/**
* Logs access of shared files
*
* @param array $params
*/
public function shareAccessed(array $params) {
$this->log(
'The shared %s with the token "%s" by "%s" has been accessed.',
$params,
[
'itemType',
'token',
'uidOwner',
]
);
}
}
-42
View File
@@ -1,42 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit\Actions;
class Trashbin extends Action {
public function delete($params) {
$this->log('File "%s" deleted from trash bin.',
['path' => $params['path']], ['path']
);
}
public function restore($params) {
$this->log('File "%s" restored from trash bin.',
['path' => $params['filePath']], ['path']
);
}
}
@@ -1,98 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit\Actions;
use OCP\IUser;
/**
* Class UserManagement logs all user management related actions.
*
* @package OCA\Admin_Audit\Actions
*/
class UserManagement extends Action {
/**
* Log creation of users
*
* @param array $params
*/
public function create(array $params) {
$this->log(
'User created: "%s"',
$params,
[
'uid',
]
);
}
/**
* Log deletion of users
*
* @param array $params
*/
public function delete(array $params) {
$this->log(
'User deleted: "%s"',
$params,
[
'uid',
]
);
}
/**
* Log enabling of users
*
* @param array $params
*/
public function change(array $params) {
if ($params['feature'] === 'enabled') {
$this->log(
$params['value'] === 'true' ? 'User enabled: "%s"' : 'User disabled: "%s"',
['user' => $params['user']->getUID()],
[
'user',
]
);
}
}
/**
* Logs changing of the user scope
*
* @param IUser $user
*/
public function setPassword(IUser $user) {
if($user->getBackendClassName() === 'Database') {
$this->log(
'Password of user "%s" has been changed',
[
'user' => $user->getUID(),
],
[
'user',
]
);
}
}
}
-47
View File
@@ -1,47 +0,0 @@
<?php
/**
* @copyright Bjoern Schiessle <bjoern@schiessle.org>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit\Actions;
class Versions extends Action {
public function rollback($params) {
$this->log('Version "%s" of "%s" was restored.',
[
'version' => $params['revision'],
'path' => $params['path']
],
['version', 'path']
);
}
public function delete($params) {
$this->log('Version "%s" was deleted.',
['path' => $params['path']],
['path']
);
}
}
-209
View File
@@ -1,209 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Roger Szabo <roger.szabo@web.de>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Admin_Audit;
use OC\Files\Filesystem;
use OC\Files\Node\File;
use OCA\Admin_Audit\Actions\Auth;
use OCA\Admin_Audit\Actions\Files;
use OCA\Admin_Audit\Actions\GroupManagement;
use OCA\Admin_Audit\Actions\Sharing;
use OCA\Admin_Audit\Actions\Trashbin;
use OCA\Admin_Audit\Actions\UserManagement;
use OCA\Admin_Audit\Actions\Versions;
use OCP\IGroupManager;
use OCP\ILogger;
use OCP\IPreview;
use OCP\IUserSession;
use OCP\Util;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
class AuditLogger {
/** @var ILogger */
private $logger;
/** @var IUserSession */
private $userSession;
/** @var IGroupManager */
private $groupManager;
/**
* AuditLogger constructor.
*
* @param ILogger $logger
* @param IUserSession $userSession
* @param IGroupManager $groupManager
* @param EventDispatcherInterface $eventDispatcher
*/
public function __construct(ILogger $logger,
IUserSession $userSession,
IGroupManager $groupManager,
EventDispatcherInterface $eventDispatcher) {
$this->logger = $logger;
$this->userSession = $userSession;
$this->groupManager = $groupManager;
$this->eventDispatcher = $eventDispatcher;
}
/**
* Register hooks in order to log them
*/
public function registerHooks() {
$this->userManagementHooks();
$this->groupHooks();
$this->sharingHooks();
$this->authHooks();
$this->fileHooks();
$this->trashbinHooks();
$this->versionsHooks();
}
/**
* Connect to user management hooks
*/
private function userManagementHooks() {
$userActions = new UserManagement($this->logger);
Util::connectHook('OC_User', 'post_createUser', $userActions, 'create');
Util::connectHook('OC_User', 'post_deleteUser', $userActions, 'delete');
Util::connectHook('OC_User', 'changeUser', $userActions, 'change');
$this->userSession->listen('\OC\User', 'postSetPassword', [$userActions, 'setPassword']);
}
private function groupHooks() {
$groupActions = new GroupManagement($this->logger);
$this->groupManager->listen('\OC\Group', 'postRemoveUser', [$groupActions, 'removeUser']);
$this->groupManager->listen('\OC\Group', 'postAddUser', [$groupActions, 'addUser']);
$this->groupManager->listen('\OC\Group', 'postDelete', [$groupActions, 'deleteGroup']);
$this->groupManager->listen('\OC\Group', 'postCreate', [$groupActions, 'createGroup']);
}
/**
* connect to sharing events
*/
private function sharingHooks() {
$shareActions = new Sharing($this->logger);
Util::connectHook('OCP\Share', 'post_shared', $shareActions, 'shared');
Util::connectHook('OCP\Share', 'post_unshare', $shareActions, 'unshare');
Util::connectHook('OCP\Share', 'post_update_permissions', $shareActions, 'updatePermissions');
Util::connectHook('OCP\Share', 'post_update_password', $shareActions, 'updatePassword');
Util::connectHook('OCP\Share', 'post_set_expiration_date', $shareActions, 'updateExpirationDate');
Util::connectHook('OCP\Share', 'share_link_access', $shareActions, 'shareAccessed');
}
/**
* connect to authentication event and related actions
*/
private function authHooks() {
$authActions = new Auth($this->logger);
Util::connectHook('OC_User', 'pre_login', $authActions, 'loginAttempt');
Util::connectHook('OC_User', 'post_login', $authActions, 'loginSuccessful');
Util::connectHook('OC_User', 'logout', $authActions, 'logout');
}
/**
* Connect to file hooks
*/
private function fileHooks() {
$fileActions = new Files($this->logger);
$this->eventDispatcher->addListener(
IPreview::EVENT,
function(GenericEvent $event) use ($fileActions) {
/** @var File $file */
$file = $event->getSubject();
$fileActions->preview([
'path' => substr($file->getInternalPath(), 5),
'width' => $event->getArguments()['width'],
'height' => $event->getArguments()['height'],
'crop' => $event->getArguments()['crop'],
'mode' => $event->getArguments()['mode']
]);
}
);
Util::connectHook(
Filesystem::CLASSNAME,
Filesystem::signal_post_rename,
$fileActions,
'rename'
);
Util::connectHook(
Filesystem::CLASSNAME,
Filesystem::signal_post_create,
$fileActions,
'create'
);
Util::connectHook(
Filesystem::CLASSNAME,
Filesystem::signal_post_copy,
$fileActions,
'copy'
);
Util::connectHook(
Filesystem::CLASSNAME,
Filesystem::signal_post_write,
$fileActions,
'write'
);
Util::connectHook(
Filesystem::CLASSNAME,
Filesystem::signal_post_update,
$fileActions,
'update'
);
Util::connectHook(
Filesystem::CLASSNAME,
Filesystem::signal_read,
$fileActions,
'read'
);
Util::connectHook(
Filesystem::CLASSNAME,
Filesystem::signal_delete,
$fileActions,
'delete'
);
}
public function versionsHooks() {
$versionsActions = new Versions($this->logger);
Util::connectHook('\OCP\Versions', 'rollback', $versionsActions, 'rollback');
Util::connectHook('\OCP\Versions', 'delete',$versionsActions, 'delete');
}
/**
* Connect to trash bin hooks
*/
private function trashbinHooks() {
$trashActions = new Trashbin($this->logger);
Util::connectHook('\OCP\Trashbin', 'preDelete', $trashActions, 'delete');
Util::connectHook('\OCA\Files_Trashbin\Trashbin', 'post_restore', $trashActions, 'restore');
}
}
-70
View File
@@ -1,70 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Joas Schilling <coding@schilljs.com>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @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/>
*
*/
$eventDispatcher = \OC::$server->getEventDispatcher();
$eventDispatcher->addListener(
'OCA\Files::loadAdditionalScripts',
function() {
\OCP\Util::addScript('oc-backbone-webdav');
\OCP\Util::addScript('comments', 'merged');
\OCP\Util::addStyle('comments', 'comments');
}
);
$eventDispatcher->addListener(\OCP\Comments\CommentsEntityEvent::EVENT_ENTITY, function(\OCP\Comments\CommentsEntityEvent $event) {
$event->addEntityCollection('files', function($name) {
$nodes = \OC::$server->getUserFolder()->getById(intval($name));
return !empty($nodes);
});
});
$notificationManager = \OC::$server->getNotificationManager();
$notificationManager->registerNotifier(
function() {
$application = new \OCP\AppFramework\App('comments');
return $application->getContainer()->query(\OCA\Comments\Notification\Notifier::class);
},
function () {
$l = \OC::$server->getL10N('comments');
return ['id' => 'comments', 'name' => $l->t('Comments')];
}
);
$commentsManager = \OC::$server->getCommentsManager();
$commentsManager->registerEventHandler(function () {
$application = new \OCP\AppFramework\App('comments');
/** @var \OCA\Comments\EventHandler $handler */
$handler = $application->getContainer()->query(\OCA\Comments\EventHandler::class);
return $handler;
});
$commentsManager->registerDisplayNameResolver('user', function($id) {
$manager = \OC::$server->getUserManager();
$user = $manager->get($id);
if(is_null($user)) {
$l = \OC::$server->getL10N('comments');
$displayName = $l->t('Unknown user');
} else {
$displayName = $user->getDisplayName();
}
return $displayName;
});
-30
View File
@@ -1,30 +0,0 @@
<?xml version="1.0"?>
<info>
<id>comments</id>
<name>Comments</name>
<description>Files app plugin to add comments to files</description>
<licence>AGPL</licence>
<author>Arthur Schiwon, Vincent Petry</author>
<default_enable/>
<version>1.2.0</version>
<dependencies>
<nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
<logging/>
</types>
<activity>
<settings>
<setting>OCA\Comments\Activity\Setting</setting>
</settings>
<filters>
<filter>OCA\Comments\Activity\Filter</filter>
</filters>
<providers>
<provider>OCA\Comments\Activity\Provider</provider>
</providers>
</activity>
</info>
-28
View File
@@ -1,28 +0,0 @@
<?php
/**
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @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/>
*
*/
use \OCA\Comments\AppInfo\Application;
$application = new Application();
$application->registerRoutes($this, ['routes' => [
['name' => 'Notifications#view', 'url' => '/notifications/view/{id}', 'verb' => 'GET'],
]]);
-174
View File
@@ -1,174 +0,0 @@
/*
* Copyright (c) 2016
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
#commentsTabView .emptycontent {
margin-top: 0;
}
#commentsTabView .newCommentForm {
position: relative;
margin-bottom: 20px;
}
#commentsTabView .newCommentForm .message {
width: calc(100% - 81px); /* 36 (left margin) + 30 (right padding) + 15 (right padding of surrounding box) */
margin-left: 36px;
padding-right: 30px;
display: block;
}
#commentsTabView .newCommentForm .submit {
position: absolute;
bottom: 0px;
right: 8px;
width: 30px;
margin: 0;
padding: 7px 9px;
background-color: transparent;
border: none;
opacity: .3;
}
#commentsTabView .newCommentForm .submit:hover,
#commentsTabView .newCommentForm .submit:focus {
opacity: 1;
}
#commentsTabView .newCommentForm .submitLoading {
background-position: left;
}
#commentsTabView .newCommentForm .cancel {
margin-right: 6px;
}
#commentsTabView .newCommentForm textarea {
resize: none;
}
#commentsTabView .comment {
position: relative;
margin-bottom: 30px;
}
#commentsTabView .comment .avatar {
width: 32px;
height: 32px;
line-height: 32px;
}
#commentsTabView .comment .message .avatar {
display: inline-block;
}
#activityTabView li.comment.collapsed .activitymessage,
#commentsTabView .comment.collapsed .message {
white-space: pre-wrap;
}
#activityTabView li.comment.collapsed .activitymessage,
#commentsTabView .comment.collapsed .message {
max-height: 70px;
overflow: hidden;
}
#activityTabView li.comment .message-overlay,
#commentsTabView .comment .message-overlay {
display: none;
}
#activityTabView li.comment.collapsed .message-overlay,
#commentsTabView .comment.collapsed .message-overlay {
display: block;
position: absolute;
z-index: 2;
height: 50px;
pointer-events: none;
left: 0;
right: 0;
bottom: 0;
background: -moz-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1));
background: -webkit-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1));
background: -o-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1));
background: -ms-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1));
background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1));
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');
background-repeat: no-repeat;
}
#commentsTabView .authorRow>div {
display: inline-block;
vertical-align: middle;
}
#commentsTabView .authorRow>div.hidden {
display: none !important;
}
#commentsTabView .comments li .message .avatar-name-wrapper,
#commentsTabView .comment .authorRow {
position: relative;
cursor: pointer;
}
#commentsTabView .comment .author,
#commentsTabView .comment .date {
opacity: .5;
}
#commentsTabView .comment .author {
margin-left: 5px;
}
#commentsTabView .comment .date {
position: absolute;
right: 0;
top: 5px;
}
#commentsTabView .comments li .message {
padding-left: 40px;
}
#commentsTabView .comment .action {
opacity: 0;
vertical-align: middle;
display: inline-block;
}
#commentsTabView .comment:hover .action {
opacity: 0.3;
}
#commentsTabView .comment .action:hover {
opacity: 1;
}
#commentsTabView .comment .action.delete {
position: absolute;
right: 0;
}
#commentsTabView .comment.disabled {
opacity: 0.3;
}
#commentsTabView .comment.disabled .action {
visibility: hidden;
}
#commentsTabView .message.error {
color: #e9322d;
border-color: #e9322d;
-webkit-box-shadow: 0 0 6px #f8b9b7;
-moz-box-shadow: 0 0 6px #f8b9b7;
box-shadow: 0 0 6px #f8b9b7;
}
.app-files .action-comment {
padding: 16px 14px;
}
-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" viewBox="0 0 32 32"><path fill="#000" d="M16 3C7.163 3 0 7.925 0 14s7.163 11 16 11c.5 0 .98-.032 1.47-.063L26 32v-9.406c3.658-2.017 6-5.12 6-8.595 0-6.076-7.164-11-16-11z"/></svg>

Before

Width:  |  Height:  |  Size: 243 B

-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" viewBox="0 0 32 32"><path fill="#fff" d="M16 3C7.163 3 0 7.925 0 14s7.163 11 16 11c.5 0 .98-.032 1.47-.063L26 32v-9.406c3.658-2.017 6-5.12 6-8.595 0-6.076-7.164-11-16-11z"/></svg>

Before

Width:  |  Height:  |  Size: 242 B

-59
View File
@@ -1,59 +0,0 @@
/*
* @author Joas Schilling <coding@schilljs.com>
* Copyright (c) 2016
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*/
(function() {
OCA.Comments.ActivityTabViewPlugin = {
/**
* Prepare activity for display
*
* @param {OCA.Activity.ActivityModel} model for this activity
* @param {jQuery} $el jQuery handle for this activity
* @param {string} view The view that displayes this activity
*/
prepareModelForDisplay: function (model, $el, view) {
if (model.get('app') !== 'comments' || model.get('type') !== 'comments') {
return;
}
if (view === 'ActivityTabView') {
$el.addClass('comment');
if (model.get('message') && this._isLong(model.get('message'))) {
$el.addClass('collapsed');
var $overlay = $('<div>').addClass('message-overlay');
$el.find('.activitymessage').after($overlay);
$el.on('click', this._onClickCollapsedComment);
}
}
},
/*
* Copy of CommentsTabView._onClickComment()
*/
_onClickCollapsedComment: function(ev) {
var $row = $(ev.target);
if (!$row.is('.comment')) {
$row = $row.closest('.comment');
}
$row.removeClass('collapsed');
},
/*
* Copy of CommentsTabView._isLong()
*/
_isLong: function(message) {
return message.length > 250 || (message.match(/\n/g) || []).length > 1;
}
};
})();
OC.Plugins.register('OCA.Activity.RenderingPlugins', OCA.Comments.ActivityTabViewPlugin);
-20
View File
@@ -1,20 +0,0 @@
/*
* Copyright (c) 2016 Vincent Petry <pvince81@owncloud.com>
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
(function() {
if (!OCA.Comments) {
/**
* @namespace
*/
OCA.Comments = {};
}
})();
-167
View File
@@ -1,167 +0,0 @@
/*
* Copyright (c) 2016
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
(function(OC, OCA) {
/**
* @class OCA.Comments.CommentCollection
* @classdesc
*
* Collection of comments assigned to a file
*
*/
var CommentCollection = OC.Backbone.Collection.extend(
/** @lends OCA.Comments.CommentCollection.prototype */ {
sync: OC.Backbone.davSync,
model: OCA.Comments.CommentModel,
/**
* Object type
*
* @type string
*/
_objectType: 'files',
/**
* Object id
*
* @type string
*/
_objectId: null,
/**
* True if there are no more page results left to fetch
*
* @type bool
*/
_endReached: false,
/**
* Number of comments to fetch per page
*
* @type int
*/
_limit : 20,
/**
* Initializes the collection
*
* @param {string} [options.objectType] object type
* @param {string} [options.objectId] object id
*/
initialize: function(models, options) {
options = options || {};
if (options.objectType) {
this._objectType = options.objectType;
}
if (options.objectId) {
this._objectId = options.objectId;
}
},
url: function() {
return OC.linkToRemote('dav') + '/comments/' +
encodeURIComponent(this._objectType) + '/' +
encodeURIComponent(this._objectId) + '/';
},
setObjectId: function(objectId) {
this._objectId = objectId;
},
hasMoreResults: function() {
return !this._endReached;
},
reset: function() {
this._endReached = false;
this._summaryModel = null;
return OC.Backbone.Collection.prototype.reset.apply(this, arguments);
},
/**
* Fetch the next set of results
*/
fetchNext: function(options) {
var self = this;
if (!this.hasMoreResults()) {
return null;
}
var body = '<?xml version="1.0" encoding="utf-8" ?>\n' +
'<oc:filter-comments xmlns:D="DAV:" xmlns:oc="http://owncloud.org/ns">\n' +
// load one more so we know there is more
' <oc:limit>' + (this._limit + 1) + '</oc:limit>\n' +
' <oc:offset>' + this.length + '</oc:offset>\n' +
'</oc:filter-comments>\n';
options = options || {};
var success = options.success;
options = _.extend({
remove: false,
parse: true,
data: body,
davProperties: CommentCollection.prototype.model.prototype.davProperties,
success: function(resp) {
if (resp.length <= self._limit) {
// no new entries, end reached
self._endReached = true;
} else {
// remove last entry, for next page load
resp = _.initial(resp);
}
if (!self.set(resp, options)) {
return false;
}
if (success) {
success.apply(null, arguments);
}
self.trigger('sync', 'REPORT', self, options);
}
}, options);
return this.sync('REPORT', this, options);
},
/**
* Returns the matching summary model
*
* @return {OCA.Comments.CommentSummaryModel} summary model
*/
getSummaryModel: function() {
if (!this._summaryModel) {
this._summaryModel = new OCA.Comments.CommentSummaryModel({
id: this._objectId,
objectType: this._objectType
});
}
return this._summaryModel;
},
/**
* Updates the read marker for this comment thread
*
* @param {Date} [date] optional date, defaults to now
* @param {Object} [options] backbone options
*/
updateReadMarker: function(date, options) {
options = options || {};
return this.getSummaryModel().save({
readMarker: (date || new Date()).toUTCString()
}, options);
}
});
OCA.Comments.CommentCollection = CommentCollection;
})(OC, OCA);
-93
View File
@@ -1,93 +0,0 @@
/*
* Copyright (c) 2016
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
(function(OC, OCA) {
_.extend(OC.Files.Client, {
PROPERTY_FILEID: '{' + OC.Files.Client.NS_OWNCLOUD + '}id',
PROPERTY_MESSAGE: '{' + OC.Files.Client.NS_OWNCLOUD + '}message',
PROPERTY_ACTORTYPE: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorType',
PROPERTY_ACTORID: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorId',
PROPERTY_ISUNREAD: '{' + OC.Files.Client.NS_OWNCLOUD + '}isUnread',
PROPERTY_OBJECTID: '{' + OC.Files.Client.NS_OWNCLOUD + '}objectId',
PROPERTY_OBJECTTYPE: '{' + OC.Files.Client.NS_OWNCLOUD + '}objectType',
PROPERTY_ACTORDISPLAYNAME: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorDisplayName',
PROPERTY_CREATIONDATETIME: '{' + OC.Files.Client.NS_OWNCLOUD + '}creationDateTime',
PROPERTY_MENTIONS: '{' + OC.Files.Client.NS_OWNCLOUD + '}mentions'
});
/**
* @class OCA.Comments.CommentModel
* @classdesc
*
* Comment
*
*/
var CommentModel = OC.Backbone.Model.extend(
/** @lends OCA.Comments.CommentModel.prototype */ {
sync: OC.Backbone.davSync,
defaults: {
actorType: 'users',
objectType: 'files'
},
davProperties: {
'id': OC.Files.Client.PROPERTY_FILEID,
'message': OC.Files.Client.PROPERTY_MESSAGE,
'actorType': OC.Files.Client.PROPERTY_ACTORTYPE,
'actorId': OC.Files.Client.PROPERTY_ACTORID,
'actorDisplayName': OC.Files.Client.PROPERTY_ACTORDISPLAYNAME,
'creationDateTime': OC.Files.Client.PROPERTY_CREATIONDATETIME,
'objectType': OC.Files.Client.PROPERTY_OBJECTTYPE,
'objectId': OC.Files.Client.PROPERTY_OBJECTID,
'isUnread': OC.Files.Client.PROPERTY_ISUNREAD,
'mentions': OC.Files.Client.PROPERTY_MENTIONS
},
parse: function(data) {
return {
id: data.id,
message: data.message,
actorType: data.actorType,
actorId: data.actorId,
actorDisplayName: data.actorDisplayName,
creationDateTime: data.creationDateTime,
objectType: data.objectType,
objectId: data.objectId,
isUnread: (data.isUnread === 'true'),
mentions: this._parseMentions(data.mentions)
};
},
_parseMentions: function(mentions) {
if(_.isUndefined(mentions)) {
return {};
}
var result = {};
for(var i in mentions) {
var mention = mentions[i];
if(_.isUndefined(mention.localName) || mention.localName !== 'mention') {
continue;
}
result[i] = {};
for (var child = mention.firstChild; child; child = child.nextSibling) {
if(_.isUndefined(child.localName) || !child.localName.startsWith('mention')) {
continue;
}
result[i][child.localName] = child.textContent;
}
}
return result;
}
});
OCA.Comments.CommentModel = CommentModel;
})(OC, OCA);
-526
View File
@@ -1,526 +0,0 @@
/*
* Copyright (c) 2016
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
/* global Handlebars, escapeHTML */
(function(OC, OCA) {
var TEMPLATE =
'<ul class="comments">' +
'</ul>' +
'<div class="emptycontent hidden"><div class="icon-comment"></div>' +
'<p>{{emptyResultLabel}}</p></div>' +
'<input type="button" class="showMore hidden" value="{{moreLabel}}"' +
' name="show-more" id="show-more" />' +
'<div class="loading hidden" style="height: 50px"></div>';
var EDIT_COMMENT_TEMPLATE =
'<div class="newCommentRow comment" data-id="{{id}}">' +
' <div class="authorRow">' +
' <div class="avatar" data-username="{{actorId}}"></div>' +
' <div class="author">{{actorDisplayName}}</div>' +
'{{#if isEditMode}}' +
' <a href="#" class="action delete icon icon-delete has-tooltip" title="{{deleteTooltip}}"></a>' +
'{{/if}}' +
' </div>' +
' <form class="newCommentForm">' +
' <textarea rows="1" class="message" placeholder="{{newMessagePlaceholder}}">{{message}}</textarea>' +
' <input class="submit icon-confirm" type="submit" value="" />' +
'{{#if isEditMode}}' +
' <input class="cancel pull-right" type="button" value="{{cancelText}}" />' +
'{{/if}}' +
' <div class="submitLoading icon-loading-small hidden"></div>'+
' </form>' +
'</div>';
var COMMENT_TEMPLATE =
'<li class="comment{{#if isUnread}} unread{{/if}}{{#if isLong}} collapsed{{/if}}" data-id="{{id}}">' +
' <div class="authorRow">' +
' <div class="avatar" {{#if actorId}}data-username="{{actorId}}"{{/if}}> </div>' +
' <div class="author">{{actorDisplayName}}</div>' +
'{{#if isUserAuthor}}' +
' <a href="#" class="action edit icon icon-rename has-tooltip" title="{{editTooltip}}"></a>' +
'{{/if}}' +
' <div class="date has-tooltip live-relative-timestamp" data-timestamp="{{timestamp}}" title="{{altDate}}">{{date}}</div>' +
' </div>' +
' <div class="message">{{{formattedMessage}}}</div>' +
'{{#if isLong}}' +
' <div class="message-overlay"></div>' +
'{{/if}}' +
'</li>';
/**
* @memberof OCA.Comments
*/
var CommentsTabView = OCA.Files.DetailTabView.extend(
/** @lends OCA.Comments.CommentsTabView.prototype */ {
id: 'commentsTabView',
className: 'tab commentsTabView',
events: {
'submit .newCommentForm': '_onSubmitComment',
'click .showMore': '_onClickShowMore',
'click .action.edit': '_onClickEditComment',
'click .action.delete': '_onClickDeleteComment',
'click .cancel': '_onClickCloseComment',
'click .comment': '_onClickComment'
},
_commentMaxLength: 1000,
initialize: function() {
OCA.Files.DetailTabView.prototype.initialize.apply(this, arguments);
this.collection = new OCA.Comments.CommentCollection();
this.collection.on('request', this._onRequest, this);
this.collection.on('sync', this._onEndRequest, this);
this.collection.on('add', this._onAddModel, this);
this._commentMaxThreshold = this._commentMaxLength * 0.9;
// TODO: error handling
_.bindAll(this, '_onTypeComment');
},
template: function(params) {
if (!this._template) {
this._template = Handlebars.compile(TEMPLATE);
}
var currentUser = OC.getCurrentUser();
return this._template(_.extend({
actorId: currentUser.uid,
actorDisplayName: currentUser.displayName
}, params));
},
editCommentTemplate: function(params) {
if (!this._editCommentTemplate) {
this._editCommentTemplate = Handlebars.compile(EDIT_COMMENT_TEMPLATE);
}
var currentUser = OC.getCurrentUser();
return this._editCommentTemplate(_.extend({
actorId: currentUser.uid,
actorDisplayName: currentUser.displayName,
newMessagePlaceholder: t('comments', 'New comment …'),
deleteTooltip: t('comments', 'Delete comment'),
submitText: t('comments', 'Post'),
cancelText: t('comments', 'Cancel')
}, params));
},
commentTemplate: function(params) {
if (!this._commentTemplate) {
this._commentTemplate = Handlebars.compile(COMMENT_TEMPLATE);
}
params = _.extend({
editTooltip: t('comments', 'Edit comment'),
isUserAuthor: OC.getCurrentUser().uid === params.actorId,
isLong: this._isLong(params.message)
}, params);
if (params.actorType === 'deleted_users') {
// makes the avatar a X
params.actorId = null;
params.actorDisplayName = t('comments', '[Deleted user]');
}
return this._commentTemplate(params);
},
getLabel: function() {
return t('comments', 'Comments');
},
setFileInfo: function(fileInfo) {
if (fileInfo) {
this.model = fileInfo;
this.render();
this.collection.setObjectId(fileInfo.id);
// reset to first page
this.collection.reset([], {silent: true});
this.nextPage();
} else {
this.model = null;
this.render();
this.collection.reset();
}
},
render: function() {
this.$el.html(this.template({
emptyResultLabel: t('comments', 'No comments yet, start the conversation!'),
moreLabel: t('comments', 'More comments …')
}));
this.$el.find('.comments').before(this.editCommentTemplate({}));
this.$el.find('.has-tooltip').tooltip();
this.$container = this.$el.find('ul.comments');
this.$el.find('.avatar').avatar(OC.getCurrentUser().uid, 32);
this.delegateEvents();
this.$el.find('.message').on('keydown input change', this._onTypeComment);
autosize(this.$el.find('.newCommentRow textarea'))
},
_formatItem: function(commentModel) {
var timestamp = new Date(commentModel.get('creationDateTime')).getTime();
var data = _.extend({
timestamp: timestamp,
date: OC.Util.relativeModifiedDate(timestamp),
altDate: OC.Util.formatDate(timestamp),
formattedMessage: this._formatMessage(commentModel.get('message'), commentModel.get('mentions'))
}, commentModel.attributes);
return data;
},
_toggleLoading: function(state) {
this._loading = state;
this.$el.find('.loading').toggleClass('hidden', !state);
},
_onRequest: function(type) {
if (type === 'REPORT') {
this._toggleLoading(true);
this.$el.find('.showMore').addClass('hidden');
}
},
_onEndRequest: function(type) {
var fileInfoModel = this.model;
this._toggleLoading(false);
this.$el.find('.emptycontent').toggleClass('hidden', !!this.collection.length);
this.$el.find('.showMore').toggleClass('hidden', !this.collection.hasMoreResults());
if (type !== 'REPORT') {
return;
}
// find first unread comment
var firstUnreadComment = this.collection.findWhere({isUnread: true});
if (firstUnreadComment) {
// update read marker
this.collection.updateReadMarker(
null,
{
success: function() {
fileInfoModel.set('commentsUnread', 0);
}
}
);
}
},
_onAddModel: function(model, collection, options) {
var $el = $(this.commentTemplate(this._formatItem(model)));
if (!_.isUndefined(options.at) && collection.length > 1) {
this.$container.find('li').eq(options.at).before($el);
} else {
this.$container.append($el);
}
this._postRenderItem($el);
},
_postRenderItem: function($el) {
$el.find('.has-tooltip').tooltip();
$el.find('.avatar').each(function() {
var $this = $(this);
$this.avatar($this.attr('data-username'), 32);
});
var username = $el.find('.avatar').data('username');
if (username !== oc_current_user) {
$el.find('.authorRow .avatar, .authorRow .author').contactsMenu(
username, 0, $el.find('.authorRow'));
}
var $message = $el.find('.message');
this._postRenderMessage($message);
},
_postRenderMessage: function($el) {
$el.find('.avatar').each(function() {
var avatar = $(this);
var strong = $(this).next();
var appendTo = $(this).parent();
$.merge(avatar, strong).contactsMenu(avatar.data('user'), 0, appendTo);
});
},
/**
* Convert a message to be displayed in HTML,
* converts newlines to <br> tags.
*/
_formatMessage: function(message, mentions) {
message = escapeHTML(message).replace(/\n/g, '<br/>');
for(var i in mentions) {
var mention = '@' + mentions[i].mentionId;
var avatar = '<div class="avatar" '
+ 'data-user="' + _.escape(mentions[i].mentionId) + '"'
+' data-user-display-name="'
+ _.escape(mentions[i].mentionDisplayName) + '"></div>';
// escape possible regex characters in the name
mention = mention.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
var displayName = ''
+ '<span class="avatar-name-wrapper">'
+ avatar + ' <strong>'+ _.escape(mentions[i].mentionDisplayName)+'</strong>'
+ '</span>';
// replace every mention either at the start of the input or after a whitespace
// followed by a non-word character.
message = message.replace(new RegExp("(^|\\s)(" + mention + ")\\b", 'g'),
function(match, p1) {
// to get number of whitespaces (0 vs 1) right
return p1+displayName;
}
);
}
return message;
},
nextPage: function() {
if (this._loading || !this.collection.hasMoreResults()) {
return;
}
this.collection.fetchNext();
},
_onClickEditComment: function(ev) {
ev.preventDefault();
var $comment = $(ev.target).closest('.comment');
var commentId = $comment.data('id');
var commentToEdit = this.collection.get(commentId);
var $formRow = $(this.editCommentTemplate(_.extend({
isEditMode: true,
submitText: t('comments', 'Save')
}, commentToEdit.attributes)));
$comment.addClass('hidden').removeClass('collapsed');
// spawn form
$comment.after($formRow);
$formRow.data('commentEl', $comment);
$formRow.find('textarea').on('keydown input change', this._onTypeComment);
// copy avatar element from original to avoid flickering
$formRow.find('.avatar:first').replaceWith($comment.find('.avatar:first').clone());
$formRow.find('.has-tooltip').tooltip();
// Enable autosize
autosize($formRow.find('textarea'));
return false;
},
_onTypeComment: function(ev) {
var $field = $(ev.target);
var len = $field.val().length;
var $submitButton = $field.data('submitButtonEl');
if (!$submitButton) {
$submitButton = $field.closest('form').find('.submit');
$field.data('submitButtonEl', $submitButton);
}
$field.tooltip('hide');
if (len > this._commentMaxThreshold) {
$field.attr('data-original-title', t('comments', 'Allowed characters {count} of {max}', {count: len, max: this._commentMaxLength}));
$field.tooltip({trigger: 'manual'});
$field.tooltip('show');
$field.addClass('error');
}
var limitExceeded = (len > this._commentMaxLength);
$field.toggleClass('error', limitExceeded);
$submitButton.prop('disabled', limitExceeded);
//submits form on ctrl+Enter or cmd+Enter
if (ev.keyCode === 13 && (ev.ctrlKey || ev.metaKey)) {
$submitButton.click();
}
},
_onClickComment: function(ev) {
var $row = $(ev.target);
if (!$row.is('.comment')) {
$row = $row.closest('.comment');
}
$row.removeClass('collapsed');
},
_onClickCloseComment: function(ev) {
ev.preventDefault();
var $row = $(ev.target).closest('.comment');
$row.data('commentEl').removeClass('hidden');
$row.remove();
return false;
},
_onClickDeleteComment: function(ev) {
ev.preventDefault();
var $comment = $(ev.target).closest('.comment');
var commentId = $comment.data('id');
var $loading = $comment.find('.submitLoading');
$comment.addClass('disabled');
$loading.removeClass('hidden');
this.collection.get(commentId).destroy({
success: function() {
$comment.data('commentEl').remove();
$comment.remove();
},
error: function() {
$loading.addClass('hidden');
$comment.removeClass('disabled');
OC.Notification.showTemporary(t('comments', 'Error occurred while retrieving comment with ID {id}', {id: commentId}));
}
});
return false;
},
_onClickShowMore: function(ev) {
ev.preventDefault();
this.nextPage();
},
/**
* takes care of updating comment elements after submit (either new
* comment or edit).
*
* @param {OC.Backbone.Model} model
* @param {jQuery} $form
* @param {string|undefined} commentId
* @private
*/
_onSubmitSuccess: function(model, $form, commentId) {
var self = this;
var $submit = $form.find('.submit');
var $loading = $form.find('.submitLoading');
var $textArea = $form.find('.message');
model.fetch({
success: function(model) {
$submit.removeClass('hidden');
$loading.addClass('hidden');
var $target;
if(!_.isUndefined(commentId)) {
var $row = $form.closest('.comment');
$target = $row.data('commentEl');
$target.removeClass('hidden');
$row.remove();
} else {
$target = $('.commentsTabView .comments').find('li:first');
$textArea.val('').prop('disabled', false);
}
var $message = $target.find('.message');
$message
.html(self._formatMessage(model.get('message'), model.get('mentions')))
.find('.avatar')
.each(function () { $(this).avatar(); });
self._postRenderMessage($message);
},
error: function () {
self._onSubmitError($form, commentId);
}
});
},
_onSubmitComment: function(e) {
var self = this;
var $form = $(e.target);
var commentId = $form.closest('.comment').data('id');
var currentUser = OC.getCurrentUser();
var $submit = $form.find('.submit');
var $loading = $form.find('.submitLoading');
var $textArea = $form.find('.message');
var message = $textArea.val().trim();
e.preventDefault();
if (!message.length || message.length > this._commentMaxLength) {
return;
}
$textArea.prop('disabled', true);
$submit.addClass('hidden');
$loading.removeClass('hidden');
if (commentId) {
// edit mode
var comment = this.collection.get(commentId);
comment.save({
message: $textArea.val()
}, {
success: function(model) {
self._onSubmitSuccess(model, $form, commentId);
},
error: function() {
self._onSubmitError($form, commentId);
}
});
} else {
this.collection.create({
actorId: currentUser.uid,
actorDisplayName: currentUser.displayName,
actorType: 'users',
verb: 'comment',
message: $textArea.val(),
creationDateTime: (new Date()).toUTCString()
}, {
at: 0,
// wait for real creation before adding
wait: true,
success: function(model) {
self._onSubmitSuccess(model, $form);
},
error: function() {
self._onSubmitError($form);
}
});
}
return false;
},
/**
* takes care of updating the UI after an error on submit (either new
* comment or edit).
*
* @param {jQuery} $form
* @param {string|undefined} commentId
* @private
*/
_onSubmitError: function($form, commentId) {
$form.find('.submit').removeClass('hidden');
$form.find('.submitLoading').addClass('hidden');
$form.find('.message').prop('disabled', false);
if(!_.isUndefined(commentId)) {
OC.Notification.show(t('comments', 'Error occurred while updating comment with id {id}', {id: commentId}), {type: 'error'});
} else {
OC.Notification.show(t('comments', 'Error occurred while posting comment'), {type: 'error'});
}
},
/**
* Returns whether the given message is long and needs
* collapsing
*/
_isLong: function(message) {
return message.length > 250 || (message.match(/\n/g) || []).length > 1;
}
});
OCA.Comments.CommentsTabView = CommentsTabView;
})(OC, OCA);
-68
View File
@@ -1,68 +0,0 @@
/*
* Copyright (c) 2016
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
(function(OC, OCA) {
_.extend(OC.Files.Client, {
PROPERTY_READMARKER: '{' + OC.Files.Client.NS_OWNCLOUD + '}readMarker'
});
/**
* @class OCA.Comments.CommentSummaryModel
* @classdesc
*
* Model containing summary information related to comments
* like the read marker.
*
*/
var CommentSummaryModel = OC.Backbone.Model.extend(
/** @lends OCA.Comments.CommentSummaryModel.prototype */ {
sync: OC.Backbone.davSync,
/**
* Object type
*
* @type string
*/
_objectType: 'files',
/**
* Object id
*
* @type string
*/
_objectId: null,
davProperties: {
'readMarker': OC.Files.Client.PROPERTY_READMARKER
},
/**
* Initializes the summary model
*
* @param {string} [options.objectType] object type
* @param {string} [options.objectId] object id
*/
initialize: function(attrs, options) {
options = options || {};
if (options.objectType) {
this._objectType = options.objectType;
}
},
url: function() {
return OC.linkToRemote('dav') + '/comments/' +
encodeURIComponent(this._objectType) + '/' +
encodeURIComponent(this.id) + '/';
}
});
OCA.Comments.CommentSummaryModel = CommentSummaryModel;
})(OC, OCA);
-126
View File
@@ -1,126 +0,0 @@
/*
* Copyright (c) 2016 Vincent Petry <pvince81@owncloud.com>
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
/* global Handlebars */
(function() {
_.extend(OC.Files.Client, {
PROPERTY_COMMENTS_UNREAD: '{' + OC.Files.Client.NS_OWNCLOUD + '}comments-unread'
});
var TEMPLATE_COMMENTS_UNREAD =
'<a class="action action-comment permanent" title="{{countMessage}}" href="#">' +
'<img class="svg" src="{{iconUrl}}"/>' +
'</a>';
OCA.Comments = _.extend({}, OCA.Comments);
if (!OCA.Comments) {
/**
* @namespace
*/
OCA.Comments = {};
}
/**
* @namespace
*/
OCA.Comments.FilesPlugin = {
ignoreLists: [
'files_trashbin',
'files.public'
],
_formatCommentCount: function(count) {
if (!this._commentsUnreadTemplate) {
this._commentsUnreadTemplate = Handlebars.compile(TEMPLATE_COMMENTS_UNREAD);
}
return this._commentsUnreadTemplate({
count: count,
countMessage: n('comments', '%n unread comment', '%n unread comments', count),
iconUrl: OC.imagePath('core', 'actions/comment')
});
},
attach: function(fileList) {
var self = this;
if (this.ignoreLists.indexOf(fileList.id) >= 0) {
return;
}
fileList.registerTabView(new OCA.Comments.CommentsTabView('commentsTabView'));
var oldGetWebdavProperties = fileList._getWebdavProperties;
fileList._getWebdavProperties = function() {
var props = oldGetWebdavProperties.apply(this, arguments);
props.push(OC.Files.Client.PROPERTY_COMMENTS_UNREAD);
return props;
};
fileList.filesClient.addFileInfoParser(function(response) {
var data = {};
var props = response.propStat[0].properties;
var commentsUnread = props[OC.Files.Client.PROPERTY_COMMENTS_UNREAD];
if (!_.isUndefined(commentsUnread) && commentsUnread !== '') {
data.commentsUnread = parseInt(commentsUnread, 10);
}
return data;
});
fileList.$el.addClass('has-comments');
var oldCreateRow = fileList._createRow;
fileList._createRow = function(fileData) {
var $tr = oldCreateRow.apply(this, arguments);
if (fileData.commentsUnread) {
$tr.attr('data-comments-unread', fileData.commentsUnread);
}
return $tr;
};
// register "comment" action for reading comments
fileList.fileActions.registerAction({
name: 'Comment',
displayName: t('comments', 'Comment'),
mime: 'all',
permissions: OC.PERMISSION_READ,
type: OCA.Files.FileActions.TYPE_INLINE,
render: function(actionSpec, isDefault, context) {
var $file = context.$file;
var unreadComments = $file.data('comments-unread');
if (unreadComments) {
var $actionLink = $(self._formatCommentCount(unreadComments));
context.$file.find('a.name>span.fileactions').append($actionLink);
return $actionLink;
}
return '';
},
actionHandler: function(fileName, context) {
context.$file.find('.action-comment').tooltip('hide');
// open sidebar in comments section
context.fileList.showDetailsView(fileName, 'commentsTabView');
}
});
// add attribute to "elementToFile"
var oldElementToFile = fileList.elementToFile;
fileList.elementToFile = function($el) {
var fileInfo = oldElementToFile.apply(this, arguments);
var commentsUnread = $el.data('comments-unread');
if (commentsUnread) {
fileInfo.commentsUnread = commentsUnread;
}
return fileInfo;
};
}
};
})();
OC.Plugins.register('OCA.Files.FileList', OCA.Comments.FilesPlugin);
-9
View File
@@ -1,9 +0,0 @@
[
"app.js",
"commentmodel.js",
"commentcollection.js",
"commentsummarymodel.js",
"commentstabview.js",
"filesplugin.js",
"activitytabviewplugin.js"
]
-36
View File
@@ -1,36 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Wysig kommentaar",
"Delete comment" : "Skrap kommentaar",
"New comment …" : "Nuwe kommentaar…",
"Post" : "Plaas",
"Cancel" : "Kanselleer",
"[Deleted user]" : "[Geskrapte gebruiker]",
"Comments" : "Kommentare",
"No comments yet, start the conversation!" : "Nog geen kommentaar, begin die gesprek!",
"More comments …" : "Nog kommentare …",
"Save" : "Bewaar",
"Allowed characters {count} of {max}" : "Toegelate karakters {telling} van {maks}",
"Error occurred while retrieving comment with ID {id}" : "n Fout het voorgekom toe kommentaar met id {id} opgehaal is",
"Error occurred while updating comment with id {id}" : "n Fout het voorgekom toe kommentaar met id {id} bygewerk is",
"Error occurred while posting comment" : "n Fout het voorgekom toe kommentaar geplaas is",
"_%n unread comment_::_%n unread comments_" : ["%n ongeleesde kommentaar","%n ongeleeste kommentare"],
"Comment" : "Kommentaar",
"You commented" : "U het kommentaar gelewer",
"%1$s commented" : "%1$s het kommentaar gelewer",
"{author} commented" : "{outeur} het kommentaar gelewer",
"You commented on %1$s" : "U het op %1$s kommentaar gelewer",
"You commented on {file}" : "U het op {lêer} kommentaar gelewer",
"%1$s commented on %2$s" : "%1$s het op %2$s kommentaar gelewer",
"{author} commented on {file}" : "{outeur} het op {lêer} kommentaar gelewer",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> vir lêers",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Jy was genoem op “{lêer}”, in die kommentaar van 'n gebruiker wat intussen geskrap is.",
"{user} mentioned you in a comment on “{file}”" : "{gebruiker} het u in n kommentaar oor “{lêer}” genoem",
"Unknown user" : "Onbekende gebruiker",
"A (now) deleted user mentioned you in a comment on “%s”" : "n (Nou) geskrapte gebruiker het u in n kommentaar op “%s” genoem",
"A (now) deleted user mentioned you in a comment on “{file}”" : "n (Nou) geskrapte gebruiker het u in n kommentaar op “{lêer}” genoem",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s het u in n kommentaar op “%2$s” genoem",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Jy was genoem op \"%s\", in die kommentaar van 'n gebruiker wat intussen geskrap is."
},
"nplurals=2; plural=(n != 1);");
-34
View File
@@ -1,34 +0,0 @@
{ "translations": {
"Edit comment" : "Wysig kommentaar",
"Delete comment" : "Skrap kommentaar",
"New comment …" : "Nuwe kommentaar…",
"Post" : "Plaas",
"Cancel" : "Kanselleer",
"[Deleted user]" : "[Geskrapte gebruiker]",
"Comments" : "Kommentare",
"No comments yet, start the conversation!" : "Nog geen kommentaar, begin die gesprek!",
"More comments …" : "Nog kommentare …",
"Save" : "Bewaar",
"Allowed characters {count} of {max}" : "Toegelate karakters {telling} van {maks}",
"Error occurred while retrieving comment with ID {id}" : "n Fout het voorgekom toe kommentaar met id {id} opgehaal is",
"Error occurred while updating comment with id {id}" : "n Fout het voorgekom toe kommentaar met id {id} bygewerk is",
"Error occurred while posting comment" : "n Fout het voorgekom toe kommentaar geplaas is",
"_%n unread comment_::_%n unread comments_" : ["%n ongeleesde kommentaar","%n ongeleeste kommentare"],
"Comment" : "Kommentaar",
"You commented" : "U het kommentaar gelewer",
"%1$s commented" : "%1$s het kommentaar gelewer",
"{author} commented" : "{outeur} het kommentaar gelewer",
"You commented on %1$s" : "U het op %1$s kommentaar gelewer",
"You commented on {file}" : "U het op {lêer} kommentaar gelewer",
"%1$s commented on %2$s" : "%1$s het op %2$s kommentaar gelewer",
"{author} commented on {file}" : "{outeur} het op {lêer} kommentaar gelewer",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> vir lêers",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Jy was genoem op “{lêer}”, in die kommentaar van 'n gebruiker wat intussen geskrap is.",
"{user} mentioned you in a comment on “{file}”" : "{gebruiker} het u in n kommentaar oor “{lêer}” genoem",
"Unknown user" : "Onbekende gebruiker",
"A (now) deleted user mentioned you in a comment on “%s”" : "n (Nou) geskrapte gebruiker het u in n kommentaar op “%s” genoem",
"A (now) deleted user mentioned you in a comment on “{file}”" : "n (Nou) geskrapte gebruiker het u in n kommentaar op “{lêer}” genoem",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s het u in n kommentaar op “%2$s” genoem",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Jy was genoem op \"%s\", in die kommentaar van 'n gebruiker wat intussen geskrap is."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-6
View File
@@ -1,6 +0,0 @@
OC.L10N.register(
"comments",
{
"Cancel" : "Kanselleer"
},
"nplurals=2; plural=(n != 1);");
-4
View File
@@ -1,4 +0,0 @@
{ "translations": {
"Cancel" : "Kanselleer"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-26
View File
@@ -1,26 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "تعديل التعليق",
"Delete comment" : "حذف التعليق",
"New comment …" : "تعليق جديد",
"Post" : "ارسال",
"Cancel" : "إلغاء",
"[Deleted user]" : "[مستخدم محذوف]",
"Comments" : "تعليقات",
"No comments yet, start the conversation!" : "لا يوجد تعليقات, ابدأ النقاش الآن!",
"More comments …" : "مزيد من التعليقات...",
"Save" : "حفظ",
"Allowed characters {count} of {max}" : "عدد الأحرف المسموح بها {count} من {max}",
"Error occurred while updating comment with id {id}" : "حصل خطأ أثناء تعديل التعليق رقم {id}",
"Error occurred while posting comment" : "حصل خطأ أثناء إرسال التعليق",
"Comment" : "تعليق",
"You commented" : "قمت بكتابة تعليق",
"%1$s commented" : "%1$s كتب تعليق",
"You commented on {file}" : "علقت على {file}",
"%1$s commented on %2$s" : "%1$s كتب تعليق على %2$s",
"{author} commented on {file}" : "{author} علّق على {file}",
"<strong>Comments</strong> for files" : "<strong>تعليقات</strong> على الملفات",
"Unknown user" : "مستخدم غير معروف"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
-24
View File
@@ -1,24 +0,0 @@
{ "translations": {
"Edit comment" : "تعديل التعليق",
"Delete comment" : "حذف التعليق",
"New comment …" : "تعليق جديد",
"Post" : "ارسال",
"Cancel" : "إلغاء",
"[Deleted user]" : "[مستخدم محذوف]",
"Comments" : "تعليقات",
"No comments yet, start the conversation!" : "لا يوجد تعليقات, ابدأ النقاش الآن!",
"More comments …" : "مزيد من التعليقات...",
"Save" : "حفظ",
"Allowed characters {count} of {max}" : "عدد الأحرف المسموح بها {count} من {max}",
"Error occurred while updating comment with id {id}" : "حصل خطأ أثناء تعديل التعليق رقم {id}",
"Error occurred while posting comment" : "حصل خطأ أثناء إرسال التعليق",
"Comment" : "تعليق",
"You commented" : "قمت بكتابة تعليق",
"%1$s commented" : "%1$s كتب تعليق",
"You commented on {file}" : "علقت على {file}",
"%1$s commented on %2$s" : "%1$s كتب تعليق على %2$s",
"{author} commented on {file}" : "{author} علّق على {file}",
"<strong>Comments</strong> for files" : "<strong>تعليقات</strong> على الملفات",
"Unknown user" : "مستخدم غير معروف"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}
-33
View File
@@ -1,33 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentariu",
"Delete comment" : "Desaniciar comentariu",
"New comment …" : "Comentariu nuevu...",
"Post" : "Espublizar",
"Cancel" : "Encaboxar",
"[Deleted user]" : "[Usuariu desaniciáu]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "Entá nun hai comentarios. ¡Entama una conversación!",
"More comments …" : "Más comentarios...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} caráuteres almitíos de {max}",
"Error occurred while updating comment with id {id}" : "Asocedió un fallu entrín s'anovaba'l comentariu cola ID {id}",
"Error occurred while posting comment" : "Asocedieron fallos entrín s'espublizaba'l comentariu",
"_%n unread comment_::_%n unread comments_" : ["%n comentariu ensin lleer","%n comentarios ensin lleer"],
"Comment" : "Comentariu",
"You commented" : "Comentesti",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Comentesti en %1$s",
"You commented on {file}" : "Comentesti en {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{autor} comentó en {ficheru}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> pa ficheros",
"{user} mentioned you in a comment on “{file}”" : "{user} mentóte nun comentariu de «{file}»",
"Unknown user" : "Usuariu desconocíu",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuariu (agora) desaniciáu mentóte nun comentariu de «%s»",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuariu (agora) desaniciáu mentóte nun comentariu de «{file}»",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s mentóte nun comentariu de «%2$s»"
},
"nplurals=2; plural=(n != 1);");
-31
View File
@@ -1,31 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentariu",
"Delete comment" : "Desaniciar comentariu",
"New comment …" : "Comentariu nuevu...",
"Post" : "Espublizar",
"Cancel" : "Encaboxar",
"[Deleted user]" : "[Usuariu desaniciáu]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "Entá nun hai comentarios. ¡Entama una conversación!",
"More comments …" : "Más comentarios...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} caráuteres almitíos de {max}",
"Error occurred while updating comment with id {id}" : "Asocedió un fallu entrín s'anovaba'l comentariu cola ID {id}",
"Error occurred while posting comment" : "Asocedieron fallos entrín s'espublizaba'l comentariu",
"_%n unread comment_::_%n unread comments_" : ["%n comentariu ensin lleer","%n comentarios ensin lleer"],
"Comment" : "Comentariu",
"You commented" : "Comentesti",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Comentesti en %1$s",
"You commented on {file}" : "Comentesti en {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{autor} comentó en {ficheru}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> pa ficheros",
"{user} mentioned you in a comment on “{file}”" : "{user} mentóte nun comentariu de «{file}»",
"Unknown user" : "Usuariu desconocíu",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuariu (agora) desaniciáu mentóte nun comentariu de «%s»",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuariu (agora) desaniciáu mentóte nun comentariu de «{file}»",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s mentóte nun comentariu de «%2$s»"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-8
View File
@@ -1,8 +0,0 @@
OC.L10N.register(
"comments",
{
"Cancel" : "Dayandır",
"Save" : "Saxla",
"Comment" : "Komentariya"
},
"nplurals=2; plural=(n != 1);");
-6
View File
@@ -1,6 +0,0 @@
{ "translations": {
"Cancel" : "Dayandır",
"Save" : "Saxla",
"Comment" : "Komentariya"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-35
View File
@@ -1,35 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Редактирай коментра",
"Delete comment" : "Изтрий коментар",
"New comment …" : "Нов коментар...",
"Post" : "Публикация",
"Cancel" : "Отказ",
"[Deleted user]" : "[Изтрит потребител]",
"Comments" : "Коментари",
"No comments yet, start the conversation!" : "Все-още няма коментари, започни разговор!",
"More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
"Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
"Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
"_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
"You commented" : "Вие коментирахте",
"%1$s commented" : "%1$s коментира",
"{author} commented" : "{author} коментира",
"You commented on %1$s" : "Ти коментира за %1$s",
"You commented on {file}" : "Ти коментира за {file}",
"%1$s commented on %2$s" : "%1$s коментиран за %2$s",
"{author} commented on {file}" : "{author} коментира за {file}",
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> за файлове",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"{user} mentioned you in a comment on “{file}”" : "{user} те спомена в коментар за “{file}”",
"Unknown user" : "Непознат потребител",
"A (now) deleted user mentioned you in a comment on “%s”" : "(Токущо) изтрит потребител те коментира в “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "(Токущо) изтрит потребител те спомена в коментар за “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s те спомена в коментар за “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Бяхте споменат/а на “%s”, в коментар от потребител, който вече е изтрит"
},
"nplurals=2; plural=(n != 1);");
-33
View File
@@ -1,33 +0,0 @@
{ "translations": {
"Edit comment" : "Редактирай коментра",
"Delete comment" : "Изтрий коментар",
"New comment …" : "Нов коментар...",
"Post" : "Публикация",
"Cancel" : "Отказ",
"[Deleted user]" : "[Изтрит потребител]",
"Comments" : "Коментари",
"No comments yet, start the conversation!" : "Все-още няма коментари, започни разговор!",
"More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
"Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
"Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
"_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
"You commented" : "Вие коментирахте",
"%1$s commented" : "%1$s коментира",
"{author} commented" : "{author} коментира",
"You commented on %1$s" : "Ти коментира за %1$s",
"You commented on {file}" : "Ти коментира за {file}",
"%1$s commented on %2$s" : "%1$s коментиран за %2$s",
"{author} commented on {file}" : "{author} коментира за {file}",
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> за файлове",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"{user} mentioned you in a comment on “{file}”" : "{user} те спомена в коментар за “{file}”",
"Unknown user" : "Непознат потребител",
"A (now) deleted user mentioned you in a comment on “%s”" : "(Токущо) изтрит потребител те коментира в “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "(Токущо) изтрит потребител те спомена в коментар за “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s те спомена в коментар за “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Бяхте споменат/а на “%s”, в коментар от потребител, който вече е изтрит"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-39
View File
@@ -1,39 +0,0 @@
OC.L10N.register(
"comments",
{
"Comments" : "Коментари",
"Unknown user" : "Непознат потребител",
"New comment …" : "Нов коментар...",
"Delete comment" : "Изтрий коментар",
"Post" : "Публикация",
"Cancel" : "Отказ",
"Edit comment" : "Редактирай коментра",
"[Deleted user]" : "[Изтрит потребител]",
"No comments yet, start the conversation!" : "Все-още няма коментари, започни разговор!",
"More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
"Error occurred while retrieving comment with id {id}" : "Възникна грешка по време на извличане на коментар с код {id}",
"Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
"Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
"_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
"You commented" : "Вие коментирахте",
"%1$s commented" : "%1$s коментира",
"{author} commented" : "{author} коментира",
"You commented on %1$s" : "Ти коментира за %1$s",
"You commented on {file}" : "Ти коментира за {file}",
"%1$s commented on %2$s" : "%1$s коментиран за %2$s",
"{author} commented on {file}" : "{author} коментира за {file}",
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> за файлове",
"A (now) deleted user mentioned you in a comment on “%s”" : "(Токущо) изтрит потребител те коментира в “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "(Токущо) изтрит потребител те спомена в коментар за “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s те спомена в коментар за “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} те спомена в коментар за “{file}”",
"Type in a new comment..." : "Напиши нов коментар...",
"No other comments available" : "Няма други коментари",
"More comments..." : "Още коментари...",
"{count} unread comments" : "{count} непрочетени коментари",
"You commented on %2$s" : "Ти коментира за %2$s"
},
"nplurals=2; plural=(n != 1);");
-37
View File
@@ -1,37 +0,0 @@
{ "translations": {
"Comments" : "Коментари",
"Unknown user" : "Непознат потребител",
"New comment …" : "Нов коментар...",
"Delete comment" : "Изтрий коментар",
"Post" : "Публикация",
"Cancel" : "Отказ",
"Edit comment" : "Редактирай коментра",
"[Deleted user]" : "[Изтрит потребител]",
"No comments yet, start the conversation!" : "Все-още няма коментари, започни разговор!",
"More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
"Error occurred while retrieving comment with id {id}" : "Възникна грешка по време на извличане на коментар с код {id}",
"Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
"Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
"_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
"You commented" : "Вие коментирахте",
"%1$s commented" : "%1$s коментира",
"{author} commented" : "{author} коментира",
"You commented on %1$s" : "Ти коментира за %1$s",
"You commented on {file}" : "Ти коментира за {file}",
"%1$s commented on %2$s" : "%1$s коментиран за %2$s",
"{author} commented on {file}" : "{author} коментира за {file}",
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> за файлове",
"A (now) deleted user mentioned you in a comment on “%s”" : "(Токущо) изтрит потребител те коментира в “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "(Токущо) изтрит потребител те спомена в коментар за “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s те спомена в коментар за “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} те спомена в коментар за “{file}”",
"Type in a new comment..." : "Напиши нов коментар...",
"No other comments available" : "Няма други коментари",
"More comments..." : "Още коментари...",
"{count} unread comments" : "{count} непрочетени коментари",
"You commented on %2$s" : "Ти коментира за %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-8
View File
@@ -1,8 +0,0 @@
OC.L10N.register(
"comments",
{
"Cancel" : "বাতিল",
"Save" : "সংরক্ষণ",
"Comment" : "মন্তব্য"
},
"nplurals=2; plural=(n != 1);");
-6
View File
@@ -1,6 +0,0 @@
{ "translations": {
"Cancel" : "বাতিল",
"Save" : "সংরক্ষণ",
"Comment" : "মন্তব্য"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-7
View File
@@ -1,7 +0,0 @@
OC.L10N.register(
"comments",
{
"Cancel" : "বাতিল করা",
"Save" : "সেভ"
},
"nplurals=2; plural=(n != 1);");
-5
View File
@@ -1,5 +0,0 @@
{ "translations": {
"Cancel" : "বাতিল করা",
"Save" : "সেভ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-8
View File
@@ -1,8 +0,0 @@
OC.L10N.register(
"comments",
{
"Cancel" : "Odustani",
"Save" : "Spremi",
"Comment" : "Komentar"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
-6
View File
@@ -1,6 +0,0 @@
{ "translations": {
"Cancel" : "Odustani",
"Save" : "Spremi",
"Comment" : "Komentar"
},"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);"
}
-35
View File
@@ -1,35 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentari",
"Delete comment" : "Esborrar comentari",
"New comment …" : "Nou comentari...",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"[Deleted user]" : "[usuari Esborrat]",
"Comments" : "Comentaris",
"No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
"More comments …" : "Més comentaris...",
"Save" : "Desa",
"Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
"Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
"You commented" : "Heu comentat",
"%1$s commented" : "%1$s ha comentat",
"{author} commented" : "{author} ha comentat",
"You commented on %1$s" : "Heu comentat a %1$s",
"You commented on {file}" : "Heu comentat a {file}",
"%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
"{author} commented on {file}" : "{author} ha comentat a {file}",
"<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Has estat mencionat a \"{file}\" en un comentari d'un usuari que ja no existeix",
"{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
"Unknown user" : "Usuari desconegut",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuari (ara) esborrat us ha nomenat en un comentari a “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuari (ara) esborrat us ha nomenat en un comentari de “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Has estat mencionat a \"%s\" en un comentari d'un usuari que ja no existeix"
},
"nplurals=2; plural=(n != 1);");
-33
View File
@@ -1,33 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentari",
"Delete comment" : "Esborrar comentari",
"New comment …" : "Nou comentari...",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"[Deleted user]" : "[usuari Esborrat]",
"Comments" : "Comentaris",
"No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
"More comments …" : "Més comentaris...",
"Save" : "Desa",
"Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
"Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
"You commented" : "Heu comentat",
"%1$s commented" : "%1$s ha comentat",
"{author} commented" : "{author} ha comentat",
"You commented on %1$s" : "Heu comentat a %1$s",
"You commented on {file}" : "Heu comentat a {file}",
"%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
"{author} commented on {file}" : "{author} ha comentat a {file}",
"<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Has estat mencionat a \"{file}\" en un comentari d'un usuari que ja no existeix",
"{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
"Unknown user" : "Usuari desconegut",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuari (ara) esborrat us ha nomenat en un comentari a “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuari (ara) esborrat us ha nomenat en un comentari de “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Has estat mencionat a \"%s\" en un comentari d'un usuari que ja no existeix"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-37
View File
@@ -1,37 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Upravit komentář",
"Delete comment" : "Smazat komentář",
"New comment …" : "Nový komentář…",
"Post" : "Zveřejnit",
"Cancel" : "Storno",
"[Deleted user]" : "[Smazaný uživatel]",
"Comments" : "Komentáře",
"No comments yet, start the conversation!" : "Zatím bez komentářů, začněte konverzaci!",
"More comments …" : "Více komentářů…",
"Save" : "Uložit",
"Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}",
"Error occurred while retrieving comment with ID {id}" : "Došlo k chybě při načítání komentáře s ID {id}",
"Error occurred while updating comment with id {id}" : "Došlo k chybě při aktualizování komentáře s id {id}",
"Error occurred while posting comment" : "Došlo k chybě při zveřejňování komentáře",
"_%n unread comment_::_%n unread comments_" : ["%n nepřečtený komentář","%n nepřečtené komentáře","%n nepřečtených komentářů","%n nepřečtených komentářů"],
"Comment" : "Komentář",
"You commented" : "Okomentovali jste",
"%1$s commented" : "%1$s okomentován",
"{author} commented" : "{author} okomentoval(a)",
"You commented on %1$s" : "Okomentovali jste %1$s",
"You commented on {file}" : "Okomentovali jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Byli jste zmíněni v souboru “{file}”, v komentáři od uživatele, který byl později smazán",
"{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil(a) v komentáři u „{file}“",
"Files app plugin to add comments to files" : "Zásuvný modul do aplikace Soubory pro přidávání komentářů k souborům",
"Unknown user" : "Neznámý uživatel",
"A (now) deleted user mentioned you in a comment on “%s”" : "(Nyní) už smazaný uživatel vás zmínil v komentáři na „%s“.",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní už smazaný uživatel vás zmínil v komentáři u „{file}“",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Byli jste zmíněni v „%s“, v komentáři od uživatele, který byl později smazán"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
-35
View File
@@ -1,35 +0,0 @@
{ "translations": {
"Edit comment" : "Upravit komentář",
"Delete comment" : "Smazat komentář",
"New comment …" : "Nový komentář…",
"Post" : "Zveřejnit",
"Cancel" : "Storno",
"[Deleted user]" : "[Smazaný uživatel]",
"Comments" : "Komentáře",
"No comments yet, start the conversation!" : "Zatím bez komentářů, začněte konverzaci!",
"More comments …" : "Více komentářů…",
"Save" : "Uložit",
"Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}",
"Error occurred while retrieving comment with ID {id}" : "Došlo k chybě při načítání komentáře s ID {id}",
"Error occurred while updating comment with id {id}" : "Došlo k chybě při aktualizování komentáře s id {id}",
"Error occurred while posting comment" : "Došlo k chybě při zveřejňování komentáře",
"_%n unread comment_::_%n unread comments_" : ["%n nepřečtený komentář","%n nepřečtené komentáře","%n nepřečtených komentářů","%n nepřečtených komentářů"],
"Comment" : "Komentář",
"You commented" : "Okomentovali jste",
"%1$s commented" : "%1$s okomentován",
"{author} commented" : "{author} okomentoval(a)",
"You commented on %1$s" : "Okomentovali jste %1$s",
"You commented on {file}" : "Okomentovali jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Byli jste zmíněni v souboru “{file}”, v komentáři od uživatele, který byl později smazán",
"{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil(a) v komentáři u „{file}“",
"Files app plugin to add comments to files" : "Zásuvný modul do aplikace Soubory pro přidávání komentářů k souborům",
"Unknown user" : "Neznámý uživatel",
"A (now) deleted user mentioned you in a comment on “%s”" : "(Nyní) už smazaný uživatel vás zmínil v komentáři na „%s“.",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní už smazaný uživatel vás zmínil v komentáři u „{file}“",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Byli jste zmíněni v „%s“, v komentáři od uživatele, který byl později smazán"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}
-39
View File
@@ -1,39 +0,0 @@
OC.L10N.register(
"comments",
{
"Comments" : "Komentáře",
"Unknown user" : "Neznámý uživatel",
"New comment …" : "Nový komentář ...",
"Delete comment" : "Smazat komentář",
"Post" : "Zveřejnit",
"Cancel" : "Zrušit",
"Edit comment" : "Upravit komentář",
"[Deleted user]" : "[Smazaný uživatel]",
"No comments yet, start the conversation!" : "Zatím bez komentářů, začněte konverzaci!",
"More comments …" : "Více komentářů ...",
"Save" : "Uložit",
"Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}",
"Error occurred while retrieving comment with id {id}" : "Došlo k chybě při načítání komentáře s id {id}",
"Error occurred while updating comment with id {id}" : "Došlo k chybě při aktualizování komentáře s id {id}",
"Error occurred while posting comment" : "Došlo k chybě při zveřejňování komentáře",
"_%n unread comment_::_%n unread comments_" : ["%n nepřečtený komentář","%n nepřečtené komentáře","%n nepřečtených komentářů"],
"Comment" : "Komentář",
"You commented" : "Okomentoval(a) jsi",
"%1$s commented" : "%1$s okomentován",
"{author} commented" : "{author} okomentoval(a)",
"You commented on %1$s" : "Okomentoval(a) jste %1$s",
"You commented on {file}" : "Okomentoval(a) jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
"A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní již smazaný uživatel vás zmínil v komentáři u \"{file}\"",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
"{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil v komentáři u “{file}”",
"Type in a new comment..." : "Zadat nový komentář...",
"No other comments available" : "Nejsou dostupné žádné další komentáře",
"More comments..." : "Více komentářů...",
"{count} unread comments" : "{count} nepřečtených komentářů",
"You commented on %2$s" : "Okomentoval(a) jsi %2$s"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
-37
View File
@@ -1,37 +0,0 @@
{ "translations": {
"Comments" : "Komentáře",
"Unknown user" : "Neznámý uživatel",
"New comment …" : "Nový komentář ...",
"Delete comment" : "Smazat komentář",
"Post" : "Zveřejnit",
"Cancel" : "Zrušit",
"Edit comment" : "Upravit komentář",
"[Deleted user]" : "[Smazaný uživatel]",
"No comments yet, start the conversation!" : "Zatím bez komentářů, začněte konverzaci!",
"More comments …" : "Více komentářů ...",
"Save" : "Uložit",
"Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}",
"Error occurred while retrieving comment with id {id}" : "Došlo k chybě při načítání komentáře s id {id}",
"Error occurred while updating comment with id {id}" : "Došlo k chybě při aktualizování komentáře s id {id}",
"Error occurred while posting comment" : "Došlo k chybě při zveřejňování komentáře",
"_%n unread comment_::_%n unread comments_" : ["%n nepřečtený komentář","%n nepřečtené komentáře","%n nepřečtených komentářů"],
"Comment" : "Komentář",
"You commented" : "Okomentoval(a) jsi",
"%1$s commented" : "%1$s okomentován",
"{author} commented" : "{author} okomentoval(a)",
"You commented on %1$s" : "Okomentoval(a) jste %1$s",
"You commented on {file}" : "Okomentoval(a) jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
"A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní již smazaný uživatel vás zmínil v komentáři u \"{file}\"",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
"{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil v komentáři u “{file}”",
"Type in a new comment..." : "Zadat nový komentář...",
"No other comments available" : "Nejsou dostupné žádné další komentáře",
"More comments..." : "Více komentářů...",
"{count} unread comments" : "{count} nepřečtených komentářů",
"You commented on %2$s" : "Okomentoval(a) jsi %2$s"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
}
-7
View File
@@ -1,7 +0,0 @@
OC.L10N.register(
"comments",
{
"Cancel" : "Diddymu",
"Save" : "Cadw"
},
"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;");
-5
View File
@@ -1,5 +0,0 @@
{ "translations": {
"Cancel" : "Diddymu",
"Save" : "Cadw"
},"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"
}
-35
View File
@@ -1,35 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Rediger kommentar",
"Delete comment" : "Slet kommentar",
"New comment …" : "Ny kommentar ...",
"Post" : "Indlæg",
"Cancel" : "Annullér",
"[Deleted user]" : "[Slettet user]",
"Comments" : "Kommentarer",
"No comments yet, start the conversation!" : "Ingen kommentarer endnu, start samtalen!",
"More comments …" : "Flere kommentarer...",
"Save" : "Gem",
"Allowed characters {count} of {max}" : "Tilladte tegn {count} af {max}",
"Error occurred while updating comment with id {id}" : "Der opstod fejl under opdatering af kommentar med id {id}",
"Error occurred while posting comment" : "Der opstod fejl under indsendelse af kommentar",
"_%n unread comment_::_%n unread comments_" : ["%n ulæst kommentar","%n ulæste kommentarer"],
"Comment" : "Kommentér",
"You commented" : "Du kommenterede",
"%1$s commented" : "%1$s kommenterede",
"{author} commented" : "{author} kommenterede",
"You commented on %1$s" : "Du kommenterede %1$s",
"You commented on {file}" : "Du kommenterede {file}",
"%1$s commented on %2$s" : "%1$s kommenterede %2$s",
"{author} commented on {file}" : "{author} kommenterede {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Du blev nævnt i \"{file}”, I en kommentar af en bruger der siden er blevet slettet",
"{user} mentioned you in a comment on “{file}”" : "{user} nævnte dig i en kommentarer på \"{file}\"",
"Unknown user" : "Ukendt bruger",
"A (now) deleted user mentioned you in a comment on “%s”" : "En (nu) slettet bruger nævnte dig i en kommentarer på “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "En (nu) slettet bruger nævnte dig i en kommentarer på \"{file}\"",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s nævnte dig i en kommentarer på “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Du blev nævnt i \"%s”, I en kommentar af en bruger der er blevet slettet efterfølgende"
},
"nplurals=2; plural=(n != 1);");
-33
View File
@@ -1,33 +0,0 @@
{ "translations": {
"Edit comment" : "Rediger kommentar",
"Delete comment" : "Slet kommentar",
"New comment …" : "Ny kommentar ...",
"Post" : "Indlæg",
"Cancel" : "Annullér",
"[Deleted user]" : "[Slettet user]",
"Comments" : "Kommentarer",
"No comments yet, start the conversation!" : "Ingen kommentarer endnu, start samtalen!",
"More comments …" : "Flere kommentarer...",
"Save" : "Gem",
"Allowed characters {count} of {max}" : "Tilladte tegn {count} af {max}",
"Error occurred while updating comment with id {id}" : "Der opstod fejl under opdatering af kommentar med id {id}",
"Error occurred while posting comment" : "Der opstod fejl under indsendelse af kommentar",
"_%n unread comment_::_%n unread comments_" : ["%n ulæst kommentar","%n ulæste kommentarer"],
"Comment" : "Kommentér",
"You commented" : "Du kommenterede",
"%1$s commented" : "%1$s kommenterede",
"{author} commented" : "{author} kommenterede",
"You commented on %1$s" : "Du kommenterede %1$s",
"You commented on {file}" : "Du kommenterede {file}",
"%1$s commented on %2$s" : "%1$s kommenterede %2$s",
"{author} commented on {file}" : "{author} kommenterede {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Du blev nævnt i \"{file}”, I en kommentar af en bruger der siden er blevet slettet",
"{user} mentioned you in a comment on “{file}”" : "{user} nævnte dig i en kommentarer på \"{file}\"",
"Unknown user" : "Ukendt bruger",
"A (now) deleted user mentioned you in a comment on “%s”" : "En (nu) slettet bruger nævnte dig i en kommentarer på “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "En (nu) slettet bruger nævnte dig i en kommentarer på \"{file}\"",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s nævnte dig i en kommentarer på “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Du blev nævnt i \"%s”, I en kommentar af en bruger der er blevet slettet efterfølgende"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-37
View File
@@ -1,37 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Kommentar bearbeiten",
"Delete comment" : "Kommentar löschen",
"New comment …" : "Neuer Kommentar …",
"Post" : "Speichern",
"Cancel" : "Abbrechen",
"[Deleted user]" : "[Gelöschter Benutzer]",
"Comments" : "Kommentare",
"No comments yet, start the conversation!" : "Keine Kommentare bisher. Beginne die Diskussion!",
"More comments …" : "Weitere Kommentare…",
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "Erlaubte Zeichen {count} von {max}",
"Error occurred while retrieving comment with ID {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten",
"Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten",
"Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten",
"_%n unread comment_::_%n unread comments_" : ["%n ungelesener Kommentar","%n ungelesene Kommentare"],
"Comment" : "Kommentar",
"You commented" : "Von Dir kommentiert",
"%1$s commented" : "%1$s kommentierte",
"{author} commented" : "{author} kommentierte",
"You commented on %1$s" : "Du hast %1$s kommentiert",
"You commented on {file}" : "Du hast {file} kommentiert",
"%1$s commented on %2$s" : "%1$s kommentierte %2$s",
"{author} commented on {file}" : "{author} hat {file} kommentiert",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Du wurdest in einem Kommentar auf \"{file}\" von einem bereits gelöschten Nutzer erwähnt",
"{user} mentioned you in a comment on “{file}”" : "{user} hat Dich in einem Kommentar zu “{file}” erwähnt ",
"Files app plugin to add comments to files" : "Ein Plugin für die Dateien-App zum Kommentieren von Dateien",
"Unknown user" : "Unbekannter Benutzer",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Benutzer hat Dich in einem Kommentar zu \"%s\" erwähnt",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Benutzer hat Dich in einem Kommentar zu “{file}” erwähnt",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s hat Dich in einem Kommentar zu “%2$s” erwähnt ",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Du wurdest in einem Kommentar auf \"%s\" von einem bereits gelöschten Nutzer erwähnt"
},
"nplurals=2; plural=(n != 1);");
-35
View File
@@ -1,35 +0,0 @@
{ "translations": {
"Edit comment" : "Kommentar bearbeiten",
"Delete comment" : "Kommentar löschen",
"New comment …" : "Neuer Kommentar …",
"Post" : "Speichern",
"Cancel" : "Abbrechen",
"[Deleted user]" : "[Gelöschter Benutzer]",
"Comments" : "Kommentare",
"No comments yet, start the conversation!" : "Keine Kommentare bisher. Beginne die Diskussion!",
"More comments …" : "Weitere Kommentare…",
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "Erlaubte Zeichen {count} von {max}",
"Error occurred while retrieving comment with ID {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten",
"Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten",
"Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten",
"_%n unread comment_::_%n unread comments_" : ["%n ungelesener Kommentar","%n ungelesene Kommentare"],
"Comment" : "Kommentar",
"You commented" : "Von Dir kommentiert",
"%1$s commented" : "%1$s kommentierte",
"{author} commented" : "{author} kommentierte",
"You commented on %1$s" : "Du hast %1$s kommentiert",
"You commented on {file}" : "Du hast {file} kommentiert",
"%1$s commented on %2$s" : "%1$s kommentierte %2$s",
"{author} commented on {file}" : "{author} hat {file} kommentiert",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Du wurdest in einem Kommentar auf \"{file}\" von einem bereits gelöschten Nutzer erwähnt",
"{user} mentioned you in a comment on “{file}”" : "{user} hat Dich in einem Kommentar zu “{file}” erwähnt ",
"Files app plugin to add comments to files" : "Ein Plugin für die Dateien-App zum Kommentieren von Dateien",
"Unknown user" : "Unbekannter Benutzer",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Benutzer hat Dich in einem Kommentar zu \"%s\" erwähnt",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Benutzer hat Dich in einem Kommentar zu “{file}” erwähnt",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s hat Dich in einem Kommentar zu “%2$s” erwähnt ",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Du wurdest in einem Kommentar auf \"%s\" von einem bereits gelöschten Nutzer erwähnt"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-7
View File
@@ -1,7 +0,0 @@
OC.L10N.register(
"comments",
{
"Cancel" : "Abbrechen",
"Save" : "Speichern"
},
"nplurals=2; plural=(n != 1);");
-5
View File
@@ -1,5 +0,0 @@
{ "translations": {
"Cancel" : "Abbrechen",
"Save" : "Speichern"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-37
View File
@@ -1,37 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Kommentar bearbeiten",
"Delete comment" : "Kommentar löschen",
"New comment …" : "Neuer Kommentar …",
"Post" : "Speichern",
"Cancel" : "Abbrechen",
"[Deleted user]" : "[gelöschter Benutzer]",
"Comments" : "Kommentare",
"No comments yet, start the conversation!" : "Keine Kommentare bisher. Beginnen Sie die Diskussion!",
"More comments …" : "Weitere Kommentare …",
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "{count} von {max} Zeichen benutzt",
"Error occurred while retrieving comment with ID {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten",
"Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten",
"Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten",
"_%n unread comment_::_%n unread comments_" : ["%n ungelesener Kommentar","%n ungelesene Kommentare"],
"Comment" : "Kommentar",
"You commented" : "Sie haben kommentiert",
"%1$s commented" : "%1$s kommentierte",
"{author} commented" : "{author} kommentierte",
"You commented on %1$s" : "Sie haben %1$s kommentiert",
"You commented on {file}" : "Sie haben {file} kommentiert",
"%1$s commented on %2$s" : "%1$s kommentierte %2$s",
"{author} commented on {file}" : "{author} hat {file} kommentiert",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Sie wurden in einem Kommentar auf \"{file}\" von einem bereits gelöschten Nutzer erwähnt",
"{user} mentioned you in a comment on “{file}”" : "{user} hat Sie in einem Kommentar zu “{file}” erwähnt",
"Files app plugin to add comments to files" : "Ein Plugin für die Dateien-App zum Kommentieren von Dateien",
"Unknown user" : "Unbekannter Benutzer",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu \"%s\" erwähnt",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu “{file}” erwähnt",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s hat Sie in einem Kommentar zu “%2$s” erwähnt.",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Sie wurden in einem Kommentar auf \"%s\" von einem bereits gelöschten Nutzer erwähnt"
},
"nplurals=2; plural=(n != 1);");
-35
View File
@@ -1,35 +0,0 @@
{ "translations": {
"Edit comment" : "Kommentar bearbeiten",
"Delete comment" : "Kommentar löschen",
"New comment …" : "Neuer Kommentar …",
"Post" : "Speichern",
"Cancel" : "Abbrechen",
"[Deleted user]" : "[gelöschter Benutzer]",
"Comments" : "Kommentare",
"No comments yet, start the conversation!" : "Keine Kommentare bisher. Beginnen Sie die Diskussion!",
"More comments …" : "Weitere Kommentare …",
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "{count} von {max} Zeichen benutzt",
"Error occurred while retrieving comment with ID {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten",
"Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten",
"Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten",
"_%n unread comment_::_%n unread comments_" : ["%n ungelesener Kommentar","%n ungelesene Kommentare"],
"Comment" : "Kommentar",
"You commented" : "Sie haben kommentiert",
"%1$s commented" : "%1$s kommentierte",
"{author} commented" : "{author} kommentierte",
"You commented on %1$s" : "Sie haben %1$s kommentiert",
"You commented on {file}" : "Sie haben {file} kommentiert",
"%1$s commented on %2$s" : "%1$s kommentierte %2$s",
"{author} commented on {file}" : "{author} hat {file} kommentiert",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Sie wurden in einem Kommentar auf \"{file}\" von einem bereits gelöschten Nutzer erwähnt",
"{user} mentioned you in a comment on “{file}”" : "{user} hat Sie in einem Kommentar zu “{file}” erwähnt",
"Files app plugin to add comments to files" : "Ein Plugin für die Dateien-App zum Kommentieren von Dateien",
"Unknown user" : "Unbekannter Benutzer",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu \"%s\" erwähnt",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu “{file}” erwähnt",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s hat Sie in einem Kommentar zu “%2$s” erwähnt.",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Sie wurden in einem Kommentar auf \"%s\" von einem bereits gelöschten Nutzer erwähnt"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-33
View File
@@ -1,33 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Επεξεργασία σχολίου",
"Delete comment" : "Διαγραφή σχολίου",
"New comment …" : "Νέο σχόλιο ...",
"Post" : "Δημοσίευση",
"Cancel" : "Ακύρωση",
"[Deleted user]" : "[Διαγραμμένος χρήστης]",
"Comments" : "Σχόλια",
"No comments yet, start the conversation!" : "Δεν υπάρχουν σχόλια, ξεκινήστε την συζήτηση!",
"More comments …" : "Περισσότερα σχόλια ...",
"Save" : "Αποθήκευση",
"Allowed characters {count} of {max}" : "Επιτρεπόμενοι χαρακτήρες {count} από {max}",
"Error occurred while updating comment with id {id}" : "Ένα σφάλμα προέκυψε κατά την ενημέρωση του σχολίου με το αναγνωριστικό {id}",
"Error occurred while posting comment" : "Ένα σφάλμα προέκυψε κατά την δημοσίευση σχολίου",
"_%n unread comment_::_%n unread comments_" : ["%n αδιάβαστο σχόλιο","%n αδιάβαστα σχόλια"],
"Comment" : "Σχόλιο",
"You commented" : "Σχολιάσατε",
"%1$s commented" : "%1$s σχολίασε",
"{author} commented" : "Ο {author} σχολίασε",
"You commented on %1$s" : "Σχολιάσατε στο %1$s",
"You commented on {file}" : "Σχολιάσατε στο {file}",
"%1$s commented on %2$s" : "%1$s σχολίασε στο %2$s",
"{author} commented on {file}" : "Ο {author} σχολίασε στο {file}",
"<strong>Comments</strong> for files" : "<strong>Σχόλια</strong> για αρχεία",
"{user} mentioned you in a comment on “{file}”" : "Ο {user} σας ανέφερε σε σχόλιο στο “{file}”",
"Unknown user" : "Άγνωστος χρήστης",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ο (πρόσφατα) διεγραμμένος χρήστης σας ανέφερε σε σχόλιο στο “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ο (πρόσφατα) διεγραμμένος χρήστης σας ανέφερε σε σχόλιο στο “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s σας ανέφερε σε σχόλιο στο “%2$s”"
},
"nplurals=2; plural=(n != 1);");
-31
View File
@@ -1,31 +0,0 @@
{ "translations": {
"Edit comment" : "Επεξεργασία σχολίου",
"Delete comment" : "Διαγραφή σχολίου",
"New comment …" : "Νέο σχόλιο ...",
"Post" : "Δημοσίευση",
"Cancel" : "Ακύρωση",
"[Deleted user]" : "[Διαγραμμένος χρήστης]",
"Comments" : "Σχόλια",
"No comments yet, start the conversation!" : "Δεν υπάρχουν σχόλια, ξεκινήστε την συζήτηση!",
"More comments …" : "Περισσότερα σχόλια ...",
"Save" : "Αποθήκευση",
"Allowed characters {count} of {max}" : "Επιτρεπόμενοι χαρακτήρες {count} από {max}",
"Error occurred while updating comment with id {id}" : "Ένα σφάλμα προέκυψε κατά την ενημέρωση του σχολίου με το αναγνωριστικό {id}",
"Error occurred while posting comment" : "Ένα σφάλμα προέκυψε κατά την δημοσίευση σχολίου",
"_%n unread comment_::_%n unread comments_" : ["%n αδιάβαστο σχόλιο","%n αδιάβαστα σχόλια"],
"Comment" : "Σχόλιο",
"You commented" : "Σχολιάσατε",
"%1$s commented" : "%1$s σχολίασε",
"{author} commented" : "Ο {author} σχολίασε",
"You commented on %1$s" : "Σχολιάσατε στο %1$s",
"You commented on {file}" : "Σχολιάσατε στο {file}",
"%1$s commented on %2$s" : "%1$s σχολίασε στο %2$s",
"{author} commented on {file}" : "Ο {author} σχολίασε στο {file}",
"<strong>Comments</strong> for files" : "<strong>Σχόλια</strong> για αρχεία",
"{user} mentioned you in a comment on “{file}”" : "Ο {user} σας ανέφερε σε σχόλιο στο “{file}”",
"Unknown user" : "Άγνωστος χρήστης",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ο (πρόσφατα) διεγραμμένος χρήστης σας ανέφερε σε σχόλιο στο “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ο (πρόσφατα) διεγραμμένος χρήστης σας ανέφερε σε σχόλιο στο “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s σας ανέφερε σε σχόλιο στο “%2$s”"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-36
View File
@@ -1,36 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Edit comment",
"Delete comment" : "Delete comment",
"New comment …" : "New comment …",
"Post" : "Post",
"Cancel" : "Cancel",
"[Deleted user]" : "[Deleted user]",
"Comments" : "Comments",
"No comments yet, start the conversation!" : "No comments yet, start the conversation!",
"More comments …" : "More comments …",
"Save" : "Save",
"Allowed characters {count} of {max}" : "Allowed characters: {count} of {max}",
"Error occurred while retrieving comment with ID {id}" : "Error occurred while retrieving comment with ID {id}",
"Error occurred while updating comment with id {id}" : "Error occurred while updating comment with id {id}",
"Error occurred while posting comment" : "Error occurred while posting comment",
"_%n unread comment_::_%n unread comments_" : ["%n unread comment","%n unread comments"],
"Comment" : "Comment",
"You commented" : "You commented",
"%1$s commented" : "%1$s commented",
"{author} commented" : "{author} commented",
"You commented on %1$s" : "You commented on %1$s",
"You commented on {file}" : "You commented on {file}",
"%1$s commented on %2$s" : "%1$s commented on %2$s",
"{author} commented on {file}" : "{author} commented on {file}",
"<strong>Comments</strong> for files" : "<strong>Comments</strong> for files",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "You were mentioned on “{file}”, in a comment by a user that has since been deleted",
"{user} mentioned you in a comment on “{file}”" : "{user} mentioned you in a comment on “{file}”",
"Unknown user" : "Unknown user",
"A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) deleted user mentioned you in a comment on “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s mentioned you in a comment on “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "You were mentioned on “%s”, in a comment by a user that has since been deleted"
},
"nplurals=2; plural=(n != 1);");
-34
View File
@@ -1,34 +0,0 @@
{ "translations": {
"Edit comment" : "Edit comment",
"Delete comment" : "Delete comment",
"New comment …" : "New comment …",
"Post" : "Post",
"Cancel" : "Cancel",
"[Deleted user]" : "[Deleted user]",
"Comments" : "Comments",
"No comments yet, start the conversation!" : "No comments yet, start the conversation!",
"More comments …" : "More comments …",
"Save" : "Save",
"Allowed characters {count} of {max}" : "Allowed characters: {count} of {max}",
"Error occurred while retrieving comment with ID {id}" : "Error occurred while retrieving comment with ID {id}",
"Error occurred while updating comment with id {id}" : "Error occurred while updating comment with id {id}",
"Error occurred while posting comment" : "Error occurred while posting comment",
"_%n unread comment_::_%n unread comments_" : ["%n unread comment","%n unread comments"],
"Comment" : "Comment",
"You commented" : "You commented",
"%1$s commented" : "%1$s commented",
"{author} commented" : "{author} commented",
"You commented on %1$s" : "You commented on %1$s",
"You commented on {file}" : "You commented on {file}",
"%1$s commented on %2$s" : "%1$s commented on %2$s",
"{author} commented on {file}" : "{author} commented on {file}",
"<strong>Comments</strong> for files" : "<strong>Comments</strong> for files",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "You were mentioned on “{file}”, in a comment by a user that has since been deleted",
"{user} mentioned you in a comment on “{file}”" : "{user} mentioned you in a comment on “{file}”",
"Unknown user" : "Unknown user",
"A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) deleted user mentioned you in a comment on “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s mentioned you in a comment on “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "You were mentioned on “%s”, in a comment by a user that has since been deleted"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-20
View File
@@ -1,20 +0,0 @@
OC.L10N.register(
"comments",
{
"Type in a new comment..." : "Tajpu novan komenton...",
"Delete comment" : "Forigi komenton",
"Post" : "Afiŝi",
"Cancel" : "Nuligi",
"Edit comment" : "Redakti komenton",
"[Deleted user]" : "[Forigita uzanto]",
"Comments" : "Komentoj",
"No other comments available" : "Neniu alia komento disponeblas",
"More comments..." : "Pli da komentoj...",
"Save" : "Konservi",
"Allowed characters {count} of {max}" : "Permesataj karakteroj: {count} el {max}",
"{count} unread comments" : "{count} nelegitaj komentoj",
"Comment" : "Komento",
"%1$s commented" : "%1$s komentis",
"%1$s commented on %2$s" : "%1$s komentis %2$s"
},
"nplurals=2; plural=(n != 1);");
-18
View File
@@ -1,18 +0,0 @@
{ "translations": {
"Type in a new comment..." : "Tajpu novan komenton...",
"Delete comment" : "Forigi komenton",
"Post" : "Afiŝi",
"Cancel" : "Nuligi",
"Edit comment" : "Redakti komenton",
"[Deleted user]" : "[Forigita uzanto]",
"Comments" : "Komentoj",
"No other comments available" : "Neniu alia komento disponeblas",
"More comments..." : "Pli da komentoj...",
"Save" : "Konservi",
"Allowed characters {count} of {max}" : "Permesataj karakteroj: {count} el {max}",
"{count} unread comments" : "{count} nelegitaj komentoj",
"Comment" : "Komento",
"%1$s commented" : "%1$s komentis",
"%1$s commented on %2$s" : "%1$s komentis %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-37
View File
@@ -1,37 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Nuevo comentario",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario eliminado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡No hay comentarios, empieza la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se ha producido un error al obtener el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se ha producido un error al actualizar el comentario con ID {id}",
"Error occurred while posting comment" : "Se ha producido un error al enviar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentario sin leer","%nComentarios no leídos"],
"Comment" : "Comentar",
"You commented" : "Has comentado",
"%1$s commented" : "%1$s comentados",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Has comentado en %1$s",
"You commented on {file}" : "Has comentado en {file}",
"%1$s commented on %2$s" : "%1$s comentados en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> para archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te han mencionado en \"{file}\", en un comentario de un usuario que después ha sido eliminado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Files app plugin to add comments to files" : "Plugin de la app de Archivos para añadir comentarios a archivos.",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) eliminado, te mencionó en un comentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) eliminado, te mencionó en un comentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te han mencionado en \"%s\", en un comentario por un usuario que después ha sido eliminado"
},
"nplurals=2; plural=(n != 1);");
-35
View File
@@ -1,35 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Nuevo comentario",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario eliminado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡No hay comentarios, empieza la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se ha producido un error al obtener el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se ha producido un error al actualizar el comentario con ID {id}",
"Error occurred while posting comment" : "Se ha producido un error al enviar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentario sin leer","%nComentarios no leídos"],
"Comment" : "Comentar",
"You commented" : "Has comentado",
"%1$s commented" : "%1$s comentados",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Has comentado en %1$s",
"You commented on {file}" : "Has comentado en {file}",
"%1$s commented on %2$s" : "%1$s comentados en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> para archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te han mencionado en \"{file}\", en un comentario de un usuario que después ha sido eliminado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Files app plugin to add comments to files" : "Plugin de la app de Archivos para añadir comentarios a archivos.",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) eliminado, te mencionó en un comentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) eliminado, te mencionó en un comentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te han mencionado en \"%s\", en un comentario por un usuario que después ha sido eliminado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-35
View File
@@ -1,35 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},
"nplurals=2; plural=(n != 1);");
-33
View File
@@ -1,33 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-33
View File
@@ -1,33 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Nuevo comentario ...",
"Post" : "Post",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "No hay comentarios aún, iniciar la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} of {max}",
"Error occurred while updating comment with id {id}" : "Se ha producido un error al actualizar el comentario con id {id}",
"Error occurred while posting comment" : "Se ha producido un error al publicar un comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentar",
"You commented" : "Ud. ha comentado",
"%1$s commented" : "%1$s comentados",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Ud. ah comentado en %1$s",
"You commented on {file}" : "Ud. ha comentado en {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> en archivos",
"{user} mentioned you in a comment on “{file}”" : "{user} te ha mencionado en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un (now) usuario borrado te ha mencionado en un comentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un (now) usuario borrado the ha mencionado en un comentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te ha mencionado en un comentario en “%2$s”"
},
"nplurals=2; plural=(n != 1);");
-31
View File
@@ -1,31 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Nuevo comentario ...",
"Post" : "Post",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "No hay comentarios aún, iniciar la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} of {max}",
"Error occurred while updating comment with id {id}" : "Se ha producido un error al actualizar el comentario con id {id}",
"Error occurred while posting comment" : "Se ha producido un error al publicar un comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentar",
"You commented" : "Ud. ha comentado",
"%1$s commented" : "%1$s comentados",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Ud. ah comentado en %1$s",
"You commented on {file}" : "Ud. ha comentado en {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> en archivos",
"{user} mentioned you in a comment on “{file}”" : "{user} te ha mencionado en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un (now) usuario borrado te ha mencionado en un comentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un (now) usuario borrado the ha mencionado en un comentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te ha mencionado en un comentario en “%2$s”"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-36
View File
@@ -1,36 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},
"nplurals=2; plural=(n != 1);");
-34
View File
@@ -1,34 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-36
View File
@@ -1,36 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},
"nplurals=2; plural=(n != 1);");
-34
View File
@@ -1,34 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-36
View File
@@ -1,36 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},
"nplurals=2; plural=(n != 1);");
-34
View File
@@ -1,34 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-36
View File
@@ -1,36 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},
"nplurals=2; plural=(n != 1);");
-34
View File
@@ -1,34 +0,0 @@
{ "translations": {
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-36
View File
@@ -1,36 +0,0 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentario",
"Delete comment" : "Borrar comentario",
"New comment …" : "Comentario nuevo ...",
"Post" : "Publicar",
"Cancel" : "Cancelar",
"[Deleted user]" : "[Usuario borrado]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "¡Aún no hay comentarios, inicia la conversación!",
"More comments …" : "Más comentarios ...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with ID {id}" : "Se presentó un error al recuperar el comentario con ID {id}",
"Error occurred while updating comment with id {id}" : "Se presentó un error al actualizar el comentario con Id {id}",
"Error occurred while posting comment" : "Se presentó un error al publicar el comentario",
"_%n unread comment_::_%n unread comments_" : ["%n comentarios sin leer","%n comentarios sin leer"],
"Comment" : "Comentario",
"You commented" : "Comentaste",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
"You commented on %1$s" : "Usted comentó en %1$s",
"You commented on {file}" : "Hiciste un comentario de {file}",
"%1$s commented on %2$s" : "%1$s comentó en %2$s",
"{author} commented on {file}" : "{author} comentó en {file}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> de los archivos",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Te mencionaron en \"{file}\", en un comentario de un usuario que ya ha sido borrado",
"{user} mentioned you in a comment on “{file}”" : "{user} te mencionó en un comentario en “{file}”",
"Unknown user" : "Usuario desconocido",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuario (ahora) borrado te mencionó en un commentario en “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuario (ahora) borrado te mencionó en un commentario en “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s te mencionó en un comentario en “%2$s”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Te mencionaron en \"%s\", en un comentario de un usuario que ya ha sido borrado"
},
"nplurals=2; plural=(n != 1);");

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