Compare commits
95 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1ba646a193 | |||
| 9581230b56 | |||
| 635a6ac9da | |||
| d92b02a14a | |||
| 6911a33d50 | |||
| 34f1ae62a1 | |||
| df8d838186 | |||
| 36d515da61 | |||
| 4770c2f120 | |||
| d8c404c1ef | |||
| 256e74d410 | |||
| d267d839e3 | |||
| 1588abec25 | |||
| 68e492ef17 | |||
| f98cabc20f | |||
| 101560af75 | |||
| 15e610a63f | |||
| 4a399a3d0b | |||
| 1f74ed9239 | |||
| 8062cdb485 | |||
| 69ec2ce26b | |||
| a1d6af4997 | |||
| 3ed719afc5 | |||
| 0dc0d593bb | |||
| 1538692987 | |||
| a529cdf080 | |||
| 83dd9d313a | |||
| e3edf43e28 | |||
| ef21c79368 | |||
| 13701dfda3 | |||
| cdcf1b6703 | |||
| a26d2a553f | |||
| 87885e35d4 | |||
| 5169d9be94 | |||
| bfd2ede77d | |||
| 4dcaca4e13 | |||
| eef8dc26ba | |||
| 2232e6851e | |||
| 143d486748 | |||
| bb062d149e | |||
| 9f56a2fcfc | |||
| 2c851228d3 | |||
| ed050b2aae | |||
| ee39b5093d | |||
| 815338cdc0 | |||
| 35d6a829f1 | |||
| 4a63bd2068 | |||
| 7885ac53e0 | |||
| 22ed856b31 | |||
| dc55aaf4d1 | |||
| 0bb1deb3de | |||
| f4ebcc7004 | |||
| cf7ed089e1 | |||
| 9f40d4cac3 | |||
| 8840b582c5 | |||
| 195a9a08e4 | |||
| f52e838a18 | |||
| fd0a7351c3 | |||
| f67d90ab27 | |||
| 9008175bff | |||
| 95915340f5 | |||
| 11f4fa92cf | |||
| 95f2d5dbac | |||
| fb78ee8389 | |||
| 095e4709b7 | |||
| ab2242c214 | |||
| 481edbd553 | |||
| a7e1492db3 | |||
| d1b9486d12 | |||
| 700f4db967 | |||
| 0ba6c779c8 | |||
| 10fa94ac94 | |||
| 9198244e6d | |||
| 1650adedf7 | |||
| 80af22ca2d | |||
| 5c55141353 | |||
| f77c4f7c09 | |||
| 8eae6cc44f | |||
| aa20f7a0dd | |||
| 5d43550bd3 | |||
| eca835aae0 | |||
| fdbd376c1f | |||
| 2b2dac9754 | |||
| 439f825774 | |||
| f4e8cd13a4 | |||
| 1c347bcac5 | |||
| bea30fcb2b | |||
| 5060d64c9b | |||
| b87add2711 | |||
| af7c56a75e | |||
| 57cb905580 | |||
| 231b7f8c41 | |||
| 4667634247 | |||
| 7a47fd6d04 | |||
| 4b4b39e7ec |
@@ -32,16 +32,18 @@ jobs:
|
||||
build-mode: none
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
uses: github/codeql-action/init@5d5cd550d3e189c569da8f16ea8de2d821c9bf7a # v3.31.2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
build-mode: ${{ matrix.build-mode }}
|
||||
config-file: ./.github/codeql-config.yml
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
uses: github/codeql-action/analyze@5d5cd550d3e189c569da8f16ea8de2d821c9bf7a # v3.31.2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
||||
@@ -61,13 +61,13 @@ jobs:
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
# To keep the matrix smaller we ignore PostgreSQL versions in between as we already test the minimum and the maximum
|
||||
postgres-versions: ['13', '17']
|
||||
postgres-versions: ['14', '18']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
postgres-versions: '17'
|
||||
postgres-versions: '18'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
- php-versions: '8.4'
|
||||
postgres-versions: '17'
|
||||
postgres-versions: '18'
|
||||
|
||||
name: PostgreSQL ${{ matrix.postgres-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
||||
|
||||
@@ -86,7 +86,7 @@ jobs:
|
||||
POSTGRES_USER: root
|
||||
POSTGRES_PASSWORD: rootpassword
|
||||
POSTGRES_DB: nextcloud
|
||||
options: --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
options: --mount type=tmpfs,destination=/var/lib/postgresql --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
|
||||
+1
-1
Submodule 3rdparty updated: 069a6106cc...f5e230b126
@@ -17,6 +17,7 @@ OC.L10N.register(
|
||||
"Delete comment" : "Elimina commento",
|
||||
"Cancel edit" : "Annulla modifica",
|
||||
"New comment" : "Nuovo commento",
|
||||
"Write a comment …" : "Scrivi un commento ...",
|
||||
"Post comment" : "Pubblica commento",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ per menzioni, : per emoji, / per selettore intelligente",
|
||||
"Could not reload comments" : "Impossibile ricaricare i commenti",
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"Delete comment" : "Elimina commento",
|
||||
"Cancel edit" : "Annulla modifica",
|
||||
"New comment" : "Nuovo commento",
|
||||
"Write a comment …" : "Scrivi un commento ...",
|
||||
"Post comment" : "Pubblica commento",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ per menzioni, : per emoji, / per selettore intelligente",
|
||||
"Could not reload comments" : "Impossibile ricaricare i commenti",
|
||||
|
||||
@@ -20,6 +20,7 @@ OC.L10N.register(
|
||||
"Edit widgets" : "Modifica widget",
|
||||
"Get more widgets from the App Store" : "Ottieni altri widget dal negozio delle applicazioni",
|
||||
"Weather service" : "Servizio meteo",
|
||||
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Per la tua riservatezza, i dati meteorologici sono richiesti dal tuo server {productName} per tuo conto, per cui il servizio meteo non riceve informazioni personali.",
|
||||
"Weather data from Met.no" : "Dati meteo da Met.no",
|
||||
"geocoding with Nominatim" : "geocodifica conh Nominatim",
|
||||
"elevation data from OpenTopoData" : "dati di elevazione da OpenTopoData",
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
"Edit widgets" : "Modifica widget",
|
||||
"Get more widgets from the App Store" : "Ottieni altri widget dal negozio delle applicazioni",
|
||||
"Weather service" : "Servizio meteo",
|
||||
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Per la tua riservatezza, i dati meteorologici sono richiesti dal tuo server {productName} per tuo conto, per cui il servizio meteo non riceve informazioni personali.",
|
||||
"Weather data from Met.no" : "Dati meteo da Met.no",
|
||||
"geocoding with Nominatim" : "geocodifica conh Nominatim",
|
||||
"elevation data from OpenTopoData" : "dati di elevazione da OpenTopoData",
|
||||
|
||||
@@ -186,6 +186,7 @@ OC.L10N.register(
|
||||
"Delete slot" : "Изтриване на слот",
|
||||
"No working hours set" : "Няма зададено работно време",
|
||||
"Add slot" : "Добавяне на слот",
|
||||
"Weekdays" : "Делнични дни",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично задаване на потребителският статус на „Не безпокойте“ извън достъпността, за заглушаване на всички известия.",
|
||||
"Cancel" : "Отказ",
|
||||
"Import" : "Импортиране /внасяне/",
|
||||
|
||||
@@ -184,6 +184,7 @@
|
||||
"Delete slot" : "Изтриване на слот",
|
||||
"No working hours set" : "Няма зададено работно време",
|
||||
"Add slot" : "Добавяне на слот",
|
||||
"Weekdays" : "Делнични дни",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично задаване на потребителският статус на „Не безпокойте“ извън достъпността, за заглушаване на всички известия.",
|
||||
"Cancel" : "Отказ",
|
||||
"Import" : "Импортиране /внасяне/",
|
||||
|
||||
+114
-6
@@ -72,15 +72,78 @@ OC.L10N.register(
|
||||
"Description: %s" : "Descrizione: %s",
|
||||
"Where: %s" : "Dove: %s",
|
||||
"%1$s via %2$s" : "%1$s tramite %2$s",
|
||||
"In the past on %1$s for the entire day" : "In passato ogni %1$s per l'intero giorno",
|
||||
"_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Fra un minuto il %1$s per l'intero giorno","Fra %n minuti il %1$s per l'intero giorno","Fra %n minuti il %1$s per l'intero giorno"],
|
||||
"_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Fra un'ora il %1$s per l'intero giorno","Fra %n ore il %1$s per l'intero giorno","Fra %n ore il %1$s per l'intero giorno"],
|
||||
"_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Fra un giorno il %1$s per l'intero giorno","Fra %n giorni il %1$s per l'intero giorno","Fra %n giorni il %1$s per l'intero giorno"],
|
||||
"_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Fra una settimana il %1$s per l'intero giorno","Fra %n settimane il %1$s per l'intero giorno","Fra %n settimane il %1$s per l'intero giorno"],
|
||||
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Fra un mese il %1$s per l'intero giorno","Fra %n mesi il %1$s per l'intero giorno","Fra %n mesi il %1$s per l'intero giorno"],
|
||||
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Fra un anno di %1$s per l'intero giorno","Fra %n anni di %1$s per l'intero giorno","Fra %n anni di %1$s per l'intero giorno"],
|
||||
"In the past on %1$s between %2$s - %3$s" : "In passato il %1$s nelle ore %2$s - %3$s",
|
||||
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Fra un minuto il %1$s nelle ore %2$s - %3$s","Fra %n minuti il %1$s nelle ore %2$s - %3$s","Fra %n minuti il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Fra un'ora il %1$s nelle ore %2$s - %3$s","Fra %n ore il %1$s nelle ore %2$s - %3$s","Fra %n ore il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Fra un giorno il %1$s nelle ore %2$s - %3$s","Fra %n giorni il %1$s nelle ore %2$s - %3$s","Fra %n giorni il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Fra una settimana il %1$s nelle ore %2$s - %3$s","Fra %n settimane il %1$s nelle ore %2$s - %3$s","Fra %n settimane il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Fra un mese il %1$s nelle ore %2$s - %3$s","Fra %n mesi il %1$s nelle ore %2$s - %3$s","Fra %n mesi il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Fra un anno il %1$s nelle ore %2$s - %3$s","Fra %n anni il %1$s nelle ore %2$s - %3$s","Fra %n anni il %1$s nelle ore %2$s - %3$s"],
|
||||
"Could not generate when statement" : "Impossibile generare l'istruzione \"quando\"",
|
||||
"Every Day for the entire day" : "Ogni giorno per l'intero giorno",
|
||||
"Every Day for the entire day until %1$s" : "Ogni Giorno per l'intero giorno fino a %1$s",
|
||||
"Every Day between %1$s - %2$s" : "Ogni giorno tra %1$s-%2$s",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Ogni giorno tra %1$s -%2$s fino al %3$s",
|
||||
"Every %1$d Days for the entire day" : "Ogni %1$d Giorni per tutto il giorno",
|
||||
"Every Day between %1$s - %2$s" : "Ogni giorno nelle ore %1$s-%2$s",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Ogni giorno nelle ore %1$s -%2$s fino al %3$s",
|
||||
"Every %1$d Days for the entire day" : "Ogni %1$d Giorni per l'intero giorno",
|
||||
"Every %1$d Days for the entire day until %2$s" : "Ogni %1$d Giorni per l'intero giorno fino al %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Ogni %1$d Giorni tra %2$s-%3$s",
|
||||
"Every Week on %1$s for the entire day" : "Ogni settimana di %1$s per l'intero giorno",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Ogni settimana di %1$s per l'intero giorno fino al %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Ogni %1$d Giorni nelle ore %2$s-%3$s",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "Ogni %1$d Giorni nelle ore %2$s - %3$s fino al %4$s",
|
||||
"Could not generate event recurrence statement" : "Impossibile generare l'istruzione di ricorrenza dell'evento",
|
||||
"Every Week on %1$s for the entire day" : "Ogni Settimana il %1$s per l'intero giorno",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Ogni Settimana il %1$s per l'intero giorno fino al %2$s",
|
||||
"Every Week on %1$s between %2$s - %3$s" : "Ogni Settimana il %1$s nelle ore %2$s - %3$s",
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Ogni Settimana il %1$s nelle ore %2$s - %3$s fino al %4$s",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Ogni %1$d Settimane il %2$s per l'intero giorno",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Ogni %1$d Settimane il %2$s per l'intero giorno fino al %3$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Ogni %1$d Settimane il %2$s nelle ore %3$s - %4$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Ogni %1$d Settimane il %2$s nelle ore %3$s - %4$s fino al %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Ogni Mese il/la %1$s per l'intero giorno",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Ogni Mese il/la %1$s per l'intero giorno fino al %2$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Ogni Mese il/la %1$s nelle ore %2$s - %3$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Ogni Mese il/la %1$s nelle ore %2$s - %3$s fino al %4$s",
|
||||
"Every %1$d Months on the %2$s for the entire day" : "Ogni %1$d Mesi il/la %2$s per l'intero giorno",
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Ogni %1$d Mesi il/la %2$s per l'intero giorno fino al %3$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Ogni %1$d Mesi il/la %2$s nelle ore %3$s - %4$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Ogni %1$d Mesi il/la %2$s nelle ore %3$s - %4$s fino al %5$s",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Ogni Anno a %1$s il/la %2$s per l'intero giorno",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Ogni Anno a %1$s il/la %2$s per l'intero giorno fino al %3$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Ogni Anno a %1$s il/la %2$s nelle ore %3$s - %4$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Ogni Anno a %1$s il/la %2$s nelle ore %3$s - %4$s fino al %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Ogni %1$d Anni a %2$s il/la %3$s per l'intero giorno",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Ogni %1$d Anni a %2$s il/la %3$s per l'intero giorno fino al %4$s",
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Ogni %1$d Anni a %2$s il/la %3$s nelle ore %4$s - %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Ogni %1$d Anni a %2$s il/la %3$s nelle ore %4$s - %5$s fino al %6$s",
|
||||
"On specific dates for the entire day until %1$s" : "In una specifica data per l'intero giorno fino al %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "In una specifica data nelle ore %1$s - %2$s fino al %3$s",
|
||||
"In the past on %1$s" : "In passato il %1$s",
|
||||
"_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Fra un minuto il %1$s","Fra %n minuti il %1$s","Fra %n minuti il %1$s"],
|
||||
"_In a hour on %1$s_::_In %n hours on %1$s_" : ["Fra un'ora il %1$s","Fra %n ore il %1$s","Fra %n ore il %1$s"],
|
||||
"_In a day on %1$s_::_In %n days on %1$s_" : ["Fra un giorno il %1$s","Fra %n giorni il %1$s","Fra %n giorni il %1$s"],
|
||||
"_In a week on %1$s_::_In %n weeks on %1$s_" : ["Fra una settimana il %1$s","Fra %n settimane il %1$s","Fra %n settimane il %1$s"],
|
||||
"_In a month on %1$s_::_In %n months on %1$s_" : ["Fra un mese il %1$s","Fra %n mesi il %1$s","Fra %n mesi il %1$s"],
|
||||
"_In a year on %1$s_::_In %n years on %1$s_" : ["Fra un anno il %1$s","Fra %n anni il %1$s","Fra %n anni il %1$s"],
|
||||
"In the past on %1$s then on %2$s" : "In passato il %1$s successivamente il %2$s",
|
||||
"_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Fra un minuto %1$s successivamente il %2$s","Fra %n minuti %1$s successivamente il %2$s","Fra %n minuti %1$s successivamente il %2$s"],
|
||||
"_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Fra un'ora %1$s successivamente il %2$s","Fra %n ore %1$s successivamente il %2$s","Fra %n ore %1$s successivamente il %2$s"],
|
||||
"_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Fra un giorno %1$s successivamente il %2$s","Fra %n giorni %1$s successivamente il %2$s","Fra %n giorni %1$s successivamente il %2$s"],
|
||||
"_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Fra una settimana %1$s successivamente il %2$s","Fra %n settimane %1$s successivamente il %2$s","Fra %n settimane %1$s successivamente il %2$s"],
|
||||
"_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Fra un mese %1$s successivamente il %2$s","Fra %n mesi %1$s successivamente il %2$s","Fra %n mesi %1$s successivamente il %2$s"],
|
||||
"_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Fra un anno %1$s successivamente il %2$s","Fra %n anni %1$s successivamente il %2$s","Fra %n anni %1$s successivamente il %2$s"],
|
||||
"In the past on %1$s then on %2$s and %3$s" : "In passato il %1$s successivamente il %2$s e %3$s",
|
||||
"_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Fra un minuto il %1$s successivamente il %2$s e %3$s","Fra %n minuti il %1$s successivamente il %2$s e %3$s","Fra %n minuti il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Fra un'ora il %1$s successivamente il %2$s e %3$s","Fra %n ore il %1$s successivamente il %2$s e %3$s","Fra %n ore il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Fra un giorno il %1$s successivamente il %2$s e %3$s","Fra %n giorni il %1$s successivamente il %2$s e %3$s","Fra %n giorni il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Fra una settimana il %1$s successivamente il %2$s e %3$s","Fra %n settimane il %1$s successivamente il %2$s e %3$s","Fra %n settimane il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Fra un mese il %1$s successivamente il %2$s e %3$s","Fra %n mesi il %1$s successivamente il %2$s e %3$s","Fra %n mesi il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Fra un anno il %1$s successivamente il %2$s e %3$s","Fra %n anni il %1$s successivamente il %2$s e %3$s","Fra %n anni il %1$s successivamente il %2$s e %3$s"],
|
||||
"Could not generate next recurrence statement" : "Impossibile generare l'istruzione della prossima ricorrenza ",
|
||||
"Cancelled: %1$s" : "Annullato: %1$s",
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" è stato annullato",
|
||||
"Re: %1$s" : "Re: %1$s",
|
||||
@@ -98,6 +161,7 @@ OC.L10N.register(
|
||||
"When:" : "Quando:",
|
||||
"Location:" : "Posizione:",
|
||||
"Link:" : "Collegamento:",
|
||||
"Occurring:" : "Ricorrenza:",
|
||||
"Accept" : "Accetta",
|
||||
"Decline" : "Rifiuta",
|
||||
"More options …" : "Altre opzioni...",
|
||||
@@ -122,7 +186,15 @@ OC.L10N.register(
|
||||
"November" : "Novembre",
|
||||
"December" : "Dicembre",
|
||||
"First" : "Primo",
|
||||
"Second" : "Secondo",
|
||||
"Third" : "Terzo",
|
||||
"Fourth" : "Quarto",
|
||||
"Fifth" : "Quinto",
|
||||
"Last" : "Ultimo",
|
||||
"Second Last" : "Penultimo",
|
||||
"Third Last" : "Terzultimo",
|
||||
"Fourth Last" : "Quartultimo",
|
||||
"Fifth Last" : "Quintultimo",
|
||||
"Contacts" : "Contatti",
|
||||
"{actor} created address book {addressbook}" : "{actor} ha creato la rubrica {addressbook}",
|
||||
"You created address book {addressbook}" : "Hai creato la rubrica {addressbook}",
|
||||
@@ -148,9 +220,12 @@ OC.L10N.register(
|
||||
"{actor} updated contact {card} in address book {addressbook}" : "{actor} ha aggiornato il contatto {card} nella rubrica {addressbook}",
|
||||
"You updated contact {card} in address book {addressbook}" : "Hai aggiornato il contatto {card} nella rubrica {addressbook}",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Un <strong>contatto</strong> o <strong>rubrica</strong> sono stati modificati ",
|
||||
"System address book disabled" : "Rubrica di sistema disabilitata",
|
||||
"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}" : "La rubrica dei contatti di sistema è stata disabilitata automaticamente durante l'aggiornamento. Ciò significa che la rubrica non sarà più disponibile per gli utenti nell'app Contatti o in altri client. La rubrica dei contatti di sistema è stata disabilitata perché il numero di contatti nella rubrica ha superato il numero massimo consigliato. Questo limite è stato impostato per evitare problemi di prestazioni. È possibile riabilitare la rubrica di sistema con il seguente comando {command}",
|
||||
"Accounts" : "Account",
|
||||
"System address book which holds all accounts" : "Rubrica di sistema che contiene tutti gli account",
|
||||
"File is not updatable: %1$s" : "Il file non è aggiornabile: %1$s",
|
||||
"Failed to get storage for file" : "Impossibile ottenere spazio di archiviazione per il file",
|
||||
"Could not write to final file, canceled by hook" : "Impossibile scrivere nel file finale, annullato da hook",
|
||||
"Could not write file contents" : "Impossibile scrivere il contenuto del file",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n byte","%n byte"],
|
||||
@@ -159,11 +234,14 @@ OC.L10N.register(
|
||||
"Could not rename part file to final file, canceled by hook" : "Impossibile rinominare il file di parte in file finale, annullato da hook",
|
||||
"Could not rename part file to final file" : "Impossibile rinominare il file di parte in file finale",
|
||||
"Failed to check file size: %1$s" : "Verifica della dimensione del file non riuscito: %1$s",
|
||||
"Could not open file: %1$s, file does seem to exist" : "Impossibile aprire il file: %1$s, il file sembra esistere",
|
||||
"Could not open file: %1$s, file doesn't seem to exist" : "Impossibile aprire il file: %1$s, il file non sembra esistere",
|
||||
"Encryption not ready: %1$s" : "Cifratura non pronta: %1$s",
|
||||
"Failed to open file: %1$s" : "Apertura del file non riuscito: %1$s",
|
||||
"Failed to unlink: %1$s" : "Scollegamento non riuscito: %1$s",
|
||||
"Failed to write file contents: %1$s" : "Scrittura del contenuto del file non riuscita: %1$s",
|
||||
"File not found: %1$s" : "File non trovato: %1$s",
|
||||
"Invalid target path" : "Percorso di destinazione non valido",
|
||||
"System is in maintenance mode." : "Il sistema è in modalità di manutenzione.",
|
||||
"Upgrade needed" : "Aggiornamento necessario",
|
||||
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Il tuo %s deve essere configurato all'uso di HTTPS per poter usare CalDAV e CardDAV con iOS/macOS.",
|
||||
@@ -174,9 +252,18 @@ OC.L10N.register(
|
||||
"Completed on %s" : "Completata il %s",
|
||||
"Due on %s by %s" : "Scade il %s per %s",
|
||||
"Due on %s" : "Scade il %s",
|
||||
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Benvenuto nel Calendario Nextcloud!\n\nQuesto è un evento di esempio: scopri la flessibilità della pianificazione con Calendario Nextcloud apportando tutte le modifiche che desideri!\n\nCon il Calendario Nextcloud puoi:\n- Creare, modificare e gestire eventi senza alcuno sforzo.\n- Creare più calendari e condividerli con colleghi, amici o familiari.\n- Verificare la disponibilità e mostrare agli altri i tuoi impegni.\n- Integrare perfettamente app e dispositivi tramite CalDAV.\n- Personalizzare la tua esperienza: pianificare eventi ricorrenti, regolare le notifiche e altre impostazioni.",
|
||||
"Example event - open me!" : "Evento d'esempio - aprimi!",
|
||||
"System Address Book" : "Rubrica di Sistema",
|
||||
"The system address book contains contact information for all users in your instance." : "La rubrica di sistema contiene le informazioni di contatto di tutti gli utenti della tua istanza.",
|
||||
"Enable System Address Book" : "Abilita rubrica di sistema",
|
||||
"DAV system address book" : "Rubrica di sistema DAV",
|
||||
"No outstanding DAV system address book sync." : "Nessuna sincronizzazione della rubrica del sistema DAV in sospeso.",
|
||||
"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 sincronizzazione della rubrica del sistema DAV non è ancora stata eseguita poiché la tua istanza ha più di 1000 utenti o perché si è verificato un errore. Eseguila a mano chiamando \"occ dav:sync-system-addressbook\".",
|
||||
"DAV system address book size" : "Dimensione della rubrica del sistema DAV",
|
||||
"The system address book is disabled" : "La rubrica di sistema è disabilitata",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "La rubrica di sistema è abilitata, ma contiene più del limite configurato di %d contatti",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "La rubrica di sistema è abilitata, e contiene meno del limite configurato di %d contatti",
|
||||
"WebDAV endpoint" : "Terminatore WebDAV",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Impossibile verificare se il server è configurato correttamente per consentire la sincronizzazione di file via WebDAV. Controllalo a mano.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file, poiché l'interfaccia WebDAV sembra essere danneggiata.",
|
||||
@@ -191,6 +278,8 @@ OC.L10N.register(
|
||||
"Failed to clear your absence settings" : "Impossibile cancellare le impostazioni di assenza",
|
||||
"First day" : "Primo giorno",
|
||||
"Last day (inclusive)" : "Ultimo giorno (inclusivo)",
|
||||
"Out of office replacement (optional)" : "Sostituzione per assenza (opzionale)",
|
||||
"Name of the replacement" : "Nome del sostituto",
|
||||
"Short absence status" : "Stato di assenza breve",
|
||||
"Long absence Message" : "Messaggio di assenza lunga",
|
||||
"Save" : "Salva",
|
||||
@@ -209,7 +298,22 @@ OC.L10N.register(
|
||||
"Cancel" : "Annulla",
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "Errore durante il salvataggio delle impostazioni",
|
||||
"Contact reset successfully" : "Contatto resettato con successo",
|
||||
"Error while resetting contact" : "Errore durante il reset del contatto",
|
||||
"Contact imported successfully" : "Contatto importato con successo",
|
||||
"Error while importing contact" : "Errore durante l'importazione del contatto",
|
||||
"Import contact" : "Importa contatto",
|
||||
"Reset to default" : "Ripristina valori predefiniti",
|
||||
"Import contacts" : "Importa contatti",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "L'importazione di un nuovo file .vcf cancellerà il contatto predefinito esistente e lo sostituirà con quello nuovo. Vuoi continuare?",
|
||||
"Failed to save example event creation setting" : "Impossibile salvare le impostazioni di creazione dell'evento di esempio",
|
||||
"Failed to upload the example event" : "Impossibile caricare l'evento di esempio",
|
||||
"Custom example event was saved successfully" : "Esempio di evento personalizzato salvato correttamente",
|
||||
"Failed to delete the custom example event" : "Impossibile eliminare l'evento di esempio personalizzato",
|
||||
"Custom example event was deleted successfully" : "L'evento personalizzato di esempio è stato eliminato correttamente.",
|
||||
"Import calendar event" : "Importa evento del calendario",
|
||||
"Uploading a new event will overwrite the existing one." : "Il caricamento di un nuovo evento sovrascriverà quello esistente.",
|
||||
"Upload event" : "Carica evento",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installa anche {calendarappstoreopen}l'applicazione Calendario{linkclose}, o {calendardocopen}connetti il tuo desktop e mobile per la sincronizzazione ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assicurati di configurare correttamente {emailopen}il server di posta{linkclose}.",
|
||||
"Calendar server" : "Server di calendari",
|
||||
@@ -222,6 +326,8 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
|
||||
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
|
||||
"Example content" : "Contenuto d'esempio",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Il contenuto di esempio serve a mostrare le funzionalità di Nextcloud. Il contenuto predefinito viene fornito con Nextcloud e può essere sostituito da contenuti personalizzati.",
|
||||
"Availability" : "Disponibilità",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se imposti il tuo orario di lavoro, le altre persone potranno vedere quando non sei in ufficio per organizzare una riunione.",
|
||||
"Absence" : "Assenza",
|
||||
@@ -231,6 +337,8 @@ OC.L10N.register(
|
||||
"Are you accepting the invitation?" : "Accetti l'invito?",
|
||||
"Tentative" : "Provvisorio",
|
||||
"Your attendance was updated successfully." : "La tua partecipazione è stata aggiornata correttamente.",
|
||||
"No results." : "Nessun risultato.",
|
||||
"Start typing." : "Inizia a scrivere.",
|
||||
"Time zone:" : "Fuso orario:"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
+114
-6
@@ -70,15 +70,78 @@
|
||||
"Description: %s" : "Descrizione: %s",
|
||||
"Where: %s" : "Dove: %s",
|
||||
"%1$s via %2$s" : "%1$s tramite %2$s",
|
||||
"In the past on %1$s for the entire day" : "In passato ogni %1$s per l'intero giorno",
|
||||
"_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Fra un minuto il %1$s per l'intero giorno","Fra %n minuti il %1$s per l'intero giorno","Fra %n minuti il %1$s per l'intero giorno"],
|
||||
"_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Fra un'ora il %1$s per l'intero giorno","Fra %n ore il %1$s per l'intero giorno","Fra %n ore il %1$s per l'intero giorno"],
|
||||
"_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Fra un giorno il %1$s per l'intero giorno","Fra %n giorni il %1$s per l'intero giorno","Fra %n giorni il %1$s per l'intero giorno"],
|
||||
"_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Fra una settimana il %1$s per l'intero giorno","Fra %n settimane il %1$s per l'intero giorno","Fra %n settimane il %1$s per l'intero giorno"],
|
||||
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Fra un mese il %1$s per l'intero giorno","Fra %n mesi il %1$s per l'intero giorno","Fra %n mesi il %1$s per l'intero giorno"],
|
||||
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Fra un anno di %1$s per l'intero giorno","Fra %n anni di %1$s per l'intero giorno","Fra %n anni di %1$s per l'intero giorno"],
|
||||
"In the past on %1$s between %2$s - %3$s" : "In passato il %1$s nelle ore %2$s - %3$s",
|
||||
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Fra un minuto il %1$s nelle ore %2$s - %3$s","Fra %n minuti il %1$s nelle ore %2$s - %3$s","Fra %n minuti il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Fra un'ora il %1$s nelle ore %2$s - %3$s","Fra %n ore il %1$s nelle ore %2$s - %3$s","Fra %n ore il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Fra un giorno il %1$s nelle ore %2$s - %3$s","Fra %n giorni il %1$s nelle ore %2$s - %3$s","Fra %n giorni il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Fra una settimana il %1$s nelle ore %2$s - %3$s","Fra %n settimane il %1$s nelle ore %2$s - %3$s","Fra %n settimane il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Fra un mese il %1$s nelle ore %2$s - %3$s","Fra %n mesi il %1$s nelle ore %2$s - %3$s","Fra %n mesi il %1$s nelle ore %2$s - %3$s"],
|
||||
"_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Fra un anno il %1$s nelle ore %2$s - %3$s","Fra %n anni il %1$s nelle ore %2$s - %3$s","Fra %n anni il %1$s nelle ore %2$s - %3$s"],
|
||||
"Could not generate when statement" : "Impossibile generare l'istruzione \"quando\"",
|
||||
"Every Day for the entire day" : "Ogni giorno per l'intero giorno",
|
||||
"Every Day for the entire day until %1$s" : "Ogni Giorno per l'intero giorno fino a %1$s",
|
||||
"Every Day between %1$s - %2$s" : "Ogni giorno tra %1$s-%2$s",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Ogni giorno tra %1$s -%2$s fino al %3$s",
|
||||
"Every %1$d Days for the entire day" : "Ogni %1$d Giorni per tutto il giorno",
|
||||
"Every Day between %1$s - %2$s" : "Ogni giorno nelle ore %1$s-%2$s",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "Ogni giorno nelle ore %1$s -%2$s fino al %3$s",
|
||||
"Every %1$d Days for the entire day" : "Ogni %1$d Giorni per l'intero giorno",
|
||||
"Every %1$d Days for the entire day until %2$s" : "Ogni %1$d Giorni per l'intero giorno fino al %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Ogni %1$d Giorni tra %2$s-%3$s",
|
||||
"Every Week on %1$s for the entire day" : "Ogni settimana di %1$s per l'intero giorno",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Ogni settimana di %1$s per l'intero giorno fino al %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "Ogni %1$d Giorni nelle ore %2$s-%3$s",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "Ogni %1$d Giorni nelle ore %2$s - %3$s fino al %4$s",
|
||||
"Could not generate event recurrence statement" : "Impossibile generare l'istruzione di ricorrenza dell'evento",
|
||||
"Every Week on %1$s for the entire day" : "Ogni Settimana il %1$s per l'intero giorno",
|
||||
"Every Week on %1$s for the entire day until %2$s" : "Ogni Settimana il %1$s per l'intero giorno fino al %2$s",
|
||||
"Every Week on %1$s between %2$s - %3$s" : "Ogni Settimana il %1$s nelle ore %2$s - %3$s",
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Ogni Settimana il %1$s nelle ore %2$s - %3$s fino al %4$s",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Ogni %1$d Settimane il %2$s per l'intero giorno",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Ogni %1$d Settimane il %2$s per l'intero giorno fino al %3$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Ogni %1$d Settimane il %2$s nelle ore %3$s - %4$s",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Ogni %1$d Settimane il %2$s nelle ore %3$s - %4$s fino al %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Ogni Mese il/la %1$s per l'intero giorno",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Ogni Mese il/la %1$s per l'intero giorno fino al %2$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Ogni Mese il/la %1$s nelle ore %2$s - %3$s",
|
||||
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Ogni Mese il/la %1$s nelle ore %2$s - %3$s fino al %4$s",
|
||||
"Every %1$d Months on the %2$s for the entire day" : "Ogni %1$d Mesi il/la %2$s per l'intero giorno",
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Ogni %1$d Mesi il/la %2$s per l'intero giorno fino al %3$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Ogni %1$d Mesi il/la %2$s nelle ore %3$s - %4$s",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Ogni %1$d Mesi il/la %2$s nelle ore %3$s - %4$s fino al %5$s",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Ogni Anno a %1$s il/la %2$s per l'intero giorno",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Ogni Anno a %1$s il/la %2$s per l'intero giorno fino al %3$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Ogni Anno a %1$s il/la %2$s nelle ore %3$s - %4$s",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Ogni Anno a %1$s il/la %2$s nelle ore %3$s - %4$s fino al %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Ogni %1$d Anni a %2$s il/la %3$s per l'intero giorno",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Ogni %1$d Anni a %2$s il/la %3$s per l'intero giorno fino al %4$s",
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Ogni %1$d Anni a %2$s il/la %3$s nelle ore %4$s - %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Ogni %1$d Anni a %2$s il/la %3$s nelle ore %4$s - %5$s fino al %6$s",
|
||||
"On specific dates for the entire day until %1$s" : "In una specifica data per l'intero giorno fino al %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "In una specifica data nelle ore %1$s - %2$s fino al %3$s",
|
||||
"In the past on %1$s" : "In passato il %1$s",
|
||||
"_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Fra un minuto il %1$s","Fra %n minuti il %1$s","Fra %n minuti il %1$s"],
|
||||
"_In a hour on %1$s_::_In %n hours on %1$s_" : ["Fra un'ora il %1$s","Fra %n ore il %1$s","Fra %n ore il %1$s"],
|
||||
"_In a day on %1$s_::_In %n days on %1$s_" : ["Fra un giorno il %1$s","Fra %n giorni il %1$s","Fra %n giorni il %1$s"],
|
||||
"_In a week on %1$s_::_In %n weeks on %1$s_" : ["Fra una settimana il %1$s","Fra %n settimane il %1$s","Fra %n settimane il %1$s"],
|
||||
"_In a month on %1$s_::_In %n months on %1$s_" : ["Fra un mese il %1$s","Fra %n mesi il %1$s","Fra %n mesi il %1$s"],
|
||||
"_In a year on %1$s_::_In %n years on %1$s_" : ["Fra un anno il %1$s","Fra %n anni il %1$s","Fra %n anni il %1$s"],
|
||||
"In the past on %1$s then on %2$s" : "In passato il %1$s successivamente il %2$s",
|
||||
"_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Fra un minuto %1$s successivamente il %2$s","Fra %n minuti %1$s successivamente il %2$s","Fra %n minuti %1$s successivamente il %2$s"],
|
||||
"_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Fra un'ora %1$s successivamente il %2$s","Fra %n ore %1$s successivamente il %2$s","Fra %n ore %1$s successivamente il %2$s"],
|
||||
"_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Fra un giorno %1$s successivamente il %2$s","Fra %n giorni %1$s successivamente il %2$s","Fra %n giorni %1$s successivamente il %2$s"],
|
||||
"_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Fra una settimana %1$s successivamente il %2$s","Fra %n settimane %1$s successivamente il %2$s","Fra %n settimane %1$s successivamente il %2$s"],
|
||||
"_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Fra un mese %1$s successivamente il %2$s","Fra %n mesi %1$s successivamente il %2$s","Fra %n mesi %1$s successivamente il %2$s"],
|
||||
"_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Fra un anno %1$s successivamente il %2$s","Fra %n anni %1$s successivamente il %2$s","Fra %n anni %1$s successivamente il %2$s"],
|
||||
"In the past on %1$s then on %2$s and %3$s" : "In passato il %1$s successivamente il %2$s e %3$s",
|
||||
"_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Fra un minuto il %1$s successivamente il %2$s e %3$s","Fra %n minuti il %1$s successivamente il %2$s e %3$s","Fra %n minuti il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Fra un'ora il %1$s successivamente il %2$s e %3$s","Fra %n ore il %1$s successivamente il %2$s e %3$s","Fra %n ore il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Fra un giorno il %1$s successivamente il %2$s e %3$s","Fra %n giorni il %1$s successivamente il %2$s e %3$s","Fra %n giorni il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Fra una settimana il %1$s successivamente il %2$s e %3$s","Fra %n settimane il %1$s successivamente il %2$s e %3$s","Fra %n settimane il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Fra un mese il %1$s successivamente il %2$s e %3$s","Fra %n mesi il %1$s successivamente il %2$s e %3$s","Fra %n mesi il %1$s successivamente il %2$s e %3$s"],
|
||||
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Fra un anno il %1$s successivamente il %2$s e %3$s","Fra %n anni il %1$s successivamente il %2$s e %3$s","Fra %n anni il %1$s successivamente il %2$s e %3$s"],
|
||||
"Could not generate next recurrence statement" : "Impossibile generare l'istruzione della prossima ricorrenza ",
|
||||
"Cancelled: %1$s" : "Annullato: %1$s",
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" è stato annullato",
|
||||
"Re: %1$s" : "Re: %1$s",
|
||||
@@ -96,6 +159,7 @@
|
||||
"When:" : "Quando:",
|
||||
"Location:" : "Posizione:",
|
||||
"Link:" : "Collegamento:",
|
||||
"Occurring:" : "Ricorrenza:",
|
||||
"Accept" : "Accetta",
|
||||
"Decline" : "Rifiuta",
|
||||
"More options …" : "Altre opzioni...",
|
||||
@@ -120,7 +184,15 @@
|
||||
"November" : "Novembre",
|
||||
"December" : "Dicembre",
|
||||
"First" : "Primo",
|
||||
"Second" : "Secondo",
|
||||
"Third" : "Terzo",
|
||||
"Fourth" : "Quarto",
|
||||
"Fifth" : "Quinto",
|
||||
"Last" : "Ultimo",
|
||||
"Second Last" : "Penultimo",
|
||||
"Third Last" : "Terzultimo",
|
||||
"Fourth Last" : "Quartultimo",
|
||||
"Fifth Last" : "Quintultimo",
|
||||
"Contacts" : "Contatti",
|
||||
"{actor} created address book {addressbook}" : "{actor} ha creato la rubrica {addressbook}",
|
||||
"You created address book {addressbook}" : "Hai creato la rubrica {addressbook}",
|
||||
@@ -146,9 +218,12 @@
|
||||
"{actor} updated contact {card} in address book {addressbook}" : "{actor} ha aggiornato il contatto {card} nella rubrica {addressbook}",
|
||||
"You updated contact {card} in address book {addressbook}" : "Hai aggiornato il contatto {card} nella rubrica {addressbook}",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Un <strong>contatto</strong> o <strong>rubrica</strong> sono stati modificati ",
|
||||
"System address book disabled" : "Rubrica di sistema disabilitata",
|
||||
"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}" : "La rubrica dei contatti di sistema è stata disabilitata automaticamente durante l'aggiornamento. Ciò significa che la rubrica non sarà più disponibile per gli utenti nell'app Contatti o in altri client. La rubrica dei contatti di sistema è stata disabilitata perché il numero di contatti nella rubrica ha superato il numero massimo consigliato. Questo limite è stato impostato per evitare problemi di prestazioni. È possibile riabilitare la rubrica di sistema con il seguente comando {command}",
|
||||
"Accounts" : "Account",
|
||||
"System address book which holds all accounts" : "Rubrica di sistema che contiene tutti gli account",
|
||||
"File is not updatable: %1$s" : "Il file non è aggiornabile: %1$s",
|
||||
"Failed to get storage for file" : "Impossibile ottenere spazio di archiviazione per il file",
|
||||
"Could not write to final file, canceled by hook" : "Impossibile scrivere nel file finale, annullato da hook",
|
||||
"Could not write file contents" : "Impossibile scrivere il contenuto del file",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n byte","%n byte"],
|
||||
@@ -157,11 +232,14 @@
|
||||
"Could not rename part file to final file, canceled by hook" : "Impossibile rinominare il file di parte in file finale, annullato da hook",
|
||||
"Could not rename part file to final file" : "Impossibile rinominare il file di parte in file finale",
|
||||
"Failed to check file size: %1$s" : "Verifica della dimensione del file non riuscito: %1$s",
|
||||
"Could not open file: %1$s, file does seem to exist" : "Impossibile aprire il file: %1$s, il file sembra esistere",
|
||||
"Could not open file: %1$s, file doesn't seem to exist" : "Impossibile aprire il file: %1$s, il file non sembra esistere",
|
||||
"Encryption not ready: %1$s" : "Cifratura non pronta: %1$s",
|
||||
"Failed to open file: %1$s" : "Apertura del file non riuscito: %1$s",
|
||||
"Failed to unlink: %1$s" : "Scollegamento non riuscito: %1$s",
|
||||
"Failed to write file contents: %1$s" : "Scrittura del contenuto del file non riuscita: %1$s",
|
||||
"File not found: %1$s" : "File non trovato: %1$s",
|
||||
"Invalid target path" : "Percorso di destinazione non valido",
|
||||
"System is in maintenance mode." : "Il sistema è in modalità di manutenzione.",
|
||||
"Upgrade needed" : "Aggiornamento necessario",
|
||||
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Il tuo %s deve essere configurato all'uso di HTTPS per poter usare CalDAV e CardDAV con iOS/macOS.",
|
||||
@@ -172,9 +250,18 @@
|
||||
"Completed on %s" : "Completata il %s",
|
||||
"Due on %s by %s" : "Scade il %s per %s",
|
||||
"Due on %s" : "Scade il %s",
|
||||
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Benvenuto nel Calendario Nextcloud!\n\nQuesto è un evento di esempio: scopri la flessibilità della pianificazione con Calendario Nextcloud apportando tutte le modifiche che desideri!\n\nCon il Calendario Nextcloud puoi:\n- Creare, modificare e gestire eventi senza alcuno sforzo.\n- Creare più calendari e condividerli con colleghi, amici o familiari.\n- Verificare la disponibilità e mostrare agli altri i tuoi impegni.\n- Integrare perfettamente app e dispositivi tramite CalDAV.\n- Personalizzare la tua esperienza: pianificare eventi ricorrenti, regolare le notifiche e altre impostazioni.",
|
||||
"Example event - open me!" : "Evento d'esempio - aprimi!",
|
||||
"System Address Book" : "Rubrica di Sistema",
|
||||
"The system address book contains contact information for all users in your instance." : "La rubrica di sistema contiene le informazioni di contatto di tutti gli utenti della tua istanza.",
|
||||
"Enable System Address Book" : "Abilita rubrica di sistema",
|
||||
"DAV system address book" : "Rubrica di sistema DAV",
|
||||
"No outstanding DAV system address book sync." : "Nessuna sincronizzazione della rubrica del sistema DAV in sospeso.",
|
||||
"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 sincronizzazione della rubrica del sistema DAV non è ancora stata eseguita poiché la tua istanza ha più di 1000 utenti o perché si è verificato un errore. Eseguila a mano chiamando \"occ dav:sync-system-addressbook\".",
|
||||
"DAV system address book size" : "Dimensione della rubrica del sistema DAV",
|
||||
"The system address book is disabled" : "La rubrica di sistema è disabilitata",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "La rubrica di sistema è abilitata, ma contiene più del limite configurato di %d contatti",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "La rubrica di sistema è abilitata, e contiene meno del limite configurato di %d contatti",
|
||||
"WebDAV endpoint" : "Terminatore WebDAV",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Impossibile verificare se il server è configurato correttamente per consentire la sincronizzazione di file via WebDAV. Controllalo a mano.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file, poiché l'interfaccia WebDAV sembra essere danneggiata.",
|
||||
@@ -189,6 +276,8 @@
|
||||
"Failed to clear your absence settings" : "Impossibile cancellare le impostazioni di assenza",
|
||||
"First day" : "Primo giorno",
|
||||
"Last day (inclusive)" : "Ultimo giorno (inclusivo)",
|
||||
"Out of office replacement (optional)" : "Sostituzione per assenza (opzionale)",
|
||||
"Name of the replacement" : "Nome del sostituto",
|
||||
"Short absence status" : "Stato di assenza breve",
|
||||
"Long absence Message" : "Messaggio di assenza lunga",
|
||||
"Save" : "Salva",
|
||||
@@ -207,7 +296,22 @@
|
||||
"Cancel" : "Annulla",
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "Errore durante il salvataggio delle impostazioni",
|
||||
"Contact reset successfully" : "Contatto resettato con successo",
|
||||
"Error while resetting contact" : "Errore durante il reset del contatto",
|
||||
"Contact imported successfully" : "Contatto importato con successo",
|
||||
"Error while importing contact" : "Errore durante l'importazione del contatto",
|
||||
"Import contact" : "Importa contatto",
|
||||
"Reset to default" : "Ripristina valori predefiniti",
|
||||
"Import contacts" : "Importa contatti",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "L'importazione di un nuovo file .vcf cancellerà il contatto predefinito esistente e lo sostituirà con quello nuovo. Vuoi continuare?",
|
||||
"Failed to save example event creation setting" : "Impossibile salvare le impostazioni di creazione dell'evento di esempio",
|
||||
"Failed to upload the example event" : "Impossibile caricare l'evento di esempio",
|
||||
"Custom example event was saved successfully" : "Esempio di evento personalizzato salvato correttamente",
|
||||
"Failed to delete the custom example event" : "Impossibile eliminare l'evento di esempio personalizzato",
|
||||
"Custom example event was deleted successfully" : "L'evento personalizzato di esempio è stato eliminato correttamente.",
|
||||
"Import calendar event" : "Importa evento del calendario",
|
||||
"Uploading a new event will overwrite the existing one." : "Il caricamento di un nuovo evento sovrascriverà quello esistente.",
|
||||
"Upload event" : "Carica evento",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installa anche {calendarappstoreopen}l'applicazione Calendario{linkclose}, o {calendardocopen}connetti il tuo desktop e mobile per la sincronizzazione ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assicurati di configurare correttamente {emailopen}il server di posta{linkclose}.",
|
||||
"Calendar server" : "Server di calendari",
|
||||
@@ -220,6 +324,8 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
|
||||
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
|
||||
"Example content" : "Contenuto d'esempio",
|
||||
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Il contenuto di esempio serve a mostrare le funzionalità di Nextcloud. Il contenuto predefinito viene fornito con Nextcloud e può essere sostituito da contenuti personalizzati.",
|
||||
"Availability" : "Disponibilità",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se imposti il tuo orario di lavoro, le altre persone potranno vedere quando non sei in ufficio per organizzare una riunione.",
|
||||
"Absence" : "Assenza",
|
||||
@@ -229,6 +335,8 @@
|
||||
"Are you accepting the invitation?" : "Accetti l'invito?",
|
||||
"Tentative" : "Provvisorio",
|
||||
"Your attendance was updated successfully." : "La tua partecipazione è stata aggiornata correttamente.",
|
||||
"No results." : "Nessun risultato.",
|
||||
"Start typing." : "Inizia a scrivere.",
|
||||
"Time zone:" : "Fuso orario:"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -11,6 +11,7 @@ namespace OCA\DAV\Paginate;
|
||||
|
||||
use Sabre\DAV\Server;
|
||||
use Sabre\DAV\ServerPlugin;
|
||||
use Sabre\DAV\Xml\Element\Response;
|
||||
use Sabre\HTTP\RequestInterface;
|
||||
use Sabre\HTTP\ResponseInterface;
|
||||
|
||||
@@ -54,8 +55,13 @@ class PaginatePlugin extends ServerPlugin {
|
||||
) {
|
||||
$pageSize = (int)$request->getHeader(self::PAGINATE_COUNT_HEADER) ?: $this->pageSize;
|
||||
$offset = (int)$request->getHeader(self::PAGINATE_OFFSET_HEADER);
|
||||
|
||||
$copyIterator = new LimitedCopyIterator($fileProperties, $pageSize, $offset);
|
||||
['token' => $token, 'count' => $count] = $this->cache->store($url, $copyIterator);
|
||||
// wrap the iterator with another that renders XML, this way we
|
||||
// cache XML, but we keep the first $pageSize elements as objects
|
||||
// to use for the response of the first page.
|
||||
$rendererGenerator = $this->getXmlRendererGenerator($copyIterator);
|
||||
['token' => $token, 'count' => $count] = $this->cache->store($url, $rendererGenerator);
|
||||
|
||||
$fileProperties = $copyIterator->getRequestedItems();
|
||||
$this->server->httpResponse->addHeader(self::PAGINATE_HEADER, 'true');
|
||||
@@ -65,6 +71,44 @@ class PaginatePlugin extends ServerPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a generator that yields rendered XML entries for the provided
|
||||
* $fileProperties, as they would appear in the MultiStatus response.
|
||||
*/
|
||||
private function getXmlRendererGenerator(iterable $fileProperties): \Generator {
|
||||
$writer = $this->server->xml->getWriter();
|
||||
$prefer = $this->server->getHTTPPrefer();
|
||||
$minimal = $prefer['return'] === 'minimal';
|
||||
$writer->contextUri = $this->server->getBaseUri();
|
||||
|
||||
$writer->openMemory();
|
||||
$writer->startDocument();
|
||||
$writer->startElement('{DAV:}multistatus');
|
||||
|
||||
// throw away the beginning of the document
|
||||
$writer->flush();
|
||||
|
||||
foreach ($fileProperties as $entry) {
|
||||
$href = $entry['href'];
|
||||
unset($entry['href']);
|
||||
if ($minimal) {
|
||||
unset($entry[404]);
|
||||
}
|
||||
$response = new Response(
|
||||
ltrim($href, '/'),
|
||||
$entry
|
||||
);
|
||||
$writer->write([
|
||||
'name' => '{DAV:}response',
|
||||
'value' => $response,
|
||||
]);
|
||||
|
||||
// flushing does not remove the > for the previous element
|
||||
// (multistatus)
|
||||
yield ltrim($writer->flush(), '>');
|
||||
}
|
||||
}
|
||||
|
||||
public function onMethod(RequestInterface $request, ResponseInterface $response) {
|
||||
$url = $this->server->httpRequest->getUrl();
|
||||
if (
|
||||
@@ -83,11 +127,20 @@ class PaginatePlugin extends ServerPlugin {
|
||||
$response->setHeader('Content-Type', 'application/xml; charset=utf-8');
|
||||
$response->setHeader('Vary', 'Brief,Prefer');
|
||||
|
||||
$prefer = $this->server->getHTTPPrefer();
|
||||
$minimal = $prefer['return'] === 'minimal';
|
||||
// as we cached strings of XML, rebuild the multistatus response
|
||||
// and output the RAW entries, as stored in the cache
|
||||
$writer = $this->server->xml->getWriter();
|
||||
$writer->contextUri = $this->server->getBaseUri();
|
||||
$writer->openMemory();
|
||||
$writer->startDocument();
|
||||
$writer->startElement('{DAV:}multistatus');
|
||||
foreach ($items as $item) {
|
||||
$writer->writeRaw($item);
|
||||
}
|
||||
$writer->endElement();
|
||||
$writer->endDocument();
|
||||
|
||||
$data = $this->server->generateMultiStatus($items, $minimal);
|
||||
$response->setBody($data);
|
||||
$response->setBody($writer->flush());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,337 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\DAV\Tests\unit\Paginate;
|
||||
|
||||
use OCA\DAV\Paginate\PaginateCache;
|
||||
use OCA\DAV\Paginate\PaginatePlugin;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Sabre\DAV\Server;
|
||||
use Sabre\HTTP\RequestInterface;
|
||||
use Sabre\HTTP\ResponseInterface;
|
||||
use Sabre\Xml\Service;
|
||||
use Test\TestCase;
|
||||
|
||||
class PaginatePluginTest extends TestCase {
|
||||
|
||||
private PaginateCache&MockObject $cache;
|
||||
private PaginatePlugin $plugin;
|
||||
private Server&MockObject $server;
|
||||
private RequestInterface&MockObject $request;
|
||||
private ResponseInterface&MockObject $response;
|
||||
|
||||
public function testOnMultiStatusCachesAndUpdatesResponse(): void {
|
||||
$this->initializePlugin();
|
||||
|
||||
$fileProperties = [
|
||||
[
|
||||
'href' => '/file1',
|
||||
200 => [
|
||||
'{DAV:}displayname' => 'File 1',
|
||||
'{DAV:}resourcetype' => null
|
||||
],
|
||||
],
|
||||
[
|
||||
'href' => '/file2',
|
||||
200 => [
|
||||
'{DAV:}displayname' => 'File 2',
|
||||
'{DAV:}resourcetype' => null
|
||||
],
|
||||
],
|
||||
[
|
||||
'href' => '/file3',
|
||||
200 => [
|
||||
'{DAV:}displayname' => 'File 3',
|
||||
'{DAV:}resourcetype' => null
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$this->request->expects(self::exactly(2))
|
||||
->method('hasHeader')
|
||||
->willReturnMap([
|
||||
[PaginatePlugin::PAGINATE_HEADER, true],
|
||||
[PaginatePlugin::PAGINATE_TOKEN_HEADER, false],
|
||||
]);
|
||||
|
||||
$this->request->expects(self::once())
|
||||
->method('getUrl')
|
||||
->willReturn('url');
|
||||
|
||||
$this->request->expects(self::exactly(2))
|
||||
->method('getHeader')
|
||||
->willReturnMap([
|
||||
[PaginatePlugin::PAGINATE_COUNT_HEADER, 2],
|
||||
[PaginatePlugin::PAGINATE_OFFSET_HEADER, 0],
|
||||
]);
|
||||
|
||||
$this->request->expects(self::once())
|
||||
->method('setHeader')
|
||||
->with(PaginatePlugin::PAGINATE_TOKEN_HEADER, 'token');
|
||||
|
||||
$this->cache->expects(self::once())
|
||||
->method('store')
|
||||
->with(
|
||||
'url',
|
||||
$this->callback(function ($generator) {
|
||||
self::assertInstanceOf(\Generator::class, $generator);
|
||||
$items = iterator_to_array($generator);
|
||||
self::assertCount(3, $items);
|
||||
self::assertStringContainsString($this->getResponseXmlForFile('/dav/file1', 'File 1'), $items[0]);
|
||||
self::assertStringContainsString($this->getResponseXmlForFile('/dav/file2', 'File 2'), $items[1]);
|
||||
self::assertStringContainsString($this->getResponseXmlForFile('/dav/file3', 'File 3'), $items[2]);
|
||||
return true;
|
||||
}),
|
||||
)
|
||||
->willReturn([
|
||||
'token' => 'token',
|
||||
'count' => 3,
|
||||
]);
|
||||
|
||||
$this->expectSequentialCalls(
|
||||
$this->response,
|
||||
'addHeader',
|
||||
[
|
||||
[PaginatePlugin::PAGINATE_HEADER, 'true'],
|
||||
[PaginatePlugin::PAGINATE_TOKEN_HEADER, 'token'],
|
||||
[PaginatePlugin::PAGINATE_TOTAL_HEADER, '3'],
|
||||
],
|
||||
);
|
||||
|
||||
$this->plugin->onMultiStatus($fileProperties);
|
||||
|
||||
self::assertInstanceOf(\Iterator::class, $fileProperties);
|
||||
// the iterator should be replaced with one that has the amount of
|
||||
// items for the page
|
||||
$items = iterator_to_array($fileProperties, false);
|
||||
$this->assertCount(2, $items);
|
||||
}
|
||||
|
||||
private function initializePlugin(): void {
|
||||
$this->expectSequentialCalls(
|
||||
$this->server,
|
||||
'on',
|
||||
[
|
||||
['beforeMultiStatus', [$this->plugin, 'onMultiStatus'], 100],
|
||||
['method:SEARCH', [$this->plugin, 'onMethod'], 1],
|
||||
['method:PROPFIND', [$this->plugin, 'onMethod'], 1],
|
||||
['method:REPORT', [$this->plugin, 'onMethod'], 1],
|
||||
],
|
||||
);
|
||||
|
||||
$this->plugin->initialize($this->server);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<int, array<int, mixed>> $expectedCalls
|
||||
*/
|
||||
private function expectSequentialCalls(MockObject $mock, string $method, array $expectedCalls): void {
|
||||
$mock->expects(self::exactly(\count($expectedCalls)))
|
||||
->method($method)
|
||||
->willReturnCallback(function (...$args) use (&$expectedCalls) {
|
||||
$expected = array_shift($expectedCalls);
|
||||
self::assertNotNull($expected);
|
||||
self::assertSame($expected, $args);
|
||||
});
|
||||
}
|
||||
|
||||
private function getResponseXmlForFile(string $fileName, string $displayName): string {
|
||||
return preg_replace('/>\s+</', '><', <<<XML
|
||||
<d:response>
|
||||
<d:href>$fileName</d:href>
|
||||
<d:propstat>
|
||||
<d:prop>
|
||||
<d:displayname>$displayName</d:displayname>
|
||||
<d:resourcetype/>
|
||||
</d:prop>
|
||||
<d:status>HTTP/1.1 200 OK</d:status>
|
||||
</d:propstat>
|
||||
</d:response>
|
||||
XML
|
||||
);
|
||||
}
|
||||
|
||||
public function testOnMultiStatusSkipsWhenHeadersAndCacheExist(): void {
|
||||
$this->initializePlugin();
|
||||
|
||||
$fileProperties = [
|
||||
[
|
||||
'href' => '/file1',
|
||||
],
|
||||
[
|
||||
'href' => '/file2',
|
||||
],
|
||||
];
|
||||
|
||||
$this->request->expects(self::exactly(2))
|
||||
->method('hasHeader')
|
||||
->willReturnMap([
|
||||
[PaginatePlugin::PAGINATE_HEADER, true],
|
||||
[PaginatePlugin::PAGINATE_TOKEN_HEADER, true],
|
||||
]);
|
||||
|
||||
$this->request->expects(self::once())
|
||||
->method('getUrl')
|
||||
->willReturn('');
|
||||
|
||||
$this->request->expects(self::once())
|
||||
->method('getHeader')
|
||||
->with(PaginatePlugin::PAGINATE_TOKEN_HEADER)
|
||||
->willReturn('token');
|
||||
|
||||
$this->cache->expects(self::once())
|
||||
->method('exists')
|
||||
->with('', 'token')
|
||||
->willReturn(true);
|
||||
|
||||
$this->cache->expects(self::never())
|
||||
->method('store');
|
||||
|
||||
$this->plugin->onMultiStatus($fileProperties);
|
||||
|
||||
self::assertInstanceOf(\Iterator::class, $fileProperties);
|
||||
self::assertSame(
|
||||
[
|
||||
['href' => '/file1'],
|
||||
['href' => '/file2'],
|
||||
],
|
||||
iterator_to_array($fileProperties)
|
||||
);
|
||||
}
|
||||
|
||||
public function testOnMethodReturnsCachedResponse(): void {
|
||||
$this->initializePlugin();
|
||||
|
||||
$response = $this->createMock(ResponseInterface::class);
|
||||
|
||||
$this->request->expects(self::exactly(2))
|
||||
->method('hasHeader')
|
||||
->willReturnMap([
|
||||
[PaginatePlugin::PAGINATE_TOKEN_HEADER, true],
|
||||
[PaginatePlugin::PAGINATE_OFFSET_HEADER, true],
|
||||
]);
|
||||
|
||||
$this->request->expects(self::once())
|
||||
->method('getUrl')
|
||||
->willReturn('url');
|
||||
|
||||
$this->request->expects(self::exactly(4))
|
||||
->method('getHeader')
|
||||
->willReturnMap([
|
||||
[PaginatePlugin::PAGINATE_TOKEN_HEADER, 'token'],
|
||||
[PaginatePlugin::PAGINATE_OFFSET_HEADER, '2'],
|
||||
[PaginatePlugin::PAGINATE_COUNT_HEADER, '4'],
|
||||
]);
|
||||
|
||||
$this->cache->expects(self::once())
|
||||
->method('exists')
|
||||
->with('url', 'token')
|
||||
->willReturn(true);
|
||||
|
||||
$this->cache->expects(self::once())
|
||||
->method('get')
|
||||
->with('url', 'token', 2, 4)
|
||||
->willReturn((function (): \Generator {
|
||||
yield $this->getResponseXmlForFile('/file1', 'File 1');
|
||||
yield $this->getResponseXmlForFile('/file2', 'File 2');
|
||||
})());
|
||||
|
||||
$response->expects(self::once())
|
||||
->method('setStatus')
|
||||
->with(207);
|
||||
|
||||
$response->expects(self::once())
|
||||
->method('addHeader')
|
||||
->with(PaginatePlugin::PAGINATE_HEADER, 'true');
|
||||
|
||||
$this->expectSequentialCalls(
|
||||
$response,
|
||||
'setHeader',
|
||||
[
|
||||
['Content-Type', 'application/xml; charset=utf-8'],
|
||||
['Vary', 'Brief,Prefer'],
|
||||
],
|
||||
);
|
||||
|
||||
$response->expects(self::once())
|
||||
->method('setBody')
|
||||
->with($this->callback(function (string $body) {
|
||||
// header of the XML
|
||||
self::assertStringContainsString(<<<XML
|
||||
<?xml version="1.0"?>
|
||||
<d:multistatus xmlns:d="DAV:">
|
||||
XML,
|
||||
$body);
|
||||
self::assertStringContainsString($this->getResponseXmlForFile('/file1', 'File 1'), $body);
|
||||
self::assertStringContainsString($this->getResponseXmlForFile('/file2', 'File 2'), $body);
|
||||
// footer of the XML
|
||||
self::assertStringContainsString('</d:multistatus>', $body);
|
||||
|
||||
return true;
|
||||
}));
|
||||
|
||||
self::assertFalse($this->plugin->onMethod($this->request, $response));
|
||||
}
|
||||
|
||||
public function testOnMultiStatusNoPaginateHeaderShouldSucceed(): void {
|
||||
$this->initializePlugin();
|
||||
|
||||
$this->request->expects(self::once())
|
||||
->method('getUrl')
|
||||
->willReturn('');
|
||||
|
||||
$this->cache->expects(self::never())
|
||||
->method('exists');
|
||||
$this->cache->expects(self::never())
|
||||
->method('store');
|
||||
|
||||
$this->plugin->onMultiStatus($this->request);
|
||||
}
|
||||
|
||||
public function testOnMethodNoTokenHeaderShouldSucceed(): void {
|
||||
$this->initializePlugin();
|
||||
$this->request->expects(self::once())
|
||||
->method('hasHeader')
|
||||
->with(PaginatePlugin::PAGINATE_TOKEN_HEADER)
|
||||
->willReturn(false);
|
||||
|
||||
$this->cache->expects(self::never())
|
||||
->method('exists');
|
||||
$this->cache->expects(self::never())
|
||||
->method('get');
|
||||
|
||||
$this->plugin->onMethod($this->request, $this->response);
|
||||
}
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->cache = $this->createMock(PaginateCache::class);
|
||||
|
||||
$this->server = $this->getMockBuilder(Server::class)
|
||||
->disableOriginalConstructor()
|
||||
->onlyMethods(['on', 'getHTTPPrefer', 'getBaseUri'])
|
||||
->getMock();
|
||||
|
||||
$this->request = $this->createMock(RequestInterface::class);
|
||||
$this->response = $this->createMock(ResponseInterface::class);
|
||||
|
||||
$this->server->httpRequest = $this->request;
|
||||
$this->server->httpResponse = $this->response;
|
||||
$this->server->xml = new Service();
|
||||
$this->server->xml->namespaceMap = [ 'DAV:' => 'd' ];
|
||||
|
||||
$this->server->method('getHTTPPrefer')
|
||||
->willReturn(['return' => null]);
|
||||
$this->server->method('getBaseUri')
|
||||
->willReturn('/dav/');
|
||||
|
||||
$this->plugin = new PaginatePlugin($this->cache, 2);
|
||||
}
|
||||
}
|
||||
@@ -34,6 +34,9 @@ OC.L10N.register(
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Jelentkezzen be a webes felületre, ugorjon a személyes beállításai „Biztonság” szakaszához, és frissítse a titkosítási jelszavát úgy, hogy megadja ezt a jelszót a „Régi bejelentkezési jelszó” mezőben, majd megadja a jelenlegi bejelentkezési jelszavát.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájl nem fejthető vissza, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.",
|
||||
"Default Encryption Module" : "Alapértelmezett titkosítási modul",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Alapértelmezett titkosítási modul a kiszolgálóoldali titkosításhoz (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." : "Ez az alkalmazás biztosítja az (alapértelmezett) titkosítási megvalósítást a Nextcloud kiszolgálóoldali titkosítási (SSE) funkciójához.\n\n\t\t\t**Titkosítás részletei**\n\t\t\t* **Titkosítási mód:** AES-256-CTR (alapértelmezett)\n\t\t\t* **Hitelesítés:** HMAC-SHA256\n\n\t\t\t**Fontos figyelmeztetések**\n\t\t\t* **VESZÉLY:** Ne tiltsa le az alkalmazást addig, amíg fel nem oldotta az összes fájl titkosítását (`occ encryption:decrypt-all`).\n\t\t\t* **FIGYELMEZTETÉS**: A nem titkosított fájltárolásra visszaálláshoz parancssoros hozzáférés szükséges. A művelet a webes felületen végleges.\"\n\n\t\t\t**Megjegyzés a meglévő fájlokhoz**\n\t\t\t* Alapértelmezés szerint az SSE engedélyezése nem titkosítja a meglévő fájlokat; csak az új fájlok lesznek titkosítva.\n\t\t\t* Az összes meglévő fájl titkosításához használja az `occ encryption:encrypt-all` parancsot.\n\n\t\t\t**Mielőtt nekikezd**\n\t\t\t* **Olvassa el a dokumentációt:** Az SSE engedélyezése, a meglévő fájlok titkosítása vagy az SSE letiltása előtt \n\t\t\t\telengedhetetlen a dokumentáció elolvasása, hogy tisztában legyen a következményekkel, és az adatvesztés\n\t\t\t\telkerülését eredményező folyamatokkal.",
|
||||
"Default encryption module" : "Alapértelmezett titkosítási modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "A titkosító alkalmazás engedélyezett, de a kulcsai még nincsenek előkészítve. Lépjen ki, majd lépjen be újra.",
|
||||
"Encrypt the home storage" : "Helyi tároló titkosítása",
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Jelentkezzen be a webes felületre, ugorjon a személyes beállításai „Biztonság” szakaszához, és frissítse a titkosítási jelszavát úgy, hogy megadja ezt a jelszót a „Régi bejelentkezési jelszó” mezőben, majd megadja a jelenlegi bejelentkezési jelszavát.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájl nem fejthető vissza, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.",
|
||||
"Default Encryption Module" : "Alapértelmezett titkosítási modul",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Alapértelmezett titkosítási modul a kiszolgálóoldali titkosításhoz (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." : "Ez az alkalmazás biztosítja az (alapértelmezett) titkosítási megvalósítást a Nextcloud kiszolgálóoldali titkosítási (SSE) funkciójához.\n\n\t\t\t**Titkosítás részletei**\n\t\t\t* **Titkosítási mód:** AES-256-CTR (alapértelmezett)\n\t\t\t* **Hitelesítés:** HMAC-SHA256\n\n\t\t\t**Fontos figyelmeztetések**\n\t\t\t* **VESZÉLY:** Ne tiltsa le az alkalmazást addig, amíg fel nem oldotta az összes fájl titkosítását (`occ encryption:decrypt-all`).\n\t\t\t* **FIGYELMEZTETÉS**: A nem titkosított fájltárolásra visszaálláshoz parancssoros hozzáférés szükséges. A művelet a webes felületen végleges.\"\n\n\t\t\t**Megjegyzés a meglévő fájlokhoz**\n\t\t\t* Alapértelmezés szerint az SSE engedélyezése nem titkosítja a meglévő fájlokat; csak az új fájlok lesznek titkosítva.\n\t\t\t* Az összes meglévő fájl titkosításához használja az `occ encryption:encrypt-all` parancsot.\n\n\t\t\t**Mielőtt nekikezd**\n\t\t\t* **Olvassa el a dokumentációt:** Az SSE engedélyezése, a meglévő fájlok titkosítása vagy az SSE letiltása előtt \n\t\t\t\telengedhetetlen a dokumentáció elolvasása, hogy tisztában legyen a következményekkel, és az adatvesztés\n\t\t\t\telkerülését eredményező folyamatokkal.",
|
||||
"Default encryption module" : "Alapértelmezett titkosítási modul",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "A titkosító alkalmazás engedélyezett, de a kulcsai még nincsenek előkészítve. Lépjen ki, majd lépjen be újra.",
|
||||
"Encrypt the home storage" : "Helyi tároló titkosítása",
|
||||
|
||||
@@ -34,6 +34,9 @@ OC.L10N.register(
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Webインターフェースにログインし、個人設定の「セキュリティ」セクションに移動し、「旧ログインパスワード」フィールドにこのパスワードと現在のログインパスワードを入力して、暗号化パスワードを更新してください。",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを読み取ることができません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
|
||||
"Default Encryption Module" : "デフォルトの暗号化モジュール",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Nextcloud サーバー側暗号化 (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." : "このアプリは、Nextcloud のサーバー側暗号化 (SSE) 機能の(デフォルトの)暗号化実装を提供します。\n\n**暗号化の詳細**\n* **暗号モード:** AES-256-CTR (デフォルト)\n* **認証:** HMAC-SHA256\n\n**重要な警告**\n* **危険:** すべてのファイルが復号化されるまで、このアプリケーションを無効にしないでください (`occ encryption:decrypt-all`)。\n* **警告**: アクティベーション後に暗号化されていないファイルストレージに戻すには、コマンドラインアクセスが必要です。この操作はWeb UI経由で永続的に実行されます。\n\n**既存ファイルに関する注意事項**\n* デフォルトでは、SSEを有効にしても既存のファイルは暗号化されず、新規ファイルのみが暗号化されます。\n* 既存のすべてのファイルを暗号化するには、コマンド「occ encryption:encrypt-all」を使用します。\n\n**始める前に**\n* **ドキュメントを読む:** SSEを有効化、既存ファイルを暗号化、または無効化する前に、\nSSEの影響とデータ損失を回避するための適切な手順を理解するために、ドキュメントを読むことが重要です。",
|
||||
"Default encryption module" : "デフォルトの暗号化モジュール",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
|
||||
"Encrypt the home storage" : "メインストレージ暗号化",
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Webインターフェースにログインし、個人設定の「セキュリティ」セクションに移動し、「旧ログインパスワード」フィールドにこのパスワードと現在のログインパスワードを入力して、暗号化パスワードを更新してください。",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを復号化できません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "このファイルを読み取ることができません、共有ファイルの可能性があります。ファイルの所有者にお願いして、ファイルを共有しなおしてもらってください。",
|
||||
"Default Encryption Module" : "デフォルトの暗号化モジュール",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Nextcloud サーバー側暗号化 (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." : "このアプリは、Nextcloud のサーバー側暗号化 (SSE) 機能の(デフォルトの)暗号化実装を提供します。\n\n**暗号化の詳細**\n* **暗号モード:** AES-256-CTR (デフォルト)\n* **認証:** HMAC-SHA256\n\n**重要な警告**\n* **危険:** すべてのファイルが復号化されるまで、このアプリケーションを無効にしないでください (`occ encryption:decrypt-all`)。\n* **警告**: アクティベーション後に暗号化されていないファイルストレージに戻すには、コマンドラインアクセスが必要です。この操作はWeb UI経由で永続的に実行されます。\n\n**既存ファイルに関する注意事項**\n* デフォルトでは、SSEを有効にしても既存のファイルは暗号化されず、新規ファイルのみが暗号化されます。\n* 既存のすべてのファイルを暗号化するには、コマンド「occ encryption:encrypt-all」を使用します。\n\n**始める前に**\n* **ドキュメントを読む:** SSEを有効化、既存ファイルを暗号化、または無効化する前に、\nSSEの影響とデータ損失を回避するための適切な手順を理解するために、ドキュメントを読むことが重要です。",
|
||||
"Default encryption module" : "デフォルトの暗号化モジュール",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
|
||||
"Encrypt the home storage" : "メインストレージ暗号化",
|
||||
|
||||
@@ -352,7 +352,7 @@ OC.L10N.register(
|
||||
"One of the dropped files could not be processed" : "Non foi posíbel procesar un dos ficheiros arrastrados",
|
||||
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "O seu navegador non é compatíbel coa API do sistema de ficheiros. Os directorios non van ser enviados",
|
||||
"No files to upload" : "Non hai ficheiros que enviar",
|
||||
"Unable to create the directory {directory}" : "Non foi posíbel crear o directorio {directory}",
|
||||
"Unable to create the directory {directory}" : "Non é posíbel crear o directorio {directory}",
|
||||
"Some files could not be uploaded" : "Non foi posíbel enviar algúns ficheiros",
|
||||
"Files uploaded successfully" : "Ficheiros enviados satisfactoriamente",
|
||||
"No files to process" : "Non hai ficheiros para procesar",
|
||||
|
||||
@@ -350,7 +350,7 @@
|
||||
"One of the dropped files could not be processed" : "Non foi posíbel procesar un dos ficheiros arrastrados",
|
||||
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "O seu navegador non é compatíbel coa API do sistema de ficheiros. Os directorios non van ser enviados",
|
||||
"No files to upload" : "Non hai ficheiros que enviar",
|
||||
"Unable to create the directory {directory}" : "Non foi posíbel crear o directorio {directory}",
|
||||
"Unable to create the directory {directory}" : "Non é posíbel crear o directorio {directory}",
|
||||
"Some files could not be uploaded" : "Non foi posíbel enviar algúns ficheiros",
|
||||
"Files uploaded successfully" : "Ficheiros enviados satisfactoriamente",
|
||||
"No files to process" : "Non hai ficheiros para procesar",
|
||||
|
||||
+40
-8
@@ -51,6 +51,10 @@ OC.L10N.register(
|
||||
"You do not have permission to create a file at the specified location" : "Nincs jogosultsága fájl létrehozására a megadott helyen",
|
||||
"The file could not be converted." : "A fájl nem alakítható át.",
|
||||
"Could not get relative path to converted file" : "Nem sikerült lekérni az átalakított fájl relatív elérési útját",
|
||||
"Limit must be a positive integer." : "A korlátnak pozitív egésznek kell lennie.",
|
||||
"The replacement character may only be a single character." : "A cserekarakter csak egyetlen karakter lehet.",
|
||||
"Filename sanitization already started." : "A fájlnévtisztítás más elindult.",
|
||||
"No filename sanitization in progress." : "Nincs folyamatban fájlnévtisztítás.",
|
||||
"Favorite files" : "Kedvenc fájlok",
|
||||
"No favorites" : "Nincsenek kedvencek",
|
||||
"More favorites" : "További kedvencek",
|
||||
@@ -120,6 +124,8 @@ OC.L10N.register(
|
||||
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg.",
|
||||
"File not found" : "A fájl nem található",
|
||||
"_{count} selected_::_{count} selected_" : ["{count} kijelölve","{count} kijelölve"],
|
||||
"Search everywhere …" : "Keresés mindenhol…",
|
||||
"Search here …" : "Keresés itt…",
|
||||
"Search scope options" : "Keresési hatókör beállításai",
|
||||
"Search here" : "Keresés itt",
|
||||
"{usedQuotaByte} used" : "{usedQuotaByte} felhasználva",
|
||||
@@ -134,9 +140,26 @@ OC.L10N.register(
|
||||
"This name is already in use." : "Ez a név már foglalt.",
|
||||
"Create" : "Létrehozás",
|
||||
"Files starting with a dot are hidden by default" : "A ponttal kezdődő fájlok alapértelmezetten el vannak rejtve",
|
||||
"Failed to start filename sanitization." : "Nem sikerült a fájlnévtisztítás elindítása.",
|
||||
"Failed to refresh filename sanitization status." : "Nem sikerült a fájlnévtisztítás állapotának frissítése.",
|
||||
"Filename sanitization in progress." : "Fájlnévtisztítás folyamatban.",
|
||||
"Currently {processedUsers} of {totalUsers} accounts are already processed." : "Jelenleg {processedUsers} / {totalUsers} fiók van már feldolgozva.",
|
||||
"Preparing …" : "Előkészítés…",
|
||||
"Refresh" : "Frissítés",
|
||||
"All files have been santized for Windows filename support." : "Az összes fájlnév meg lett tisztítva a windowsos fájlnevek támogatásához.",
|
||||
"Some files could not be sanitized, please check your logs." : "Egyes fájlok tisztítása nem sikerült, ellenőrizze a naplókat.",
|
||||
"Sanitization errors" : "Tisztítási hibák",
|
||||
"Not sanitized filenames" : "Nem megtisztított fájlnevek",
|
||||
"Windows filename support has been enabled." : "A windowsos fájlnevek támogatása engedélyezve lett.",
|
||||
"While this blocks users from creating new files with unsupported filenames, existing files are not yet renamed and thus still may break sync on Windows." : "Bár ez megtiltja, hogy a felhasználók nem támogatott nevű fájlokat hozzanak létre, a meglévő fájlok nem lesznek átnevezve, így Windowson továbbra is hibás lehet a szinkronizálás.",
|
||||
"You can trigger a rename of files with invalid filenames, this will be done in the background and may take some time." : "Átneveztetheti az érvénytelen fájlnevű fájlokat, ez egy háttérfeladatban lesz végrehajtva, és eltarthat egy ideig.",
|
||||
"Please note that this may cause high workload on the sync clients." : "Vegye figyelembe, hogy ez magas terhelést okozhat a szinkronizálási klienseken.",
|
||||
"Limit" : "Korlát",
|
||||
"This allows to configure how many users should be processed in one background job run." : "Ez lehetővé teszi, hogy beállítsa, hány felhasználó legyen feldolgozva egyetlen háttérfeladatban.",
|
||||
"Sanitize filenames" : "Fájlnevek tisztítása",
|
||||
"(starting)" : "(indítás)",
|
||||
"Fill template fields" : "Töltse ki a sablon mezőit",
|
||||
"Submitting fields …" : "Mezők beküldése…",
|
||||
"Submit" : "Beküldés",
|
||||
"Choose a file or folder to transfer" : "Válassz egy átruházandó fájlt vagy mappát",
|
||||
"Transfer" : "Átruházás",
|
||||
@@ -239,6 +262,7 @@ OC.L10N.register(
|
||||
"Search for files" : "Fájlok keresése",
|
||||
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Fájlnevek korlátozásának engedélyezése, amely biztosítja, hogy a fájlok szinkronizálhatók legyenek az összes klienssel. Alapállapotban az összes fájlnév engedélyezett, amely a POSIX (mint a Linux vagy a macOS) rendszereken érvényes.",
|
||||
"After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "A Windows-kompatibilis fájlnevek engedélyezése után a meglévő fájlok már nem módosíthatóak, de a tulajdonosaik átnevezhetik őket érvényes új fájlnevekre.",
|
||||
"Failed to toggle Windows filename support" : "Nem sikerült a windowsos fájlnevek támogatásának átkapcsolása.",
|
||||
"Files compatibility" : "Fájlok kompatibilitása",
|
||||
"Enforce Windows compatibility" : "Windows-kompatibilitás kényszerítése",
|
||||
"This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Ez megakadályozza a Windows rendszereken érvénytelen fájlneveket, mint például a foglalt neveket vagy a speciális karaktereket. De ez nem fogja érvényesíteni a kis- és nagybetűk egyezőnek tekintését.",
|
||||
@@ -248,16 +272,19 @@ OC.L10N.register(
|
||||
"Create a new file with the selected template" : "Új fájl létrehozása a kiválasztott sablonnal",
|
||||
"Creating file" : "Fájl létrehozása",
|
||||
"Save as {displayName}" : "Mentés mint {displayName}",
|
||||
"Failed to convert files: {message}" : "A fájlok átalakítása sikertelen: {message}",
|
||||
"Save as …" : "Mentés másként…",
|
||||
"Converting files …" : "Fájlok átalakítása…",
|
||||
"Failed to convert files: {message}" : "Nem sikerült a fájlok átalakítása: {message}",
|
||||
"All files failed to be converted" : "Az összes fájl átalakítása sikertelen",
|
||||
"One file could not be converted: {message}" : "Egy fájl nem alakítható át: {message}",
|
||||
"_One file could not be converted_::_%n files could not be converted_" : ["Egy fájl nem alakítható át","%n fájl nem alakítható át"],
|
||||
"_One file successfully converted_::_%n files successfully converted_" : ["Egy fájl sikeresen átalakítva","%n fájl sikeresen átalakítva"],
|
||||
"Files successfully converted" : "Fájlok sikeresen átalakítva",
|
||||
"Failed to convert files" : "A fájlok átalakítása sikertelen",
|
||||
"Failed to convert files" : "Nem sikerült a fájlok átalakítása",
|
||||
"Converting file …" : "Fájl átalakítása…",
|
||||
"File successfully converted" : "Fájl sikeresen átalakítva",
|
||||
"Failed to convert file: {message}" : "A fájl átalakítása sikertelen: {message}",
|
||||
"Failed to convert file" : "A fájl átalakítása sikertelen",
|
||||
"Failed to convert file: {message}" : "Nem sikerült a fájl átalakítása: {message}",
|
||||
"Failed to convert file" : "Nem sikerült a fájl átalakítása",
|
||||
"Leave this share" : "Megosztás elhagyása",
|
||||
"Leave these shares" : "Megosztások elhagyása",
|
||||
"Disconnect storage" : "Tároló leválasztása",
|
||||
@@ -273,6 +300,10 @@ OC.L10N.register(
|
||||
"Confirm deletion" : "Törlés megerősítése",
|
||||
"Cancel" : "Mégse",
|
||||
"Download" : "Letöltés",
|
||||
"The requested file is not available." : "A kért fájl nem érhető el.",
|
||||
"The requested files are not available." : "A kért fájlok nem érhetőek el.",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "A(z) „{source}” áthelyezése ide: „{destination}”…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "A(z) „{source}” másolása ide: „{destination}”…",
|
||||
"Destination is not a folder" : "A cél nem mappa",
|
||||
"This file/folder is already in that directory" : "Ez a fájl/mappa már létezik a mappában",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "A fájl/mappa önmagába, vagy saját almappájába áthelyezése nem lehetséges",
|
||||
@@ -285,7 +316,7 @@ OC.L10N.register(
|
||||
"Copy to {target}" : "Másolás ide: {target}",
|
||||
"Move to {target}" : "Áthelyezés ide: {target}",
|
||||
"Move" : "Áthelyezés",
|
||||
"Move or copy operation failed" : "Az áthelyezés vagy a másolás művelet sikertelen",
|
||||
"Move or copy operation failed" : "Nem sikerült az áthelyezés vagy a másolás",
|
||||
"Move or copy" : "Áthelyezés vagy másolás",
|
||||
"Open folder {displayName}" : "A(z) {displayName} mappa megnyitása",
|
||||
"Open in Files" : "Megnyitás a Fájlokban",
|
||||
@@ -368,9 +399,9 @@ OC.L10N.register(
|
||||
"Upload (max. %s)" : "Feltöltés (legfeljebb %s)",
|
||||
"After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "A Windows-kompatibilis fájlnevek engedélyezése után a meglévő fájlok már nem módosíthatóak, de a tulajdonosaik átnevezhetik őket érvényes új nevekre.",
|
||||
"It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Továbbá lehetséges a fájlok automatikus átköltöztetése is a beállítás engedélyezése után, kövesse az occ parancs dokumentációját.",
|
||||
"\"{displayName}\" failed on some elements" : "A(z) „{displayName}” egyes elemeken nem sikerült",
|
||||
"\"{displayName}\" failed on some elements" : "A(z) „{displayName}” művelet egyes elemeken nem sikerült",
|
||||
"\"{displayName}\" batch action executed successfully" : "A(z) „{displayName}” tömeges művelet sikeresen végrehajtva",
|
||||
"\"{displayName}\" action failed" : "A(z) „{displayName}” művelet sikertelen",
|
||||
"\"{displayName}\" action failed" : "A(z) „{displayName}” művelet nem sikerült",
|
||||
"Submitting fields …" : "Mezők beküldése…",
|
||||
"\"{displayName}\" action executed successfully" : "A(z) „{displayName}” művelet sikeresen végrehajtva",
|
||||
"Filter file names …" : "Fájlnevek szűrése…",
|
||||
@@ -414,6 +445,7 @@ OC.L10N.register(
|
||||
"This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem érhető el, nézze meg a naplófájlokat vagy lépjen kapcsolatba az adminisztrátorral",
|
||||
"All folders" : "Összes mappa",
|
||||
"Search everywhere …" : "Keresés mindenhol…",
|
||||
"Search here …" : "Keresés itt…"
|
||||
"Search here …" : "Keresés itt…",
|
||||
"Preparing …" : "Előkészítés…"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
+40
-8
@@ -49,6 +49,10 @@
|
||||
"You do not have permission to create a file at the specified location" : "Nincs jogosultsága fájl létrehozására a megadott helyen",
|
||||
"The file could not be converted." : "A fájl nem alakítható át.",
|
||||
"Could not get relative path to converted file" : "Nem sikerült lekérni az átalakított fájl relatív elérési útját",
|
||||
"Limit must be a positive integer." : "A korlátnak pozitív egésznek kell lennie.",
|
||||
"The replacement character may only be a single character." : "A cserekarakter csak egyetlen karakter lehet.",
|
||||
"Filename sanitization already started." : "A fájlnévtisztítás más elindult.",
|
||||
"No filename sanitization in progress." : "Nincs folyamatban fájlnévtisztítás.",
|
||||
"Favorite files" : "Kedvenc fájlok",
|
||||
"No favorites" : "Nincsenek kedvencek",
|
||||
"More favorites" : "További kedvencek",
|
||||
@@ -118,6 +122,8 @@
|
||||
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg.",
|
||||
"File not found" : "A fájl nem található",
|
||||
"_{count} selected_::_{count} selected_" : ["{count} kijelölve","{count} kijelölve"],
|
||||
"Search everywhere …" : "Keresés mindenhol…",
|
||||
"Search here …" : "Keresés itt…",
|
||||
"Search scope options" : "Keresési hatókör beállításai",
|
||||
"Search here" : "Keresés itt",
|
||||
"{usedQuotaByte} used" : "{usedQuotaByte} felhasználva",
|
||||
@@ -132,9 +138,26 @@
|
||||
"This name is already in use." : "Ez a név már foglalt.",
|
||||
"Create" : "Létrehozás",
|
||||
"Files starting with a dot are hidden by default" : "A ponttal kezdődő fájlok alapértelmezetten el vannak rejtve",
|
||||
"Failed to start filename sanitization." : "Nem sikerült a fájlnévtisztítás elindítása.",
|
||||
"Failed to refresh filename sanitization status." : "Nem sikerült a fájlnévtisztítás állapotának frissítése.",
|
||||
"Filename sanitization in progress." : "Fájlnévtisztítás folyamatban.",
|
||||
"Currently {processedUsers} of {totalUsers} accounts are already processed." : "Jelenleg {processedUsers} / {totalUsers} fiók van már feldolgozva.",
|
||||
"Preparing …" : "Előkészítés…",
|
||||
"Refresh" : "Frissítés",
|
||||
"All files have been santized for Windows filename support." : "Az összes fájlnév meg lett tisztítva a windowsos fájlnevek támogatásához.",
|
||||
"Some files could not be sanitized, please check your logs." : "Egyes fájlok tisztítása nem sikerült, ellenőrizze a naplókat.",
|
||||
"Sanitization errors" : "Tisztítási hibák",
|
||||
"Not sanitized filenames" : "Nem megtisztított fájlnevek",
|
||||
"Windows filename support has been enabled." : "A windowsos fájlnevek támogatása engedélyezve lett.",
|
||||
"While this blocks users from creating new files with unsupported filenames, existing files are not yet renamed and thus still may break sync on Windows." : "Bár ez megtiltja, hogy a felhasználók nem támogatott nevű fájlokat hozzanak létre, a meglévő fájlok nem lesznek átnevezve, így Windowson továbbra is hibás lehet a szinkronizálás.",
|
||||
"You can trigger a rename of files with invalid filenames, this will be done in the background and may take some time." : "Átneveztetheti az érvénytelen fájlnevű fájlokat, ez egy háttérfeladatban lesz végrehajtva, és eltarthat egy ideig.",
|
||||
"Please note that this may cause high workload on the sync clients." : "Vegye figyelembe, hogy ez magas terhelést okozhat a szinkronizálási klienseken.",
|
||||
"Limit" : "Korlát",
|
||||
"This allows to configure how many users should be processed in one background job run." : "Ez lehetővé teszi, hogy beállítsa, hány felhasználó legyen feldolgozva egyetlen háttérfeladatban.",
|
||||
"Sanitize filenames" : "Fájlnevek tisztítása",
|
||||
"(starting)" : "(indítás)",
|
||||
"Fill template fields" : "Töltse ki a sablon mezőit",
|
||||
"Submitting fields …" : "Mezők beküldése…",
|
||||
"Submit" : "Beküldés",
|
||||
"Choose a file or folder to transfer" : "Válassz egy átruházandó fájlt vagy mappát",
|
||||
"Transfer" : "Átruházás",
|
||||
@@ -237,6 +260,7 @@
|
||||
"Search for files" : "Fájlok keresése",
|
||||
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Fájlnevek korlátozásának engedélyezése, amely biztosítja, hogy a fájlok szinkronizálhatók legyenek az összes klienssel. Alapállapotban az összes fájlnév engedélyezett, amely a POSIX (mint a Linux vagy a macOS) rendszereken érvényes.",
|
||||
"After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "A Windows-kompatibilis fájlnevek engedélyezése után a meglévő fájlok már nem módosíthatóak, de a tulajdonosaik átnevezhetik őket érvényes új fájlnevekre.",
|
||||
"Failed to toggle Windows filename support" : "Nem sikerült a windowsos fájlnevek támogatásának átkapcsolása.",
|
||||
"Files compatibility" : "Fájlok kompatibilitása",
|
||||
"Enforce Windows compatibility" : "Windows-kompatibilitás kényszerítése",
|
||||
"This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Ez megakadályozza a Windows rendszereken érvénytelen fájlneveket, mint például a foglalt neveket vagy a speciális karaktereket. De ez nem fogja érvényesíteni a kis- és nagybetűk egyezőnek tekintését.",
|
||||
@@ -246,16 +270,19 @@
|
||||
"Create a new file with the selected template" : "Új fájl létrehozása a kiválasztott sablonnal",
|
||||
"Creating file" : "Fájl létrehozása",
|
||||
"Save as {displayName}" : "Mentés mint {displayName}",
|
||||
"Failed to convert files: {message}" : "A fájlok átalakítása sikertelen: {message}",
|
||||
"Save as …" : "Mentés másként…",
|
||||
"Converting files …" : "Fájlok átalakítása…",
|
||||
"Failed to convert files: {message}" : "Nem sikerült a fájlok átalakítása: {message}",
|
||||
"All files failed to be converted" : "Az összes fájl átalakítása sikertelen",
|
||||
"One file could not be converted: {message}" : "Egy fájl nem alakítható át: {message}",
|
||||
"_One file could not be converted_::_%n files could not be converted_" : ["Egy fájl nem alakítható át","%n fájl nem alakítható át"],
|
||||
"_One file successfully converted_::_%n files successfully converted_" : ["Egy fájl sikeresen átalakítva","%n fájl sikeresen átalakítva"],
|
||||
"Files successfully converted" : "Fájlok sikeresen átalakítva",
|
||||
"Failed to convert files" : "A fájlok átalakítása sikertelen",
|
||||
"Failed to convert files" : "Nem sikerült a fájlok átalakítása",
|
||||
"Converting file …" : "Fájl átalakítása…",
|
||||
"File successfully converted" : "Fájl sikeresen átalakítva",
|
||||
"Failed to convert file: {message}" : "A fájl átalakítása sikertelen: {message}",
|
||||
"Failed to convert file" : "A fájl átalakítása sikertelen",
|
||||
"Failed to convert file: {message}" : "Nem sikerült a fájl átalakítása: {message}",
|
||||
"Failed to convert file" : "Nem sikerült a fájl átalakítása",
|
||||
"Leave this share" : "Megosztás elhagyása",
|
||||
"Leave these shares" : "Megosztások elhagyása",
|
||||
"Disconnect storage" : "Tároló leválasztása",
|
||||
@@ -271,6 +298,10 @@
|
||||
"Confirm deletion" : "Törlés megerősítése",
|
||||
"Cancel" : "Mégse",
|
||||
"Download" : "Letöltés",
|
||||
"The requested file is not available." : "A kért fájl nem érhető el.",
|
||||
"The requested files are not available." : "A kért fájlok nem érhetőek el.",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "A(z) „{source}” áthelyezése ide: „{destination}”…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "A(z) „{source}” másolása ide: „{destination}”…",
|
||||
"Destination is not a folder" : "A cél nem mappa",
|
||||
"This file/folder is already in that directory" : "Ez a fájl/mappa már létezik a mappában",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "A fájl/mappa önmagába, vagy saját almappájába áthelyezése nem lehetséges",
|
||||
@@ -283,7 +314,7 @@
|
||||
"Copy to {target}" : "Másolás ide: {target}",
|
||||
"Move to {target}" : "Áthelyezés ide: {target}",
|
||||
"Move" : "Áthelyezés",
|
||||
"Move or copy operation failed" : "Az áthelyezés vagy a másolás művelet sikertelen",
|
||||
"Move or copy operation failed" : "Nem sikerült az áthelyezés vagy a másolás",
|
||||
"Move or copy" : "Áthelyezés vagy másolás",
|
||||
"Open folder {displayName}" : "A(z) {displayName} mappa megnyitása",
|
||||
"Open in Files" : "Megnyitás a Fájlokban",
|
||||
@@ -366,9 +397,9 @@
|
||||
"Upload (max. %s)" : "Feltöltés (legfeljebb %s)",
|
||||
"After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "A Windows-kompatibilis fájlnevek engedélyezése után a meglévő fájlok már nem módosíthatóak, de a tulajdonosaik átnevezhetik őket érvényes új nevekre.",
|
||||
"It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Továbbá lehetséges a fájlok automatikus átköltöztetése is a beállítás engedélyezése után, kövesse az occ parancs dokumentációját.",
|
||||
"\"{displayName}\" failed on some elements" : "A(z) „{displayName}” egyes elemeken nem sikerült",
|
||||
"\"{displayName}\" failed on some elements" : "A(z) „{displayName}” művelet egyes elemeken nem sikerült",
|
||||
"\"{displayName}\" batch action executed successfully" : "A(z) „{displayName}” tömeges művelet sikeresen végrehajtva",
|
||||
"\"{displayName}\" action failed" : "A(z) „{displayName}” művelet sikertelen",
|
||||
"\"{displayName}\" action failed" : "A(z) „{displayName}” művelet nem sikerült",
|
||||
"Submitting fields …" : "Mezők beküldése…",
|
||||
"\"{displayName}\" action executed successfully" : "A(z) „{displayName}” művelet sikeresen végrehajtva",
|
||||
"Filter file names …" : "Fájlnevek szűrése…",
|
||||
@@ -412,6 +443,7 @@
|
||||
"This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem érhető el, nézze meg a naplófájlokat vagy lépjen kapcsolatba az adminisztrátorral",
|
||||
"All folders" : "Összes mappa",
|
||||
"Search everywhere …" : "Keresés mindenhol…",
|
||||
"Search here …" : "Keresés itt…"
|
||||
"Search here …" : "Keresés itt…",
|
||||
"Preparing …" : "Előkészítés…"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -129,6 +129,7 @@ OC.L10N.register(
|
||||
"Via “{folder}”" : "Чрез “{folder}”",
|
||||
"Unshare" : "Прекрати споделянето",
|
||||
"Cannot copy, please copy the link manually" : "Не може да се копира, моля, копирайте връзката ръчно",
|
||||
"Copy internal link" : "Копиране на вътрешна връзка",
|
||||
"Internal link" : "Вътрешна връзка",
|
||||
"{shareWith} by {initiator}" : "{shareWith} чрез {initiator}",
|
||||
"Shared via link by {initiator}" : "Споделено чрез връзка от {initiator}",
|
||||
|
||||
@@ -127,6 +127,7 @@
|
||||
"Via “{folder}”" : "Чрез “{folder}”",
|
||||
"Unshare" : "Прекрати споделянето",
|
||||
"Cannot copy, please copy the link manually" : "Не може да се копира, моля, копирайте връзката ръчно",
|
||||
"Copy internal link" : "Копиране на вътрешна връзка",
|
||||
"Internal link" : "Вътрешна връзка",
|
||||
"{shareWith} by {initiator}" : "{shareWith} чрез {initiator}",
|
||||
"Shared via link by {initiator}" : "Споделено чрез връзка от {initiator}",
|
||||
|
||||
@@ -132,7 +132,7 @@ class PublicPreviewController extends PublicShareController {
|
||||
return $response;
|
||||
} catch (NotFoundException $e) {
|
||||
// If we have no preview enabled, we can redirect to the mime icon if any
|
||||
if ($mimeFallback) {
|
||||
if ($file instanceof \OCP\Files\File && $mimeFallback) {
|
||||
if ($url = $this->mimeIconProvider->getMimeIconUrl($file->getMimeType())) {
|
||||
return new RedirectResponse($url);
|
||||
}
|
||||
|
||||
@@ -132,6 +132,7 @@ return array(
|
||||
'OCA\\Settings\\SetupChecks\\ReadOnlyConfig' => $baseDir . '/../lib/SetupChecks/ReadOnlyConfig.php',
|
||||
'OCA\\Settings\\SetupChecks\\SchedulingTableSize' => $baseDir . '/../lib/SetupChecks/SchedulingTableSize.php',
|
||||
'OCA\\Settings\\SetupChecks\\SecurityHeaders' => $baseDir . '/../lib/SetupChecks/SecurityHeaders.php',
|
||||
'OCA\\Settings\\SetupChecks\\ServerIdConfig' => $baseDir . '/../lib/SetupChecks/ServerIdConfig.php',
|
||||
'OCA\\Settings\\SetupChecks\\SupportedDatabase' => $baseDir . '/../lib/SetupChecks/SupportedDatabase.php',
|
||||
'OCA\\Settings\\SetupChecks\\SystemIs64bit' => $baseDir . '/../lib/SetupChecks/SystemIs64bit.php',
|
||||
'OCA\\Settings\\SetupChecks\\TaskProcessingPickupSpeed' => $baseDir . '/../lib/SetupChecks/TaskProcessingPickupSpeed.php',
|
||||
|
||||
@@ -147,6 +147,7 @@ class ComposerStaticInitSettings
|
||||
'OCA\\Settings\\SetupChecks\\ReadOnlyConfig' => __DIR__ . '/..' . '/../lib/SetupChecks/ReadOnlyConfig.php',
|
||||
'OCA\\Settings\\SetupChecks\\SchedulingTableSize' => __DIR__ . '/..' . '/../lib/SetupChecks/SchedulingTableSize.php',
|
||||
'OCA\\Settings\\SetupChecks\\SecurityHeaders' => __DIR__ . '/..' . '/../lib/SetupChecks/SecurityHeaders.php',
|
||||
'OCA\\Settings\\SetupChecks\\ServerIdConfig' => __DIR__ . '/..' . '/../lib/SetupChecks/ServerIdConfig.php',
|
||||
'OCA\\Settings\\SetupChecks\\SupportedDatabase' => __DIR__ . '/..' . '/../lib/SetupChecks/SupportedDatabase.php',
|
||||
'OCA\\Settings\\SetupChecks\\SystemIs64bit' => __DIR__ . '/..' . '/../lib/SetupChecks/SystemIs64bit.php',
|
||||
'OCA\\Settings\\SetupChecks\\TaskProcessingPickupSpeed' => __DIR__ . '/..' . '/../lib/SetupChecks/TaskProcessingPickupSpeed.php',
|
||||
|
||||
@@ -35,8 +35,8 @@ OC.L10N.register(
|
||||
"You granted filesystem access to app password \"{token}\"" : "Sa lubasid failisüsteemi ligipääsu rakenduse salasõnale „{token}“",
|
||||
"You revoked filesystem access from app password \"{token}\"" : "Sa keelasid failisüsteemi ligipääsu rakenduse salasõnale „{token}“",
|
||||
"Security" : "Turvalisus",
|
||||
"You successfully logged in using two-factor authentication (%1$s)" : "Logisid edukalt sisse, kasutades kaheastmelist autentimiset (%1$s)",
|
||||
"A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ebaõnnestus (%1$s)",
|
||||
"You successfully logged in using two-factor authentication (%1$s)" : "Kasutades kaheastmelist autentimist sisselogimine õnnestus (%1$s)",
|
||||
"A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ei õnnestunud (%1$s)",
|
||||
"Remote wipe was started on %1$s" : "Kaugkustutamine algas: %1$s",
|
||||
"Remote wipe has finished on %1$s" : "Kaugkustutamine lõppes: %1$s",
|
||||
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Sinu <strong>salasõna</strong> või <strong>e-posti aadress</strong> on muudetud",
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
"You granted filesystem access to app password \"{token}\"" : "Sa lubasid failisüsteemi ligipääsu rakenduse salasõnale „{token}“",
|
||||
"You revoked filesystem access from app password \"{token}\"" : "Sa keelasid failisüsteemi ligipääsu rakenduse salasõnale „{token}“",
|
||||
"Security" : "Turvalisus",
|
||||
"You successfully logged in using two-factor authentication (%1$s)" : "Logisid edukalt sisse, kasutades kaheastmelist autentimiset (%1$s)",
|
||||
"A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ebaõnnestus (%1$s)",
|
||||
"You successfully logged in using two-factor authentication (%1$s)" : "Kasutades kaheastmelist autentimist sisselogimine õnnestus (%1$s)",
|
||||
"A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ei õnnestunud (%1$s)",
|
||||
"Remote wipe was started on %1$s" : "Kaugkustutamine algas: %1$s",
|
||||
"Remote wipe has finished on %1$s" : "Kaugkustutamine lõppes: %1$s",
|
||||
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Sinu <strong>salasõna</strong> või <strong>e-posti aadress</strong> on muudetud",
|
||||
|
||||
@@ -299,7 +299,7 @@ OC.L10N.register(
|
||||
"- The `Strict-Transport-Security` HTTP header is not set (should be at least `%d` seconds). For enhanced security, it is recommended to enable HSTS." : "- A cabeceira HTTP «Strict-Transport-Security» non está definida (debe ser polo menos «%d» segundos). Para mellorar a seguridade, recoméndase activar HSTS.",
|
||||
"Some headers are not set correctly on your instance" : "Algunhas cabeceiras non están definidas correctamente na súa instancia",
|
||||
"Could not check that your web server serves security headers correctly. Please check manually." : "Non foi posíbel comprobar que o seu servidor web serve as cabeceiras de seguranza correctamente. Compróbeo manualmente.",
|
||||
"Could not check that your web server serves security headers correctly, unable to query `%s`" : "Non foi posíbel comprobar que o seu servidor web serve correctamente as cabeceiras de seguranza, non foi posíbel consultar «%s»",
|
||||
"Could not check that your web server serves security headers correctly, unable to query `%s`" : "Non é posíbel comprobar que o seu servidor web serve correctamente as cabeceiras de seguranza, non é posíbel consultar «%s»",
|
||||
"Your server is correctly configured to send security headers." : "O seu servidor está configurado correctamente para enviar cabeceiras de seguranza.",
|
||||
"Database version" : "Versión da base de datos",
|
||||
"MariaDB version 10.3 detected, this version is end-of-life and only supported as part of Ubuntu 20.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Detectouse a versión 10.3 de MariaDB, esta versión está ao final da súa vida útil e só se admite como parte de Ubuntu 20.04. Suxírese MariaDB >=%1$s e <=%2$s para obter mellor rendemento, estabilidade e funcionalidade con esta versión de Nextcloud.",
|
||||
|
||||
@@ -297,7 +297,7 @@
|
||||
"- The `Strict-Transport-Security` HTTP header is not set (should be at least `%d` seconds). For enhanced security, it is recommended to enable HSTS." : "- A cabeceira HTTP «Strict-Transport-Security» non está definida (debe ser polo menos «%d» segundos). Para mellorar a seguridade, recoméndase activar HSTS.",
|
||||
"Some headers are not set correctly on your instance" : "Algunhas cabeceiras non están definidas correctamente na súa instancia",
|
||||
"Could not check that your web server serves security headers correctly. Please check manually." : "Non foi posíbel comprobar que o seu servidor web serve as cabeceiras de seguranza correctamente. Compróbeo manualmente.",
|
||||
"Could not check that your web server serves security headers correctly, unable to query `%s`" : "Non foi posíbel comprobar que o seu servidor web serve correctamente as cabeceiras de seguranza, non foi posíbel consultar «%s»",
|
||||
"Could not check that your web server serves security headers correctly, unable to query `%s`" : "Non é posíbel comprobar que o seu servidor web serve correctamente as cabeceiras de seguranza, non é posíbel consultar «%s»",
|
||||
"Your server is correctly configured to send security headers." : "O seu servidor está configurado correctamente para enviar cabeceiras de seguranza.",
|
||||
"Database version" : "Versión da base de datos",
|
||||
"MariaDB version 10.3 detected, this version is end-of-life and only supported as part of Ubuntu 20.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Detectouse a versión 10.3 de MariaDB, esta versión está ao final da súa vida útil e só se admite como parte de Ubuntu 20.04. Suxírese MariaDB >=%1$s e <=%2$s para obter mellor rendemento, estabilidade e funcionalidade con esta versión de Nextcloud.",
|
||||
|
||||
@@ -312,6 +312,11 @@ OC.L10N.register(
|
||||
"64-bit" : "64ビット",
|
||||
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "このシステムは32ビット版のPHPで動いているようです。Nextcloudを正常に動かすには64ビット版が必要です。OSとPHPを64ビット版にアップグレードしてください!",
|
||||
"Task Processing pickup speed" : "タスク処理のピックアップ速度",
|
||||
"_No scheduled tasks in the last day._::_No scheduled tasks in the last %n days._" : ["過去%n日間にスケジュールされたタスクはありません。"],
|
||||
"_The task pickup speed has been ok in the last day._::_The task pickup speed has been ok in the last %n days._" : ["タスクのピックアップ速度は、過去%n日間正常でした。"],
|
||||
"_The task pickup speed has been slow in the last day. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n days. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["過去%n日間タスクのピックアップ速度が遅くなっています。多くのタスクが取得に4分以上かかりました。バックグラウンドでタスクを処理するようにワーカーを設定することを検討してください。"],
|
||||
"_Most tasks were successful in the last day._::_Most tasks were successful in the last %n days._" : ["ほとんどのタスクは過去%n日間に成功しました。"],
|
||||
"_A lot of tasks failed in the last day. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly._::_A lot of tasks failed in the last %n days. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly._" : ["過去%n日間に多くのタスクが失敗しました。nextcloudログでエラーを確認し、AIプロバイダーアプリが正しく設定されているかどうかを調査することを検討してください。"],
|
||||
"Temporary space available" : "テンポラリ領域が利用可能です",
|
||||
"Error while checking the temporary PHP path - it was not properly set to a directory. Returned value: %s" : "PHP のテンポラリパスのチェック中にエラーが発生しました - ディレクトリが正しく設定されていませんでした。返された値:%s",
|
||||
"The PHP function \"disk_free_space\" is disabled, which prevents the check for enough space in the temporary directories." : "PHPの関数 \"disk_free_space\"が無効になっており、一時的なディレクトリに十分な空き容量があるかどうかをチェックできません。",
|
||||
@@ -946,6 +951,7 @@ OC.L10N.register(
|
||||
"_No scheduled tasks in the last %n hour._::_No scheduled tasks in the last %n hours._" : ["直近の%n時間に予定されたタスクはありません。"],
|
||||
"_The task pickup speed has been ok in the last %n hour._::_The task pickup speed has been ok in the last %n hours._" : ["タスクのピックアップ速度は、過去%n時間に問題ありませんでした。"],
|
||||
"_The task pickup speed has been slow in the last %n hour. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n hours. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["過去%n時間タスクのピックアップ速度が遅くなっています。多くのタスクが取得に4分以上かかりました。バックグラウンドでタスクを処理するようにワーカーを設定することを検討してください。"],
|
||||
"Also allow autocompletion on full match of the user id" : "また、ユーザーIDが完全に一致した場合にオートコンプリートを許可する",
|
||||
"This app has no minimum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud の最小バージョンが指定されていません.将来、エラーが発生する可能性があります.",
|
||||
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud バージョンの上限が指定されていません.将来、エラーが発生する可能性があります.",
|
||||
"Loading accounts …" : "アカウントを読み込み中 ...",
|
||||
|
||||
@@ -310,6 +310,11 @@
|
||||
"64-bit" : "64ビット",
|
||||
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "このシステムは32ビット版のPHPで動いているようです。Nextcloudを正常に動かすには64ビット版が必要です。OSとPHPを64ビット版にアップグレードしてください!",
|
||||
"Task Processing pickup speed" : "タスク処理のピックアップ速度",
|
||||
"_No scheduled tasks in the last day._::_No scheduled tasks in the last %n days._" : ["過去%n日間にスケジュールされたタスクはありません。"],
|
||||
"_The task pickup speed has been ok in the last day._::_The task pickup speed has been ok in the last %n days._" : ["タスクのピックアップ速度は、過去%n日間正常でした。"],
|
||||
"_The task pickup speed has been slow in the last day. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n days. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["過去%n日間タスクのピックアップ速度が遅くなっています。多くのタスクが取得に4分以上かかりました。バックグラウンドでタスクを処理するようにワーカーを設定することを検討してください。"],
|
||||
"_Most tasks were successful in the last day._::_Most tasks were successful in the last %n days._" : ["ほとんどのタスクは過去%n日間に成功しました。"],
|
||||
"_A lot of tasks failed in the last day. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly._::_A lot of tasks failed in the last %n days. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly._" : ["過去%n日間に多くのタスクが失敗しました。nextcloudログでエラーを確認し、AIプロバイダーアプリが正しく設定されているかどうかを調査することを検討してください。"],
|
||||
"Temporary space available" : "テンポラリ領域が利用可能です",
|
||||
"Error while checking the temporary PHP path - it was not properly set to a directory. Returned value: %s" : "PHP のテンポラリパスのチェック中にエラーが発生しました - ディレクトリが正しく設定されていませんでした。返された値:%s",
|
||||
"The PHP function \"disk_free_space\" is disabled, which prevents the check for enough space in the temporary directories." : "PHPの関数 \"disk_free_space\"が無効になっており、一時的なディレクトリに十分な空き容量があるかどうかをチェックできません。",
|
||||
@@ -944,6 +949,7 @@
|
||||
"_No scheduled tasks in the last %n hour._::_No scheduled tasks in the last %n hours._" : ["直近の%n時間に予定されたタスクはありません。"],
|
||||
"_The task pickup speed has been ok in the last %n hour._::_The task pickup speed has been ok in the last %n hours._" : ["タスクのピックアップ速度は、過去%n時間に問題ありませんでした。"],
|
||||
"_The task pickup speed has been slow in the last %n hour. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n hours. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["過去%n時間タスクのピックアップ速度が遅くなっています。多くのタスクが取得に4分以上かかりました。バックグラウンドでタスクを処理するようにワーカーを設定することを検討してください。"],
|
||||
"Also allow autocompletion on full match of the user id" : "また、ユーザーIDが完全に一致した場合にオートコンプリートを許可する",
|
||||
"This app has no minimum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud の最小バージョンが指定されていません.将来、エラーが発生する可能性があります.",
|
||||
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud バージョンの上限が指定されていません.将来、エラーが発生する可能性があります.",
|
||||
"Loading accounts …" : "アカウントを読み込み中 ...",
|
||||
|
||||
@@ -48,7 +48,9 @@ OC.L10N.register(
|
||||
"Saved" : "Зачувано",
|
||||
"Unable to change password. Password too long." : "Неможе да се промени лозинката. Лозинката е премногу долга.",
|
||||
"Authentication error" : "Грешка во автентикација",
|
||||
"Please provide an admin recovery password; otherwise, all account data will be lost." : "Ве молам дадете лозинка за поврат на администраторот; во спротивно, сите кориснички податоци ќе бидат изгубени.",
|
||||
"Wrong admin recovery password. Please check the password and try again." : "Погрешна лозинка за поврат на администраторот. Ве молам проверете ја лозинката и пробајте повторно.",
|
||||
"Backend does not support password change, but the encryption of the account key was updated." : "Позадината не подржува промена на лозинката, но корисничкиот клуч за енкрипција е ажуриран.",
|
||||
"Administrator documentation" : "Документација за администратор",
|
||||
"User documentation" : "Документација за корисник",
|
||||
"Invalid SMTP password." : "Грешна SMTP лозинка.",
|
||||
@@ -143,7 +145,10 @@ OC.L10N.register(
|
||||
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "PHP функцијата \"set_time_limit\" не е достапна. Ова може да резултира со запирање на скриптите во извршувањето, и грешки во вашата инсталација. Овозможувањето на оваа функција е препорачлива.",
|
||||
"Supported" : "Поддржано",
|
||||
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP се чини дека не е правилно поставена за да испраќа барања до променливите на околината на системот. Тестот со getenv(\"PATH\") враќа само празен одговор.",
|
||||
"PHP opcache" : "PHP opcache",
|
||||
"The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation." : "PHP модулот OPcache не е вчитан. За да имате подобри перформанси е препорачливо да го вчитате во вашата PHP инсталација.",
|
||||
"OPcache is disabled. For better performance, it is recommended to apply \"opcache.enable=1\" to your PHP configuration." : "OPcache модулот е оневозможен. За подобри перформанси препорачливо е да го овозможите \"opcache.enable=1\" во вашата PHP конфигурација.",
|
||||
"OPcache is configured to remove code comments. With OPcache enabled, \"opcache.save_comments=1\" must be set for Nextcloud to function." : "OPcache е конфигуриран за да ги брише коментарите во кодовите. Со овозможен OPcache, \"opcache.save_comments=1\" мора да се постави за да функционира Nextcloud.",
|
||||
"PHP version" : "PHP верзија",
|
||||
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Антивирана е конфигурација која е само за чирање. Ова спречува поставување на некои конфигурации преку веб-интерфејсот. Понатаму, датотеката треба да се пребрише рачно за секое ажурирање.",
|
||||
"Architecture" : "Архитектура",
|
||||
@@ -202,6 +207,8 @@ OC.L10N.register(
|
||||
"No apps found for your version" : "За вашата верзија не се пронајдени апликации",
|
||||
"_%n app has an update available_::_%n apps have an update available_" : ["За %n апликација има достапно ажурирање","За %n апликации има достапно ажурирање"],
|
||||
"_Update_::_Update all_" : ["Ажурирај","Ажурирај ги сите"],
|
||||
"Creating group…" : "Се создава група...",
|
||||
"Create group" : "Креирај група",
|
||||
"Group name" : "Име на група",
|
||||
"Nothing to show" : "Нема што да се прикаже",
|
||||
"Loading" : "Се вчитува",
|
||||
@@ -286,6 +293,7 @@ OC.L10N.register(
|
||||
"Be aware that encryption always increases the file size." : "Бидете свесни дека енкрипцијата секогаш ја зголемува големината на датотеката.",
|
||||
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Секогаш е добро да создавате редовни резервни кории на вашите податоци, во случај на енкрипција, осигурајте се да ги зачувате и клучевите за шифрирање заедно со вашите податоци.",
|
||||
"This is the final warning: Do you really want to enable encryption?" : "Ова е последно предупредување: Дали навистина сакате да овозможите енкрипција?",
|
||||
"You are about to delete the group \"{group}\". The accounts will NOT be deleted." : "Ќе ја отстраните групата {group}. Корисниците во неа НЕМА да бидат избришани.",
|
||||
"Submit" : "Испрати",
|
||||
"Rename group" : "Преименувај група",
|
||||
"Current password" : "Моментална лозинка",
|
||||
@@ -414,6 +422,7 @@ OC.L10N.register(
|
||||
"Visibility" : "Видливост",
|
||||
"Show language" : "Прикажи јазик",
|
||||
"Show storage path" : "Прикажи патека на складиште",
|
||||
"Show first login" : "Прикажи прво најавување",
|
||||
"Show last login" : "Прикажи последно најавување",
|
||||
"Sorting" : "Сортирање",
|
||||
"By name" : "По име",
|
||||
@@ -426,6 +435,7 @@ OC.L10N.register(
|
||||
"Passwordless authentication requires a secure connection." : "За најавување без лозинка потребно е да се користи безбедна врска.",
|
||||
"Add WebAuthn device" : "Додади WebAuthn уред",
|
||||
"Please authorize your WebAuthn device." : "Авторизирајте го вашиот WebAuthn уред.",
|
||||
"Adding your device …" : "Додавање на вашиот уред …",
|
||||
"Unnamed device" : "Уреди без име",
|
||||
"Passwordless Authentication" : "Најавување без лозинка",
|
||||
"Set up your account for passwordless authentication following the FIDO2 standard." : "Поставете ја вашата сметка за најавување без лозинка притоа следете ги FIDO2 стандардите.",
|
||||
@@ -433,12 +443,15 @@ OC.L10N.register(
|
||||
"The following devices are configured for your account:" : "Следниве уреди се конфигурирани за вашата сметка:",
|
||||
"Your browser does not support WebAuthn." : "Вашиот прелистувач не поддржува WebAuthn.",
|
||||
"Security & setup warnings" : "Предупредувања за сигурност & параметри",
|
||||
"Checking your server …" : "Проверка на вашиот сервер …",
|
||||
"Try again" : "Обиди се повторно",
|
||||
"All checks passed." : "Сите проверки се поминати.",
|
||||
"There are some errors regarding your setup." : "Постојат некои грешки во врска со инсталацијата.",
|
||||
"There are some warnings regarding your setup." : "Постојат некои предупредувања во врска со инсталацијата.",
|
||||
"As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Како администратор, можете детално да го прилагодите однесувањето на споделувањето. Погледнете ја документацијата за повеќе информации.",
|
||||
"You need to enable the File sharing App." : "Треба да ја овозможите апликацијата Споделување на датотеки.",
|
||||
"Loading categories" : "Вчитување категории",
|
||||
"Developer documentation ↗" : "Документација за програмери ↗",
|
||||
"Version {version}, {license}-licensed" : "Верзија {version}, {license}-лиценца",
|
||||
"Version {version}" : "Верзија {version}",
|
||||
"Apply" : "Примени",
|
||||
@@ -483,6 +496,8 @@ OC.L10N.register(
|
||||
"Show to everyone" : "Прикажи на сите",
|
||||
"Show to logged in accounts only" : "Прикажи само на најавени корисници",
|
||||
"Hide" : "Сокриј",
|
||||
"{progress}% Deploying …" : "{progress}% Распоредување …",
|
||||
"{progress}% Initializing …" : "{progress}% Иницијализирање …",
|
||||
"Health checking" : "Здравствена проверка",
|
||||
"Deploy and Enable" : "Распореди и овозможи",
|
||||
"Download and enable" : "Преземи и овозможи",
|
||||
|
||||
@@ -46,7 +46,9 @@
|
||||
"Saved" : "Зачувано",
|
||||
"Unable to change password. Password too long." : "Неможе да се промени лозинката. Лозинката е премногу долга.",
|
||||
"Authentication error" : "Грешка во автентикација",
|
||||
"Please provide an admin recovery password; otherwise, all account data will be lost." : "Ве молам дадете лозинка за поврат на администраторот; во спротивно, сите кориснички податоци ќе бидат изгубени.",
|
||||
"Wrong admin recovery password. Please check the password and try again." : "Погрешна лозинка за поврат на администраторот. Ве молам проверете ја лозинката и пробајте повторно.",
|
||||
"Backend does not support password change, but the encryption of the account key was updated." : "Позадината не подржува промена на лозинката, но корисничкиот клуч за енкрипција е ажуриран.",
|
||||
"Administrator documentation" : "Документација за администратор",
|
||||
"User documentation" : "Документација за корисник",
|
||||
"Invalid SMTP password." : "Грешна SMTP лозинка.",
|
||||
@@ -141,7 +143,10 @@
|
||||
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "PHP функцијата \"set_time_limit\" не е достапна. Ова може да резултира со запирање на скриптите во извршувањето, и грешки во вашата инсталација. Овозможувањето на оваа функција е препорачлива.",
|
||||
"Supported" : "Поддржано",
|
||||
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP се чини дека не е правилно поставена за да испраќа барања до променливите на околината на системот. Тестот со getenv(\"PATH\") враќа само празен одговор.",
|
||||
"PHP opcache" : "PHP opcache",
|
||||
"The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation." : "PHP модулот OPcache не е вчитан. За да имате подобри перформанси е препорачливо да го вчитате во вашата PHP инсталација.",
|
||||
"OPcache is disabled. For better performance, it is recommended to apply \"opcache.enable=1\" to your PHP configuration." : "OPcache модулот е оневозможен. За подобри перформанси препорачливо е да го овозможите \"opcache.enable=1\" во вашата PHP конфигурација.",
|
||||
"OPcache is configured to remove code comments. With OPcache enabled, \"opcache.save_comments=1\" must be set for Nextcloud to function." : "OPcache е конфигуриран за да ги брише коментарите во кодовите. Со овозможен OPcache, \"opcache.save_comments=1\" мора да се постави за да функционира Nextcloud.",
|
||||
"PHP version" : "PHP верзија",
|
||||
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Антивирана е конфигурација која е само за чирање. Ова спречува поставување на некои конфигурации преку веб-интерфејсот. Понатаму, датотеката треба да се пребрише рачно за секое ажурирање.",
|
||||
"Architecture" : "Архитектура",
|
||||
@@ -200,6 +205,8 @@
|
||||
"No apps found for your version" : "За вашата верзија не се пронајдени апликации",
|
||||
"_%n app has an update available_::_%n apps have an update available_" : ["За %n апликација има достапно ажурирање","За %n апликации има достапно ажурирање"],
|
||||
"_Update_::_Update all_" : ["Ажурирај","Ажурирај ги сите"],
|
||||
"Creating group…" : "Се создава група...",
|
||||
"Create group" : "Креирај група",
|
||||
"Group name" : "Име на група",
|
||||
"Nothing to show" : "Нема што да се прикаже",
|
||||
"Loading" : "Се вчитува",
|
||||
@@ -284,6 +291,7 @@
|
||||
"Be aware that encryption always increases the file size." : "Бидете свесни дека енкрипцијата секогаш ја зголемува големината на датотеката.",
|
||||
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Секогаш е добро да создавате редовни резервни кории на вашите податоци, во случај на енкрипција, осигурајте се да ги зачувате и клучевите за шифрирање заедно со вашите податоци.",
|
||||
"This is the final warning: Do you really want to enable encryption?" : "Ова е последно предупредување: Дали навистина сакате да овозможите енкрипција?",
|
||||
"You are about to delete the group \"{group}\". The accounts will NOT be deleted." : "Ќе ја отстраните групата {group}. Корисниците во неа НЕМА да бидат избришани.",
|
||||
"Submit" : "Испрати",
|
||||
"Rename group" : "Преименувај група",
|
||||
"Current password" : "Моментална лозинка",
|
||||
@@ -412,6 +420,7 @@
|
||||
"Visibility" : "Видливост",
|
||||
"Show language" : "Прикажи јазик",
|
||||
"Show storage path" : "Прикажи патека на складиште",
|
||||
"Show first login" : "Прикажи прво најавување",
|
||||
"Show last login" : "Прикажи последно најавување",
|
||||
"Sorting" : "Сортирање",
|
||||
"By name" : "По име",
|
||||
@@ -424,6 +433,7 @@
|
||||
"Passwordless authentication requires a secure connection." : "За најавување без лозинка потребно е да се користи безбедна врска.",
|
||||
"Add WebAuthn device" : "Додади WebAuthn уред",
|
||||
"Please authorize your WebAuthn device." : "Авторизирајте го вашиот WebAuthn уред.",
|
||||
"Adding your device …" : "Додавање на вашиот уред …",
|
||||
"Unnamed device" : "Уреди без име",
|
||||
"Passwordless Authentication" : "Најавување без лозинка",
|
||||
"Set up your account for passwordless authentication following the FIDO2 standard." : "Поставете ја вашата сметка за најавување без лозинка притоа следете ги FIDO2 стандардите.",
|
||||
@@ -431,12 +441,15 @@
|
||||
"The following devices are configured for your account:" : "Следниве уреди се конфигурирани за вашата сметка:",
|
||||
"Your browser does not support WebAuthn." : "Вашиот прелистувач не поддржува WebAuthn.",
|
||||
"Security & setup warnings" : "Предупредувања за сигурност & параметри",
|
||||
"Checking your server …" : "Проверка на вашиот сервер …",
|
||||
"Try again" : "Обиди се повторно",
|
||||
"All checks passed." : "Сите проверки се поминати.",
|
||||
"There are some errors regarding your setup." : "Постојат некои грешки во врска со инсталацијата.",
|
||||
"There are some warnings regarding your setup." : "Постојат некои предупредувања во врска со инсталацијата.",
|
||||
"As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Како администратор, можете детално да го прилагодите однесувањето на споделувањето. Погледнете ја документацијата за повеќе информации.",
|
||||
"You need to enable the File sharing App." : "Треба да ја овозможите апликацијата Споделување на датотеки.",
|
||||
"Loading categories" : "Вчитување категории",
|
||||
"Developer documentation ↗" : "Документација за програмери ↗",
|
||||
"Version {version}, {license}-licensed" : "Верзија {version}, {license}-лиценца",
|
||||
"Version {version}" : "Верзија {version}",
|
||||
"Apply" : "Примени",
|
||||
@@ -481,6 +494,8 @@
|
||||
"Show to everyone" : "Прикажи на сите",
|
||||
"Show to logged in accounts only" : "Прикажи само на најавени корисници",
|
||||
"Hide" : "Сокриј",
|
||||
"{progress}% Deploying …" : "{progress}% Распоредување …",
|
||||
"{progress}% Initializing …" : "{progress}% Иницијализирање …",
|
||||
"Health checking" : "Здравствена проверка",
|
||||
"Deploy and Enable" : "Распореди и овозможи",
|
||||
"Download and enable" : "Преземи и овозможи",
|
||||
|
||||
@@ -312,6 +312,7 @@ OC.L10N.register(
|
||||
"64-bit" : "64-bit",
|
||||
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "Wygląda na to, że korzystasz z 32-bitowej wersji PHP. Nextcloud wymaga wersji 64-bitowej do poprawnego działania. Zaktualizuj proszę swój system i PHP do wersji 64-bitowych!",
|
||||
"Task Processing pickup speed" : "Prędkość pobierania zadań do przetworzenia",
|
||||
"_No scheduled tasks in the last day._::_No scheduled tasks in the last %n days._" : ["Brak zaplanowanych zadań w ciągu ostatniego dnia.","Brak zaplanowanych zadań w ciągu ostatnich %n dni.","Brak zaplanowanych zadań w ciągu ostatnich %n dni.","Brak zaplanowanych zadań w ciągu ostatnich %n dni."],
|
||||
"Temporary space available" : "Dostępna przestrzeń tymczasowa",
|
||||
"Error while checking the temporary PHP path - it was not properly set to a directory. Returned value: %s" : "Błąd podczas sprawdzania tymczasowej ścieżki PHP - nie została ona poprawnie ustawiona na katalog. Wartość zwrócona: %s",
|
||||
"The PHP function \"disk_free_space\" is disabled, which prevents the check for enough space in the temporary directories." : "Funkcja PHP „disk_free_space” jest wyłączona, co uniemożliwia sprawdzenie wystarczającej ilości miejsca w katalogach tymczasowych.",
|
||||
|
||||
@@ -310,6 +310,7 @@
|
||||
"64-bit" : "64-bit",
|
||||
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "Wygląda na to, że korzystasz z 32-bitowej wersji PHP. Nextcloud wymaga wersji 64-bitowej do poprawnego działania. Zaktualizuj proszę swój system i PHP do wersji 64-bitowych!",
|
||||
"Task Processing pickup speed" : "Prędkość pobierania zadań do przetworzenia",
|
||||
"_No scheduled tasks in the last day._::_No scheduled tasks in the last %n days._" : ["Brak zaplanowanych zadań w ciągu ostatniego dnia.","Brak zaplanowanych zadań w ciągu ostatnich %n dni.","Brak zaplanowanych zadań w ciągu ostatnich %n dni.","Brak zaplanowanych zadań w ciągu ostatnich %n dni."],
|
||||
"Temporary space available" : "Dostępna przestrzeń tymczasowa",
|
||||
"Error while checking the temporary PHP path - it was not properly set to a directory. Returned value: %s" : "Błąd podczas sprawdzania tymczasowej ścieżki PHP - nie została ona poprawnie ustawiona na katalog. Wartość zwrócona: %s",
|
||||
"The PHP function \"disk_free_space\" is disabled, which prevents the check for enough space in the temporary directories." : "Funkcja PHP „disk_free_space” jest wyłączona, co uniemożliwia sprawdzenie wystarczającej ilości miejsca w katalogach tymczasowych.",
|
||||
|
||||
@@ -407,6 +407,7 @@ OC.L10N.register(
|
||||
"Full match autocompletion restrictions" : "Restrições de preenchimento automático de correspondência completa",
|
||||
"Also allow autocompletion on full match of the user ID" : "Permitir também o preenchimento automático em caso de correspondência completa do ID do usuário",
|
||||
"Also allow autocompletion on full match of the user email" : "Permitir também o preenchimento automático em caso de correspondência completa do e-mail do usuário.",
|
||||
"Do not use second user displayname for full match" : "Não utilize o segundo nome de exibição do usuário para correspondência completa.",
|
||||
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Exibir o texto do aviso legal na página de upload do link público (somente mostrado quando a lista de arquivos está oculta).",
|
||||
"Disclaimer text" : "Texto do aviso legal",
|
||||
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto será mostrado na página de upload do link público quando a lista de arquivos está oculta.",
|
||||
|
||||
@@ -405,6 +405,7 @@
|
||||
"Full match autocompletion restrictions" : "Restrições de preenchimento automático de correspondência completa",
|
||||
"Also allow autocompletion on full match of the user ID" : "Permitir também o preenchimento automático em caso de correspondência completa do ID do usuário",
|
||||
"Also allow autocompletion on full match of the user email" : "Permitir também o preenchimento automático em caso de correspondência completa do e-mail do usuário.",
|
||||
"Do not use second user displayname for full match" : "Não utilize o segundo nome de exibição do usuário para correspondência completa.",
|
||||
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Exibir o texto do aviso legal na página de upload do link público (somente mostrado quando a lista de arquivos está oculta).",
|
||||
"Disclaimer text" : "Texto do aviso legal",
|
||||
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto será mostrado na página de upload do link público quando a lista de arquivos está oculta.",
|
||||
|
||||
@@ -69,6 +69,7 @@ use OCA\Settings\SetupChecks\RandomnessSecure;
|
||||
use OCA\Settings\SetupChecks\ReadOnlyConfig;
|
||||
use OCA\Settings\SetupChecks\SchedulingTableSize;
|
||||
use OCA\Settings\SetupChecks\SecurityHeaders;
|
||||
use OCA\Settings\SetupChecks\ServerIdConfig;
|
||||
use OCA\Settings\SetupChecks\SupportedDatabase;
|
||||
use OCA\Settings\SetupChecks\SystemIs64bit;
|
||||
use OCA\Settings\SetupChecks\TaskProcessingPickupSpeed;
|
||||
@@ -207,6 +208,7 @@ class Application extends App implements IBootstrap {
|
||||
$context->registerSetupCheck(RandomnessSecure::class);
|
||||
$context->registerSetupCheck(ReadOnlyConfig::class);
|
||||
$context->registerSetupCheck(SecurityHeaders::class);
|
||||
$context->registerSetupCheck(ServerIdConfig::class);
|
||||
$context->registerSetupCheck(SchedulingTableSize::class);
|
||||
$context->registerSetupCheck(SupportedDatabase::class);
|
||||
$context->registerSetupCheck(SystemIs64bit::class);
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OCA\Settings\SetupChecks;
|
||||
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\SetupCheck\ISetupCheck;
|
||||
use OCP\SetupCheck\SetupResult;
|
||||
use Override;
|
||||
|
||||
final class ServerIdConfig implements ISetupCheck {
|
||||
public function __construct(
|
||||
private readonly IL10N $l10n,
|
||||
private readonly IConfig $config,
|
||||
private readonly IURLGenerator $urlGenerator,
|
||||
) {
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function getName(): string {
|
||||
return $this->l10n->t('Configuration server ID');
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function getCategory(): string {
|
||||
return 'config';
|
||||
}
|
||||
|
||||
#[Override]
|
||||
public function run(): SetupResult {
|
||||
$serverid = $this->config->getSystemValueInt('serverid', PHP_INT_MIN);
|
||||
$linkToDoc = $this->urlGenerator->linkToDocs('admin-update');
|
||||
|
||||
if ($serverid === PHP_INT_MIN) {
|
||||
return SetupResult::info(
|
||||
$this->l10n->t('server identifier isn’t configured. It is recommended if your Nextcloud instance is running on several PHP servers. Add a serverid in your configuration.'),
|
||||
$linkToDoc,
|
||||
);
|
||||
}
|
||||
|
||||
if ($serverid < 0 || $serverid > 1023) {
|
||||
return SetupResult::error(
|
||||
$this->l10n->t('"%d" is not a valid server identifier. It must be between 0 and 1023.', [$serverid]),
|
||||
$linkToDoc,
|
||||
);
|
||||
}
|
||||
|
||||
return SetupResult::success($this->l10n->t('server identifier is configured and valid.'));
|
||||
}
|
||||
}
|
||||
@@ -20,8 +20,8 @@ class SupportedDatabase implements ISetupCheck {
|
||||
private const MAX_MARIADB = '11.8';
|
||||
private const MIN_MYSQL = '8.0';
|
||||
private const MAX_MYSQL = '8.4';
|
||||
private const MIN_POSTGRES = '13';
|
||||
private const MAX_POSTGRES = '17';
|
||||
private const MIN_POSTGRES = '14';
|
||||
private const MAX_POSTGRES = '18';
|
||||
|
||||
public function __construct(
|
||||
private IL10N $l10n,
|
||||
|
||||
@@ -10,6 +10,7 @@ return array(
|
||||
'OCA\\Theming\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
|
||||
'OCA\\Theming\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
|
||||
'OCA\\Theming\\Command\\UpdateConfig' => $baseDir . '/../lib/Command/UpdateConfig.php',
|
||||
'OCA\\Theming\\ConfigLexicon' => $baseDir . '/../lib/ConfigLexicon.php',
|
||||
'OCA\\Theming\\Controller\\IconController' => $baseDir . '/../lib/Controller/IconController.php',
|
||||
'OCA\\Theming\\Controller\\ThemingController' => $baseDir . '/../lib/Controller/ThemingController.php',
|
||||
'OCA\\Theming\\Controller\\UserThemeController' => $baseDir . '/../lib/Controller/UserThemeController.php',
|
||||
|
||||
@@ -25,6 +25,7 @@ class ComposerStaticInitTheming
|
||||
'OCA\\Theming\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
|
||||
'OCA\\Theming\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
|
||||
'OCA\\Theming\\Command\\UpdateConfig' => __DIR__ . '/..' . '/../lib/Command/UpdateConfig.php',
|
||||
'OCA\\Theming\\ConfigLexicon' => __DIR__ . '/..' . '/../lib/ConfigLexicon.php',
|
||||
'OCA\\Theming\\Controller\\IconController' => __DIR__ . '/..' . '/../lib/Controller/IconController.php',
|
||||
'OCA\\Theming\\Controller\\ThemingController' => __DIR__ . '/..' . '/../lib/Controller/ThemingController.php',
|
||||
'OCA\\Theming\\Controller\\UserThemeController' => __DIR__ . '/..' . '/../lib/Controller/UserThemeController.php',
|
||||
|
||||
+13
-1
@@ -10,7 +10,11 @@ OC.L10N.register(
|
||||
"The given privacy policy address is not a valid URL" : "Зададената URL адреса за политика за приватност не е валидна",
|
||||
"The given slogan is too long" : "Зададениот слоган е премногу долг",
|
||||
"The given color is invalid" : "Зададената боја не е валидна",
|
||||
"Disable-user-theming should be true or false" : "Disable-user-theming треба да биде true или false",
|
||||
"Saved" : "Зачувано",
|
||||
"Invalid app given" : "Невалидна апликација е дадена",
|
||||
"Invalid type for setting \"defaultApp\" given" : "Даден е невалиден тип за поставката \"defaultApp\"",
|
||||
"Invalid setting key" : "Невалиден клуч за поставка",
|
||||
"The file was uploaded" : "Датотеката е прикачена",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Подигнатата датотека ја надминува upload_max_filesize директивата во php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Големината на датотеката ја надминува MAX_FILE_SIZE директивата која беше специфицирана во HTML формата",
|
||||
@@ -23,6 +27,9 @@ OC.L10N.register(
|
||||
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Веќе користите сопствена тема. Апликацијата за сопствена тема може да ја пребрише истата.",
|
||||
"Theming" : "Теми",
|
||||
"Appearance and accessibility" : "Изглед и пристапност",
|
||||
"PHP Imagick module" : "PHP Imagick модул",
|
||||
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "PHP модулот \"imagick\" не е овозможен иако апликацијата за теми е активна. За правилно генерирање на favicon, треба да го инсталираш и овозможиш овој модул.",
|
||||
"The PHP module \"imagick\" in this instance has no SVG support. For better compatibility it is recommended to install it." : "PHP модулот \"imagick\" во оваа инстанца нема поддршка за SVG. За подобра компатибилност се препорачува да се инсталира.",
|
||||
"Dark theme with high contrast mode" : "Темна тема со режим на висок контраст",
|
||||
"Enable dark high contrast mode" : "Овозможи темен режим со висок контраст",
|
||||
"Similar to the high contrast mode, but with dark colours." : "Слично на режимот со висок контраст, но со темни бои.",
|
||||
@@ -49,6 +56,7 @@ OC.L10N.register(
|
||||
"a safe home for all your data" : "безбеден дом за сите ваши податоци",
|
||||
"Slogan" : "Слоган",
|
||||
"Primary color" : "Примарна боја",
|
||||
"The primary color is used for highlighting elements like important buttons. It might get slightly adjusted depending on the current color schema." : "Примарната боја се користи за истакнување на елементи како важни копчиња. Може да биде малку прилагодена во зависност од моменталната шема на бои.",
|
||||
"Legal notice link" : "Правно известување",
|
||||
"Privacy policy link" : "Политика за приватност",
|
||||
"Header logo" : "Лого на заглавие",
|
||||
@@ -59,6 +67,7 @@ OC.L10N.register(
|
||||
"Disable user theming" : "Оневозможи кориснички теми",
|
||||
"Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on." : "Иако можете да изберете и да ја прилагодите вашата истанца, корисниците можат да ја менуваат нивната позадина и бои. Ако сакате да го наметнете вашето прилагодување, можете да го вклучите ова.",
|
||||
"Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Темата овозможува можно полесно прилагодување на изгледот и чувството на вашите истанци и поддржани клиенти. Ова ќе биде видливо за сите корисници.",
|
||||
"Instead of a background image you can also configure a plain background color. If you use a background image changing this color will influence the color of the app menu icons." : "Наместо позадинска слика, можеш да конфигурираш обична позадинска боја. Ако користиш позадинска слика, менувањето на оваа боја ќе влијае на бојата на иконите во менито на апликациите.",
|
||||
"Background color" : "Боја на позадина",
|
||||
"Upload new logo" : "Прикачи ново лого",
|
||||
"Logo" : "Лого",
|
||||
@@ -68,6 +77,7 @@ OC.L10N.register(
|
||||
"Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Инсталирај ImageMagick додаток за PHP со што ќе се овозможи поддршка за SVG сликите автоматски да генерираат Фавикон базирано на прикаченото лого и боја.",
|
||||
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {linkstart}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {linkstart} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА.",
|
||||
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Доколку наидете на некој проблем, не се двоумете и пријавете го на {issuetracker} {linkend}. И доколку сакате можете да се приклучите кон нашиот дизајнерски тим{designteam} {linkend}!",
|
||||
"Unable to apply the setting." : "Не може да се примени поставката.",
|
||||
"Appearance and accessibility settings" : "Поставки за изглед и пристапност",
|
||||
"Misc accessibility options" : "Разни опции за пристапност",
|
||||
"Enable blur background filter (may increase GPU load)" : "Овозможи филтер за замаглување на позадината (може да го зголеми оптоварувањето на графичкиот процесор)",
|
||||
@@ -78,6 +88,7 @@ OC.L10N.register(
|
||||
"Keyboard shortcuts" : "Кратенки преку тастатура",
|
||||
"In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Во некои случаи, кратенките на тастатурата може да се мешаат со алатките за пристапност. За да овозможите правилно фокусирање на вашата алатка, можете да ги оневозможите сите кратенки на тастатурата овде. Ова исто така ќе ги оневозможи сите достапни кратенки во апликациите.",
|
||||
"Disable all keyboard shortcuts" : "Оневозможи ги сите кратенки преку тастатурата",
|
||||
"Current selected app: {app}, position {position} of {total}" : "Моментално избрана апликација: {app}, позиција {position} од {total}.",
|
||||
"Move up" : "Помести горе",
|
||||
"Move down" : "Помести доле",
|
||||
"Select a background from your files" : "Избери позадина од датотеките",
|
||||
@@ -108,6 +119,7 @@ OC.L10N.register(
|
||||
"Reset to default" : "Ресетирај на стандардно",
|
||||
"Upload" : "Прикачи",
|
||||
"Remove background image" : "Избриши ја позадинската слика",
|
||||
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {guidelines} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА."
|
||||
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {guidelines} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА.",
|
||||
". Unable to apply the setting." : "Не може да се примени поставката."
|
||||
},
|
||||
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
|
||||
|
||||
@@ -8,7 +8,11 @@
|
||||
"The given privacy policy address is not a valid URL" : "Зададената URL адреса за политика за приватност не е валидна",
|
||||
"The given slogan is too long" : "Зададениот слоган е премногу долг",
|
||||
"The given color is invalid" : "Зададената боја не е валидна",
|
||||
"Disable-user-theming should be true or false" : "Disable-user-theming треба да биде true или false",
|
||||
"Saved" : "Зачувано",
|
||||
"Invalid app given" : "Невалидна апликација е дадена",
|
||||
"Invalid type for setting \"defaultApp\" given" : "Даден е невалиден тип за поставката \"defaultApp\"",
|
||||
"Invalid setting key" : "Невалиден клуч за поставка",
|
||||
"The file was uploaded" : "Датотеката е прикачена",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Подигнатата датотека ја надминува upload_max_filesize директивата во php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Големината на датотеката ја надминува MAX_FILE_SIZE директивата која беше специфицирана во HTML формата",
|
||||
@@ -21,6 +25,9 @@
|
||||
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Веќе користите сопствена тема. Апликацијата за сопствена тема може да ја пребрише истата.",
|
||||
"Theming" : "Теми",
|
||||
"Appearance and accessibility" : "Изглед и пристапност",
|
||||
"PHP Imagick module" : "PHP Imagick модул",
|
||||
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "PHP модулот \"imagick\" не е овозможен иако апликацијата за теми е активна. За правилно генерирање на favicon, треба да го инсталираш и овозможиш овој модул.",
|
||||
"The PHP module \"imagick\" in this instance has no SVG support. For better compatibility it is recommended to install it." : "PHP модулот \"imagick\" во оваа инстанца нема поддршка за SVG. За подобра компатибилност се препорачува да се инсталира.",
|
||||
"Dark theme with high contrast mode" : "Темна тема со режим на висок контраст",
|
||||
"Enable dark high contrast mode" : "Овозможи темен режим со висок контраст",
|
||||
"Similar to the high contrast mode, but with dark colours." : "Слично на режимот со висок контраст, но со темни бои.",
|
||||
@@ -47,6 +54,7 @@
|
||||
"a safe home for all your data" : "безбеден дом за сите ваши податоци",
|
||||
"Slogan" : "Слоган",
|
||||
"Primary color" : "Примарна боја",
|
||||
"The primary color is used for highlighting elements like important buttons. It might get slightly adjusted depending on the current color schema." : "Примарната боја се користи за истакнување на елементи како важни копчиња. Може да биде малку прилагодена во зависност од моменталната шема на бои.",
|
||||
"Legal notice link" : "Правно известување",
|
||||
"Privacy policy link" : "Политика за приватност",
|
||||
"Header logo" : "Лого на заглавие",
|
||||
@@ -57,6 +65,7 @@
|
||||
"Disable user theming" : "Оневозможи кориснички теми",
|
||||
"Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on." : "Иако можете да изберете и да ја прилагодите вашата истанца, корисниците можат да ја менуваат нивната позадина и бои. Ако сакате да го наметнете вашето прилагодување, можете да го вклучите ова.",
|
||||
"Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Темата овозможува можно полесно прилагодување на изгледот и чувството на вашите истанци и поддржани клиенти. Ова ќе биде видливо за сите корисници.",
|
||||
"Instead of a background image you can also configure a plain background color. If you use a background image changing this color will influence the color of the app menu icons." : "Наместо позадинска слика, можеш да конфигурираш обична позадинска боја. Ако користиш позадинска слика, менувањето на оваа боја ќе влијае на бојата на иконите во менито на апликациите.",
|
||||
"Background color" : "Боја на позадина",
|
||||
"Upload new logo" : "Прикачи ново лого",
|
||||
"Logo" : "Лого",
|
||||
@@ -66,6 +75,7 @@
|
||||
"Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Инсталирај ImageMagick додаток за PHP со што ќе се овозможи поддршка за SVG сликите автоматски да генерираат Фавикон базирано на прикаченото лого и боја.",
|
||||
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {linkstart}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {linkstart} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА.",
|
||||
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Доколку наидете на некој проблем, не се двоумете и пријавете го на {issuetracker} {linkend}. И доколку сакате можете да се приклучите кон нашиот дизајнерски тим{designteam} {linkend}!",
|
||||
"Unable to apply the setting." : "Не може да се примени поставката.",
|
||||
"Appearance and accessibility settings" : "Поставки за изглед и пристапност",
|
||||
"Misc accessibility options" : "Разни опции за пристапност",
|
||||
"Enable blur background filter (may increase GPU load)" : "Овозможи филтер за замаглување на позадината (може да го зголеми оптоварувањето на графичкиот процесор)",
|
||||
@@ -76,6 +86,7 @@
|
||||
"Keyboard shortcuts" : "Кратенки преку тастатура",
|
||||
"In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Во некои случаи, кратенките на тастатурата може да се мешаат со алатките за пристапност. За да овозможите правилно фокусирање на вашата алатка, можете да ги оневозможите сите кратенки на тастатурата овде. Ова исто така ќе ги оневозможи сите достапни кратенки во апликациите.",
|
||||
"Disable all keyboard shortcuts" : "Оневозможи ги сите кратенки преку тастатурата",
|
||||
"Current selected app: {app}, position {position} of {total}" : "Моментално избрана апликација: {app}, позиција {position} од {total}.",
|
||||
"Move up" : "Помести горе",
|
||||
"Move down" : "Помести доле",
|
||||
"Select a background from your files" : "Избери позадина од датотеките",
|
||||
@@ -106,6 +117,7 @@
|
||||
"Reset to default" : "Ресетирај на стандардно",
|
||||
"Upload" : "Прикачи",
|
||||
"Remove background image" : "Избриши ја позадинската слика",
|
||||
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {guidelines} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА."
|
||||
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {guidelines} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА.",
|
||||
". Unable to apply the setting." : "Не може да се примени поставката."
|
||||
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\Theming;
|
||||
|
||||
use OCP\Config\Lexicon\Entry;
|
||||
use OCP\Config\Lexicon\ILexicon;
|
||||
use OCP\Config\Lexicon\Strictness;
|
||||
use OCP\Config\ValueType;
|
||||
|
||||
/**
|
||||
* Config Lexicon for theming.
|
||||
*
|
||||
* Please Add & Manage your Config Keys in that file and keep the Lexicon up to date!
|
||||
*
|
||||
* {@see ILexicon}
|
||||
*/
|
||||
class ConfigLexicon implements ILexicon {
|
||||
/** The cache buster index */
|
||||
public const CACHE_BUSTER = 'cachebuster';
|
||||
public const USER_THEMING_DISABLED = 'disable-user-theming';
|
||||
|
||||
/** Name of the software running on this instance (usually "Nextcloud") */
|
||||
public const PRODUCT_NAME = 'productName';
|
||||
/** Short name of this instance */
|
||||
public const INSTANCE_NAME = 'name';
|
||||
/** Slogan of this instance */
|
||||
public const INSTANCE_SLOGAN = 'slogan';
|
||||
/** Imprint URL of this instance */
|
||||
public const INSTANCE_IMPRINT_URL = 'imprintUrl';
|
||||
/** Privacy URL of this instance */
|
||||
public const INSTANCE_PRIVACY_URL = 'privacyUrl';
|
||||
|
||||
// legacy theming
|
||||
/** Base URL of this instance */
|
||||
public const BASE_URL = 'url';
|
||||
/** Base URL for documentation */
|
||||
public const DOC_BASE_URL = 'docBaseUrl';
|
||||
|
||||
public function getStrictness(): Strictness {
|
||||
return Strictness::NOTICE;
|
||||
}
|
||||
|
||||
public function getAppConfigs(): array {
|
||||
return [
|
||||
// internals
|
||||
new Entry(
|
||||
self::CACHE_BUSTER,
|
||||
ValueType::INT,
|
||||
defaultRaw: 0,
|
||||
definition: 'The current cache buster key for theming assets.',
|
||||
),
|
||||
new Entry(
|
||||
self::USER_THEMING_DISABLED,
|
||||
ValueType::BOOL,
|
||||
defaultRaw: false,
|
||||
definition: 'Whether user theming is disabled.',
|
||||
),
|
||||
|
||||
// instance theming
|
||||
new Entry(
|
||||
self::PRODUCT_NAME,
|
||||
ValueType::STRING,
|
||||
defaultRaw: 'Nextcloud',
|
||||
definition: 'The name of the software running on this instance (usually "Nextcloud").',
|
||||
),
|
||||
new Entry(
|
||||
self::INSTANCE_NAME,
|
||||
ValueType::STRING,
|
||||
defaultRaw: '',
|
||||
definition: 'Short name of this instance.',
|
||||
),
|
||||
new Entry(
|
||||
self::INSTANCE_SLOGAN,
|
||||
ValueType::STRING,
|
||||
defaultRaw: '',
|
||||
definition: 'Slogan of this instance.',
|
||||
),
|
||||
new Entry(
|
||||
self::INSTANCE_IMPRINT_URL,
|
||||
ValueType::STRING,
|
||||
defaultRaw: '',
|
||||
definition: 'Imprint URL of this instance.',
|
||||
),
|
||||
new Entry(
|
||||
self::INSTANCE_PRIVACY_URL,
|
||||
ValueType::STRING,
|
||||
defaultRaw: '',
|
||||
definition: 'Privacy URL of this instance.',
|
||||
),
|
||||
|
||||
// legacy theming
|
||||
new Entry(
|
||||
self::BASE_URL,
|
||||
ValueType::STRING,
|
||||
defaultRaw: '',
|
||||
definition: 'Base URL of this instance.',
|
||||
),
|
||||
new Entry(
|
||||
self::DOC_BASE_URL,
|
||||
ValueType::STRING,
|
||||
defaultRaw: '',
|
||||
definition: 'Base URL for documentation.',
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
public function getUserConfigs(): array {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -10,9 +10,9 @@ use OCA\Theming\AppInfo\Application;
|
||||
use OCA\Theming\Service\BackgroundService;
|
||||
use OCP\App\AppPathNotFoundException;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\Services\IAppConfig;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\Files\SimpleFS\ISimpleFile;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\ICacheFactory;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
@@ -69,27 +69,27 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return strip_tags($this->config->getAppValue('theming', 'name', $this->name));
|
||||
return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->name));
|
||||
}
|
||||
|
||||
public function getHTMLName() {
|
||||
return $this->config->getAppValue('theming', 'name', $this->name);
|
||||
return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->name);
|
||||
}
|
||||
|
||||
public function getTitle() {
|
||||
return strip_tags($this->config->getAppValue('theming', 'name', $this->title));
|
||||
return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->title));
|
||||
}
|
||||
|
||||
public function getEntity() {
|
||||
return strip_tags($this->config->getAppValue('theming', 'name', $this->entity));
|
||||
return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->entity));
|
||||
}
|
||||
|
||||
public function getProductName() {
|
||||
return strip_tags($this->config->getAppValue('theming', 'productName', $this->productName));
|
||||
return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::PRODUCT_NAME, $this->productName));
|
||||
}
|
||||
|
||||
public function getBaseUrl() {
|
||||
return $this->config->getAppValue('theming', 'url', $this->url);
|
||||
return $this->appConfig->getAppValueString(ConfigLexicon::BASE_URL, $this->url);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -97,20 +97,20 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* @psalm-suppress InvalidReturnStatement
|
||||
* @psalm-suppress InvalidReturnType
|
||||
*/
|
||||
public function getSlogan(?string $lang = null) {
|
||||
return \OCP\Util::sanitizeHTML($this->config->getAppValue('theming', 'slogan', parent::getSlogan($lang)));
|
||||
public function getSlogan(?string $lang = null): string {
|
||||
return \OCP\Util::sanitizeHTML($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_SLOGAN, parent::getSlogan($lang)));
|
||||
}
|
||||
|
||||
public function getImprintUrl() {
|
||||
return (string)$this->config->getAppValue('theming', 'imprintUrl', '');
|
||||
public function getImprintUrl(): string {
|
||||
return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_IMPRINT_URL, '');
|
||||
}
|
||||
|
||||
public function getPrivacyUrl() {
|
||||
return (string)$this->config->getAppValue('theming', 'privacyUrl', '');
|
||||
public function getPrivacyUrl(): string {
|
||||
return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_PRIVACY_URL, '');
|
||||
}
|
||||
|
||||
public function getDocBaseUrl() {
|
||||
return (string)$this->config->getAppValue('theming', 'docBaseUrl', $this->docBaseUrl);
|
||||
public function getDocBaseUrl(): string {
|
||||
return $this->appConfig->getAppValueString(ConfigLexicon::DOC_BASE_URL, $this->docBaseUrl);
|
||||
}
|
||||
|
||||
public function getShortFooter() {
|
||||
@@ -132,11 +132,11 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
$links = [
|
||||
[
|
||||
'text' => $this->l->t('Legal notice'),
|
||||
'url' => (string)$this->getImprintUrl()
|
||||
'url' => $this->getImprintUrl()
|
||||
],
|
||||
[
|
||||
'text' => $this->l->t('Privacy policy'),
|
||||
'url' => (string)$this->getPrivacyUrl()
|
||||
'url' => $this->getPrivacyUrl()
|
||||
],
|
||||
];
|
||||
|
||||
@@ -224,7 +224,7 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
*/
|
||||
public function getDefaultColorPrimary(): string {
|
||||
// try admin color
|
||||
$defaultColor = $this->appConfig->getValueString(Application::APP_ID, 'primary_color', '');
|
||||
$defaultColor = $this->appConfig->getAppValueString('primary_color', '');
|
||||
if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $defaultColor)) {
|
||||
return $defaultColor;
|
||||
}
|
||||
@@ -237,7 +237,7 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* Default background color only taking admin setting into account
|
||||
*/
|
||||
public function getDefaultColorBackground(): string {
|
||||
$defaultColor = $this->appConfig->getValueString(Application::APP_ID, 'background_color');
|
||||
$defaultColor = $this->appConfig->getAppValueString('background_color');
|
||||
if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $defaultColor)) {
|
||||
return $defaultColor;
|
||||
}
|
||||
@@ -252,14 +252,14 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* @return string
|
||||
*/
|
||||
public function getLogo($useSvg = true): string {
|
||||
$logo = $this->config->getAppValue('theming', 'logoMime', '');
|
||||
$logo = $this->appConfig->getAppValueString('logoMime', '');
|
||||
|
||||
// short cut to avoid setting up the filesystem just to check if the logo is there
|
||||
//
|
||||
// explanation: if an SVG is requested and the app config value for logoMime is set then the logo is there.
|
||||
// otherwise we need to check it and maybe also generate a PNG from the SVG (that's done in getImage() which
|
||||
// needs to be called then)
|
||||
if ($useSvg === true && $logo !== false) {
|
||||
if ($useSvg === true && $logo !== '') {
|
||||
$logoExists = true;
|
||||
} else {
|
||||
try {
|
||||
@@ -270,8 +270,7 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
}
|
||||
}
|
||||
|
||||
$cacheBusterCounter = $this->config->getAppValue('theming', 'cachebuster', '0');
|
||||
|
||||
$cacheBusterCounter = (string)$this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
|
||||
if (!$logo || !$logoExists) {
|
||||
if ($useSvg) {
|
||||
$logo = $this->urlGenerator->imagePath('core', 'logo/logo.svg');
|
||||
@@ -298,28 +297,28 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* @return string
|
||||
*/
|
||||
public function getiTunesAppId() {
|
||||
return $this->config->getAppValue('theming', 'iTunesAppId', $this->iTunesAppId);
|
||||
return $this->appConfig->getAppValueString('iTunesAppId', $this->iTunesAppId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getiOSClientUrl() {
|
||||
return $this->config->getAppValue('theming', 'iOSClientUrl', $this->iOSClientUrl);
|
||||
return $this->appConfig->getAppValueString('iOSClientUrl', $this->iOSClientUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getAndroidClientUrl() {
|
||||
return $this->config->getAppValue('theming', 'AndroidClientUrl', $this->AndroidClientUrl);
|
||||
return $this->appConfig->getAppValueString('AndroidClientUrl', $this->AndroidClientUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getFDroidClientUrl() {
|
||||
return $this->config->getAppValue('theming', 'FDroidClientUrl', $this->FDroidClientUrl);
|
||||
return $this->appConfig->getAppValueString('FDroidClientUrl', $this->FDroidClientUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -327,18 +326,18 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* @deprecated since Nextcloud 22 - https://github.com/nextcloud/server/issues/9940
|
||||
*/
|
||||
public function getScssVariables() {
|
||||
$cacheBuster = $this->config->getAppValue('theming', 'cachebuster', '0');
|
||||
$cache = $this->cacheFactory->createDistributed('theming-' . $cacheBuster . '-' . $this->urlGenerator->getBaseUrl());
|
||||
$cacheBuster = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
|
||||
$cache = $this->cacheFactory->createDistributed('theming-' . (string)$cacheBuster . '-' . $this->urlGenerator->getBaseUrl());
|
||||
if ($value = $cache->get('getScssVariables')) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
$variables = [
|
||||
'theming-cachebuster' => "'" . $cacheBuster . "'",
|
||||
'theming-logo-mime' => "'" . $this->config->getAppValue('theming', 'logoMime') . "'",
|
||||
'theming-background-mime' => "'" . $this->config->getAppValue('theming', 'backgroundMime') . "'",
|
||||
'theming-logoheader-mime' => "'" . $this->config->getAppValue('theming', 'logoheaderMime') . "'",
|
||||
'theming-favicon-mime' => "'" . $this->config->getAppValue('theming', 'faviconMime') . "'"
|
||||
'theming-logo-mime' => "'" . $this->appConfig->getAppValueString('logoMime') . "'",
|
||||
'theming-background-mime' => "'" . $this->appConfig->getAppValueString('backgroundMime') . "'",
|
||||
'theming-logoheader-mime' => "'" . $this->appConfig->getAppValueString('logoheaderMime') . "'",
|
||||
'theming-favicon-mime' => "'" . $this->appConfig->getAppValueString('faviconMime') . "'"
|
||||
];
|
||||
|
||||
$variables['image-logo'] = "url('" . $this->imageManager->getImageUrl('logo') . "')";
|
||||
@@ -347,13 +346,13 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
$variables['image-login-background'] = "url('" . $this->imageManager->getImageUrl('background') . "')";
|
||||
$variables['image-login-plain'] = 'false';
|
||||
|
||||
if ($this->appConfig->getValueString(Application::APP_ID, 'primary_color', '') !== '') {
|
||||
if ($this->appConfig->getAppValueString('primary_color', '') !== '') {
|
||||
$variables['color-primary'] = $this->getColorPrimary();
|
||||
$variables['color-primary-text'] = $this->getTextColorPrimary();
|
||||
$variables['color-primary-element'] = $this->util->elementColor($this->getColorPrimary());
|
||||
}
|
||||
|
||||
if ($this->config->getAppValue('theming', 'backgroundMime', '') === 'backgroundColor') {
|
||||
if ($this->appConfig->getAppValueString('backgroundMime', '') === 'backgroundColor') {
|
||||
$variables['image-login-plain'] = 'true';
|
||||
}
|
||||
|
||||
@@ -378,7 +377,6 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
if ($app === '' || $app === 'files_sharing') {
|
||||
$app = 'core';
|
||||
}
|
||||
$cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0');
|
||||
|
||||
$route = false;
|
||||
if ($image === 'favicon.ico' && ($this->imageManager->shouldReplaceIcons() || $this->getCustomFavicon() !== null)) {
|
||||
@@ -420,8 +418,8 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* Increases the cache buster key
|
||||
*/
|
||||
public function increaseCacheBuster(): void {
|
||||
$cacheBusterKey = (int)$this->config->getAppValue('theming', 'cachebuster', '0');
|
||||
$this->config->setAppValue('theming', 'cachebuster', (string)($cacheBusterKey + 1));
|
||||
$cacheBusterKey = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
|
||||
$this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, $cacheBusterKey + 1);
|
||||
$this->cacheFactory->createDistributed('theming-')->clear();
|
||||
$this->cacheFactory->createDistributed('imagePath')->clear();
|
||||
}
|
||||
@@ -433,7 +431,18 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* @param string $value
|
||||
*/
|
||||
public function set($setting, $value): void {
|
||||
$this->appConfig->setValueString('theming', $setting, $value);
|
||||
switch ($value) {
|
||||
case ConfigLexicon::CACHE_BUSTER:
|
||||
$this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, (int)$value);
|
||||
break;
|
||||
case ConfigLexicon::USER_THEMING_DISABLED:
|
||||
$value = $value === 'true' || $value === 'yes' || $value === '1';
|
||||
$this->appConfig->setAppValueBool(ConfigLexicon::USER_THEMING_DISABLED, $value);
|
||||
break;
|
||||
default:
|
||||
$this->appConfig->setAppValueString($setting, $value);
|
||||
break;
|
||||
}
|
||||
$this->increaseCacheBuster();
|
||||
}
|
||||
|
||||
@@ -443,9 +452,9 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
public function undoAll(): void {
|
||||
// Remember the current cachebuster value, as we do not want to reset this value
|
||||
// Otherwise this can lead to caching issues as the value might be known to a browser already
|
||||
$cacheBusterKey = $this->config->getAppValue('theming', 'cachebuster', '0');
|
||||
$this->config->deleteAppValues('theming');
|
||||
$this->config->setAppValue('theming', 'cachebuster', $cacheBusterKey);
|
||||
$cacheBusterKey = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
|
||||
$this->appConfig->deleteAppValues();
|
||||
$this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, $cacheBusterKey);
|
||||
$this->increaseCacheBuster();
|
||||
}
|
||||
|
||||
@@ -456,7 +465,7 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* @return string default value
|
||||
*/
|
||||
public function undo($setting): string {
|
||||
$this->config->deleteAppValue('theming', $setting);
|
||||
$this->appConfig->deleteAppValue($setting);
|
||||
$this->increaseCacheBuster();
|
||||
|
||||
$returnValue = '';
|
||||
@@ -485,7 +494,7 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
case 'background':
|
||||
case 'favicon':
|
||||
$this->imageManager->delete($setting);
|
||||
$this->config->deleteAppValue('theming', $setting . 'Mime');
|
||||
$this->appConfig->deleteAppValue($setting . 'Mime');
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -523,6 +532,6 @@ class ThemingDefaults extends \OC_Defaults {
|
||||
* Has the admin disabled user customization
|
||||
*/
|
||||
public function isUserThemingDisabled(): bool {
|
||||
return $this->appConfig->getValueBool(Application::APP_ID, 'disable-user-theming');
|
||||
return $this->appConfig->getAppValueBool(ConfigLexicon::USER_THEMING_DISABLED, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ use OCA\Theming\Service\BackgroundService;
|
||||
use OCA\Theming\ThemingDefaults;
|
||||
use OCA\Theming\Util;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\AppFramework\Services\IAppConfig;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\ICache;
|
||||
use OCP\ICacheFactory;
|
||||
use OCP\IConfig;
|
||||
@@ -28,8 +28,7 @@ use Test\TestCase;
|
||||
class ThemingDefaultsTest extends TestCase {
|
||||
private IAppConfig&MockObject $appConfig;
|
||||
private IConfig&MockObject $config;
|
||||
private \OC_Defaults $defaults;
|
||||
private IL10N|MockObject $l10n;
|
||||
private IL10N&MockObject $l10n;
|
||||
private IUserSession&MockObject $userSession;
|
||||
private IURLGenerator&MockObject $urlGenerator;
|
||||
private ICacheFactory&MockObject $cacheFactory;
|
||||
@@ -39,6 +38,8 @@ class ThemingDefaultsTest extends TestCase {
|
||||
private ImageManager&MockObject $imageManager;
|
||||
private INavigationManager&MockObject $navigationManager;
|
||||
private BackgroundService&MockObject $backgroundService;
|
||||
|
||||
private \OC_Defaults $defaults;
|
||||
private ThemingDefaults $template;
|
||||
|
||||
protected function setUp(): void {
|
||||
@@ -76,60 +77,60 @@ class ThemingDefaultsTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testGetNameWithDefault(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'name', 'Nextcloud')
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('Nextcloud');
|
||||
|
||||
$this->assertEquals('Nextcloud', $this->template->getName());
|
||||
}
|
||||
|
||||
public function testGetNameWithCustom(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'name', 'Nextcloud')
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('MyCustomCloud');
|
||||
|
||||
$this->assertEquals('MyCustomCloud', $this->template->getName());
|
||||
}
|
||||
|
||||
public function testGetHTMLNameWithDefault(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'name', 'Nextcloud')
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('Nextcloud');
|
||||
|
||||
$this->assertEquals('Nextcloud', $this->template->getHTMLName());
|
||||
}
|
||||
|
||||
public function testGetHTMLNameWithCustom(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'name', 'Nextcloud')
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('MyCustomCloud');
|
||||
|
||||
$this->assertEquals('MyCustomCloud', $this->template->getHTMLName());
|
||||
}
|
||||
|
||||
public function testGetTitleWithDefault(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'name', 'Nextcloud')
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('Nextcloud');
|
||||
|
||||
$this->assertEquals('Nextcloud', $this->template->getTitle());
|
||||
}
|
||||
|
||||
public function testGetTitleWithCustom(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'name', 'Nextcloud')
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('MyCustomCloud');
|
||||
|
||||
$this->assertEquals('MyCustomCloud', $this->template->getTitle());
|
||||
@@ -137,40 +138,40 @@ class ThemingDefaultsTest extends TestCase {
|
||||
|
||||
|
||||
public function testGetEntityWithDefault(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'name', 'Nextcloud')
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('Nextcloud');
|
||||
|
||||
$this->assertEquals('Nextcloud', $this->template->getEntity());
|
||||
}
|
||||
|
||||
public function testGetEntityWithCustom(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'name', 'Nextcloud')
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('MyCustomCloud');
|
||||
|
||||
$this->assertEquals('MyCustomCloud', $this->template->getEntity());
|
||||
}
|
||||
|
||||
public function testGetBaseUrlWithDefault(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'url', $this->defaults->getBaseUrl())
|
||||
->method('getAppValueString')
|
||||
->with('url', $this->defaults->getBaseUrl())
|
||||
->willReturn($this->defaults->getBaseUrl());
|
||||
|
||||
$this->assertEquals($this->defaults->getBaseUrl(), $this->template->getBaseUrl());
|
||||
}
|
||||
|
||||
public function testGetBaseUrlWithCustom(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'url', $this->defaults->getBaseUrl())
|
||||
->method('getAppValueString')
|
||||
->with('url', $this->defaults->getBaseUrl())
|
||||
->willReturn('https://example.com/');
|
||||
|
||||
$this->assertEquals('https://example.com/', $this->template->getBaseUrl());
|
||||
@@ -185,10 +186,10 @@ class ThemingDefaultsTest extends TestCase {
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\DataProvider('legalUrlProvider')]
|
||||
public function testGetImprintURL(string $imprintUrl): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'imprintUrl', '')
|
||||
->method('getAppValueString')
|
||||
->with('imprintUrl', '')
|
||||
->willReturn($imprintUrl);
|
||||
|
||||
$this->assertEquals($imprintUrl, $this->template->getImprintUrl());
|
||||
@@ -196,45 +197,45 @@ class ThemingDefaultsTest extends TestCase {
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\DataProvider('legalUrlProvider')]
|
||||
public function testGetPrivacyURL(string $privacyUrl): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'privacyUrl', '')
|
||||
->method('getAppValueString')
|
||||
->with('privacyUrl', '')
|
||||
->willReturn($privacyUrl);
|
||||
|
||||
$this->assertEquals($privacyUrl, $this->template->getPrivacyUrl());
|
||||
}
|
||||
|
||||
public function testGetSloganWithDefault(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'slogan', $this->defaults->getSlogan())
|
||||
->method('getAppValueString')
|
||||
->with('slogan', $this->defaults->getSlogan())
|
||||
->willReturn($this->defaults->getSlogan());
|
||||
|
||||
$this->assertEquals($this->defaults->getSlogan(), $this->template->getSlogan());
|
||||
}
|
||||
|
||||
public function testGetSloganWithCustom(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'slogan', $this->defaults->getSlogan())
|
||||
->method('getAppValueString')
|
||||
->with('slogan', $this->defaults->getSlogan())
|
||||
->willReturn('My custom Slogan');
|
||||
|
||||
$this->assertEquals('My custom Slogan', $this->template->getSlogan());
|
||||
}
|
||||
|
||||
public function testGetShortFooter(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->exactly(5))
|
||||
->method('getAppValue')
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['theming', 'name', 'Nextcloud', 'Name'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['theming', 'imprintUrl', '', ''],
|
||||
['theming', 'privacyUrl', '', ''],
|
||||
['url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['name', 'Nextcloud', 'Name'],
|
||||
['slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['imprintUrl', '', ''],
|
||||
['privacyUrl', '', ''],
|
||||
]);
|
||||
|
||||
$this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan', $this->template->getShortFooter());
|
||||
@@ -242,15 +243,15 @@ class ThemingDefaultsTest extends TestCase {
|
||||
|
||||
public function testGetShortFooterEmptyUrl(): void {
|
||||
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->exactly(5))
|
||||
->method('getAppValue')
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), ''],
|
||||
['theming', 'name', 'Nextcloud', 'Name'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['theming', 'imprintUrl', '', ''],
|
||||
['theming', 'privacyUrl', '', ''],
|
||||
['url', $this->defaults->getBaseUrl(), ''],
|
||||
['name', 'Nextcloud', 'Name'],
|
||||
['slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['imprintUrl', '', ''],
|
||||
['privacyUrl', '', ''],
|
||||
]);
|
||||
|
||||
$this->assertEquals('<span class="entity-name">Name</span> – Slogan', $this->template->getShortFooter());
|
||||
@@ -258,15 +259,15 @@ class ThemingDefaultsTest extends TestCase {
|
||||
|
||||
public function testGetShortFooterEmptySlogan(): void {
|
||||
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->exactly(5))
|
||||
->method('getAppValue')
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['theming', 'name', 'Nextcloud', 'Name'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), ''],
|
||||
['theming', 'imprintUrl', '', ''],
|
||||
['theming', 'privacyUrl', '', ''],
|
||||
['url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['name', 'Nextcloud', 'Name'],
|
||||
['slogan', $this->defaults->getSlogan(), ''],
|
||||
['imprintUrl', '', ''],
|
||||
['privacyUrl', '', ''],
|
||||
]);
|
||||
|
||||
$this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a>', $this->template->getShortFooter());
|
||||
@@ -274,15 +275,15 @@ class ThemingDefaultsTest extends TestCase {
|
||||
|
||||
public function testGetShortFooterImprint(): void {
|
||||
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->exactly(5))
|
||||
->method('getAppValue')
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['theming', 'name', 'Nextcloud', 'Name'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['theming', 'imprintUrl', '', 'https://example.com/imprint'],
|
||||
['theming', 'privacyUrl', '', ''],
|
||||
['url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['name', 'Nextcloud', 'Name'],
|
||||
['slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['imprintUrl', '', 'https://example.com/imprint'],
|
||||
['privacyUrl', '', ''],
|
||||
]);
|
||||
|
||||
$this->l10n
|
||||
@@ -295,15 +296,15 @@ class ThemingDefaultsTest extends TestCase {
|
||||
|
||||
public function testGetShortFooterPrivacy(): void {
|
||||
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->exactly(5))
|
||||
->method('getAppValue')
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['theming', 'name', 'Nextcloud', 'Name'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['theming', 'imprintUrl', '', ''],
|
||||
['theming', 'privacyUrl', '', 'https://example.com/privacy'],
|
||||
['url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['name', 'Nextcloud', 'Name'],
|
||||
['slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['imprintUrl', '', ''],
|
||||
['privacyUrl', '', 'https://example.com/privacy'],
|
||||
]);
|
||||
|
||||
$this->l10n
|
||||
@@ -316,15 +317,15 @@ class ThemingDefaultsTest extends TestCase {
|
||||
|
||||
public function testGetShortFooterAllLegalLinks(): void {
|
||||
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->exactly(5))
|
||||
->method('getAppValue')
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['theming', 'name', 'Nextcloud', 'Name'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['theming', 'imprintUrl', '', 'https://example.com/imprint'],
|
||||
['theming', 'privacyUrl', '', 'https://example.com/privacy'],
|
||||
['url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['name', 'Nextcloud', 'Name'],
|
||||
['slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['imprintUrl', '', 'https://example.com/imprint'],
|
||||
['privacyUrl', '', 'https://example.com/privacy'],
|
||||
]);
|
||||
|
||||
$this->l10n
|
||||
@@ -345,15 +346,15 @@ class ThemingDefaultsTest extends TestCase {
|
||||
#[\PHPUnit\Framework\Attributes\DataProvider('invalidLegalUrlProvider')]
|
||||
public function testGetShortFooterInvalidImprint(string $invalidImprintUrl): void {
|
||||
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->exactly(5))
|
||||
->method('getAppValue')
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['theming', 'name', 'Nextcloud', 'Name'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['theming', 'imprintUrl', '', $invalidImprintUrl],
|
||||
['theming', 'privacyUrl', '', ''],
|
||||
['url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['name', 'Nextcloud', 'Name'],
|
||||
['slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['imprintUrl', '', $invalidImprintUrl],
|
||||
['privacyUrl', '', ''],
|
||||
]);
|
||||
|
||||
$this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan', $this->template->getShortFooter());
|
||||
@@ -362,15 +363,15 @@ class ThemingDefaultsTest extends TestCase {
|
||||
#[\PHPUnit\Framework\Attributes\DataProvider('invalidLegalUrlProvider')]
|
||||
public function testGetShortFooterInvalidPrivacy(string $invalidPrivacyUrl): void {
|
||||
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->exactly(5))
|
||||
->method('getAppValue')
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['theming', 'name', 'Nextcloud', 'Name'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['theming', 'imprintUrl', '', ''],
|
||||
['theming', 'privacyUrl', '', $invalidPrivacyUrl],
|
||||
['url', $this->defaults->getBaseUrl(), 'url'],
|
||||
['name', 'Nextcloud', 'Name'],
|
||||
['slogan', $this->defaults->getSlogan(), 'Slogan'],
|
||||
['imprintUrl', '', ''],
|
||||
['privacyUrl', '', $invalidPrivacyUrl],
|
||||
]);
|
||||
|
||||
$this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> – Slogan', $this->template->getShortFooter());
|
||||
@@ -379,13 +380,13 @@ class ThemingDefaultsTest extends TestCase {
|
||||
public function testGetColorPrimaryWithDefault(): void {
|
||||
$this->appConfig
|
||||
->expects(self::once())
|
||||
->method('getValueBool')
|
||||
->with('theming', 'disable-user-theming')
|
||||
->method('getAppValueBool')
|
||||
->with('disable-user-theming')
|
||||
->willReturn(false);
|
||||
$this->appConfig
|
||||
->expects(self::once())
|
||||
->method('getValueString')
|
||||
->with('theming', 'primary_color', '')
|
||||
->method('getAppValueString')
|
||||
->with('primary_color', '')
|
||||
->willReturn($this->defaults->getColorPrimary());
|
||||
|
||||
$this->assertEquals($this->defaults->getColorPrimary(), $this->template->getColorPrimary());
|
||||
@@ -394,13 +395,13 @@ class ThemingDefaultsTest extends TestCase {
|
||||
public function testGetColorPrimaryWithCustom(): void {
|
||||
$this->appConfig
|
||||
->expects(self::once())
|
||||
->method('getValueBool')
|
||||
->with('theming', 'disable-user-theming')
|
||||
->method('getAppValueBool')
|
||||
->with('disable-user-theming')
|
||||
->willReturn(false);
|
||||
$this->appConfig
|
||||
->expects(self::once())
|
||||
->method('getValueString')
|
||||
->with('theming', 'primary_color', '')
|
||||
->method('getAppValueString')
|
||||
->with('primary_color', '')
|
||||
->willReturn('#fff');
|
||||
|
||||
$this->assertEquals('#fff', $this->template->getColorPrimary());
|
||||
@@ -458,13 +459,13 @@ class ThemingDefaultsTest extends TestCase {
|
||||
->willReturn('user');
|
||||
$this->appConfig
|
||||
->expects(self::any())
|
||||
->method('getValueBool')
|
||||
->with('theming', 'disable-user-theming')
|
||||
->method('getAppValueBool')
|
||||
->with('disable-user-theming')
|
||||
->willReturn($disableTheming);
|
||||
$this->appConfig
|
||||
->expects(self::any())
|
||||
->method('getValueString')
|
||||
->with('theming', 'primary_color', '')
|
||||
->method('getAppValueString')
|
||||
->with('primary_color', '')
|
||||
->willReturn($primaryColor);
|
||||
$this->config
|
||||
->expects($this->any())
|
||||
@@ -476,19 +477,19 @@ class ThemingDefaultsTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testSet(): void {
|
||||
$this->config
|
||||
->expects($this->once())
|
||||
->method('setAppValue')
|
||||
->with('theming', 'cachebuster', 16);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setValueString')
|
||||
->with('theming', 'MySetting', 'MyValue');
|
||||
$this->config
|
||||
->method('setAppValueInt')
|
||||
->with('cachebuster', 16);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'cachebuster', '0')
|
||||
->willReturn('15');
|
||||
->method('setAppValueString')
|
||||
->with('MySetting', 'MyValue');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(15);
|
||||
$this->cacheFactory
|
||||
->expects($this->exactly(2))
|
||||
->method('createDistributed')
|
||||
@@ -504,97 +505,106 @@ class ThemingDefaultsTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testUndoName(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('deleteAppValue')
|
||||
->with('theming', 'name');
|
||||
$this->config
|
||||
->expects($this->exactly(2))
|
||||
->method('getAppValue')
|
||||
->willReturnMap([
|
||||
['theming', 'cachebuster', '0', '15'],
|
||||
['theming', 'name', 'Nextcloud', 'Nextcloud'],
|
||||
]);
|
||||
$this->config
|
||||
->with('name');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setAppValue')
|
||||
->with('theming', 'cachebuster', 16);
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(15);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValueString')
|
||||
->with('name', 'Nextcloud')
|
||||
->willReturn('Nextcloud');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setAppValueInt')
|
||||
->with('cachebuster', 16);
|
||||
|
||||
$this->assertSame('Nextcloud', $this->template->undo('name'));
|
||||
}
|
||||
|
||||
public function testUndoBaseUrl(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('deleteAppValue')
|
||||
->with('theming', 'url');
|
||||
$this->config
|
||||
->expects($this->exactly(2))
|
||||
->method('getAppValue')
|
||||
->willReturnMap([
|
||||
['theming', 'cachebuster', '0', '15'],
|
||||
['theming', 'url', $this->defaults->getBaseUrl(), $this->defaults->getBaseUrl()],
|
||||
]);
|
||||
$this->config
|
||||
->with('url');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setAppValue')
|
||||
->with('theming', 'cachebuster', 16);
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(15);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValueString')
|
||||
->with('url', $this->defaults->getBaseUrl())
|
||||
->willReturn($this->defaults->getBaseUrl());
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setAppValueInt')
|
||||
->with('cachebuster', 16);
|
||||
|
||||
$this->assertSame($this->defaults->getBaseUrl(), $this->template->undo('url'));
|
||||
}
|
||||
|
||||
public function testUndoSlogan(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('deleteAppValue')
|
||||
->with('theming', 'slogan');
|
||||
$this->config
|
||||
->expects($this->exactly(2))
|
||||
->method('getAppValue')
|
||||
->willReturnMap([
|
||||
['theming', 'cachebuster', '0', '15'],
|
||||
['theming', 'slogan', $this->defaults->getSlogan(), $this->defaults->getSlogan()],
|
||||
]);
|
||||
$this->config
|
||||
->with('slogan');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setAppValue')
|
||||
->with('theming', 'cachebuster', 16);
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(15);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValueString')
|
||||
->with('slogan', $this->defaults->getSlogan())
|
||||
->willReturn($this->defaults->getSlogan());
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setAppValueInt')
|
||||
->with('cachebuster', 16);
|
||||
|
||||
$this->assertSame($this->defaults->getSlogan(), $this->template->undo('slogan'));
|
||||
}
|
||||
|
||||
public function testUndoPrimaryColor(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('deleteAppValue')
|
||||
->with('theming', 'primary_color');
|
||||
$this->config
|
||||
->with('primary_color');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'cachebuster', '0')
|
||||
->willReturn('15');
|
||||
$this->config
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(15);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setAppValue')
|
||||
->with('theming', 'cachebuster', 16);
|
||||
->method('setAppValueInt')
|
||||
->with('cachebuster', 16);
|
||||
|
||||
$this->assertSame($this->defaults->getColorPrimary(), $this->template->undo('primary_color'));
|
||||
}
|
||||
|
||||
public function testUndoDefaultAction(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('deleteAppValue')
|
||||
->with('theming', 'defaultitem');
|
||||
$this->config
|
||||
->with('defaultitem');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'cachebuster', '0')
|
||||
->willReturn('15');
|
||||
$this->config
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster', '0')
|
||||
->willReturn(15);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('setAppValue')
|
||||
->with('theming', 'cachebuster', 16);
|
||||
->method('setAppValueInt')
|
||||
->with('cachebuster', 16);
|
||||
|
||||
$this->assertSame('', $this->template->undo('defaultitem'));
|
||||
}
|
||||
@@ -613,13 +623,16 @@ class ThemingDefaultsTest extends TestCase {
|
||||
->method('getImage')
|
||||
->with('logo')
|
||||
->willThrowException(new NotFoundException());
|
||||
$this->config
|
||||
->expects($this->exactly(2))
|
||||
->method('getAppValue')
|
||||
->willReturnMap([
|
||||
['theming', 'logoMime', '', ''],
|
||||
['theming', 'cachebuster', '0', '0'],
|
||||
]);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValueString')
|
||||
->with('logoMime', '')
|
||||
->willReturn('');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(0);
|
||||
$this->urlGenerator->expects($this->once())
|
||||
->method('imagePath')
|
||||
->with('core', $withName)
|
||||
@@ -636,13 +649,16 @@ class ThemingDefaultsTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testGetLogoCustom(): void {
|
||||
$this->config
|
||||
->expects($this->exactly(2))
|
||||
->method('getAppValue')
|
||||
->willReturnMap([
|
||||
['theming', 'logoMime', '', 'image/svg+xml'],
|
||||
['theming', 'cachebuster', '0', '0'],
|
||||
]);
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValueString')
|
||||
->with('logoMime', '')
|
||||
->willReturn('image/svg+xml');
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(0);
|
||||
$this->urlGenerator->expects($this->once())
|
||||
->method('linkToRoute')
|
||||
->with('theming.Theming.getImage')
|
||||
@@ -651,7 +667,10 @@ class ThemingDefaultsTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testGetScssVariablesCached(): void {
|
||||
$this->config->expects($this->any())->method('getAppValue')->with('theming', 'cachebuster', '0')->willReturn('1');
|
||||
$this->appConfig->expects($this->any())
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(1);
|
||||
$this->cacheFactory->expects($this->once())
|
||||
->method('createDistributed')
|
||||
->with('theming-1-')
|
||||
@@ -661,23 +680,22 @@ class ThemingDefaultsTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testGetScssVariables(): void {
|
||||
$this->config
|
||||
->expects($this->any())
|
||||
->method('getAppValue')
|
||||
->willReturnMap([
|
||||
['theming', 'cachebuster', '0', '0'],
|
||||
['theming', 'logoMime', '', 'jpeg'],
|
||||
['theming', 'backgroundMime', '', 'jpeg'],
|
||||
['theming', 'logoheaderMime', '', 'jpeg'],
|
||||
['theming', 'faviconMime', '', 'jpeg'],
|
||||
]);
|
||||
|
||||
$this->appConfig->expects($this->any())
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(0);
|
||||
$this->appConfig
|
||||
->expects(self::atLeastOnce())
|
||||
->method('getValueString')
|
||||
->expects($this->any())
|
||||
->method('getAppValueString')
|
||||
->willReturnMap([
|
||||
['theming', 'primary_color', '', false, $this->defaults->getColorPrimary()],
|
||||
['theming', 'primary_color', $this->defaults->getColorPrimary(), false, $this->defaults->getColorPrimary()],
|
||||
['imprintUrl', '', ''],
|
||||
['privacyUrl', '', ''],
|
||||
['logoMime', '', 'jpeg'],
|
||||
['backgroundMime', '', 'jpeg'],
|
||||
['logoheaderMime', '', 'jpeg'],
|
||||
['faviconMime', '', 'jpeg'],
|
||||
['primary_color', '', false, $this->defaults->getColorPrimary()],
|
||||
['primary_color', $this->defaults->getColorPrimary(), false, $this->defaults->getColorPrimary()],
|
||||
]);
|
||||
|
||||
$this->util->expects($this->any())->method('invertTextColor')->with($this->defaults->getColorPrimary())->willReturn(false);
|
||||
@@ -716,60 +734,60 @@ class ThemingDefaultsTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testGetDefaultAndroidURL(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
|
||||
->method('getAppValueString')
|
||||
->with('AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
|
||||
->willReturn('https://play.google.com/store/apps/details?id=com.nextcloud.client');
|
||||
|
||||
$this->assertEquals('https://play.google.com/store/apps/details?id=com.nextcloud.client', $this->template->getAndroidClientUrl());
|
||||
}
|
||||
|
||||
public function testGetCustomAndroidURL(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
|
||||
->method('getAppValueString')
|
||||
->with('AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
|
||||
->willReturn('https://play.google.com/store/apps/details?id=com.mycloud.client');
|
||||
|
||||
$this->assertEquals('https://play.google.com/store/apps/details?id=com.mycloud.client', $this->template->getAndroidClientUrl());
|
||||
}
|
||||
|
||||
public function testGetDefaultiOSURL(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
|
||||
->method('getAppValueString')
|
||||
->with('iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
|
||||
->willReturn('https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8');
|
||||
|
||||
$this->assertEquals('https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8', $this->template->getiOSClientUrl());
|
||||
}
|
||||
|
||||
public function testGetCustomiOSURL(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
|
||||
->method('getAppValueString')
|
||||
->with('iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
|
||||
->willReturn('https://geo.itunes.apple.com/us/app/nextcloud/id1234567890?mt=8');
|
||||
|
||||
$this->assertEquals('https://geo.itunes.apple.com/us/app/nextcloud/id1234567890?mt=8', $this->template->getiOSClientUrl());
|
||||
}
|
||||
|
||||
public function testGetDefaultiTunesAppId(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'iTunesAppId', '1125420102')
|
||||
->method('getAppValueString')
|
||||
->with('iTunesAppId', '1125420102')
|
||||
->willReturn('1125420102');
|
||||
|
||||
$this->assertEquals('1125420102', $this->template->getiTunesAppId());
|
||||
}
|
||||
|
||||
public function testGetCustomiTunesAppId(): void {
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'iTunesAppId', '1125420102')
|
||||
->method('getAppValueString')
|
||||
->with('iTunesAppId', '1125420102')
|
||||
->willReturn('1234567890');
|
||||
|
||||
$this->assertEquals('1234567890', $this->template->getiTunesAppId());
|
||||
@@ -790,11 +808,11 @@ class ThemingDefaultsTest extends TestCase {
|
||||
->method('get')
|
||||
->with('shouldReplaceIcons')
|
||||
->willReturn(true);
|
||||
$this->config
|
||||
$this->appConfig
|
||||
->expects($this->any())
|
||||
->method('getAppValue')
|
||||
->with('theming', 'cachebuster', '0')
|
||||
->willReturn('0');
|
||||
->method('getAppValueInt')
|
||||
->with('cachebuster')
|
||||
->willReturn(0);
|
||||
$this->urlGenerator
|
||||
->expects($this->any())
|
||||
->method('linkToRoute')
|
||||
|
||||
@@ -8,9 +8,9 @@ OC.L10N.register(
|
||||
"Use backup code" : "Gebruik rugsteunkode",
|
||||
"Two factor backup codes" : "Tweefaktorrugsteunkodes",
|
||||
"An error occurred while generating your backup codes" : "’n fout het voorgekom tydens generering van u rugsteunkodes",
|
||||
"Save backup codes" : "Bewaar rugsteunkodes",
|
||||
"Print backup codes" : "Druk rugsteunkodes",
|
||||
"Regenerate backup codes" : "Hergenereer rugsteunkodes",
|
||||
"Print backup codes" : "Druk rugsteunkodes",
|
||||
"Save backup codes" : "Bewaar rugsteunkodes",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Indien u rugsteunkodes hergenereer maak u outomaties die ou kodes ongeldig.",
|
||||
"Submit" : "Dien in"
|
||||
},
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
"Use backup code" : "Gebruik rugsteunkode",
|
||||
"Two factor backup codes" : "Tweefaktorrugsteunkodes",
|
||||
"An error occurred while generating your backup codes" : "’n fout het voorgekom tydens generering van u rugsteunkodes",
|
||||
"Save backup codes" : "Bewaar rugsteunkodes",
|
||||
"Print backup codes" : "Druk rugsteunkodes",
|
||||
"Regenerate backup codes" : "Hergenereer rugsteunkodes",
|
||||
"Print backup codes" : "Druk rugsteunkodes",
|
||||
"Save backup codes" : "Bewaar rugsteunkodes",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Indien u rugsteunkodes hergenereer maak u outomaties die ou kodes ongeldig.",
|
||||
"Submit" : "Dien in"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -12,9 +12,9 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "حدث خطأ عند توليد أكوادك الاحتياطية",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "تمّ توليد الأكواد الاحتياطية. {used} من {total} تمّ استخدامها.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "هذه هي الرموز الاحتياطية الخاصة بك. يرجى حفظها و/أو طباعتها لأنك لن تتمكن من قراءة الرموز لاحقًا.",
|
||||
"Save backup codes" : "الإحتفاظ بالرموز الإحتياطية",
|
||||
"Print backup codes" : "طباعة الرموز الإحتياطية",
|
||||
"Regenerate backup codes" : "إعادة توليد رموز الإسترجاع الإحتياطية",
|
||||
"Print backup codes" : "طباعة الرموز الإحتياطية",
|
||||
"Save backup codes" : "الإحتفاظ بالرموز الإحتياطية",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "عندما تقوم بتوليد أكواد احتياطية جديدة، فإن الأكواد القديمة تفقد صلاحيتها تلقائيّتاً.",
|
||||
"{name} backup codes" : "{name} أكواد احتياطية",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "استخدم واحداً من الأكواد الاحتياطية التي سبق و أن خزنتها عند تجهيز إعدادات التحقق ثنائي العوامل من الهويّة.",
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"An error occurred while generating your backup codes" : "حدث خطأ عند توليد أكوادك الاحتياطية",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "تمّ توليد الأكواد الاحتياطية. {used} من {total} تمّ استخدامها.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "هذه هي الرموز الاحتياطية الخاصة بك. يرجى حفظها و/أو طباعتها لأنك لن تتمكن من قراءة الرموز لاحقًا.",
|
||||
"Save backup codes" : "الإحتفاظ بالرموز الإحتياطية",
|
||||
"Print backup codes" : "طباعة الرموز الإحتياطية",
|
||||
"Regenerate backup codes" : "إعادة توليد رموز الإسترجاع الإحتياطية",
|
||||
"Print backup codes" : "طباعة الرموز الإحتياطية",
|
||||
"Save backup codes" : "الإحتفاظ بالرموز الإحتياطية",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "عندما تقوم بتوليد أكواد احتياطية جديدة، فإن الأكواد القديمة تفقد صلاحيتها تلقائيّتاً.",
|
||||
"{name} backup codes" : "{name} أكواد احتياطية",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "استخدم واحداً من الأكواد الاحتياطية التي سبق و أن خزنتها عند تجهيز إعدادات التحقق ثنائي العوامل من الهويّة.",
|
||||
|
||||
@@ -11,9 +11,9 @@ OC.L10N.register(
|
||||
"A two-factor auth backup codes provider" : "Un fornidor de códigos de recuperación pa l'autenticación en dos pasos",
|
||||
"An error occurred while generating your backup codes" : "Prodúxose un error mentanto se xeneraben los códigos de recuperación",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Xeneráronse los códigos de recuperación y usáronse {used} de {total} códigos.",
|
||||
"Save backup codes" : "Guardar los códigos de recuperación",
|
||||
"Print backup codes" : "Imprentar los códigos de recuperación",
|
||||
"Regenerate backup codes" : "Volver xenerar los códigos de recuperación",
|
||||
"Print backup codes" : "Imprentar los códigos de recuperación",
|
||||
"Save backup codes" : "Guardar los códigos de recuperación",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vuelves xenerar los códigos de recuperación, anules automáticamente los antiguos.",
|
||||
"{name} backup codes" : "Códigos de recuperación de: {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Usa unu de los códigos de recuperación que guardesti cuando configuresti l'autenticación en dos pasos.",
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"A two-factor auth backup codes provider" : "Un fornidor de códigos de recuperación pa l'autenticación en dos pasos",
|
||||
"An error occurred while generating your backup codes" : "Prodúxose un error mentanto se xeneraben los códigos de recuperación",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Xeneráronse los códigos de recuperación y usáronse {used} de {total} códigos.",
|
||||
"Save backup codes" : "Guardar los códigos de recuperación",
|
||||
"Print backup codes" : "Imprentar los códigos de recuperación",
|
||||
"Regenerate backup codes" : "Volver xenerar los códigos de recuperación",
|
||||
"Print backup codes" : "Imprentar los códigos de recuperación",
|
||||
"Save backup codes" : "Guardar los códigos de recuperación",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vuelves xenerar los códigos de recuperación, anules automáticamente los antiguos.",
|
||||
"{name} backup codes" : "Códigos de recuperación de: {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Usa unu de los códigos de recuperación que guardesti cuando configuresti l'autenticación en dos pasos.",
|
||||
|
||||
@@ -11,9 +11,9 @@ OC.L10N.register(
|
||||
"A two-factor auth backup codes provider" : "Доставчик на двустепенни резервни кодове за удостоверяване",
|
||||
"An error occurred while generating your backup codes" : "Възникна грешка при генерирането на резервния код",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Резервен код е бил генериран. Използвани са {used} от {total} кода.",
|
||||
"Save backup codes" : "Записване на резервния код",
|
||||
"Print backup codes" : "Принтиране на резервния код",
|
||||
"Regenerate backup codes" : "Регенериране на резервния код",
|
||||
"Print backup codes" : "Принтиране на резервния код",
|
||||
"Save backup codes" : "Записване на резервния код",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "При регенерирането на резервния код, стария код автоматично бива анулиран.",
|
||||
"{name} backup codes" : "{name} резервни кодове",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Използвайте един от резервните кодове, които сте запазили, когато настройвате двустепенно удостоверяване.",
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"A two-factor auth backup codes provider" : "Доставчик на двустепенни резервни кодове за удостоверяване",
|
||||
"An error occurred while generating your backup codes" : "Възникна грешка при генерирането на резервния код",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Резервен код е бил генериран. Използвани са {used} от {total} кода.",
|
||||
"Save backup codes" : "Записване на резервния код",
|
||||
"Print backup codes" : "Принтиране на резервния код",
|
||||
"Regenerate backup codes" : "Регенериране на резервния код",
|
||||
"Print backup codes" : "Принтиране на резервния код",
|
||||
"Save backup codes" : "Записване на резервния код",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "При регенерирането на резервния код, стария код автоматично бива анулиран.",
|
||||
"{name} backup codes" : "{name} резервни кодове",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Използвайте един от резервните кодове, които сте запазили, когато настройвате двустепенно удостоверяване.",
|
||||
|
||||
@@ -12,9 +12,9 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "S'ha produït un error en generar els codis de reserva",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "S'han generat els codis de reserva. Heu utilitzat {used} de {total} codis.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Aquests són els vostres codis de reserva. Deseu-los o imprimiu-los, ja que no podreu tornar-los a consultar més tard.",
|
||||
"Save backup codes" : "Desa els codis de reserva",
|
||||
"Print backup codes" : "Imprimeix els codis de reserva",
|
||||
"Regenerate backup codes" : "Torna a generar els codis de reserva",
|
||||
"Print backup codes" : "Imprimeix els codis de reserva",
|
||||
"Save backup codes" : "Desa els codis de reserva",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si torneu a generar els codis de reserva, anul·lareu automàticament els codis antics.",
|
||||
"{name} backup codes" : "Codis de seguretat per a {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilitzeu un dels codis de reserva que vau desar en configurar l'autenticació de dos factors.",
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"An error occurred while generating your backup codes" : "S'ha produït un error en generar els codis de reserva",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "S'han generat els codis de reserva. Heu utilitzat {used} de {total} codis.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Aquests són els vostres codis de reserva. Deseu-los o imprimiu-los, ja que no podreu tornar-los a consultar més tard.",
|
||||
"Save backup codes" : "Desa els codis de reserva",
|
||||
"Print backup codes" : "Imprimeix els codis de reserva",
|
||||
"Regenerate backup codes" : "Torna a generar els codis de reserva",
|
||||
"Print backup codes" : "Imprimeix els codis de reserva",
|
||||
"Save backup codes" : "Desa els codis de reserva",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si torneu a generar els codis de reserva, anul·lareu automàticament els codis antics.",
|
||||
"{name} backup codes" : "Codis de seguretat per a {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilitzeu un dels codis de reserva que vau desar en configurar l'autenticació de dos factors.",
|
||||
|
||||
@@ -12,9 +12,9 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Záložní kódy byly vytvořeny. Využito {used} z {total} kódů.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Zde jsou vaše záložní kódy. Kódy si uložte a/nebo vytiskněte, protože už je nebude možné zobrazit znovu.",
|
||||
"Save backup codes" : "Uložit záložní kódy",
|
||||
"Print backup codes" : "Vytisknout záložní kódy",
|
||||
"Regenerate backup codes" : "Vytvořit nové záložní kódy",
|
||||
"Print backup codes" : "Vytisknout záložní kódy",
|
||||
"Save backup codes" : "Uložit záložní kódy",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Pokud necháte vytvořit nové záložní kódy, staré budou automaticky zneplatněny.",
|
||||
"{name} backup codes" : "{name} záložní kódy",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Použijte jeden ze svých záložních kódů které jste si uložili při nastavování dvoufázového ověřování.",
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Záložní kódy byly vytvořeny. Využito {used} z {total} kódů.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Zde jsou vaše záložní kódy. Kódy si uložte a/nebo vytiskněte, protože už je nebude možné zobrazit znovu.",
|
||||
"Save backup codes" : "Uložit záložní kódy",
|
||||
"Print backup codes" : "Vytisknout záložní kódy",
|
||||
"Regenerate backup codes" : "Vytvořit nové záložní kódy",
|
||||
"Print backup codes" : "Vytisknout záložní kódy",
|
||||
"Save backup codes" : "Uložit záložní kódy",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Pokud necháte vytvořit nové záložní kódy, staré budou automaticky zneplatněny.",
|
||||
"{name} backup codes" : "{name} záložní kódy",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Použijte jeden ze svých záložních kódů které jste si uložili při nastavování dvoufázového ověřování.",
|
||||
|
||||
@@ -12,9 +12,9 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "Der opstod en fejl under genereringen af dine backup-koder",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Sikkerhedskopieringskoder er blevet genereret. {used} af {total} koder er blevet brugt.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dette er dine backup-koder. Gem og/eller udskriv dem, da du ikke vil kunne se koderne igen senere.",
|
||||
"Save backup codes" : "Gem backup-koder",
|
||||
"Print backup codes" : "Print backup-koder",
|
||||
"Regenerate backup codes" : "Regenerer backup-koder",
|
||||
"Print backup codes" : "Print backup-koder",
|
||||
"Save backup codes" : "Gem backup-koder",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du genererer nye backupkoder, så vil de gamle koder blive ubrugelige.",
|
||||
"{name} backup codes" : "{name} backup-koder",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Brug en af de backupkoder, du har gemt, når du konfigurerer to-faktor-godkendelse.",
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"An error occurred while generating your backup codes" : "Der opstod en fejl under genereringen af dine backup-koder",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Sikkerhedskopieringskoder er blevet genereret. {used} af {total} koder er blevet brugt.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dette er dine backup-koder. Gem og/eller udskriv dem, da du ikke vil kunne se koderne igen senere.",
|
||||
"Save backup codes" : "Gem backup-koder",
|
||||
"Print backup codes" : "Print backup-koder",
|
||||
"Regenerate backup codes" : "Regenerer backup-koder",
|
||||
"Print backup codes" : "Print backup-koder",
|
||||
"Save backup codes" : "Gem backup-koder",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du genererer nye backupkoder, så vil de gamle koder blive ubrugelige.",
|
||||
"{name} backup codes" : "{name} backup-koder",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Brug en af de backupkoder, du har gemt, når du konfigurerer to-faktor-godkendelse.",
|
||||
|
||||
@@ -12,11 +12,13 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "Es ist ein Fehler beim Erstellen deiner Backup-Codes aufgetreten",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dies sind deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da du die Codes später nicht mehr abrufen kannst.",
|
||||
"Save backup codes" : "Backup-Codes speichern",
|
||||
"Print backup codes" : "Backup-Codes drucken",
|
||||
"List of backup codes" : "Liste der Backup-Codes",
|
||||
"Regenerate backup codes" : "Backup-Codes erneuern",
|
||||
"Print backup codes" : "Backup-Codes drucken",
|
||||
"Save backup codes" : "Backup-Codes speichern",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn du Backup-Codes erneuerst, werden alte automatisch ungültig.",
|
||||
"{name} backup codes" : "{name} Backup-Codes",
|
||||
"Unable to open a new tab for printing" : "Ein neuer Tab zum Drucken kann nicht geöffnet werden",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Verwende einen der Backup-Codes, den du bei der Einrichtung der Zwei-Faktor-Authentifizierung gespeichert hast.",
|
||||
"Submit" : "Übermitteln"
|
||||
},
|
||||
|
||||
@@ -10,11 +10,13 @@
|
||||
"An error occurred while generating your backup codes" : "Es ist ein Fehler beim Erstellen deiner Backup-Codes aufgetreten",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dies sind deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da du die Codes später nicht mehr abrufen kannst.",
|
||||
"Save backup codes" : "Backup-Codes speichern",
|
||||
"Print backup codes" : "Backup-Codes drucken",
|
||||
"List of backup codes" : "Liste der Backup-Codes",
|
||||
"Regenerate backup codes" : "Backup-Codes erneuern",
|
||||
"Print backup codes" : "Backup-Codes drucken",
|
||||
"Save backup codes" : "Backup-Codes speichern",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn du Backup-Codes erneuerst, werden alte automatisch ungültig.",
|
||||
"{name} backup codes" : "{name} Backup-Codes",
|
||||
"Unable to open a new tab for printing" : "Ein neuer Tab zum Drucken kann nicht geöffnet werden",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Verwende einen der Backup-Codes, den du bei der Einrichtung der Zwei-Faktor-Authentifizierung gespeichert hast.",
|
||||
"Submit" : "Übermitteln"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -12,11 +12,13 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "Es ist ein Fehler beim Erstellen Ihrer Backup-Codes aufgetreten",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese aus, da Sie die Codes später nicht mehr abrufen können.",
|
||||
"Save backup codes" : "Backup-Codes speichern",
|
||||
"Print backup codes" : "Backup-Codes drucken",
|
||||
"List of backup codes" : "Liste der Backup-Codes",
|
||||
"Regenerate backup codes" : "Backup-Codes erneuern",
|
||||
"Print backup codes" : "Backup-Codes drucken",
|
||||
"Save backup codes" : "Backup-Codes speichern",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern, werden die alten Codes automatisch ungültig.",
|
||||
"{name} backup codes" : "{name} Backup-Codes",
|
||||
"Unable to open a new tab for printing" : "Ein neuer Tab zum Drucken kann nicht geöffnet werden",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Verwenden Sie einen der Backup-Codes, den Sie bei der Einrichtung der Zwei-Faktor-Authentifizierung gespeichert haben.",
|
||||
"Submit" : "Übermitteln"
|
||||
},
|
||||
|
||||
@@ -10,11 +10,13 @@
|
||||
"An error occurred while generating your backup codes" : "Es ist ein Fehler beim Erstellen Ihrer Backup-Codes aufgetreten",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese aus, da Sie die Codes später nicht mehr abrufen können.",
|
||||
"Save backup codes" : "Backup-Codes speichern",
|
||||
"Print backup codes" : "Backup-Codes drucken",
|
||||
"List of backup codes" : "Liste der Backup-Codes",
|
||||
"Regenerate backup codes" : "Backup-Codes erneuern",
|
||||
"Print backup codes" : "Backup-Codes drucken",
|
||||
"Save backup codes" : "Backup-Codes speichern",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern, werden die alten Codes automatisch ungültig.",
|
||||
"{name} backup codes" : "{name} Backup-Codes",
|
||||
"Unable to open a new tab for printing" : "Ein neuer Tab zum Drucken kann nicht geöffnet werden",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Verwenden Sie einen der Backup-Codes, den Sie bei der Einrichtung der Zwei-Faktor-Authentifizierung gespeichert haben.",
|
||||
"Submit" : "Übermitteln"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -12,9 +12,9 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "Ένα σφάλμα προέκυψε κατά τη δημιουργία των εφεδρικών κωδικών.",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Δημιουργήθηκαν εφεδρικοί κωδικοί. Χρησιμοποιήθηκαν {used} από {total} κωδικοί.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Αυτοί είναι οι εφεδρικοί σας κωδικοί. Παρακαλώ αποθηκεύστε και/ή εκτυπώστε τους καθώς δεν θα μπορείτε να διαβάσετε τους κωδικούς ξανά αργότερα.",
|
||||
"Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
|
||||
"Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
|
||||
"Regenerate backup codes" : "Δημιουργία εφεδρικών κωδικών",
|
||||
"Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
|
||||
"Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Εάν αναδημιουργήσετε εφεδρικούς κωδικούς, οι παλιοί κωδικοί ακυρώνονται αυτόματα.",
|
||||
"{name} backup codes" : "{name} εφεδρικοί κωδικοί",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Χρησιμοποιήστε έναν από τους εφεδρικούς κωδικούς που αποθηκεύσατε όταν ρυθμίζετε τον έλεγχο ταυτότητας δύο παραγόντων.",
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"An error occurred while generating your backup codes" : "Ένα σφάλμα προέκυψε κατά τη δημιουργία των εφεδρικών κωδικών.",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Δημιουργήθηκαν εφεδρικοί κωδικοί. Χρησιμοποιήθηκαν {used} από {total} κωδικοί.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Αυτοί είναι οι εφεδρικοί σας κωδικοί. Παρακαλώ αποθηκεύστε και/ή εκτυπώστε τους καθώς δεν θα μπορείτε να διαβάσετε τους κωδικούς ξανά αργότερα.",
|
||||
"Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
|
||||
"Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
|
||||
"Regenerate backup codes" : "Δημιουργία εφεδρικών κωδικών",
|
||||
"Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
|
||||
"Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Εάν αναδημιουργήσετε εφεδρικούς κωδικούς, οι παλιοί κωδικοί ακυρώνονται αυτόματα.",
|
||||
"{name} backup codes" : "{name} εφεδρικοί κωδικοί",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Χρησιμοποιήστε έναν από τους εφεδρικούς κωδικούς που αποθηκεύσατε όταν ρυθμίζετε τον έλεγχο ταυτότητας δύο παραγόντων.",
|
||||
|
||||
@@ -12,11 +12,13 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "An error occurred while generating your backup codes",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup codes have been generated. {used} of {total} codes have been used.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later.",
|
||||
"Save backup codes" : "Save backup codes",
|
||||
"Print backup codes" : "Print backup codes",
|
||||
"List of backup codes" : "List of backup codes",
|
||||
"Regenerate backup codes" : "Regenerate backup codes",
|
||||
"Print backup codes" : "Print backup codes",
|
||||
"Save backup codes" : "Save backup codes",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "If you regenerate backup codes, you automatically invalidate old codes.",
|
||||
"{name} backup codes" : "{name} backup codes",
|
||||
"Unable to open a new tab for printing" : "Unable to open a new tab for printing",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Use one of the backup codes you saved when setting up two-factor authentication.",
|
||||
"Submit" : "Submit"
|
||||
},
|
||||
|
||||
@@ -10,11 +10,13 @@
|
||||
"An error occurred while generating your backup codes" : "An error occurred while generating your backup codes",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup codes have been generated. {used} of {total} codes have been used.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later.",
|
||||
"Save backup codes" : "Save backup codes",
|
||||
"Print backup codes" : "Print backup codes",
|
||||
"List of backup codes" : "List of backup codes",
|
||||
"Regenerate backup codes" : "Regenerate backup codes",
|
||||
"Print backup codes" : "Print backup codes",
|
||||
"Save backup codes" : "Save backup codes",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "If you regenerate backup codes, you automatically invalidate old codes.",
|
||||
"{name} backup codes" : "{name} backup codes",
|
||||
"Unable to open a new tab for printing" : "Unable to open a new tab for printing",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Use one of the backup codes you saved when setting up two-factor authentication.",
|
||||
"Submit" : "Submit"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -11,9 +11,9 @@ OC.L10N.register(
|
||||
"A two-factor auth backup codes provider" : "Provizanto de rezervkodoj por dufaza aŭtentigo",
|
||||
"An error occurred while generating your backup codes" : "Eraro okazis dum generado de viaj rezervkodoj",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Rezervkodoj generiĝis. {used} kodoj el {total} uziĝis.",
|
||||
"Save backup codes" : "Konservi la rezervkodojn",
|
||||
"Print backup codes" : "Presi la rezervkodojn",
|
||||
"Regenerate backup codes" : "Regeneri rezervkodojn",
|
||||
"Print backup codes" : "Presi la rezervkodojn",
|
||||
"Save backup codes" : "Konservi la rezervkodojn",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vi regeneras rezervkodojn, vi aŭtomate senvalidigas la antaŭajn.",
|
||||
"{name} backup codes" : "{name} rezervkodoj",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Uzu unu el viaj rezervkodoj, kiujn vi konservis dum agordo de dufaza aŭtentigo.",
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"A two-factor auth backup codes provider" : "Provizanto de rezervkodoj por dufaza aŭtentigo",
|
||||
"An error occurred while generating your backup codes" : "Eraro okazis dum generado de viaj rezervkodoj",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Rezervkodoj generiĝis. {used} kodoj el {total} uziĝis.",
|
||||
"Save backup codes" : "Konservi la rezervkodojn",
|
||||
"Print backup codes" : "Presi la rezervkodojn",
|
||||
"Regenerate backup codes" : "Regeneri rezervkodojn",
|
||||
"Print backup codes" : "Presi la rezervkodojn",
|
||||
"Save backup codes" : "Konservi la rezervkodojn",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vi regeneras rezervkodojn, vi aŭtomate senvalidigas la antaŭajn.",
|
||||
"{name} backup codes" : "{name} rezervkodoj",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Uzu unu el viaj rezervkodoj, kiujn vi konservis dum agordo de dufaza aŭtentigo.",
|
||||
|
||||
@@ -12,9 +12,9 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban sus códigos de respaldo.",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han usado {used} de {total} códigos.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor, guárdelos y/o imprima los mismos, ya que no podrá volver a verlos más tarde.",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regenera los códigos de respaldo, automáticamente invalidará los antiguos.",
|
||||
"{name} backup codes" : "Códigos de respaldo {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Use uno de los códigos de respaldo que guardó cuando activó la autenticación de dos factores.",
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban sus códigos de respaldo.",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han usado {used} de {total} códigos.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor, guárdelos y/o imprima los mismos, ya que no podrá volver a verlos más tarde.",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regenera los códigos de respaldo, automáticamente invalidará los antiguos.",
|
||||
"{name} backup codes" : "Códigos de respaldo {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Use uno de los códigos de respaldo que guardó cuando activó la autenticación de dos factores.",
|
||||
|
||||
@@ -7,9 +7,9 @@ OC.L10N.register(
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -8,9 +8,9 @@ OC.L10N.register(
|
||||
"Use backup code" : "Use el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar sus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si usted regenera los códigos de respaldo, automáticamente invalidará los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
"Use backup code" : "Use el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar sus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si usted regenera los códigos de respaldo, automáticamente invalidará los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -8,9 +8,9 @@ OC.L10N.register(
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -8,9 +8,9 @@ OC.L10N.register(
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -8,9 +8,9 @@ OC.L10N.register(
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -8,9 +8,9 @@ OC.L10N.register(
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -11,9 +11,9 @@ OC.L10N.register(
|
||||
"A two-factor auth backup codes provider" : "Un proveedor de códigos de respaldo para autenticación de dos factores.",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han utilizado {used} de {total} códigos.",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"{name} backup codes" : "Códigos de respaldo de {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utiliza uno de los códigos de respaldo que guardaste al configurar la autenticación de dos factores.",
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
"A two-factor auth backup codes provider" : "Un proveedor de códigos de respaldo para autenticación de dos factores.",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han utilizado {used} de {total} códigos.",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"{name} backup codes" : "Códigos de respaldo de {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utiliza uno de los códigos de respaldo que guardaste al configurar la autenticación de dos factores.",
|
||||
|
||||
@@ -8,9 +8,9 @@ OC.L10N.register(
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"Two factor backup codes" : "Códigos de respaldo de dos factores",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -7,9 +7,9 @@ OC.L10N.register(
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -12,9 +12,9 @@ OC.L10N.register(
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Se generaron los códigos de respaldo. Se han utilizado {used} de {total} códigos.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor guárdelos y/o imprímalos ya que no podrá leerlos después.",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"{name} backup codes" : "Códigos de respaldo {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilice uno de los códigos de respaldo que guardó al configurar la autentificación de dos factores.",
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Backup codes have been generated. {used} of {total} codes have been used." : "Se generaron los códigos de respaldo. Se han utilizado {used} de {total} códigos.",
|
||||
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor guárdelos y/o imprímalos ya que no podrá leerlos después.",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"{name} backup codes" : "Códigos de respaldo {name}",
|
||||
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilice uno de los códigos de respaldo que guardó al configurar la autentificación de dos factores.",
|
||||
|
||||
@@ -7,9 +7,9 @@ OC.L10N.register(
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -7,9 +7,9 @@ OC.L10N.register(
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -7,9 +7,9 @@ OC.L10N.register(
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
"Backup code" : "Código de respaldo",
|
||||
"Use backup code" : "Usa el código de respaldo",
|
||||
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Regenerate backup codes" : "Regenerar códigos de respaldo",
|
||||
"Print backup codes" : "Imprimir códigos de respaldo",
|
||||
"Save backup codes" : "Guardar códigos de respaldo",
|
||||
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
|
||||
"Submit" : "Enviar"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user