Compare commits
65 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7ab2238b6a | |||
| 150c225933 | |||
| c260003b50 | |||
| d71c91a00c | |||
| f1fd8bbba6 | |||
| 34c91a2767 | |||
| 0727930103 | |||
| 1dab94d577 | |||
| edf96ce418 | |||
| c3768ac232 | |||
| 04dec46ba9 | |||
| 0f6e5c565b | |||
| fa4575836b | |||
| 8a3c617cb5 | |||
| 8adf7b73f5 | |||
| dff3fee9f2 | |||
| 1c6d28f034 | |||
| c9c9ea77a9 | |||
| 1fd167e6f4 | |||
| f1fcd03cc5 | |||
| ca0be4eb80 | |||
| 6901bfbeb7 | |||
| eef028e632 | |||
| e7b2d26d2f | |||
| 2a690fd154 | |||
| 5f54a06994 | |||
| 134fa6779b | |||
| bea82ac656 | |||
| 72150d6deb | |||
| be2c26a75b | |||
| b51d332719 | |||
| 82d33b7727 | |||
| aa47e85c25 | |||
| 79c07d38aa | |||
| 687261fc8c | |||
| 2d0a24f042 | |||
| 6112526fbc | |||
| ba88bf4727 | |||
| 0478825fac | |||
| af33953078 | |||
| 7a0093c163 | |||
| d09b8c99de | |||
| 65b985efde | |||
| 5ada35c153 | |||
| 227371c0de | |||
| 8372533cff | |||
| 45750b3f29 | |||
| 9561ce24f5 | |||
| edeba296b3 | |||
| 3310ec30c4 | |||
| e15b429aea | |||
| 65c9e346da | |||
| 720e588727 | |||
| 522663b9f0 | |||
| b79af98a31 | |||
| 1bdc27202a | |||
| f46eea1eac | |||
| 315241fb44 | |||
| d73d5a25cb | |||
| b1fbfc693d | |||
| 418f9598c3 | |||
| e76cc5a7d0 | |||
| 2386328401 | |||
| 11d0f8b6d7 | |||
| 761a6979a7 |
@@ -52,7 +52,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
@@ -82,7 +82,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
- 'version.php'
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -32,18 +32,18 @@ jobs:
|
||||
build-mode: none
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
|
||||
uses: github/codeql-action/init@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.build-mode }}
|
||||
config-file: ./.github/codeql-config.yml
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
|
||||
uses: github/codeql-action/analyze@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
||||
@@ -103,7 +103,7 @@ jobs:
|
||||
key: git-repo
|
||||
|
||||
- name: Checkout ${{ needs.init.outputs.head_ref }}
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
# Needed to allow force push later
|
||||
persist-credentials: true
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
id: comment-branch
|
||||
|
||||
- name: Checkout ${{ steps.comment-branch.outputs.head_ref }}
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -48,7 +48,7 @@ jobs:
|
||||
exit 1
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
# We need to checkout submodules for 3rdparty
|
||||
@@ -171,7 +171,7 @@ jobs:
|
||||
run: ./node_modules/cypress/bin/cypress install
|
||||
|
||||
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
|
||||
uses: cypress-io/github-action@dca986193e4336cb32820819b07e9ecacacaaaf6 # v7.0.0
|
||||
uses: cypress-io/github-action@0f330ebf0d60f87608ed72f1d6232e5644aa3171 # v7.1.1
|
||||
with:
|
||||
# We already installed the dependencies in the init job
|
||||
install: false
|
||||
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -74,7 +74,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
@@ -163,7 +163,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -56,13 +56,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Checkout user_saml
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/user_saml
|
||||
|
||||
@@ -75,7 +75,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -24,14 +24,14 @@ jobs:
|
||||
require: write
|
||||
|
||||
- name: Checkout github_helper
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/github_helper
|
||||
path: github_helper
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
path: server
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
@@ -71,7 +71,7 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Python
|
||||
uses: LizardByte/actions/actions/setup_python@e6bc045033a5614035b66daafc38ff86faecb23a # v2026.116.208
|
||||
uses: LizardByte/actions/actions/setup_python@09a6e10dc8175f2933c20bdf35fde0a193a9c00e # v2026.129.194351
|
||||
with:
|
||||
python-version: '2.7'
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -97,14 +97,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Checkout Talk app
|
||||
if: ${{ matrix.test-suite == 'videoverification_features' }}
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/spreed
|
||||
@@ -113,7 +113,7 @@ jobs:
|
||||
|
||||
- name: Checkout Activity app
|
||||
if: ${{ matrix.test-suite == 'sharing_features' }}
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
repository: nextcloud/activity
|
||||
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
name: NPM build
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
id: checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
ref: ${{ matrix.branches }}
|
||||
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -80,7 +80,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -77,7 +77,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
exit 1
|
||||
|
||||
- name: Checkout server before PR
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -33,7 +33,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -92,7 +92,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -72,7 +72,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -92,7 +92,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -75,7 +75,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -72,7 +72,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -99,7 +99,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -92,7 +92,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -75,7 +75,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
runs-on: ubuntu-latest-low
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
@@ -88,7 +88,7 @@ jobs:
|
||||
|
||||
- name: Upload Security Analysis results to GitHub
|
||||
if: always()
|
||||
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3
|
||||
uses: github/codeql-action/upload-sarif@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v3
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
@@ -99,7 +99,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
@@ -131,7 +131,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
@@ -159,13 +159,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 #v2.35.4
|
||||
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
|
||||
with:
|
||||
php-version: '8.2'
|
||||
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
name: update-ca-certificate-bundle-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
ref: ${{ matrix.branches }}
|
||||
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
name: update-code-signing-crl-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
ref: ${{ matrix.branches }}
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
submodules: true
|
||||
|
||||
@@ -73,7 +73,19 @@ OC.L10N.register(
|
||||
"Where: %s" : "Où : %s",
|
||||
"%1$s via %2$s" : "%1$s via %2$s",
|
||||
"In the past on %1$s for the entire day" : "Dans le passé toute la journée du %1$s ",
|
||||
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Dans une minute le %1$s pour la journée entière","Dans %n minutes le %1$s pour la journée entière","Dans %n minutes le %1$s pour la journée entière"],
|
||||
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Dans une heure le %1$s pour la journée entière","Dans %n heures le %1$s pour la journée entière","Dans %n heures le %1$s pour la journée entière"],
|
||||
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Dans un jour le %1$s pour la journée entière","Dans %n jours le %1$s pour la journée entière","Dans %n jours le %1$s pour la journée entière"],
|
||||
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Dans une semaine le %1$s pour la journée entière","Dans %n semaines le %1$s pour la journée entière","Dans %n semaines le %1$s pour la journée entière"],
|
||||
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Dans un mois toute la journée du %1$s","Dans %n mois toute la journée du %1$s","Dans %n mois toute la journée du %1$s"],
|
||||
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Dans un an toute la journée du %1$s","Dans %n années toute la journée du %1$s","Dans %n années toute la journée du %1$s"],
|
||||
"In the past on %1$s between %2$s - %3$s" : "Dans le passé le %1$s entre %2$s et %3$s",
|
||||
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Dans une minute le %1$s entre %2$s - %3$s","Dans %n minutes le %1$s entre %2$s - %3$s","Dans %n minutes le %1$s entre %2$s et %3$s"],
|
||||
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Dans une heure le %1$s entre %2$s et %3$s","Dans %n heures le %1$s entre %2$s et %3$s","Dans %n heures le %1$s entre %2$s et %3$s"],
|
||||
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Demain le %1$s entre %2$s et %3$s","Dans %n jours le %1$s entre %2$s et %3$s","Dans %n jours le %1$s entre %2$s et %3$s"],
|
||||
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["La semaine prochaine le %1$s entre %2$s et %3$s","Dans %n semaines le %1$s entre %2$s et %3$s","Dans %n semaines le %1$s entre %2$s et %3$s"],
|
||||
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Dans un mois le %1$s entre %2$s et %3$s","Dans %n mois le %1$s entre %2$s et %3$s","Dans %n mois le %1$s entre %2$s et %3$s"],
|
||||
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["L'an prochain le %1$s entre %2$s et %3$s","Dans %n ans le %1$s entre %2$s et %3$s","Dans %n ans le %1$s entre %2$s et %3$s"],
|
||||
"Could not generate when statement" : "Impossible de déterminer quand",
|
||||
"Every Day for the entire day" : "Chaque jour pour toute la journée",
|
||||
"Every Day for the entire day until %1$s" : "Chaque jour pour la journée entière jusqu'au %1$s",
|
||||
@@ -111,8 +123,26 @@ OC.L10N.register(
|
||||
"On specific dates for the entire day until %1$s" : "À une date spécifique pour la journée entière jusqu'au %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "À des dates spécifiques entre %1$s et %2$s jusqu'au %3$s",
|
||||
"In the past on %1$s" : "Dans le passé en %1$s",
|
||||
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["Dans une minute en %1$s","Dans %n minutes en %1$s","Dans %n minutes en %1$s"],
|
||||
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["Dans %n heure le %1$s","Dans %n heures le %1$s","Dans %n le %1$s"],
|
||||
"_In %n day on %1$s_::_In %n days on %1$s_" : ["Demain le %1$s","Dans %n jours le %1$s","Dans %n jours le %1$s"],
|
||||
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["La semaine prochaine le %1$s","Dans %n semaines le %1$s","Dans %n semaines le %1$s"],
|
||||
"_In %n month on %1$s_::_In %n months on %1$s_" : ["Le mois prochain le %1$s","Dans %n mois le %1$s","Dans %n mois le %1$s"],
|
||||
"_In %n year on %1$s_::_In %n years on %1$s_" : ["L'an prochain le %1$s","Dans %n ans le %1$s","Dans %n ans le %1$s"],
|
||||
"In the past on %1$s then on %2$s" : "Dans le passé le %1$s puis le %2$s",
|
||||
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Dans une minute le %1$s puis le %2$s","Dans %n minutes le %1$s puis le %2$s","Dans %n minutes le %1$s puis le %2$s"],
|
||||
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Dans une heure le %1$s puis le %2$s","Dans %n heures le %1$s puis le %2$s","Dans %n heures le %1$s puis le %2$s"],
|
||||
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Demain le %1$s puis le %2$s","Dans %n jours le %1$s puis le %2$s","Dans %n jours le %1$s puis le %2$s"],
|
||||
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["La semaine prochaine le %1$s puis le %2$s","Dans %n semaines le %1$s puis le %2$s","Dans %n semaines le %1$s puis le %2$s"],
|
||||
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Le mois prochain le %1$s puis le %2$s","Dans %n mois le %1$s puis le %2$s","Dans %n mois le %1$s puis le %2$s"],
|
||||
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["L'an prochain le %1$s puis le %2$s","Dans %n ans le %1$s puis le %2$s","Dans %n ans le %1$s puis le %2$s"],
|
||||
"In the past on %1$s then on %2$s and %3$s" : "Dans le passé le %1$s puis le %2$s et %3$s",
|
||||
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Dans une minute le %1$s puis le %2$s et le %3$s","Dans %n minutes le %1$s puis le %2$s et le %3$s","Dans %n minutes le %1$s puis le %2$s et le %3$s"],
|
||||
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Dans une heure le %1$s puis le %2$s et le %3$s","Dans %n heures le %1$s puis le %2$s et le %3$s","Dans %n heures le %1$s puis le %2$s et le %3$s"],
|
||||
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Demain le %1$s puis le %2$s et le %3$s","Dans %n jours le %1$s puis le %2$s et le %3$s","Dans %n jours le %1$s puis le %2$s et le %3$s"],
|
||||
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["La semaine prochaine le %1$s puis le %2$s et le %3$s","Dans %n semaines le %1$s puis le %2$s et le %3$s","Dans %n semaines le %1$s puis le %2$s et le%3$s"],
|
||||
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Dans un mois le %1$s puis le %2$s et le %3$s","Dans %n mois le %1$s puis le %2$s et le %3$s","Dans %n mois le %1$s puis le %2$s et le %3$s"],
|
||||
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Dans un an sur %1$spuis le %2$s et le %3$s","Dans %n années sur %1$s puis le %2$s et le %3$s","Dans %n années sur %1$s puis le %2$s et le %3$s"],
|
||||
"Could not generate next recurrence statement" : "Impossible de déterminer la prochaine récurrence",
|
||||
"Cancelled: %1$s" : "Annulé : %1$s",
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" a été annulé(e)",
|
||||
@@ -190,6 +220,8 @@ OC.L10N.register(
|
||||
"{actor} updated contact {card} in address book {addressbook}" : "{actor} a mis à jour le contact {card} dans le carnet d'adresses {addressbook}",
|
||||
"You updated contact {card} in address book {addressbook}" : "Vous avez mis à jour le contact {card} dans le carnet d'adresses {addressbook}",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Un <strong>contact</strong> ou <strong>carnet d'adresses</strong> a été modifié",
|
||||
"System address book disabled" : "Le carnet d'adresses du système est désactivé",
|
||||
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Le carnet d'adresses système a été automatiquement désactivé lors de la mise à jour. Cela signifie que le carnet d'adresses ne sera plus disponible pour les utilisateurs dans l'application Contacts ou d'autres clients. Le carnet d'adresses du système a été désactivé car le nombre de contacts dans le carnet dépassait le nombre maximum recommandé de contacts. Cette limite est fixée afin d'éviter des problèmes de performance. Vous pouvez réactiver le carnet d'adresses système avec la commande suivante : {command}",
|
||||
"Accounts" : "Comptes",
|
||||
"System address book which holds all accounts" : "Carnet d'adresses système qui regroupe tous les comptes",
|
||||
"File is not updatable: %1$s" : "Ce fichier ne peut pas être mis à jour : %1$s",
|
||||
@@ -202,6 +234,8 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Impossible de renommer le fichier partiel en fichier final, annulé par le hook",
|
||||
"Could not rename part file to final file" : "Impossible de renommer le fichier partiel en fichier définitif",
|
||||
"Failed to check file size: %1$s" : "Impossible de vérifier la taille du fichier : %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Impossible d'ouvrir le fichier : %1$s (%2$d), le fichier semble exister",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Impossible d'ouvrir le fichier : %1$s (%2$d), le fichier ne semble pas exister",
|
||||
"Encryption not ready: %1$s" : "Chiffrement pas prêt : %1$s",
|
||||
"Failed to open file: %1$s" : "Impossible d'ouvrir le fichier : %1$s",
|
||||
"Failed to unlink: %1$s" : "Impossible de supprimer le lien :%1$s",
|
||||
@@ -226,6 +260,10 @@ OC.L10N.register(
|
||||
"DAV system address book" : "Carnet d'adresses système DAV",
|
||||
"No outstanding DAV system address book sync." : "Pas de synchronisation DAV en cours du carnet d'adresses système.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "La synchronisation du carnet d'adresses système DAV n'a pas encore été effectuée car votre instance a plus de 1 000 utilisateurs ou parce qu'une erreur est survenue. Merci de l'exécuter manuellement en tapant la commande \"occ dav:sync-system-addressbook\".",
|
||||
"DAV system address book size" : "Taille du carnet d'adresses système",
|
||||
"The system address book is disabled" : "Le carnet d'adresses système est désactivé",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Le carnet d'adresses système est activé, mais il contient plus de contacts que la limite fixée à %d ",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Le carnet d'adresses système est activé est contient moins de contacts que la limite fixée à %d ",
|
||||
"WebDAV endpoint" : "Point de terminaison WebDAV",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Impossible de vérifier si votre serveur web est correctement configuré pour permettre la synchronisation de fichiers via WebDAV. Veuillez vérifier manuellement.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Votre serveur web n’est pas encore correctement configuré pour la synchronisation de fichiers parce que l’interface WebDAV semble ne pas fonctionner.",
|
||||
|
||||
@@ -71,7 +71,19 @@
|
||||
"Where: %s" : "Où : %s",
|
||||
"%1$s via %2$s" : "%1$s via %2$s",
|
||||
"In the past on %1$s for the entire day" : "Dans le passé toute la journée du %1$s ",
|
||||
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Dans une minute le %1$s pour la journée entière","Dans %n minutes le %1$s pour la journée entière","Dans %n minutes le %1$s pour la journée entière"],
|
||||
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Dans une heure le %1$s pour la journée entière","Dans %n heures le %1$s pour la journée entière","Dans %n heures le %1$s pour la journée entière"],
|
||||
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Dans un jour le %1$s pour la journée entière","Dans %n jours le %1$s pour la journée entière","Dans %n jours le %1$s pour la journée entière"],
|
||||
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Dans une semaine le %1$s pour la journée entière","Dans %n semaines le %1$s pour la journée entière","Dans %n semaines le %1$s pour la journée entière"],
|
||||
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Dans un mois toute la journée du %1$s","Dans %n mois toute la journée du %1$s","Dans %n mois toute la journée du %1$s"],
|
||||
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Dans un an toute la journée du %1$s","Dans %n années toute la journée du %1$s","Dans %n années toute la journée du %1$s"],
|
||||
"In the past on %1$s between %2$s - %3$s" : "Dans le passé le %1$s entre %2$s et %3$s",
|
||||
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Dans une minute le %1$s entre %2$s - %3$s","Dans %n minutes le %1$s entre %2$s - %3$s","Dans %n minutes le %1$s entre %2$s et %3$s"],
|
||||
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Dans une heure le %1$s entre %2$s et %3$s","Dans %n heures le %1$s entre %2$s et %3$s","Dans %n heures le %1$s entre %2$s et %3$s"],
|
||||
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Demain le %1$s entre %2$s et %3$s","Dans %n jours le %1$s entre %2$s et %3$s","Dans %n jours le %1$s entre %2$s et %3$s"],
|
||||
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["La semaine prochaine le %1$s entre %2$s et %3$s","Dans %n semaines le %1$s entre %2$s et %3$s","Dans %n semaines le %1$s entre %2$s et %3$s"],
|
||||
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Dans un mois le %1$s entre %2$s et %3$s","Dans %n mois le %1$s entre %2$s et %3$s","Dans %n mois le %1$s entre %2$s et %3$s"],
|
||||
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["L'an prochain le %1$s entre %2$s et %3$s","Dans %n ans le %1$s entre %2$s et %3$s","Dans %n ans le %1$s entre %2$s et %3$s"],
|
||||
"Could not generate when statement" : "Impossible de déterminer quand",
|
||||
"Every Day for the entire day" : "Chaque jour pour toute la journée",
|
||||
"Every Day for the entire day until %1$s" : "Chaque jour pour la journée entière jusqu'au %1$s",
|
||||
@@ -109,8 +121,26 @@
|
||||
"On specific dates for the entire day until %1$s" : "À une date spécifique pour la journée entière jusqu'au %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "À des dates spécifiques entre %1$s et %2$s jusqu'au %3$s",
|
||||
"In the past on %1$s" : "Dans le passé en %1$s",
|
||||
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["Dans une minute en %1$s","Dans %n minutes en %1$s","Dans %n minutes en %1$s"],
|
||||
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["Dans %n heure le %1$s","Dans %n heures le %1$s","Dans %n le %1$s"],
|
||||
"_In %n day on %1$s_::_In %n days on %1$s_" : ["Demain le %1$s","Dans %n jours le %1$s","Dans %n jours le %1$s"],
|
||||
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["La semaine prochaine le %1$s","Dans %n semaines le %1$s","Dans %n semaines le %1$s"],
|
||||
"_In %n month on %1$s_::_In %n months on %1$s_" : ["Le mois prochain le %1$s","Dans %n mois le %1$s","Dans %n mois le %1$s"],
|
||||
"_In %n year on %1$s_::_In %n years on %1$s_" : ["L'an prochain le %1$s","Dans %n ans le %1$s","Dans %n ans le %1$s"],
|
||||
"In the past on %1$s then on %2$s" : "Dans le passé le %1$s puis le %2$s",
|
||||
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Dans une minute le %1$s puis le %2$s","Dans %n minutes le %1$s puis le %2$s","Dans %n minutes le %1$s puis le %2$s"],
|
||||
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Dans une heure le %1$s puis le %2$s","Dans %n heures le %1$s puis le %2$s","Dans %n heures le %1$s puis le %2$s"],
|
||||
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Demain le %1$s puis le %2$s","Dans %n jours le %1$s puis le %2$s","Dans %n jours le %1$s puis le %2$s"],
|
||||
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["La semaine prochaine le %1$s puis le %2$s","Dans %n semaines le %1$s puis le %2$s","Dans %n semaines le %1$s puis le %2$s"],
|
||||
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Le mois prochain le %1$s puis le %2$s","Dans %n mois le %1$s puis le %2$s","Dans %n mois le %1$s puis le %2$s"],
|
||||
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["L'an prochain le %1$s puis le %2$s","Dans %n ans le %1$s puis le %2$s","Dans %n ans le %1$s puis le %2$s"],
|
||||
"In the past on %1$s then on %2$s and %3$s" : "Dans le passé le %1$s puis le %2$s et %3$s",
|
||||
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Dans une minute le %1$s puis le %2$s et le %3$s","Dans %n minutes le %1$s puis le %2$s et le %3$s","Dans %n minutes le %1$s puis le %2$s et le %3$s"],
|
||||
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Dans une heure le %1$s puis le %2$s et le %3$s","Dans %n heures le %1$s puis le %2$s et le %3$s","Dans %n heures le %1$s puis le %2$s et le %3$s"],
|
||||
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Demain le %1$s puis le %2$s et le %3$s","Dans %n jours le %1$s puis le %2$s et le %3$s","Dans %n jours le %1$s puis le %2$s et le %3$s"],
|
||||
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["La semaine prochaine le %1$s puis le %2$s et le %3$s","Dans %n semaines le %1$s puis le %2$s et le %3$s","Dans %n semaines le %1$s puis le %2$s et le%3$s"],
|
||||
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Dans un mois le %1$s puis le %2$s et le %3$s","Dans %n mois le %1$s puis le %2$s et le %3$s","Dans %n mois le %1$s puis le %2$s et le %3$s"],
|
||||
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Dans un an sur %1$spuis le %2$s et le %3$s","Dans %n années sur %1$s puis le %2$s et le %3$s","Dans %n années sur %1$s puis le %2$s et le %3$s"],
|
||||
"Could not generate next recurrence statement" : "Impossible de déterminer la prochaine récurrence",
|
||||
"Cancelled: %1$s" : "Annulé : %1$s",
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" a été annulé(e)",
|
||||
@@ -188,6 +218,8 @@
|
||||
"{actor} updated contact {card} in address book {addressbook}" : "{actor} a mis à jour le contact {card} dans le carnet d'adresses {addressbook}",
|
||||
"You updated contact {card} in address book {addressbook}" : "Vous avez mis à jour le contact {card} dans le carnet d'adresses {addressbook}",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Un <strong>contact</strong> ou <strong>carnet d'adresses</strong> a été modifié",
|
||||
"System address book disabled" : "Le carnet d'adresses du système est désactivé",
|
||||
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Le carnet d'adresses système a été automatiquement désactivé lors de la mise à jour. Cela signifie que le carnet d'adresses ne sera plus disponible pour les utilisateurs dans l'application Contacts ou d'autres clients. Le carnet d'adresses du système a été désactivé car le nombre de contacts dans le carnet dépassait le nombre maximum recommandé de contacts. Cette limite est fixée afin d'éviter des problèmes de performance. Vous pouvez réactiver le carnet d'adresses système avec la commande suivante : {command}",
|
||||
"Accounts" : "Comptes",
|
||||
"System address book which holds all accounts" : "Carnet d'adresses système qui regroupe tous les comptes",
|
||||
"File is not updatable: %1$s" : "Ce fichier ne peut pas être mis à jour : %1$s",
|
||||
@@ -200,6 +232,8 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Impossible de renommer le fichier partiel en fichier final, annulé par le hook",
|
||||
"Could not rename part file to final file" : "Impossible de renommer le fichier partiel en fichier définitif",
|
||||
"Failed to check file size: %1$s" : "Impossible de vérifier la taille du fichier : %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Impossible d'ouvrir le fichier : %1$s (%2$d), le fichier semble exister",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Impossible d'ouvrir le fichier : %1$s (%2$d), le fichier ne semble pas exister",
|
||||
"Encryption not ready: %1$s" : "Chiffrement pas prêt : %1$s",
|
||||
"Failed to open file: %1$s" : "Impossible d'ouvrir le fichier : %1$s",
|
||||
"Failed to unlink: %1$s" : "Impossible de supprimer le lien :%1$s",
|
||||
@@ -224,6 +258,10 @@
|
||||
"DAV system address book" : "Carnet d'adresses système DAV",
|
||||
"No outstanding DAV system address book sync." : "Pas de synchronisation DAV en cours du carnet d'adresses système.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "La synchronisation du carnet d'adresses système DAV n'a pas encore été effectuée car votre instance a plus de 1 000 utilisateurs ou parce qu'une erreur est survenue. Merci de l'exécuter manuellement en tapant la commande \"occ dav:sync-system-addressbook\".",
|
||||
"DAV system address book size" : "Taille du carnet d'adresses système",
|
||||
"The system address book is disabled" : "Le carnet d'adresses système est désactivé",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Le carnet d'adresses système est activé, mais il contient plus de contacts que la limite fixée à %d ",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Le carnet d'adresses système est activé est contient moins de contacts que la limite fixée à %d ",
|
||||
"WebDAV endpoint" : "Point de terminaison WebDAV",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Impossible de vérifier si votre serveur web est correctement configuré pour permettre la synchronisation de fichiers via WebDAV. Veuillez vérifier manuellement.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Votre serveur web n’est pas encore correctement configuré pour la synchronisation de fichiers parce que l’interface WebDAV semble ne pas fonctionner.",
|
||||
|
||||
@@ -157,6 +157,7 @@ class CommentsPlugin extends ServerPlugin {
|
||||
if (!is_null($args['datetime'])) {
|
||||
$args['datetime'] = new \DateTime((string)$args['datetime']);
|
||||
}
|
||||
$args['limit'] = min(max(1, $args['limit']), 100);
|
||||
|
||||
$results = $node->findChildren($args['limit'], $args['offset'], $args['datetime']);
|
||||
|
||||
|
||||
@@ -27,26 +27,44 @@ OC.L10N.register(
|
||||
"Bad Signature" : "Nevažeći potpis",
|
||||
"Missing Signature" : "Nedostaje potpis",
|
||||
"one-time password for server-side-encryption" : "jednokratna zaporka za šifriranje na poslužitelju",
|
||||
"Encryption password" : "Zaporka za šifriranje",
|
||||
"The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "Administracija je omogućila šifriranje na strani poslužitelja. Vaše datoteke šifrirane su pomoću zaporke <strong>%s</strong>.",
|
||||
"The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Administracija je omogućila šifriranje na strani poslužitelja. Vaše datoteke šifrirane su pomoću zaporke „%s”.",
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Prijavite se u web-sučelje, otvorite odjeljak „Sigurnost” u osobnim postavkama i ažurirajte zaporku za šifriranje tako da ovu zaporku unesete u polje „Stara zaporka za prijavu”, a zatim unesete svoju trenutačnu zaporku za prijavu.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o dijeljenoj datoteci. Zatražite od vlasnika datoteke da je ponovo podijeli s vama.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće čitati, vjerojatno je riječ o dijeljenoj datoteci. Zatražite od vlasnika datoteke da je ponovo podijeli s vama.",
|
||||
"Default Encryption Module" : "Zadani modul šifriranja",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Zadani modul šifriranja za Nextcloudovo šifriranje na strani poslužitelja (SSE)",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to\n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Ova aplikacija pruža (zadanu) kriptografsku implementaciju za Nextcloudovu značajku šifriranja na strani poslužitelja (SSE).\n\n\t\t\t**Detalji šifriranja**\n\t\t\t* **Način šifre:** AES-256-CTR (zadano)\n\t\t\t* **Autentikacija:** HMAC-SHA256\n\n\t\t\t**Važna upozorenja**\n\t\t\t* **OPASNOST:** Nemojte onemogućiti ovu aplikaciju dok sve datoteke ne budu dešifrirane (`occ encryption:decrypt-all`).\n\t\t\t* **UPOZORENJE**: Povratak na nešifriranu pohranu datoteka nakon aktivacije zahtijeva pristup naredbenom retku. Ova je radnja trajna putem web-sučelja.\n\n\t\t\t**Napomene za postojeće datoteke**\n\t\t\t* Prema zadanim postavkama, omogućavanje SSE-a ne šifrira postojeće datoteke; šifriraju se samo nove datoteke.\n\t\t\t* Za šifriranje svih postojećih datoteka upotrijebite naredbu `occ encryption:encrypt-all`.\n\n\t\t\t**Prije nego što započnete**\n\t\t\t***Pročitajte dokumentaciju:** Prije omogućavanja SSE-a, šifriranja postojećih datoteka ili onemogućavanja SSE-a,\n\t\t\t\tobavezno pročitajte dokumentaciju kako biste razumjeli posljedice i ispravne postupke te izbjegli gubitak podataka.",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Omogućavanjem ove opcije šifriraju se sve datoteke smještene u glavnoj pohrani, a u protivnom se šifriraju samo datoteke u vanjskoj pohrani",
|
||||
"Encrypt the home storage" : "Šifrirajte kućnu pohranu",
|
||||
"Disable recovery key" : "Onemogući ključ za oporavak",
|
||||
"Enable recovery key" : "Omogući ključ za oporavak",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Ključ za oporavak dodatni je ključ za šifriranje koji se koristi za šifriranje datoteka. Služi za oporavak datoteka s računa ako se zaporka zaboravi.",
|
||||
"Recovery key password" : "Zaporka ključa za oporavak",
|
||||
"Passwords fields do not match" : "Polja zaporki se ne podudaraju",
|
||||
"Repeat recovery key password" : "Ponovite zaporku ključa za oporavak",
|
||||
"An error occurred while updating the recovery key settings. Please try again." : "Došlo je do pogreške prilikom ažuriranja postavki ključa za oporavak. Pokušajte ponovno.",
|
||||
"Change recovery key password" : "Promijenite zaporku ključa za oporavak",
|
||||
"Old recovery key password" : "Stara zaporka ključa za oporavak",
|
||||
"New recovery key password" : "Nova zaporka ključa za oporavak",
|
||||
"Repeat new recovery key password" : "Ponovite novu zaporku ključa za oporavak",
|
||||
"An error occurred while changing the recovery key password. Please try again." : "Došlo je do pogreške prilikom promjene zaporke ključa za oporavak. Pokušajte ponovno.",
|
||||
"Update private key password" : "Ažurirajte zaporku privatnog ključa",
|
||||
"Your private key password no longer matches your log-in password. Set your old private key password to your current log-in password." : "Zaporka vašeg privatnog ključa više se ne podudara s vašom zaporkom za prijavu. Postavite staru zaporku privatnog ključa na svoju trenutačnu zaporku za prijavu.",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Ako se ne sjećate stare zaporke, možete zatražiti od administratora da oporavi vaše datoteke.",
|
||||
"Old log-in password" : "Stara zaporka za prijavu",
|
||||
"Current log-in password" : "Aktualna zaporka za prijavu",
|
||||
"Update" : "Ažuriraj",
|
||||
"Updating recovery keys. This can take some time…" : "Ažuriranje ključeva za oporavak. Ovo može potrajati…",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "U slučaju gubitka zaporke, aktiviranje ove mogućnosti ponovno će vam pribaviti pristup vašim šifriranim datotekama",
|
||||
"Enable password recovery" : "Omogući oporavak zaporke",
|
||||
"Default encryption module" : "Zadani modul za šifriranje",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifriranje je omogućena, ali se ključevi nisu inicijalizirali, odjavite se i ponovno se prijavite",
|
||||
"Basic encryption module" : "Osnovni modul za šifriranje",
|
||||
"Missing parameters" : "Nedostaju parametri",
|
||||
"Default encryption module for server-side encryption" : "Zadani modul za šifriranje na poslužitelju",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Kako biste mogli koristiti ovaj modul šifriranja, morate omogućiti šifriranje na strani poslužitelja u administratorskim postavkama. Nakon omogućavanja, ovaj će modul transparentno šifrirati sve vaše datoteke. Šifriranje se temelji na AES 256 ključevima.\nModul neće dirati postojeće datoteke, već će se šifrirati samo nove datoteke nakon što se omogući šifriranje na strani poslužitelja. Također nije moguće ponovno onemogućiti šifriranje i vratiti se na nešifrirani sustav.\nPrije nego što odlučite omogućiti šifriranje na strani poslužitelja, obavezno pročitajte dokumentaciju kako biste razumjeli sve posljedice.",
|
||||
"Change recovery key password:" : "Promijenite zaporku ključa za oporavak:",
|
||||
"Change Password" : "Promijeni zaporku",
|
||||
"Your private key password no longer matches your log-in password." : "Zaporka vašeg privatnog ključa više se ne podudara s vašom zaporkom za prijavu.",
|
||||
@@ -54,6 +72,7 @@ OC.L10N.register(
|
||||
"Update Private Key Password" : "Ažuriraj zaporku privatnog ključa",
|
||||
"Enable password recovery:" : "Omogući oporavak zaporke:",
|
||||
"Enabled" : "Omogućeno",
|
||||
"Disabled" : "Onemogućeno"
|
||||
"Disabled" : "Onemogućeno",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Ova aplikacija pruža (zadanu) kriptografsku implementaciju za Nextcloudovu značajku šifriranja na strani poslužitelja (SSE).\n\n\t\t\t**Detalji šifriranja**\n\t\t\t* **Način šifre:** AES-256-CTR (zadano)\n\t\t\t* **Autentikacija:** HMAC-SHA256\n\n\t\t\t**Važna upozorenja**\n\t\t\t* **OPASNOST:** Nemojte onemogućiti ovu aplikaciju dok sve datoteke ne budu dešifrirane (`occ encryption:decrypt-all`).\n\t\t\t* **UPOZORENJE:** Povratak na nešifriranu pohranu datoteka nakon aktivacije zahtijeva pristup naredbenom retku. Ova je radnja trajna putem web-sučelja.\"\n\n\t\t\t**Napomene za postojeće datoteke**\n\t\t\t* Prema zadanim postavkama, omogućavanje SSE-a ne šifrira postojeće datoteke; šifriraju se samo nove datoteke.\n\t\t\t* Za šifriranje svih postojećih datoteka upotrijebite naredbu `occ encryption:encrypt-all`.\n\n\t\t\t**Prije nego što započnete**\n\t\t\t* **Pročitajte dokumentaciju:** Prije omogućavanja SSE-a, šifriranja postojećih datoteka ili onemogućavanja SSE-a,\n\t\t\t\tobavezno pročitajte dokumentaciju kako biste razumjeli posljedice i odgovarajuće postupke kako biste izbjegli gubitak podataka."
|
||||
},
|
||||
"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
|
||||
|
||||
@@ -25,26 +25,44 @@
|
||||
"Bad Signature" : "Nevažeći potpis",
|
||||
"Missing Signature" : "Nedostaje potpis",
|
||||
"one-time password for server-side-encryption" : "jednokratna zaporka za šifriranje na poslužitelju",
|
||||
"Encryption password" : "Zaporka za šifriranje",
|
||||
"The administration enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>." : "Administracija je omogućila šifriranje na strani poslužitelja. Vaše datoteke šifrirane su pomoću zaporke <strong>%s</strong>.",
|
||||
"The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Administracija je omogućila šifriranje na strani poslužitelja. Vaše datoteke šifrirane su pomoću zaporke „%s”.",
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Prijavite se u web-sučelje, otvorite odjeljak „Sigurnost” u osobnim postavkama i ažurirajte zaporku za šifriranje tako da ovu zaporku unesete u polje „Stara zaporka za prijavu”, a zatim unesete svoju trenutačnu zaporku za prijavu.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće dešifrirati, vjerojatno je riječ o dijeljenoj datoteci. Zatražite od vlasnika datoteke da je ponovo podijeli s vama.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ovu datoteku nije moguće čitati, vjerojatno je riječ o dijeljenoj datoteci. Zatražite od vlasnika datoteke da je ponovo podijeli s vama.",
|
||||
"Default Encryption Module" : "Zadani modul šifriranja",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Zadani modul šifriranja za Nextcloudovo šifriranje na strani poslužitelja (SSE)",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to\n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Ova aplikacija pruža (zadanu) kriptografsku implementaciju za Nextcloudovu značajku šifriranja na strani poslužitelja (SSE).\n\n\t\t\t**Detalji šifriranja**\n\t\t\t* **Način šifre:** AES-256-CTR (zadano)\n\t\t\t* **Autentikacija:** HMAC-SHA256\n\n\t\t\t**Važna upozorenja**\n\t\t\t* **OPASNOST:** Nemojte onemogućiti ovu aplikaciju dok sve datoteke ne budu dešifrirane (`occ encryption:decrypt-all`).\n\t\t\t* **UPOZORENJE**: Povratak na nešifriranu pohranu datoteka nakon aktivacije zahtijeva pristup naredbenom retku. Ova je radnja trajna putem web-sučelja.\n\n\t\t\t**Napomene za postojeće datoteke**\n\t\t\t* Prema zadanim postavkama, omogućavanje SSE-a ne šifrira postojeće datoteke; šifriraju se samo nove datoteke.\n\t\t\t* Za šifriranje svih postojećih datoteka upotrijebite naredbu `occ encryption:encrypt-all`.\n\n\t\t\t**Prije nego što započnete**\n\t\t\t***Pročitajte dokumentaciju:** Prije omogućavanja SSE-a, šifriranja postojećih datoteka ili onemogućavanja SSE-a,\n\t\t\t\tobavezno pročitajte dokumentaciju kako biste razumjeli posljedice i ispravne postupke te izbjegli gubitak podataka.",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Omogućavanjem ove opcije šifriraju se sve datoteke smještene u glavnoj pohrani, a u protivnom se šifriraju samo datoteke u vanjskoj pohrani",
|
||||
"Encrypt the home storage" : "Šifrirajte kućnu pohranu",
|
||||
"Disable recovery key" : "Onemogući ključ za oporavak",
|
||||
"Enable recovery key" : "Omogući ključ za oporavak",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Ključ za oporavak dodatni je ključ za šifriranje koji se koristi za šifriranje datoteka. Služi za oporavak datoteka s računa ako se zaporka zaboravi.",
|
||||
"Recovery key password" : "Zaporka ključa za oporavak",
|
||||
"Passwords fields do not match" : "Polja zaporki se ne podudaraju",
|
||||
"Repeat recovery key password" : "Ponovite zaporku ključa za oporavak",
|
||||
"An error occurred while updating the recovery key settings. Please try again." : "Došlo je do pogreške prilikom ažuriranja postavki ključa za oporavak. Pokušajte ponovno.",
|
||||
"Change recovery key password" : "Promijenite zaporku ključa za oporavak",
|
||||
"Old recovery key password" : "Stara zaporka ključa za oporavak",
|
||||
"New recovery key password" : "Nova zaporka ključa za oporavak",
|
||||
"Repeat new recovery key password" : "Ponovite novu zaporku ključa za oporavak",
|
||||
"An error occurred while changing the recovery key password. Please try again." : "Došlo je do pogreške prilikom promjene zaporke ključa za oporavak. Pokušajte ponovno.",
|
||||
"Update private key password" : "Ažurirajte zaporku privatnog ključa",
|
||||
"Your private key password no longer matches your log-in password. Set your old private key password to your current log-in password." : "Zaporka vašeg privatnog ključa više se ne podudara s vašom zaporkom za prijavu. Postavite staru zaporku privatnog ključa na svoju trenutačnu zaporku za prijavu.",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Ako se ne sjećate stare zaporke, možete zatražiti od administratora da oporavi vaše datoteke.",
|
||||
"Old log-in password" : "Stara zaporka za prijavu",
|
||||
"Current log-in password" : "Aktualna zaporka za prijavu",
|
||||
"Update" : "Ažuriraj",
|
||||
"Updating recovery keys. This can take some time…" : "Ažuriranje ključeva za oporavak. Ovo može potrajati…",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "U slučaju gubitka zaporke, aktiviranje ove mogućnosti ponovno će vam pribaviti pristup vašim šifriranim datotekama",
|
||||
"Enable password recovery" : "Omogući oporavak zaporke",
|
||||
"Default encryption module" : "Zadani modul za šifriranje",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacija za šifriranje je omogućena, ali se ključevi nisu inicijalizirali, odjavite se i ponovno se prijavite",
|
||||
"Basic encryption module" : "Osnovni modul za šifriranje",
|
||||
"Missing parameters" : "Nedostaju parametri",
|
||||
"Default encryption module for server-side encryption" : "Zadani modul za šifriranje na poslužitelju",
|
||||
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Kako biste mogli koristiti ovaj modul šifriranja, morate omogućiti šifriranje na strani poslužitelja u administratorskim postavkama. Nakon omogućavanja, ovaj će modul transparentno šifrirati sve vaše datoteke. Šifriranje se temelji na AES 256 ključevima.\nModul neće dirati postojeće datoteke, već će se šifrirati samo nove datoteke nakon što se omogući šifriranje na strani poslužitelja. Također nije moguće ponovno onemogućiti šifriranje i vratiti se na nešifrirani sustav.\nPrije nego što odlučite omogućiti šifriranje na strani poslužitelja, obavezno pročitajte dokumentaciju kako biste razumjeli sve posljedice.",
|
||||
"Change recovery key password:" : "Promijenite zaporku ključa za oporavak:",
|
||||
"Change Password" : "Promijeni zaporku",
|
||||
"Your private key password no longer matches your log-in password." : "Zaporka vašeg privatnog ključa više se ne podudara s vašom zaporkom za prijavu.",
|
||||
@@ -52,6 +70,7 @@
|
||||
"Update Private Key Password" : "Ažuriraj zaporku privatnog ključa",
|
||||
"Enable password recovery:" : "Omogući oporavak zaporke:",
|
||||
"Enabled" : "Omogućeno",
|
||||
"Disabled" : "Onemogućeno"
|
||||
"Disabled" : "Onemogućeno",
|
||||
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Ova aplikacija pruža (zadanu) kriptografsku implementaciju za Nextcloudovu značajku šifriranja na strani poslužitelja (SSE).\n\n\t\t\t**Detalji šifriranja**\n\t\t\t* **Način šifre:** AES-256-CTR (zadano)\n\t\t\t* **Autentikacija:** HMAC-SHA256\n\n\t\t\t**Važna upozorenja**\n\t\t\t* **OPASNOST:** Nemojte onemogućiti ovu aplikaciju dok sve datoteke ne budu dešifrirane (`occ encryption:decrypt-all`).\n\t\t\t* **UPOZORENJE:** Povratak na nešifriranu pohranu datoteka nakon aktivacije zahtijeva pristup naredbenom retku. Ova je radnja trajna putem web-sučelja.\"\n\n\t\t\t**Napomene za postojeće datoteke**\n\t\t\t* Prema zadanim postavkama, omogućavanje SSE-a ne šifrira postojeće datoteke; šifriraju se samo nove datoteke.\n\t\t\t* Za šifriranje svih postojećih datoteka upotrijebite naredbu `occ encryption:encrypt-all`.\n\n\t\t\t**Prije nego što započnete**\n\t\t\t* **Pročitajte dokumentaciju:** Prije omogućavanja SSE-a, šifriranja postojećih datoteka ili onemogućavanja SSE-a,\n\t\t\t\tobavezno pročitajte dokumentaciju kako biste razumjeli posljedice i odgovarajuće postupke kako biste izbjegli gubitak podataka."
|
||||
},"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;"
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
@@ -21,42 +23,32 @@ use Psr\Log\LoggerInterface;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
/**
|
||||
* Default file content encryption module.
|
||||
*
|
||||
* Implements block-based encryption, decryption, key management,
|
||||
* and access control for user data storage.
|
||||
*
|
||||
* @see \OCP\Encryption\IEncryptionModule for detailed method documentation and contract.
|
||||
*/
|
||||
class Encryption implements IEncryptionModule {
|
||||
public const ID = 'OC_DEFAULT_MODULE';
|
||||
public const DISPLAY_NAME = 'Default encryption module';
|
||||
|
||||
/** @var string */
|
||||
private $cipher;
|
||||
|
||||
/** @var string */
|
||||
private $path;
|
||||
|
||||
/** @var string */
|
||||
private $user;
|
||||
|
||||
private string $cipher;
|
||||
private string $path;
|
||||
private ?string $user;
|
||||
private array $owner;
|
||||
|
||||
/** @var string */
|
||||
private $fileKey;
|
||||
|
||||
/** @var string */
|
||||
private $writeCache;
|
||||
|
||||
/** @var array */
|
||||
private $accessList;
|
||||
|
||||
/** @var boolean */
|
||||
private $isWriteOperation;
|
||||
|
||||
private string $fileKey;
|
||||
private string $writeCache;
|
||||
private array $accessList;
|
||||
private bool $isWriteOperation;
|
||||
private bool $useMasterPassword;
|
||||
|
||||
private bool $useLegacyBase64Encoding = false;
|
||||
|
||||
/** @var int Current version of the file */
|
||||
// Current version of the file
|
||||
private int $version = 0;
|
||||
|
||||
/** @var array remember encryption signature version */
|
||||
private static $rememberVersion = [];
|
||||
// Remember encryption signature version
|
||||
private static array $rememberVersion = [];
|
||||
|
||||
public function __construct(
|
||||
private Crypt $crypt,
|
||||
@@ -72,38 +64,15 @@ class Encryption implements IEncryptionModule {
|
||||
$this->useMasterPassword = $this->util->isMasterKeyEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string defining the technical unique id
|
||||
*/
|
||||
public function getId() {
|
||||
public function getId(): string {
|
||||
return self::ID;
|
||||
}
|
||||
|
||||
/**
|
||||
* In comparison to getKey() this function returns a human readable (maybe translated) name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDisplayName() {
|
||||
public function getDisplayName(): string {
|
||||
return self::DISPLAY_NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* start receiving chunks from a file. This is the place where you can
|
||||
* perform some initial step before starting encrypting/decrypting the
|
||||
* chunks
|
||||
*
|
||||
* @param string $path to the file
|
||||
* @param string $user who read/write the file
|
||||
* @param string $mode php stream open mode
|
||||
* @param array $header contains the header data read from the file
|
||||
* @param array $accessList who has access to the file contains the key 'users' and 'public'
|
||||
*
|
||||
* @return array $header contain data as key-value pairs which should be
|
||||
* written to the header, in case of a write operation
|
||||
* or if no additional data is needed return a empty array
|
||||
*/
|
||||
public function begin($path, $user, $mode, array $header, array $accessList) {
|
||||
public function begin(string $path, ?string $user, string $mode, array $header, array $accessList): array {
|
||||
$this->path = $this->getPathToRealFile($path);
|
||||
$this->accessList = $accessList;
|
||||
$this->user = $user;
|
||||
@@ -111,7 +80,6 @@ class Encryption implements IEncryptionModule {
|
||||
$this->writeCache = '';
|
||||
$this->useLegacyBase64Encoding = true;
|
||||
|
||||
|
||||
if (isset($header['encoding'])) {
|
||||
$this->useLegacyBase64Encoding = $header['encoding'] !== Crypt::BINARY_ENCODING_FORMAT;
|
||||
}
|
||||
@@ -124,7 +92,7 @@ class Encryption implements IEncryptionModule {
|
||||
}
|
||||
}
|
||||
|
||||
/* If useLegacyFileKey is not specified in header, auto-detect, to be safe */
|
||||
// If useLegacyFileKey is not specified in header, auto-detect, to be safe
|
||||
$useLegacyFileKey = (($header['useLegacyFileKey'] ?? '') == 'false' ? false : null);
|
||||
|
||||
$this->fileKey = $this->keyManager->getFileKey($this->path, $useLegacyFileKey, $this->session->decryptAllModeActivated());
|
||||
@@ -178,19 +146,10 @@ class Encryption implements IEncryptionModule {
|
||||
}
|
||||
|
||||
/**
|
||||
* last chunk received. This is the place where you can perform some final
|
||||
* operation and return some remaining data if something is left in your
|
||||
* buffer.
|
||||
*
|
||||
* @param string $path to the file
|
||||
* @param string $position
|
||||
* @return string remained data which should be written to the file in case
|
||||
* of a write operation
|
||||
* @throws PublicKeyMissingException
|
||||
* @throws \Exception
|
||||
* @throws MultiKeyEncryptException
|
||||
*/
|
||||
public function end($path, $position = '0') {
|
||||
public function end(string $path, string $blockId = '0'): string {
|
||||
$result = '';
|
||||
if ($this->isWriteOperation) {
|
||||
// in case of a part file we remember the new signature versions
|
||||
@@ -201,7 +160,7 @@ class Encryption implements IEncryptionModule {
|
||||
self::$rememberVersion[$this->stripPartFileExtension($path)] = $this->version + 1;
|
||||
}
|
||||
if (!empty($this->writeCache)) {
|
||||
$result = $this->crypt->symmetricEncryptFileContent($this->writeCache, $this->fileKey, $this->version + 1, $position);
|
||||
$result = $this->crypt->symmetricEncryptFileContent($this->writeCache, $this->fileKey, $this->version + 1, $blockId);
|
||||
$this->writeCache = '';
|
||||
}
|
||||
$publicKeys = [];
|
||||
@@ -239,22 +198,12 @@ class Encryption implements IEncryptionModule {
|
||||
return $result ?: '';
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* encrypt data
|
||||
*
|
||||
* @param string $data you want to encrypt
|
||||
* @param int $position
|
||||
* @return string encrypted data
|
||||
*/
|
||||
public function encrypt($data, $position = 0) {
|
||||
public function encrypt(string $data, string $blockId = '0'): string {
|
||||
// If extra data is left over from the last round, make sure it
|
||||
// is integrated into the next block
|
||||
if ($this->writeCache) {
|
||||
// Concat writeCache to start of $data
|
||||
$data = $this->writeCache . $data;
|
||||
|
||||
// Clear the write cache, ready for reuse - it has been
|
||||
// flushed and its old contents processed
|
||||
$this->writeCache = '';
|
||||
@@ -286,7 +235,12 @@ class Encryption implements IEncryptionModule {
|
||||
// Read the chunk from the start of $data
|
||||
$chunk = substr($data, 0, $this->getUnencryptedBlockSize(true));
|
||||
|
||||
$encrypted .= $this->crypt->symmetricEncryptFileContent($chunk, $this->fileKey, $this->version + 1, (string)$position);
|
||||
$encrypted .= $this->crypt->symmetricEncryptFileContent(
|
||||
$chunk,
|
||||
$this->fileKey,
|
||||
$this->version + 1,
|
||||
$blockId
|
||||
);
|
||||
|
||||
// Remove the chunk we just processed from
|
||||
// $data, leaving only unprocessed data in $data
|
||||
@@ -298,15 +252,7 @@ class Encryption implements IEncryptionModule {
|
||||
return $encrypted;
|
||||
}
|
||||
|
||||
/**
|
||||
* decrypt data
|
||||
*
|
||||
* @param string $data you want to decrypt
|
||||
* @param int|string $position
|
||||
* @return string decrypted data
|
||||
* @throws DecryptionFailedException
|
||||
*/
|
||||
public function decrypt($data, $position = 0) {
|
||||
public function decrypt(string $data, string $blockId = '0'): string {
|
||||
if (empty($this->fileKey)) {
|
||||
$msg = 'Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you.';
|
||||
$hint = $this->l->t('Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you.');
|
||||
@@ -315,18 +261,17 @@ class Encryption implements IEncryptionModule {
|
||||
throw new DecryptionFailedException($msg, $hint);
|
||||
}
|
||||
|
||||
return $this->crypt->symmetricDecryptFileContent($data, $this->fileKey, $this->cipher, $this->version, $position, !$this->useLegacyBase64Encoding);
|
||||
return $this->crypt->symmetricDecryptFileContent(
|
||||
$data,
|
||||
$this->fileKey,
|
||||
$this->cipher,
|
||||
$this->version,
|
||||
$blockId,
|
||||
!$this->useLegacyBase64Encoding
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* update encrypted file, e.g. give additional users access to the file
|
||||
*
|
||||
* @param string $path path to the file which should be updated
|
||||
* @param string $uid ignored
|
||||
* @param array $accessList who has access to the file contains the key 'users' and 'public'
|
||||
* @return bool
|
||||
*/
|
||||
public function update($path, $uid, array $accessList) {
|
||||
public function update(string $path, ?string $uid, array $accessList): bool {
|
||||
if (empty($accessList)) {
|
||||
if (isset(self::$rememberVersion[$path])) {
|
||||
$this->keyManager->setVersion($path, self::$rememberVersion[$path], new View());
|
||||
@@ -370,13 +315,7 @@ class Encryption implements IEncryptionModule {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* should the file be encrypted or not
|
||||
*
|
||||
* @param string $path
|
||||
* @return boolean
|
||||
*/
|
||||
public function shouldEncrypt($path) {
|
||||
public function shouldEncrypt(string $path): bool {
|
||||
if ($this->util->shouldEncryptHomeStorage() === false) {
|
||||
$storage = $this->util->getStorage($path);
|
||||
if ($storage && $storage->instanceOfStorage('\OCP\Files\IHomeStorage')) {
|
||||
@@ -402,25 +341,20 @@ class Encryption implements IEncryptionModule {
|
||||
}
|
||||
|
||||
/**
|
||||
* get size of the unencrypted payload per block.
|
||||
* Nextcloud read/write files with a block size of 8192 byte
|
||||
* Get size of the unencrypted payload per block.
|
||||
* Nextcloud reads/writes files with a block size of 8192 byte.
|
||||
*
|
||||
* Encrypted blocks have a 22-byte IV and 2 bytes of padding, encrypted and
|
||||
* Encrypted blocks have a 22-byte IV and 2 bytes of padding; encrypted and
|
||||
* signed blocks have also a 71-byte signature and 1 more byte of padding,
|
||||
* resulting respectively in:
|
||||
*
|
||||
* 8192 - 22 - 2 = 8168 bytes in each unsigned unencrypted block
|
||||
* 8192 - 22 - 2 - 71 - 1 = 8096 bytes in each signed unencrypted block
|
||||
* 8192 - 22 - 2 = 8168 bytes (in each unsigned unencrypted block
|
||||
* 8192 - 22 - 2 - 71 - 1 = 8096 bytes (in each signed unencrypted block)
|
||||
*
|
||||
* Legacy base64 encoding then reduces the available size by a 3/4 factor:
|
||||
*
|
||||
* 8168 * (3/4) = 6126 bytes in each base64-encoded unsigned unencrypted block
|
||||
* 8096 * (3/4) = 6072 bytes in each base64-encoded signed unencrypted block
|
||||
*
|
||||
* @param bool $signed
|
||||
* @return int
|
||||
* 8168 * (3/4) = 6126 bytes (in each base64-encoded unsigned unencrypted block)
|
||||
* 8096 * (3/4) = 6072 bytes (in each base64-encoded signed unencrypted block)
|
||||
*/
|
||||
public function getUnencryptedBlockSize($signed = false) {
|
||||
public function getUnencryptedBlockSize(bool $signed = false): int {
|
||||
if ($this->useLegacyBase64Encoding) {
|
||||
return $signed ? 6072 : 6126;
|
||||
} else {
|
||||
@@ -428,16 +362,7 @@ class Encryption implements IEncryptionModule {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check if the encryption module is able to read the file,
|
||||
* e.g. if all encryption keys exists
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $uid user for whom we want to check if they can read the file
|
||||
* @return bool
|
||||
* @throws DecryptionFailedException
|
||||
*/
|
||||
public function isReadable($path, $uid) {
|
||||
public function isReadable(string $path, ?string $uid): bool {
|
||||
$fileKey = $this->keyManager->getFileKey($path, null);
|
||||
if (empty($fileKey)) {
|
||||
$owner = $this->util->getOwner($path);
|
||||
@@ -458,37 +383,36 @@ class Encryption implements IEncryptionModule {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initial encryption of all files
|
||||
*
|
||||
* @param InputInterface $input
|
||||
* @param OutputInterface $output write some status information to the terminal during encryption
|
||||
*/
|
||||
public function encryptAll(InputInterface $input, OutputInterface $output) {
|
||||
public function encryptAll(InputInterface $input, OutputInterface $output): void {
|
||||
$this->encryptAll->encryptAll($input, $output);
|
||||
}
|
||||
|
||||
/**
|
||||
* prepare module to perform decrypt all operation
|
||||
*
|
||||
* @param InputInterface $input
|
||||
* @param OutputInterface $output
|
||||
* @param string $user
|
||||
* @return bool
|
||||
*/
|
||||
public function prepareDecryptAll(InputInterface $input, OutputInterface $output, $user = '') {
|
||||
public function prepareDecryptAll(InputInterface $input, OutputInterface $output, string $user = ''): bool {
|
||||
return $this->decryptAll->prepare($input, $output, $user);
|
||||
}
|
||||
|
||||
public function isReadyForUser(string $user): bool {
|
||||
if ($this->util->isMasterKeyEnabled()) {
|
||||
return true;
|
||||
}
|
||||
return $this->keyManager->userHasKeys($user);
|
||||
}
|
||||
|
||||
public function needDetailedAccessList(): bool {
|
||||
return !$this->util->isMasterKeyEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $path
|
||||
* @return string
|
||||
* Converts a versions file path to its canonical user file path.
|
||||
*
|
||||
* @param string $path File path (may be a versions path)
|
||||
* @return string Canonical file path
|
||||
*/
|
||||
protected function getPathToRealFile($path) {
|
||||
protected function getPathToRealFile(string $path): string {
|
||||
$realPath = $path;
|
||||
$parts = explode('/', $path);
|
||||
if ($parts[2] === 'files_versions') {
|
||||
// e.g., "/user/files_versions/document.txt.v1234567890" --> "/user/files/document.txt"
|
||||
$realPath = '/' . $parts[1] . '/files/' . implode('/', array_slice($parts, 3));
|
||||
$length = strrpos($realPath, '.');
|
||||
$realPath = substr($realPath, 0, $length);
|
||||
@@ -498,13 +422,13 @@ class Encryption implements IEncryptionModule {
|
||||
}
|
||||
|
||||
/**
|
||||
* remove .part file extension and the ocTransferId from the file to get the
|
||||
* original file name
|
||||
* Removes the .part extension and ocTransferId from a part file path,
|
||||
* returning the original file name.
|
||||
*
|
||||
* @param string $path
|
||||
* @return string
|
||||
* @param string $path File path, possibly with .part extension and ocTransferId
|
||||
* @return string Original file path without temporary upload markers
|
||||
*/
|
||||
protected function stripPartFileExtension($path) {
|
||||
protected function stripPartFileExtension(string $path): string {
|
||||
if (pathinfo($path, PATHINFO_EXTENSION) === 'part') {
|
||||
$pos = strrpos($path, '.', -6);
|
||||
$path = substr($path, 0, $pos);
|
||||
@@ -514,41 +438,15 @@ class Encryption implements IEncryptionModule {
|
||||
}
|
||||
|
||||
/**
|
||||
* get owner of a file
|
||||
* Returns and caches the storage owner for a given file path.
|
||||
*
|
||||
* @param string $path
|
||||
* @return string
|
||||
* @param string $path File path
|
||||
* @return string User id of file owner
|
||||
*/
|
||||
protected function getOwner($path) {
|
||||
protected function getOwner(string $path): string {
|
||||
if (!isset($this->owner[$path])) {
|
||||
$this->owner[$path] = $this->util->getOwner($path);
|
||||
}
|
||||
return $this->owner[$path];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the module is ready to be used by that specific user.
|
||||
* In case a module is not ready - because e.g. key pairs have not been generated
|
||||
* upon login this method can return false before any operation starts and might
|
||||
* cause issues during operations.
|
||||
*
|
||||
* @param string $user
|
||||
* @return boolean
|
||||
* @since 9.1.0
|
||||
*/
|
||||
public function isReadyForUser($user) {
|
||||
if ($this->util->isMasterKeyEnabled()) {
|
||||
return true;
|
||||
}
|
||||
return $this->keyManager->userHasKeys($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* We only need a detailed access list if the master key is not enabled
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function needDetailedAccessList() {
|
||||
return !$this->util->isMasterKeyEnabled();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,8 +95,48 @@ class EncryptionTest extends TestCase {
|
||||
->method('decryptAllModeActivated')
|
||||
->willReturn(false);
|
||||
|
||||
// Mocks for methods needed before begin()
|
||||
$this->keyManagerMock->expects($this->any())
|
||||
->method('getFileKey')
|
||||
->willReturn('fileKey');
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('getCipher')
|
||||
->willReturn('AES-256-CTR');
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('getLegacyCipher')
|
||||
->willReturn('AES-128-CFB');
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('useLegacyBase64Encoding')
|
||||
->willReturn(false);
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('generateFileKey')
|
||||
->willReturn('fileKey');
|
||||
|
||||
// Prepare the post-begin mocks for end() phase
|
||||
$this->keyManagerMock->expects($this->any())
|
||||
->method('getPublicKey')
|
||||
->willReturnCallback([$this, 'getPublicKeyCallback']);
|
||||
$this->keyManagerMock->expects($this->any())
|
||||
->method('addSystemKeys')
|
||||
->willReturnCallback([$this, 'addSystemKeysCallback']);
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('multiKeyEncrypt')
|
||||
->willReturn([
|
||||
'user1' => 'encForUser1',
|
||||
'user3' => 'encForUser3',
|
||||
]);
|
||||
|
||||
$this->utilMock->expects($this->any())
|
||||
->method('getOwner')
|
||||
->willReturn('user1');
|
||||
|
||||
// Begin the encryption process as user1, with user2 missing their public key
|
||||
$this->instance->begin('/foo/bar', 'user1', 'r', [], ['users' => ['user1', 'user2', 'user3']]);
|
||||
$this->endTest();
|
||||
|
||||
// Set internal state to simulate write and call end()
|
||||
self::invokePrivate($this->instance, 'isWriteOperation', [true]);
|
||||
self::invokePrivate($this->instance, 'writeCache', ['']);
|
||||
$this->instance->end('/foo/bar');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -108,36 +148,43 @@ class EncryptionTest extends TestCase {
|
||||
->method('decryptAllModeActivated')
|
||||
->willReturn(false);
|
||||
|
||||
$this->expectException(PublicKeyMissingException::class);
|
||||
|
||||
$this->instance->begin('/foo/bar', 'user2', 'r', [], ['users' => ['user1', 'user2', 'user3']]);
|
||||
$this->endTest();
|
||||
}
|
||||
|
||||
/**
|
||||
* common part of testEndUser1 and testEndUser2
|
||||
*
|
||||
* @throws PublicKeyMissingException
|
||||
*/
|
||||
public function endTest() {
|
||||
// prepare internal variables
|
||||
self::invokePrivate($this->instance, 'isWriteOperation', [true]);
|
||||
self::invokePrivate($this->instance, 'writeCache', ['']);
|
||||
// Mocks for methods needed before begin()
|
||||
$this->keyManagerMock->expects($this->any())
|
||||
->method('getFileKey')
|
||||
->willReturn('fileKey');
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('getCipher')
|
||||
->willReturn('AES-256-CTR');
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('getLegacyCipher')
|
||||
->willReturn('AES-128-CFB');
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('useLegacyBase64Encoding')
|
||||
->willReturn(false);
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('generateFileKey')
|
||||
->willReturn('fileKey');
|
||||
|
||||
// Prepare the post-begin mocks for end() phase
|
||||
$this->keyManagerMock->expects($this->any())
|
||||
->method('getPublicKey')
|
||||
->willReturnCallback([$this, 'getPublicKeyCallback']);
|
||||
$this->keyManagerMock->expects($this->any())
|
||||
->method('addSystemKeys')
|
||||
->willReturnCallback([$this, 'addSystemKeysCallback']);
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('multiKeyEncrypt')
|
||||
->willReturn([]);
|
||||
$this->cryptMock->expects($this->never())
|
||||
->method('multiKeyEncrypt');
|
||||
|
||||
$this->expectException(PublicKeyMissingException::class);
|
||||
|
||||
$this->instance->begin('/foo/bar', 'user2', 'r', [], ['users' => ['user1', 'user2', 'user3']]);
|
||||
|
||||
// Set internal state to simulate write and call end()
|
||||
self::invokePrivate($this->instance, 'isWriteOperation', [true]);
|
||||
self::invokePrivate($this->instance, 'writeCache', ['']);
|
||||
$this->instance->end('/foo/bar');
|
||||
}
|
||||
|
||||
|
||||
public function getPublicKeyCallback($uid) {
|
||||
if ($uid === 'user2') {
|
||||
throw new PublicKeyMissingException($uid);
|
||||
@@ -235,6 +282,13 @@ class EncryptionTest extends TestCase {
|
||||
->with($path, null, true)
|
||||
->willReturn($fileKey);
|
||||
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('getCipher')
|
||||
->willReturn('AES-256-CTR');
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('getLegacyCipher')
|
||||
->willReturn('AES-128-CFB');
|
||||
|
||||
$this->instance->begin($path, 'user', 'r', [], []);
|
||||
|
||||
$this->assertSame($fileKey,
|
||||
@@ -252,10 +306,18 @@ class EncryptionTest extends TestCase {
|
||||
->method('decryptAllModeActivated')
|
||||
->willReturn(false);
|
||||
|
||||
$this->sessionMock->expects($this->once())->method('isReady')->willReturn(false);
|
||||
$this->utilMock->expects($this->once())->method('isMasterKeyEnabled')
|
||||
$this->sessionMock->expects($this->once())
|
||||
->method('isReady')
|
||||
->willReturn(false);
|
||||
$this->utilMock->expects($this->once())
|
||||
->method('isMasterKeyEnabled')
|
||||
->willReturn(true);
|
||||
$this->keyManagerMock->expects($this->once())->method('init')->with('', '');
|
||||
$this->keyManagerMock->expects($this->once())
|
||||
->method('init')
|
||||
->with('', '');
|
||||
$this->cryptMock->expects($this->any())
|
||||
->method('getLegacyCipher')
|
||||
->willReturn('anyWillDo');
|
||||
|
||||
$this->instance->begin('/user/files/welcome.txt', 'user', 'r', [], []);
|
||||
}
|
||||
@@ -282,6 +344,10 @@ class EncryptionTest extends TestCase {
|
||||
$this->keyManagerMock->expects($this->never())->method('getVersion');
|
||||
$this->keyManagerMock->expects($this->never())->method('setVersion');
|
||||
|
||||
$this->utilMock->expects($this->any())
|
||||
->method('getOwner')
|
||||
->willReturn('user1');
|
||||
|
||||
$this->assertSame($expected,
|
||||
$this->instance->update('path', 'user1', ['users' => ['user1']])
|
||||
);
|
||||
@@ -342,6 +408,10 @@ class EncryptionTest extends TestCase {
|
||||
$this->keyManagerMock->expects($this->never())->method('getVersion');
|
||||
$this->keyManagerMock->expects($this->never())->method('setVersion');
|
||||
|
||||
$this->utilMock->expects($this->any())
|
||||
->method('getOwner')
|
||||
->willReturn('user1');
|
||||
|
||||
$this->assertTrue(
|
||||
$this->instance->update('path', 'user1', ['users' => ['user1']])
|
||||
);
|
||||
|
||||
@@ -165,7 +165,7 @@ OC.L10N.register(
|
||||
"Click to recheck the configuration" : "Клацніть для повторної перевірки налаштувань",
|
||||
"Saving …" : "Збереження …",
|
||||
"Failed to save global credentials" : "Не вдалося зберегти глобальні облікові дані",
|
||||
"Failed to save global credentials: {message}" : "Не вдалося зберегти глобальні облікові дані: {повідомлення}",
|
||||
"Failed to save global credentials: {message}" : "Не вдалося зберегти глобальні облікові дані: {message}",
|
||||
"No external storage configured or you don't have the permission to configure them" : "Зовнішнє сховище не налаштовано або ви не маєте дозволу на їх налаштування",
|
||||
"Open documentation" : "Відкрити документацію",
|
||||
"External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow people to mount their own external storage services." : "Зовнішнє сховище дає змогу підключати зовнішні сервіси та пристрої для зберігання даних як вторинні пристрої Nextcloud. Ви також можете дозволити користувачам монтувати власні зовнішні сховища.",
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
"Click to recheck the configuration" : "Клацніть для повторної перевірки налаштувань",
|
||||
"Saving …" : "Збереження …",
|
||||
"Failed to save global credentials" : "Не вдалося зберегти глобальні облікові дані",
|
||||
"Failed to save global credentials: {message}" : "Не вдалося зберегти глобальні облікові дані: {повідомлення}",
|
||||
"Failed to save global credentials: {message}" : "Не вдалося зберегти глобальні облікові дані: {message}",
|
||||
"No external storage configured or you don't have the permission to configure them" : "Зовнішнє сховище не налаштовано або ви не маєте дозволу на їх налаштування",
|
||||
"Open documentation" : "Відкрити документацію",
|
||||
"External storage enables you to mount external storage services and devices as secondary Nextcloud storage devices. You may also allow people to mount their own external storage services." : "Зовнішнє сховище дає змогу підключати зовнішні сервіси та пристрої для зберігання даних як вторинні пристрої Nextcloud. Ви також можете дозволити користувачам монтувати власні зовнішні сховища.",
|
||||
|
||||
@@ -120,25 +120,32 @@ class DBConfigService {
|
||||
*/
|
||||
public function getMountsForUserAndPath(string $userId, array $groupIds, string $path, bool $forChildren): array {
|
||||
$path = str_replace('/' . $userId . '/files', '', $path);
|
||||
$path = rtrim($path, '/');
|
||||
if ($path === '') {
|
||||
$nonChildPath = '/';
|
||||
} else {
|
||||
$nonChildPath = $path;
|
||||
}
|
||||
|
||||
$builder = $this->getSelectQueryBuilder();
|
||||
$pathFilter = $forChildren
|
||||
? $builder->expr()->like('m.mount_point', $builder->createNamedParameter($this->connection->escapeLikeParameter($path) . '/_%', IQueryBuilder::PARAM_STR))
|
||||
: $builder->expr()->eq('m.mount_point', $builder->createNamedParameter($nonChildPath, IQueryBuilder::PARAM_STR));
|
||||
$builder->where($builder->expr()->orX(
|
||||
$builder->expr()->andX( // global mounts
|
||||
$builder->expr()->eq('a.type', $builder->createNamedParameter(self::APPLICABLE_TYPE_GLOBAL, IQueryBuilder::PARAM_INT)),
|
||||
$builder->expr()->isNull('a.value'),
|
||||
$forChildren ? $builder->expr()->like('m.mount_point', $builder->createNamedParameter($this->connection->escapeLikeParameter($path) . '_%', IQueryBuilder::PARAM_STR))
|
||||
: $builder->expr()->eq('m.mount_point', $builder->createNamedParameter($path, IQueryBuilder::PARAM_STR)),
|
||||
$pathFilter,
|
||||
),
|
||||
$builder->expr()->andX( // mounts for user
|
||||
$builder->expr()->eq('a.type', $builder->createNamedParameter(self::APPLICABLE_TYPE_USER, IQueryBuilder::PARAM_INT)),
|
||||
$builder->expr()->eq('a.value', $builder->createNamedParameter($userId)),
|
||||
$forChildren ? $builder->expr()->like('m.mount_point', $builder->createNamedParameter($this->connection->escapeLikeParameter($path) . '_%', IQueryBuilder::PARAM_STR))
|
||||
: $builder->expr()->eq('m.mount_point', $builder->createNamedParameter($path, IQueryBuilder::PARAM_STR)),
|
||||
$pathFilter,
|
||||
),
|
||||
$builder->expr()->andX( // mounts for group
|
||||
$builder->expr()->eq('a.type', $builder->createNamedParameter(self::APPLICABLE_TYPE_GROUP, IQueryBuilder::PARAM_INT)),
|
||||
$builder->expr()->in('a.value', $builder->createNamedParameter($groupIds, IQueryBuilder::PARAM_STR_ARRAY)),
|
||||
$forChildren ? $builder->expr()->like('m.mount_point', $builder->createNamedParameter($this->connection->escapeLikeParameter($path) . '_%', IQueryBuilder::PARAM_STR))
|
||||
: $builder->expr()->eq('m.mount_point', $builder->createNamedParameter($path, IQueryBuilder::PARAM_STR)),
|
||||
$pathFilter,
|
||||
),
|
||||
));
|
||||
|
||||
@@ -156,7 +163,7 @@ class DBConfigService {
|
||||
->where($builder->expr()->andX( // global mounts
|
||||
$builder->expr()->eq('a.type', $builder->createNamedParameter(self::APPLICABLE_TYPE_GLOBAL, IQueryBuilder::PARAM_INT)),
|
||||
$builder->expr()->isNull('a.value'),
|
||||
), );
|
||||
));
|
||||
|
||||
return $this->getMountsFromQuery($query);
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@ class ConfigAdapterTest extends TestCase {
|
||||
public function testPartialMountpointExact(): void {
|
||||
$mountFileInfo = $this->createMock(ICachedMountFileInfo::class);
|
||||
$mountFileInfo->method('getUser')->willReturn($this->user);
|
||||
$mountFileInfo->method('getMountPoint')->willReturn('/user1/files/subfolder/subfolder');
|
||||
$mountFileInfo->method('getMountPoint')->willReturn('/user1/files/subfolder/subfolder/');
|
||||
$cacheEntry = $this->createMock(ICacheEntry::class);
|
||||
|
||||
$result = $this->adapter->getMountsForPath('/user1/files/subfolder/subfolder', true, [
|
||||
|
||||
@@ -12,6 +12,7 @@ use OCA\Files_External\Service\DBConfigService;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Security\ICrypto;
|
||||
use OCP\Server;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use Test\TestCase;
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\Group(name: 'DB')]
|
||||
@@ -271,4 +272,32 @@ class DBConfigServiceTest extends TestCase {
|
||||
$this->assertEquals($id1, $mounts[0]['mount_id']);
|
||||
$this->assertEquals($id2, $mounts[1]['mount_id']);
|
||||
}
|
||||
|
||||
public static function mountsForPathProvider(): array {
|
||||
return [
|
||||
['/test/files/test/', false, ['/test']],
|
||||
['/test/files/test/', true, ['/test/more']],
|
||||
['/test/files/', false, ['/']],
|
||||
['/test/files/', true, ['/test', '/test/more', '/test2']],
|
||||
];
|
||||
}
|
||||
|
||||
#[DataProvider('mountsForPathProvider')]
|
||||
public function testGetMountsForUserAndPath(string $path, bool $forChildren, array $expectedMountPoints): void {
|
||||
sort($expectedMountPoints);
|
||||
$id1 = $this->addMount('/test', 'foo', 'bar', 100, DBConfigService::MOUNT_TYPE_ADMIN);
|
||||
$this->dbConfig->addApplicable($id1, DBConfigService::APPLICABLE_TYPE_GLOBAL, null);
|
||||
$id2 = $this->addMount('/test2', 'foo2', 'bar2', 100, DBConfigService::MOUNT_TYPE_PERSONAL);
|
||||
$this->dbConfig->addApplicable($id2, DBConfigService::APPLICABLE_TYPE_GLOBAL, null);
|
||||
$id3 = $this->addMount('/test/more', 'foo', 'bar', 100, DBConfigService::MOUNT_TYPE_ADMIN);
|
||||
$this->dbConfig->addApplicable($id3, DBConfigService::APPLICABLE_TYPE_GLOBAL, null);
|
||||
$id4 = $this->addMount('/', 'foo', 'bar', 100, DBConfigService::MOUNT_TYPE_ADMIN);
|
||||
$this->dbConfig->addApplicable($id4, DBConfigService::APPLICABLE_TYPE_GLOBAL, null);
|
||||
|
||||
$mounts = $this->dbConfig->getMountsForUserAndPath('test', [], $path, $forChildren);
|
||||
$mountPoints = array_map(fn (array $mountInfo) => $mountInfo['mount_point'], $mounts);
|
||||
sort($mountPoints);
|
||||
$this->assertEquals($expectedMountPoints, $mountPoints);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -399,6 +399,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "هذا التطبيق مدعوم من خلال اشتراكك الحالي في نكست كلود.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "تم تطوير التطبيقات المميزة من قبل المجتمع وداخله. و هي توفر وظائف مركزية وجاهزة للعمل في بيئة العمل الفعلية.",
|
||||
"Community rating: {score}/5" : "تقييم المجتمع: {score}/5",
|
||||
"Learn more" : "تعلم المزيد",
|
||||
"Disable all" : "تعطيل الكل",
|
||||
"Download and enable all" : "تنزيل و تمكين الكل",
|
||||
"All apps are up-to-date." : "كل التطبيقات محدثة لآخر إصدار",
|
||||
@@ -441,7 +442,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "خيارات النشر المتقدمة",
|
||||
"Edit ExApp deploy options before installation" : "قُم بتعديل خيارات نشر التطبيقات الخارجية ExAPP قبل التثبيت",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "الخيارات المُهيَّأة لنشر التطبيقات الخارجية ExAPP، يمكن تعيينها فقط أثناء التثبيت",
|
||||
"Learn more" : "تعلم المزيد",
|
||||
"Environment variables" : "متغيرات البيئة",
|
||||
"ExApp container environment variables" : "متغيرات بيئة حاوية التطبيقات الخارجية ExApp",
|
||||
"No environment variables defined" : "لم يتم تعريف أي متغيرات بيئية",
|
||||
|
||||
@@ -397,6 +397,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "هذا التطبيق مدعوم من خلال اشتراكك الحالي في نكست كلود.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "تم تطوير التطبيقات المميزة من قبل المجتمع وداخله. و هي توفر وظائف مركزية وجاهزة للعمل في بيئة العمل الفعلية.",
|
||||
"Community rating: {score}/5" : "تقييم المجتمع: {score}/5",
|
||||
"Learn more" : "تعلم المزيد",
|
||||
"Disable all" : "تعطيل الكل",
|
||||
"Download and enable all" : "تنزيل و تمكين الكل",
|
||||
"All apps are up-to-date." : "كل التطبيقات محدثة لآخر إصدار",
|
||||
@@ -439,7 +440,6 @@
|
||||
"Advanced deploy options" : "خيارات النشر المتقدمة",
|
||||
"Edit ExApp deploy options before installation" : "قُم بتعديل خيارات نشر التطبيقات الخارجية ExAPP قبل التثبيت",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "الخيارات المُهيَّأة لنشر التطبيقات الخارجية ExAPP، يمكن تعيينها فقط أثناء التثبيت",
|
||||
"Learn more" : "تعلم المزيد",
|
||||
"Environment variables" : "متغيرات البيئة",
|
||||
"ExApp container environment variables" : "متغيرات بيئة حاوية التطبيقات الخارجية ExApp",
|
||||
"No environment variables defined" : "لم يتم تعريف أي متغيرات بيئية",
|
||||
|
||||
@@ -207,6 +207,7 @@ OC.L10N.register(
|
||||
"Default" : "Por defeutu",
|
||||
"Remove" : "Quitar",
|
||||
"Featured" : "Destacada",
|
||||
"Learn more" : "Deprendi más",
|
||||
"Disable all" : "Desactivar too",
|
||||
"All apps are up-to-date." : "Toles aplicaciones tán anovaes",
|
||||
"Icon" : "Iconu",
|
||||
@@ -234,7 +235,6 @@ OC.L10N.register(
|
||||
"Daemon" : "Degorriu",
|
||||
"Type" : "Tipu",
|
||||
"Display Name" : "Nome visible",
|
||||
"Learn more" : "Deprendi más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Encaboxar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -205,6 +205,7 @@
|
||||
"Default" : "Por defeutu",
|
||||
"Remove" : "Quitar",
|
||||
"Featured" : "Destacada",
|
||||
"Learn more" : "Deprendi más",
|
||||
"Disable all" : "Desactivar too",
|
||||
"All apps are up-to-date." : "Toles aplicaciones tán anovaes",
|
||||
"Icon" : "Iconu",
|
||||
@@ -232,7 +233,6 @@
|
||||
"Daemon" : "Degorriu",
|
||||
"Type" : "Tipu",
|
||||
"Display Name" : "Nome visible",
|
||||
"Learn more" : "Deprendi más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Encaboxar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -131,6 +131,7 @@ OC.L10N.register(
|
||||
"Default" : "Прадвызначаныя",
|
||||
"Update to {update}" : "Абнавіць да {update}",
|
||||
"Remove" : "Выдаліць",
|
||||
"Learn more" : "Больш падрабязна",
|
||||
"Disable all" : "Адключыць усе",
|
||||
"Download and enable all" : "Спампаваць і уключыць усе",
|
||||
"All apps are up-to-date." : "Усе праграмы абноўлены.",
|
||||
@@ -159,7 +160,6 @@ OC.L10N.register(
|
||||
"{index} of {total}" : "{index} з {total}",
|
||||
"Type" : "Тып",
|
||||
"Display Name" : "Імя для паказу",
|
||||
"Learn more" : "Больш падрабязна",
|
||||
"Environment variables" : "Пераменныя асяроддзя",
|
||||
"Confirm" : "Пацвердзіць",
|
||||
"Cancel" : "Скасаваць",
|
||||
|
||||
@@ -129,6 +129,7 @@
|
||||
"Default" : "Прадвызначаныя",
|
||||
"Update to {update}" : "Абнавіць да {update}",
|
||||
"Remove" : "Выдаліць",
|
||||
"Learn more" : "Больш падрабязна",
|
||||
"Disable all" : "Адключыць усе",
|
||||
"Download and enable all" : "Спампаваць і уключыць усе",
|
||||
"All apps are up-to-date." : "Усе праграмы абноўлены.",
|
||||
@@ -157,7 +158,6 @@
|
||||
"{index} of {total}" : "{index} з {total}",
|
||||
"Type" : "Тып",
|
||||
"Display Name" : "Імя для паказу",
|
||||
"Learn more" : "Больш падрабязна",
|
||||
"Environment variables" : "Пераменныя асяроддзя",
|
||||
"Confirm" : "Пацвердзіць",
|
||||
"Cancel" : "Скасаваць",
|
||||
|
||||
@@ -428,6 +428,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "Това приложение се поддържа чрез текущия ви абонамент за Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Представените приложения са разработени от и в рамките на общността. Те предлагат централна функционалност и са готови за производствена употреба.",
|
||||
"Community rating: {score}/5" : "Оценка на общността: {score} /5",
|
||||
"Learn more" : "Научете повече",
|
||||
"Disable all" : "Изключи всички",
|
||||
"Download and enable all" : "Изтеглете и активирайте всички",
|
||||
"All apps are up-to-date." : "Всички приложения са актуални.",
|
||||
@@ -470,7 +471,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Разширени опции за внедряване",
|
||||
"Edit ExApp deploy options before installation" : "Редактиране на опциите за внедряване на ExApp преди инсталиране",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Конфигурирани опции за внедряване на ExApp. Могат да се зададат само по време на инсталацията.",
|
||||
"Learn more" : "Научете повече",
|
||||
"Environment variables" : "Променливи на средата",
|
||||
"ExApp container environment variables" : "Променливи на средата на ExApp",
|
||||
"No environment variables defined" : "Няма дефинирани променливи на средата",
|
||||
|
||||
@@ -426,6 +426,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "Това приложение се поддържа чрез текущия ви абонамент за Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Представените приложения са разработени от и в рамките на общността. Те предлагат централна функционалност и са готови за производствена употреба.",
|
||||
"Community rating: {score}/5" : "Оценка на общността: {score} /5",
|
||||
"Learn more" : "Научете повече",
|
||||
"Disable all" : "Изключи всички",
|
||||
"Download and enable all" : "Изтеглете и активирайте всички",
|
||||
"All apps are up-to-date." : "Всички приложения са актуални.",
|
||||
@@ -468,7 +469,6 @@
|
||||
"Advanced deploy options" : "Разширени опции за внедряване",
|
||||
"Edit ExApp deploy options before installation" : "Редактиране на опциите за внедряване на ExApp преди инсталиране",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Конфигурирани опции за внедряване на ExApp. Могат да се зададат само по време на инсталацията.",
|
||||
"Learn more" : "Научете повече",
|
||||
"Environment variables" : "Променливи на средата",
|
||||
"ExApp container environment variables" : "Променливи на средата на ExApp",
|
||||
"No environment variables defined" : "Няма дефинирани променливи на средата",
|
||||
|
||||
@@ -123,6 +123,7 @@ OC.L10N.register(
|
||||
"Featured" : "Perzhiet",
|
||||
"This app is supported via your current Nextcloud subscription." : "Ar meziant-mañ a vez douget dre ho kommanant Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Meziantoù perzhiet a vez digeliet gant ha e-vbarzh ar gummuniezh. Perzhioù penna a vez roet gante ha prest int da krouiñ reoù all.",
|
||||
"Learn more" : "Deskiñ muioc'h",
|
||||
"Disable all" : "Difenn pep tra",
|
||||
"Icon" : "Skeudennig",
|
||||
"Name" : "Anv",
|
||||
@@ -134,7 +135,6 @@ OC.L10N.register(
|
||||
"Groups" : "Strolladoù",
|
||||
"Loading" : "Kargañ",
|
||||
"Type" : "Seurt",
|
||||
"Learn more" : "Deskiñ muioc'h",
|
||||
"Confirm" : "Kadarnañ",
|
||||
"Cancel" : "Nullañ",
|
||||
"Description" : "Deskrivadur",
|
||||
|
||||
@@ -121,6 +121,7 @@
|
||||
"Featured" : "Perzhiet",
|
||||
"This app is supported via your current Nextcloud subscription." : "Ar meziant-mañ a vez douget dre ho kommanant Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Meziantoù perzhiet a vez digeliet gant ha e-vbarzh ar gummuniezh. Perzhioù penna a vez roet gante ha prest int da krouiñ reoù all.",
|
||||
"Learn more" : "Deskiñ muioc'h",
|
||||
"Disable all" : "Difenn pep tra",
|
||||
"Icon" : "Skeudennig",
|
||||
"Name" : "Anv",
|
||||
@@ -132,7 +133,6 @@
|
||||
"Groups" : "Strolladoù",
|
||||
"Loading" : "Kargañ",
|
||||
"Type" : "Seurt",
|
||||
"Learn more" : "Deskiñ muioc'h",
|
||||
"Confirm" : "Kadarnañ",
|
||||
"Cancel" : "Nullañ",
|
||||
"Description" : "Deskrivadur",
|
||||
|
||||
@@ -397,6 +397,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "Aquesta aplicació és compatible amb la vostra subscripció actual a Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Les aplicacions destacades es desenvolupen per i dins de la comunitat. Ofereixen funcionalitats centrals i estan preparades per ser emprades en producció.",
|
||||
"Community rating: {score}/5" : "Valoració de la comunitat: {score}/5",
|
||||
"Learn more" : "Més informació",
|
||||
"Disable all" : "Inhabilita tot",
|
||||
"Download and enable all" : "Baixada i activació de tot",
|
||||
"All apps are up-to-date." : "Totes les aplicacions estan actualitzades.",
|
||||
@@ -436,7 +437,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Opcions de desplegament avançades",
|
||||
"Edit ExApp deploy options before installation" : "Editeu les opcions de desplegament d'ExApp abans de la instal·lació",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Opcions de desplegament d'ExApp configurades. Només es pot configurar durant la instal·lació",
|
||||
"Learn more" : "Més informació",
|
||||
"Environment variables" : "Variables d'entorn",
|
||||
"ExApp container environment variables" : "Variables d'entorn del contenidor ExApp",
|
||||
"No environment variables defined" : "No s'han definit variables d'entorn",
|
||||
|
||||
@@ -395,6 +395,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "Aquesta aplicació és compatible amb la vostra subscripció actual a Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Les aplicacions destacades es desenvolupen per i dins de la comunitat. Ofereixen funcionalitats centrals i estan preparades per ser emprades en producció.",
|
||||
"Community rating: {score}/5" : "Valoració de la comunitat: {score}/5",
|
||||
"Learn more" : "Més informació",
|
||||
"Disable all" : "Inhabilita tot",
|
||||
"Download and enable all" : "Baixada i activació de tot",
|
||||
"All apps are up-to-date." : "Totes les aplicacions estan actualitzades.",
|
||||
@@ -434,7 +435,6 @@
|
||||
"Advanced deploy options" : "Opcions de desplegament avançades",
|
||||
"Edit ExApp deploy options before installation" : "Editeu les opcions de desplegament d'ExApp abans de la instal·lació",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Opcions de desplegament d'ExApp configurades. Només es pot configurar durant la instal·lació",
|
||||
"Learn more" : "Més informació",
|
||||
"Environment variables" : "Variables d'entorn",
|
||||
"ExApp container environment variables" : "Variables d'entorn del contenidor ExApp",
|
||||
"No environment variables defined" : "No s'han definit variables d'entorn",
|
||||
|
||||
@@ -438,6 +438,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "Tato aplikace je podporována prostřednictvím vašeho stávajícího předplatného podpory Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Doporučované aplikace jsou vyvíjeny komunitou. Jsou propojeny se zbytkem Nextcloud a připraveny na produkční nasazení.",
|
||||
"Community rating: {score}/5" : "Hodnocení komunitou: {score}/5",
|
||||
"Learn more" : "Zjistit více",
|
||||
"Disable all" : "Zakázat vše",
|
||||
"Download and enable all" : "Stáhnout a zapnout vše",
|
||||
"All apps are up-to-date." : "Všechny aplikace jsou aktuální",
|
||||
@@ -480,7 +481,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Pokročilé předvolby pro nasazení",
|
||||
"Edit ExApp deploy options before installation" : "Předvolby nasazení ExApp před instalací",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Nastavené předvolby nasazení ExAPP. Je možné nastavovat pouze při instalaci",
|
||||
"Learn more" : "Zjistit více",
|
||||
"Environment variables" : "Proměnné prostředí",
|
||||
"ExApp container environment variables" : "Proměnné prostředí pro kontejner s ExApp",
|
||||
"No environment variables defined" : "Nedefinovány žádné proměnné prostředí",
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "Tato aplikace je podporována prostřednictvím vašeho stávajícího předplatného podpory Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Doporučované aplikace jsou vyvíjeny komunitou. Jsou propojeny se zbytkem Nextcloud a připraveny na produkční nasazení.",
|
||||
"Community rating: {score}/5" : "Hodnocení komunitou: {score}/5",
|
||||
"Learn more" : "Zjistit více",
|
||||
"Disable all" : "Zakázat vše",
|
||||
"Download and enable all" : "Stáhnout a zapnout vše",
|
||||
"All apps are up-to-date." : "Všechny aplikace jsou aktuální",
|
||||
@@ -478,7 +479,6 @@
|
||||
"Advanced deploy options" : "Pokročilé předvolby pro nasazení",
|
||||
"Edit ExApp deploy options before installation" : "Předvolby nasazení ExApp před instalací",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Nastavené předvolby nasazení ExAPP. Je možné nastavovat pouze při instalaci",
|
||||
"Learn more" : "Zjistit více",
|
||||
"Environment variables" : "Proměnné prostředí",
|
||||
"ExApp container environment variables" : "Proměnné prostředí pro kontejner s ExApp",
|
||||
"No environment variables defined" : "Nedefinovány žádné proměnné prostředí",
|
||||
|
||||
@@ -421,6 +421,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "Denne app understøttes via dit nuværende Nextcloud-abonnement.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Udvalgte apps er udviklet af og inden for fællesskabet. De tilbyder central funktionalitet og er klar til produktionsbrug.",
|
||||
"Community rating: {score}/5" : "Fællesskabsbedømmelse: {score}/5",
|
||||
"Learn more" : "Lær mere",
|
||||
"Disable all" : "Deaktiver alt",
|
||||
"Download and enable all" : "Download og aktiver alle",
|
||||
"All apps are up-to-date." : "Alle apps er opdateret",
|
||||
@@ -463,7 +464,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Avancerede udrulningsindstillinger",
|
||||
"Edit ExApp deploy options before installation" : "Redigér ExApp udrulningsindstillinger før installation",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Konfigurerede ExApp udrulningsindstillinger. Kan kun indstilles under installationen",
|
||||
"Learn more" : "Lær mere",
|
||||
"Environment variables" : "Miljøvariabler",
|
||||
"ExApp container environment variables" : "ExApp container miljøvariabler",
|
||||
"No environment variables defined" : "Ingen miljøvariabler defineret",
|
||||
|
||||
@@ -419,6 +419,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "Denne app understøttes via dit nuværende Nextcloud-abonnement.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Udvalgte apps er udviklet af og inden for fællesskabet. De tilbyder central funktionalitet og er klar til produktionsbrug.",
|
||||
"Community rating: {score}/5" : "Fællesskabsbedømmelse: {score}/5",
|
||||
"Learn more" : "Lær mere",
|
||||
"Disable all" : "Deaktiver alt",
|
||||
"Download and enable all" : "Download og aktiver alle",
|
||||
"All apps are up-to-date." : "Alle apps er opdateret",
|
||||
@@ -461,7 +462,6 @@
|
||||
"Advanced deploy options" : "Avancerede udrulningsindstillinger",
|
||||
"Edit ExApp deploy options before installation" : "Redigér ExApp udrulningsindstillinger før installation",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Konfigurerede ExApp udrulningsindstillinger. Kan kun indstilles under installationen",
|
||||
"Learn more" : "Lær mere",
|
||||
"Environment variables" : "Miljøvariabler",
|
||||
"ExApp container environment variables" : "ExApp container miljøvariabler",
|
||||
"No environment variables defined" : "Ingen miljøvariabler defineret",
|
||||
|
||||
@@ -438,6 +438,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "Diese App wird von dem aktuellen Nextcloud-Abonnement unterstützt.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Vorgestellte Apps werden von und innerhalb der Nextcloud-Community entwickelt. Sie stellen zentrale Funktionen bereit und sind für den produktiven Einsatz geeignet.",
|
||||
"Community rating: {score}/5" : "Community-Bewertung: {score}/5",
|
||||
"Learn more" : "Mehr erfahren",
|
||||
"Disable all" : "Alle deaktivieren",
|
||||
"Download and enable all" : "Alle herunterladen und aktivieren",
|
||||
"All apps are up-to-date." : "Alle Apps sind aktuell.",
|
||||
@@ -480,7 +481,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Erweiterte Bereitstellungsoptionen",
|
||||
"Edit ExApp deploy options before installation" : "Bereitstellungsoptionen von ExApp vor der Installation bearbeiten",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Eingestellte ExApp-Bereitstellungsoptionen. Kann nur während der Installation festgelegt werden",
|
||||
"Learn more" : "Mehr erfahren",
|
||||
"Environment variables" : "Umgebungsvariablen",
|
||||
"ExApp container environment variables" : "Umgebungsvariablen für ExApp-Container",
|
||||
"No environment variables defined" : "Keine Umgebungsvariablen definiert",
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "Diese App wird von dem aktuellen Nextcloud-Abonnement unterstützt.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Vorgestellte Apps werden von und innerhalb der Nextcloud-Community entwickelt. Sie stellen zentrale Funktionen bereit und sind für den produktiven Einsatz geeignet.",
|
||||
"Community rating: {score}/5" : "Community-Bewertung: {score}/5",
|
||||
"Learn more" : "Mehr erfahren",
|
||||
"Disable all" : "Alle deaktivieren",
|
||||
"Download and enable all" : "Alle herunterladen und aktivieren",
|
||||
"All apps are up-to-date." : "Alle Apps sind aktuell.",
|
||||
@@ -478,7 +479,6 @@
|
||||
"Advanced deploy options" : "Erweiterte Bereitstellungsoptionen",
|
||||
"Edit ExApp deploy options before installation" : "Bereitstellungsoptionen von ExApp vor der Installation bearbeiten",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Eingestellte ExApp-Bereitstellungsoptionen. Kann nur während der Installation festgelegt werden",
|
||||
"Learn more" : "Mehr erfahren",
|
||||
"Environment variables" : "Umgebungsvariablen",
|
||||
"ExApp container environment variables" : "Umgebungsvariablen für ExApp-Container",
|
||||
"No environment variables defined" : "Keine Umgebungsvariablen definiert",
|
||||
|
||||
@@ -438,6 +438,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "Diese App wird von Ihrem aktuellen Nextcloud-Abonnement unterstützt.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Vorgestellte Apps werden von und innerhalb der Nextcloud-Community entwickelt. Sie stellen zentrale Funktionen bereit und sind für den produktiven Einsatz geeignet.",
|
||||
"Community rating: {score}/5" : "Community-Bewertung: {score}/5",
|
||||
"Learn more" : "Mehr erfahren",
|
||||
"Disable all" : "Alle deaktivieren",
|
||||
"Download and enable all" : "Alle herunterladen und aktivieren",
|
||||
"All apps are up-to-date." : "Alle Apps sind aktuell.",
|
||||
@@ -480,7 +481,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Erweiterte Bereitstellungsoptionen",
|
||||
"Edit ExApp deploy options before installation" : "Bereitstellungsoptionen von ExApp vor der Installation bearbeiten",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Festgelegte ExApp-Bereitstellungsoptionen. Kann nur während der Installation festgelegt werden",
|
||||
"Learn more" : "Mehr erfahren",
|
||||
"Environment variables" : "Umgebungsvariablen",
|
||||
"ExApp container environment variables" : "Umgebungsvariablen für ExApp-Container",
|
||||
"No environment variables defined" : "Keine Umgebungsvariablen definiert",
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "Diese App wird von Ihrem aktuellen Nextcloud-Abonnement unterstützt.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Vorgestellte Apps werden von und innerhalb der Nextcloud-Community entwickelt. Sie stellen zentrale Funktionen bereit und sind für den produktiven Einsatz geeignet.",
|
||||
"Community rating: {score}/5" : "Community-Bewertung: {score}/5",
|
||||
"Learn more" : "Mehr erfahren",
|
||||
"Disable all" : "Alle deaktivieren",
|
||||
"Download and enable all" : "Alle herunterladen und aktivieren",
|
||||
"All apps are up-to-date." : "Alle Apps sind aktuell.",
|
||||
@@ -478,7 +479,6 @@
|
||||
"Advanced deploy options" : "Erweiterte Bereitstellungsoptionen",
|
||||
"Edit ExApp deploy options before installation" : "Bereitstellungsoptionen von ExApp vor der Installation bearbeiten",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Festgelegte ExApp-Bereitstellungsoptionen. Kann nur während der Installation festgelegt werden",
|
||||
"Learn more" : "Mehr erfahren",
|
||||
"Environment variables" : "Umgebungsvariablen",
|
||||
"ExApp container environment variables" : "Umgebungsvariablen für ExApp-Container",
|
||||
"No environment variables defined" : "Keine Umgebungsvariablen definiert",
|
||||
|
||||
@@ -413,6 +413,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "Αυτή η εφαρμογή υποστηρίζεται μέσω της τρέχουσας συνδρομής σας στο Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Οι προτεινόμενες εφαρμογές αναπτύσσονται από και εντός της κοινότητας. Προσφέρουν κεντρική λειτουργικότητα και είναι έτοιμες για χρήση.",
|
||||
"Community rating: {score}/5" : "Βαθμολογία κοινότητας: {score}/5",
|
||||
"Learn more" : "Μάθετε περισσότερα",
|
||||
"Disable all" : "Απενεργοποίηση όλων",
|
||||
"Download and enable all" : "Λήψη και ενεργοποίηση όλων",
|
||||
"All apps are up-to-date." : "Όλες οι εφαρμογές είναι ενημερωμένες.",
|
||||
@@ -455,7 +456,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Προηγμένες επιλογές ανάπτυξης",
|
||||
"Edit ExApp deploy options before installation" : "Επεξεργασία επιλογών ανάπτυξης ExApp πριν την εγκατάσταση",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Ρυθμισμένες επιλογές ανάπτυξης ExApp. Μπορούν να ρυθμιστούν μόνο κατά την εγκατάσταση",
|
||||
"Learn more" : "Μάθετε περισσότερα",
|
||||
"Environment variables" : "Μεταβλητές περιβάλλοντος",
|
||||
"ExApp container environment variables" : "Μεταβλητές περιβάλλοντος ExApp container",
|
||||
"No environment variables defined" : "Δεν έχουν οριστεί μεταβλητές περιβάλλοντος",
|
||||
|
||||
@@ -411,6 +411,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "Αυτή η εφαρμογή υποστηρίζεται μέσω της τρέχουσας συνδρομής σας στο Nextcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Οι προτεινόμενες εφαρμογές αναπτύσσονται από και εντός της κοινότητας. Προσφέρουν κεντρική λειτουργικότητα και είναι έτοιμες για χρήση.",
|
||||
"Community rating: {score}/5" : "Βαθμολογία κοινότητας: {score}/5",
|
||||
"Learn more" : "Μάθετε περισσότερα",
|
||||
"Disable all" : "Απενεργοποίηση όλων",
|
||||
"Download and enable all" : "Λήψη και ενεργοποίηση όλων",
|
||||
"All apps are up-to-date." : "Όλες οι εφαρμογές είναι ενημερωμένες.",
|
||||
@@ -453,7 +454,6 @@
|
||||
"Advanced deploy options" : "Προηγμένες επιλογές ανάπτυξης",
|
||||
"Edit ExApp deploy options before installation" : "Επεξεργασία επιλογών ανάπτυξης ExApp πριν την εγκατάσταση",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Ρυθμισμένες επιλογές ανάπτυξης ExApp. Μπορούν να ρυθμιστούν μόνο κατά την εγκατάσταση",
|
||||
"Learn more" : "Μάθετε περισσότερα",
|
||||
"Environment variables" : "Μεταβλητές περιβάλλοντος",
|
||||
"ExApp container environment variables" : "Μεταβλητές περιβάλλοντος ExApp container",
|
||||
"No environment variables defined" : "Δεν έχουν οριστεί μεταβλητές περιβάλλοντος",
|
||||
|
||||
@@ -438,6 +438,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "This app is supported via your current Nextcloud subscription.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Featured apps are developed by and within the community. They offer central functionality and are ready for production use.",
|
||||
"Community rating: {score}/5" : "Community rating: {score}/5",
|
||||
"Learn more" : "Learn more",
|
||||
"Disable all" : "Disable all",
|
||||
"Download and enable all" : "Download and enable all",
|
||||
"All apps are up-to-date." : "All apps are up-to-date.",
|
||||
@@ -480,7 +481,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Advanced deploy options",
|
||||
"Edit ExApp deploy options before installation" : "Edit ExApp deploy options before installation",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Configured ExApp deploy options. Can be set only during installation",
|
||||
"Learn more" : "Learn more",
|
||||
"Environment variables" : "Environment variables",
|
||||
"ExApp container environment variables" : "ExApp container environment variables",
|
||||
"No environment variables defined" : "No environment variables defined",
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "This app is supported via your current Nextcloud subscription.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Featured apps are developed by and within the community. They offer central functionality and are ready for production use.",
|
||||
"Community rating: {score}/5" : "Community rating: {score}/5",
|
||||
"Learn more" : "Learn more",
|
||||
"Disable all" : "Disable all",
|
||||
"Download and enable all" : "Download and enable all",
|
||||
"All apps are up-to-date." : "All apps are up-to-date.",
|
||||
@@ -478,7 +479,6 @@
|
||||
"Advanced deploy options" : "Advanced deploy options",
|
||||
"Edit ExApp deploy options before installation" : "Edit ExApp deploy options before installation",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Configured ExApp deploy options. Can be set only during installation",
|
||||
"Learn more" : "Learn more",
|
||||
"Environment variables" : "Environment variables",
|
||||
"ExApp container environment variables" : "ExApp container environment variables",
|
||||
"No environment variables defined" : "No environment variables defined",
|
||||
|
||||
@@ -118,6 +118,7 @@ OC.L10N.register(
|
||||
"Featured" : "Elstaraj",
|
||||
"This app is supported via your current Nextcloud subscription." : "Tiu aplikaĵo estas subtenita per via nuna Nextcloud-abono.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Elstaraj aplikaĵoj estas programataj de kaj ene de la komunumo. Ili alportas kernajn trajtojn kaj ili povas tuj uziĝi.",
|
||||
"Learn more" : "Scii pli",
|
||||
"Disable all" : "Malŝalti ĉiujn",
|
||||
"Icon" : "Piktogramo",
|
||||
"Name" : "Nomo",
|
||||
@@ -130,7 +131,6 @@ OC.L10N.register(
|
||||
"Group name" : "Gruponomo",
|
||||
"Loading" : "Ŝargado",
|
||||
"Type" : "Tipo",
|
||||
"Learn more" : "Scii pli",
|
||||
"Confirm" : "Konfirmi",
|
||||
"Cancel" : "Nuligi",
|
||||
"Description" : "Priskribo",
|
||||
|
||||
@@ -116,6 +116,7 @@
|
||||
"Featured" : "Elstaraj",
|
||||
"This app is supported via your current Nextcloud subscription." : "Tiu aplikaĵo estas subtenita per via nuna Nextcloud-abono.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Elstaraj aplikaĵoj estas programataj de kaj ene de la komunumo. Ili alportas kernajn trajtojn kaj ili povas tuj uziĝi.",
|
||||
"Learn more" : "Scii pli",
|
||||
"Disable all" : "Malŝalti ĉiujn",
|
||||
"Icon" : "Piktogramo",
|
||||
"Name" : "Nomo",
|
||||
@@ -128,7 +129,6 @@
|
||||
"Group name" : "Gruponomo",
|
||||
"Loading" : "Ŝargado",
|
||||
"Type" : "Tipo",
|
||||
"Learn more" : "Scii pli",
|
||||
"Confirm" : "Konfirmi",
|
||||
"Cancel" : "Nuligi",
|
||||
"Description" : "Priskribo",
|
||||
|
||||
@@ -438,6 +438,7 @@ OC.L10N.register(
|
||||
"This app is supported via your current Nextcloud subscription." : "Esta App está soportada a través de su suscripción actual de Nexcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las apps destacadas están desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad central y están listas para usarlas en producción.",
|
||||
"Community rating: {score}/5" : "Calificación de la comunidad: {score}/5",
|
||||
"Learn more" : "Aprender más",
|
||||
"Disable all" : "Deshabilitar todos",
|
||||
"Download and enable all" : "Descargar y habilitar todo",
|
||||
"All apps are up-to-date." : "Todas las apps están actualizadas.",
|
||||
@@ -480,7 +481,6 @@ OC.L10N.register(
|
||||
"Advanced deploy options" : "Opciones avanzadas del despliegue",
|
||||
"Edit ExApp deploy options before installation" : "Editar las opciones de despliegue de ExApp antes de la instalación",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Opciones de despliegue de ExApp configuradas. Sólo pueden configurarse durante la instalación",
|
||||
"Learn more" : "Aprender más",
|
||||
"Environment variables" : "Variables de entorno",
|
||||
"ExApp container environment variables" : "Variables de entorno del contenedor ExApp ",
|
||||
"No environment variables defined" : "No hay variables de entorno definidas",
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
"This app is supported via your current Nextcloud subscription." : "Esta App está soportada a través de su suscripción actual de Nexcloud.",
|
||||
"Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las apps destacadas están desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad central y están listas para usarlas en producción.",
|
||||
"Community rating: {score}/5" : "Calificación de la comunidad: {score}/5",
|
||||
"Learn more" : "Aprender más",
|
||||
"Disable all" : "Deshabilitar todos",
|
||||
"Download and enable all" : "Descargar y habilitar todo",
|
||||
"All apps are up-to-date." : "Todas las apps están actualizadas.",
|
||||
@@ -478,7 +479,6 @@
|
||||
"Advanced deploy options" : "Opciones avanzadas del despliegue",
|
||||
"Edit ExApp deploy options before installation" : "Editar las opciones de despliegue de ExApp antes de la instalación",
|
||||
"Configured ExApp deploy options. Can be set only during installation" : "Opciones de despliegue de ExApp configuradas. Sólo pueden configurarse durante la instalación",
|
||||
"Learn more" : "Aprender más",
|
||||
"Environment variables" : "Variables de entorno",
|
||||
"ExApp container environment variables" : "Variables de entorno del contenedor ExApp ",
|
||||
"No environment variables defined" : "No hay variables de entorno definidas",
|
||||
|
||||
@@ -86,6 +86,7 @@ OC.L10N.register(
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -96,7 +97,6 @@ OC.L10N.register(
|
||||
"Group name" : "Nombre del grupo",
|
||||
"Type" : "Tipo",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -94,7 +95,6 @@
|
||||
"Group name" : "Nombre del grupo",
|
||||
"Type" : "Tipo",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -252,6 +252,7 @@ OC.L10N.register(
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conozca más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -267,7 +268,6 @@ OC.L10N.register(
|
||||
"Loading" : "Cargando",
|
||||
"Type" : "Escribir",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conozca más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -250,6 +250,7 @@
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conozca más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -265,7 +266,6 @@
|
||||
"Loading" : "Cargando",
|
||||
"Type" : "Escribir",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conozca más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -88,6 +88,7 @@ OC.L10N.register(
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -100,7 +101,6 @@ OC.L10N.register(
|
||||
"Daemon" : "Demonio",
|
||||
"Type" : "Tipo",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -98,7 +99,6 @@
|
||||
"Daemon" : "Demonio",
|
||||
"Type" : "Tipo",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -88,6 +88,7 @@ OC.L10N.register(
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -99,7 +100,6 @@ OC.L10N.register(
|
||||
"Daemon" : "Demonio",
|
||||
"Type" : "Tipo",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -97,7 +98,6 @@
|
||||
"Daemon" : "Demonio",
|
||||
"Type" : "Tipo",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -87,6 +87,7 @@ OC.L10N.register(
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -98,7 +99,6 @@ OC.L10N.register(
|
||||
"Loading" : "Cargando",
|
||||
"Daemon" : "Demonio",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -96,7 +97,6 @@
|
||||
"Loading" : "Cargando",
|
||||
"Daemon" : "Demonio",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -87,6 +87,7 @@ OC.L10N.register(
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -97,7 +98,6 @@ OC.L10N.register(
|
||||
"Group name" : "Nombre del grupo",
|
||||
"Daemon" : "Demonio",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
@@ -85,6 +85,7 @@
|
||||
"Save changes" : "Guardar cambios",
|
||||
"Remove" : "Eliminar",
|
||||
"Featured" : "Destacado",
|
||||
"Learn more" : "Conoce más",
|
||||
"Icon" : "Ícono",
|
||||
"Name" : "Nombre",
|
||||
"Version" : "Versión",
|
||||
@@ -95,7 +96,6 @@
|
||||
"Group name" : "Nombre del grupo",
|
||||
"Daemon" : "Demonio",
|
||||
"Display Name" : "Nombre a desplegar",
|
||||
"Learn more" : "Conoce más",
|
||||
"Confirm" : "Confirmar",
|
||||
"Cancel" : "Cancelar",
|
||||
"Description" : "Descripción",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user