Compare commits
70 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b9c6206c2f | |||
| c7fca0071b | |||
| dbc41af77f | |||
| db558a7394 | |||
| 938b9ba0ac | |||
| 56eaf1dbcc | |||
| 3985555753 | |||
| fe612bb4dd | |||
| 2613f3274b | |||
| 715d776649 | |||
| 15591054ac | |||
| b878678562 | |||
| 521bb9432e | |||
| 6fce5aa3ea | |||
| e3c6702cd8 | |||
| 9cd3177bb4 | |||
| 6a29ea172b | |||
| ed1b0dcd5e | |||
| bd8aff39f2 | |||
| fc354f46bb | |||
| 7b305fbe22 | |||
| 8aedcb4a82 | |||
| 01fa73831f | |||
| b40d230218 | |||
| 5d84d79c4b | |||
| 26ba3cac9c | |||
| 85b0dcca27 | |||
| 687d82843f | |||
| 4da21d78d0 | |||
| 142ddaf146 | |||
| f3ceded754 | |||
| 9884dec646 | |||
| d14c4082e1 | |||
| 052d62b83c | |||
| ceb1b7e767 | |||
| 2faa5e894b | |||
| 277a35ee23 | |||
| c29c7023d9 | |||
| f43a4c62d6 | |||
| 2a2f42e781 | |||
| 35ef9b078a | |||
| c63eb85966 | |||
| 5c19d5eb26 | |||
| da7250f05d | |||
| 9afbad3865 | |||
| 80184b4d25 | |||
| 074df09caf | |||
| 7dba462eec | |||
| 0e0af702ac | |||
| f6c79c0d33 | |||
| 2909821cb2 | |||
| 3542dbf9a1 | |||
| cae14d356b | |||
| 3836eb6b0d | |||
| 3458d3150b | |||
| 03f93d97e9 | |||
| 3a21ad408b | |||
| 7f89490cef | |||
| 34484b591a | |||
| fa2660a9d7 | |||
| 4d58563991 | |||
| d039cb92f9 | |||
| 128137dc06 | |||
| 882d8324e8 | |||
| 1bc0bd7611 | |||
| 4588c7134d | |||
| 663018455e | |||
| 2475a0bb19 | |||
| 7f9b9e9104 | |||
| aad7571502 |
@@ -50,6 +50,7 @@ jobs:
|
||||
run: |
|
||||
composer remove nextcloud/ocp --dev --no-scripts
|
||||
composer i
|
||||
git restore lib/composer/composer
|
||||
|
||||
- name: Rector
|
||||
run: composer run rector
|
||||
|
||||
@@ -89,7 +89,7 @@ $server->httpRequest->setUrl(Server::get(IRequest::class)->getRequestUri());
|
||||
/** @var string $baseuri defined in remote.php */
|
||||
$server->setBaseUri($baseuri);
|
||||
// Add plugins
|
||||
$server->addPlugin(new MaintenancePlugin(Server::get(IConfig::class), \OCP\Server::get(IL10nFactory::class)->get('dav')));
|
||||
$server->addPlugin(new MaintenancePlugin(Server::get(IConfig::class), Server::get(IL10nFactory::class)->get('dav')));
|
||||
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend));
|
||||
$server->addPlugin(new Plugin());
|
||||
|
||||
|
||||
@@ -236,6 +236,7 @@ OC.L10N.register(
|
||||
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
|
||||
"Failed to get size for : %1$s" : "Größe konnte nicht ermittelt werden für: %1$s",
|
||||
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
|
||||
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
|
||||
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
|
||||
|
||||
@@ -234,6 +234,7 @@
|
||||
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
|
||||
"Failed to get size for : %1$s" : "Größe konnte nicht ermittelt werden für: %1$s",
|
||||
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
|
||||
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
|
||||
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
|
||||
|
||||
@@ -236,6 +236,7 @@ OC.L10N.register(
|
||||
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
|
||||
"Failed to get size for : %1$s" : "Größe konnte nicht ermittelt werden für: %1$s",
|
||||
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
|
||||
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
|
||||
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
|
||||
|
||||
@@ -234,6 +234,7 @@
|
||||
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
|
||||
"Failed to get size for : %1$s" : "Größe konnte nicht ermittelt werden für: %1$s",
|
||||
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
|
||||
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
|
||||
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
|
||||
|
||||
@@ -236,6 +236,7 @@ OC.L10N.register(
|
||||
"Failed to check file size: %1$s" : "Failed to check file size: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Could not open file: %1$s (%2$d), file does seem to exist",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Could not open file: %1$s (%2$d), file doesn't seem to exist",
|
||||
"Failed to get size for : %1$s" : "Failed to get size for : %1$s",
|
||||
"Encryption not ready: %1$s" : "Encryption not ready: %1$s",
|
||||
"Failed to open file: %1$s" : "Failed to open file: %1$s",
|
||||
"Failed to unlink: %1$s" : "Failed to unlink: %1$s",
|
||||
|
||||
@@ -234,6 +234,7 @@
|
||||
"Failed to check file size: %1$s" : "Failed to check file size: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Could not open file: %1$s (%2$d), file does seem to exist",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Could not open file: %1$s (%2$d), file doesn't seem to exist",
|
||||
"Failed to get size for : %1$s" : "Failed to get size for : %1$s",
|
||||
"Encryption not ready: %1$s" : "Encryption not ready: %1$s",
|
||||
"Failed to open file: %1$s" : "Failed to open file: %1$s",
|
||||
"Failed to unlink: %1$s" : "Failed to unlink: %1$s",
|
||||
|
||||
+10
-10
@@ -254,16 +254,16 @@ OC.L10N.register(
|
||||
"Due on %s" : "Tähtaeg: %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." : "Tere tulemast Nextcloudi Kalendrisse!\n\nSee näidissündmus võimaldab sul tutvuda Nextcloudi Kalendri paindlikkusega oma aja plaanimisel - proovi teha igasuguseid muudatusi!\n\nNextcloudi Kalendriga saad sa:\n- vaevata luua, muuta ja hallata sündmusi,\n- koostada mitmeid kalendreid ning neid jagada tiimikaaslaste, sõprade ja perega,\n- kontrollida teiste vabu aega ja enda omi näidata teistele,\n- kasutada sujuvat CalDAV-i põhist lõimingut teiste rakenduste ja seadmetega,\n- kohendada kõike oma vajadustele: ajastades korduvaid sündmusi ning sättida teavitusi ja muid seadistusi.",
|
||||
"Example event - open me!" : "Näidissündmus - klõpsi mind!",
|
||||
"System Address Book" : "Süsteemne aadressiraamat",
|
||||
"The system address book contains contact information for all users in your instance." : "Süsteemses aadressiraamatus leiduvad kõikde selle serveri kasutajate kontaktteave.",
|
||||
"Enable System Address Book" : "Kasuta süsteemset aadressiraamatut",
|
||||
"DAV system address book" : "DAV-i süsteemne aadressiraamat",
|
||||
"No outstanding DAV system address book sync." : "Pole DAV-i süsteemse aadressiraamatu sünkroniseerimist.",
|
||||
"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\"." : "Kuna selles serveris on üle 1000 kasutaja, siis DAV-i süsteemse aadressiraamatu sünkroonomist poel veel toimunud. Aga võis ka juhtuda viga. Palun käivita ta käsurealt ise käsuga „occ dav:sync-system-addressbook“.",
|
||||
"DAV system address book size" : "DAV-i süsteemse aadressiraamatu suurus",
|
||||
"The system address book is disabled" : "Süsteemne aadressiraamat pole kasutusel",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Süsteemne aadressiraamat on kasutusel, kuid seal on andmeid rohkem, kui seadistatud %d kontakti ülempiir lubab",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Süsteemne aadressiraamat on kasutusel ning seal on andmeid vähem, kui seadistatud %d kontakti ülempiir lubab",
|
||||
"System Address Book" : "Süsteemiülene aadressiraamat",
|
||||
"The system address book contains contact information for all users in your instance." : "Süsteemiüleses aadressiraamatus leiduvad kõikide selle serveri kasutajate kontaktandmed.",
|
||||
"Enable System Address Book" : "Kasuta süsteemiülest aadressiraamatut",
|
||||
"DAV system address book" : "DAV-i süsteemiülene aadressiraamat",
|
||||
"No outstanding DAV system address book sync." : "DAV-i süsteemiülese aadressiraamatu sünkroonimist pole ootel või toimunud.",
|
||||
"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\"." : "Kuna selles serveris on üle 1000 kasutaja, siis DAV-i süsteemiülese aadressiraamatu sünkroonimist pole veel toimunud. Aga võis ka juhtuda viga. Palun käivita ta käsurealt ise käsuga „occ dav:sync-system-addressbook“.",
|
||||
"DAV system address book size" : "DAV-i süsteemiülese aadressiraamatu suurus",
|
||||
"The system address book is disabled" : "Süsteemiülene aadressiraamat pole kasutusel",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Süsteemiülene aadressiraamat on kasutusel, kuid seal on andmeid rohkem, kui seadistatud %d kontakti ülempiir lubab",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Süsteemiülene aadressiraamat on kasutusel ning seal on andmeid vähem, kui seadistatud %d kontakti ülempiir lubab",
|
||||
"WebDAV endpoint" : "WebDAV-i teenuse otspunkt",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Ei õnnestunud kontrollida, kas sinu veebiserver on korrektselt seadistatud ja võimaldab kasutada failide sünkroniseerimist WebDAV-i vahendusel. Palun kontrolli seda käsitsi.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Sinu veebiserver pole veel failide sünkroniseerimiseks vajalikult seadistatud, kuna WebDAV liides paistab olevat katki.",
|
||||
|
||||
+10
-10
@@ -252,16 +252,16 @@
|
||||
"Due on %s" : "Tähtaeg: %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." : "Tere tulemast Nextcloudi Kalendrisse!\n\nSee näidissündmus võimaldab sul tutvuda Nextcloudi Kalendri paindlikkusega oma aja plaanimisel - proovi teha igasuguseid muudatusi!\n\nNextcloudi Kalendriga saad sa:\n- vaevata luua, muuta ja hallata sündmusi,\n- koostada mitmeid kalendreid ning neid jagada tiimikaaslaste, sõprade ja perega,\n- kontrollida teiste vabu aega ja enda omi näidata teistele,\n- kasutada sujuvat CalDAV-i põhist lõimingut teiste rakenduste ja seadmetega,\n- kohendada kõike oma vajadustele: ajastades korduvaid sündmusi ning sättida teavitusi ja muid seadistusi.",
|
||||
"Example event - open me!" : "Näidissündmus - klõpsi mind!",
|
||||
"System Address Book" : "Süsteemne aadressiraamat",
|
||||
"The system address book contains contact information for all users in your instance." : "Süsteemses aadressiraamatus leiduvad kõikde selle serveri kasutajate kontaktteave.",
|
||||
"Enable System Address Book" : "Kasuta süsteemset aadressiraamatut",
|
||||
"DAV system address book" : "DAV-i süsteemne aadressiraamat",
|
||||
"No outstanding DAV system address book sync." : "Pole DAV-i süsteemse aadressiraamatu sünkroniseerimist.",
|
||||
"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\"." : "Kuna selles serveris on üle 1000 kasutaja, siis DAV-i süsteemse aadressiraamatu sünkroonomist poel veel toimunud. Aga võis ka juhtuda viga. Palun käivita ta käsurealt ise käsuga „occ dav:sync-system-addressbook“.",
|
||||
"DAV system address book size" : "DAV-i süsteemse aadressiraamatu suurus",
|
||||
"The system address book is disabled" : "Süsteemne aadressiraamat pole kasutusel",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Süsteemne aadressiraamat on kasutusel, kuid seal on andmeid rohkem, kui seadistatud %d kontakti ülempiir lubab",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Süsteemne aadressiraamat on kasutusel ning seal on andmeid vähem, kui seadistatud %d kontakti ülempiir lubab",
|
||||
"System Address Book" : "Süsteemiülene aadressiraamat",
|
||||
"The system address book contains contact information for all users in your instance." : "Süsteemiüleses aadressiraamatus leiduvad kõikide selle serveri kasutajate kontaktandmed.",
|
||||
"Enable System Address Book" : "Kasuta süsteemiülest aadressiraamatut",
|
||||
"DAV system address book" : "DAV-i süsteemiülene aadressiraamat",
|
||||
"No outstanding DAV system address book sync." : "DAV-i süsteemiülese aadressiraamatu sünkroonimist pole ootel või toimunud.",
|
||||
"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\"." : "Kuna selles serveris on üle 1000 kasutaja, siis DAV-i süsteemiülese aadressiraamatu sünkroonimist pole veel toimunud. Aga võis ka juhtuda viga. Palun käivita ta käsurealt ise käsuga „occ dav:sync-system-addressbook“.",
|
||||
"DAV system address book size" : "DAV-i süsteemiülese aadressiraamatu suurus",
|
||||
"The system address book is disabled" : "Süsteemiülene aadressiraamat pole kasutusel",
|
||||
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Süsteemiülene aadressiraamat on kasutusel, kuid seal on andmeid rohkem, kui seadistatud %d kontakti ülempiir lubab",
|
||||
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Süsteemiülene aadressiraamat on kasutusel ning seal on andmeid vähem, kui seadistatud %d kontakti ülempiir lubab",
|
||||
"WebDAV endpoint" : "WebDAV-i teenuse otspunkt",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Ei õnnestunud kontrollida, kas sinu veebiserver on korrektselt seadistatud ja võimaldab kasutada failide sünkroniseerimist WebDAV-i vahendusel. Palun kontrolli seda käsitsi.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Sinu veebiserver pole veel failide sünkroniseerimiseks vajalikult seadistatud, kuna WebDAV liides paistab olevat katki.",
|
||||
|
||||
@@ -236,6 +236,7 @@ OC.L10N.register(
|
||||
"Failed to check file size: %1$s" : "Níorbh fhéidir méid an chomhaid a sheiceáil: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil go bhfuil an comhad ann",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil nach bhfuil an comhad ann.",
|
||||
"Failed to get size for : %1$s" : "Theip ar mhéid a fháil le haghaidh: %1$s",
|
||||
"Encryption not ready: %1$s" : "Níl an criptiúchán réidh: %1$s",
|
||||
"Failed to open file: %1$s" : "Níorbh fhéidir an comhad a oscailt: %1$s",
|
||||
"Failed to unlink: %1$s" : "Theip ar dhínascadh: %1$s",
|
||||
|
||||
@@ -234,6 +234,7 @@
|
||||
"Failed to check file size: %1$s" : "Níorbh fhéidir méid an chomhaid a sheiceáil: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil go bhfuil an comhad ann",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil nach bhfuil an comhad ann.",
|
||||
"Failed to get size for : %1$s" : "Theip ar mhéid a fháil le haghaidh: %1$s",
|
||||
"Encryption not ready: %1$s" : "Níl an criptiúchán réidh: %1$s",
|
||||
"Failed to open file: %1$s" : "Níorbh fhéidir an comhad a oscailt: %1$s",
|
||||
"Failed to unlink: %1$s" : "Theip ar dhínascadh: %1$s",
|
||||
|
||||
@@ -236,6 +236,7 @@ OC.L10N.register(
|
||||
"Failed to check file size: %1$s" : "Falha ao verificar o tamanho do arquivo: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece existir",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece não existir",
|
||||
"Failed to get size for : %1$s" : "Falha ao obter o tamanho para: %1$s",
|
||||
"Encryption not ready: %1$s" : "A criptografia não está pronta: %1$s",
|
||||
"Failed to open file: %1$s" : "Falha ao abrir arquivo: %1$s",
|
||||
"Failed to unlink: %1$s" : "Falha ao desvincular: %1$s",
|
||||
|
||||
@@ -234,6 +234,7 @@
|
||||
"Failed to check file size: %1$s" : "Falha ao verificar o tamanho do arquivo: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece existir",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece não existir",
|
||||
"Failed to get size for : %1$s" : "Falha ao obter o tamanho para: %1$s",
|
||||
"Encryption not ready: %1$s" : "A criptografia não está pronta: %1$s",
|
||||
"Failed to open file: %1$s" : "Falha ao abrir arquivo: %1$s",
|
||||
"Failed to unlink: %1$s" : "Falha ao desvincular: %1$s",
|
||||
|
||||
@@ -236,6 +236,7 @@ OC.L10N.register(
|
||||
"Failed to check file size: %1$s" : "Dosya boyutu denetlenemedi: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Dosya açılamadı: %1$s (%2$d), dosya var gibi görünüyor",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Dosya açılamadı: %1$s (%2$d), dosya var gibi görünmüyor",
|
||||
"Failed to get size for : %1$s" : "Dosya boyutu alınamadı: %1$s",
|
||||
"Encryption not ready: %1$s" : "Şifreleme hazır değil: %1$s",
|
||||
"Failed to open file: %1$s" : "Dosya açılamadı: %1$s",
|
||||
"Failed to unlink: %1$s" : "Bağlantı kaldırılamadı: %1$s",
|
||||
|
||||
@@ -234,6 +234,7 @@
|
||||
"Failed to check file size: %1$s" : "Dosya boyutu denetlenemedi: %1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "Dosya açılamadı: %1$s (%2$d), dosya var gibi görünüyor",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Dosya açılamadı: %1$s (%2$d), dosya var gibi görünmüyor",
|
||||
"Failed to get size for : %1$s" : "Dosya boyutu alınamadı: %1$s",
|
||||
"Encryption not ready: %1$s" : "Şifreleme hazır değil: %1$s",
|
||||
"Failed to open file: %1$s" : "Dosya açılamadı: %1$s",
|
||||
"Failed to unlink: %1$s" : "Bağlantı kaldırılamadı: %1$s",
|
||||
|
||||
@@ -236,6 +236,7 @@ OC.L10N.register(
|
||||
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎不存在",
|
||||
"Failed to get size for : %1$s" : "無法取得以下項目的大小:%1$s",
|
||||
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
|
||||
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
|
||||
|
||||
@@ -234,6 +234,7 @@
|
||||
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎不存在",
|
||||
"Failed to get size for : %1$s" : "無法取得以下項目的大小:%1$s",
|
||||
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
|
||||
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
|
||||
|
||||
@@ -236,6 +236,7 @@ OC.L10N.register(
|
||||
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s (%2$d),檔案似乎存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎不存在",
|
||||
"Failed to get size for : %1$s" : "無法取得以下項目的大小:%1$s",
|
||||
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
|
||||
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
|
||||
|
||||
@@ -234,6 +234,7 @@
|
||||
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
|
||||
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s (%2$d),檔案似乎存在",
|
||||
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s(%2$d),檔案似乎不存在",
|
||||
"Failed to get size for : %1$s" : "無法取得以下項目的大小:%1$s",
|
||||
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
|
||||
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
|
||||
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace OCA\DAV\CalDAV\Federation;
|
||||
|
||||
use OCA\DAV\DAV\RemoteUserPrincipalBackend;
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\Constants;
|
||||
use OCP\DB\Types;
|
||||
use Sabre\CalDAV\Xml\Property\SupportedCalendarComponentSet;
|
||||
|
||||
@@ -94,7 +95,7 @@ class FederatedCalendarEntity extends Entity {
|
||||
'{' . \Sabre\CalDAV\Plugin::NS_CALENDARSERVER . '}getctag' => $this->getSyncTokenForSabre(),
|
||||
'{' . \Sabre\CalDAV\Plugin::NS_CALDAV . '}supported-calendar-component-set' => $this->getSupportedCalendarComponentSet(),
|
||||
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->getSharedByPrincipal(),
|
||||
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => ($this->getPermissions() & \OCP\Constants::PERMISSION_UPDATE) === 0 ? 1 : 0,
|
||||
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => ($this->getPermissions() & Constants::PERMISSION_UPDATE) === 0 ? 1 : 0,
|
||||
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}permissions' => $this->getPermissions(),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -20,13 +20,15 @@ class Capabilities implements ICapability {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{dav: array{chunking: string, public_shares_chunking: bool, bulkupload?: string, absence-supported?: bool, absence-replacement?: bool}}
|
||||
* @return array{dav: array{chunking: string, public_shares_chunking: bool, search_supports_creation_time: bool, search_supports_upload_time: bool, bulkupload?: string, absence-supported?: bool, absence-replacement?: bool}}
|
||||
*/
|
||||
public function getCapabilities() {
|
||||
$capabilities = [
|
||||
'dav' => [
|
||||
'chunking' => '1.0',
|
||||
'public_shares_chunking' => true,
|
||||
'search_supports_creation_time' => true,
|
||||
'search_supports_upload_time' => true,
|
||||
]
|
||||
];
|
||||
if ($this->config->getSystemValueBool('bulkupload.enabled', true)) {
|
||||
|
||||
@@ -532,7 +532,7 @@ class Directory extends Node implements
|
||||
}
|
||||
|
||||
if ($info->getMimeType() === FileInfo::MIMETYPE_FOLDER) {
|
||||
$node = new \OCA\DAV\Connector\Sabre\Directory($this->fileView, $info, $this->tree, $this->shareManager);
|
||||
$node = new Directory($this->fileView, $info, $this->tree, $this->shareManager);
|
||||
} else {
|
||||
// In case reading a directory was allowed but it turns out the node was a not a directory, reject it now.
|
||||
if (!$this->info->isReadable()) {
|
||||
|
||||
@@ -480,11 +480,15 @@ class File extends Node implements IFile {
|
||||
}
|
||||
}
|
||||
|
||||
$logger = Server::get(LoggerInterface::class);
|
||||
// comparing current file size with the one in DB
|
||||
// if different, fix DB and refresh cache.
|
||||
//
|
||||
$fsSize = $this->fileView->filesize($this->getPath());
|
||||
if ($this->getSize() !== $fsSize) {
|
||||
$logger = Server::get(LoggerInterface::class);
|
||||
if ($fsSize === false) {
|
||||
$logger->warning('file not found on storage after successfully opening it');
|
||||
throw new ServiceUnavailable($this->l10n->t('Failed to get size for : %1$s', [$this->getPath()]));
|
||||
} elseif ($this->getSize() !== $fsSize) {
|
||||
$logger->warning('fixing cached size of file id=' . $this->getId() . ', cached size was ' . $this->getSize() . ', but the filesystem reported a size of ' . $fsSize);
|
||||
|
||||
$this->getFileInfo()->getStorage()->getUpdater()->update($this->getFileInfo()->getInternalPath());
|
||||
|
||||
@@ -86,6 +86,7 @@ class FileSearchBackend implements ISearchBackend {
|
||||
new SearchPropertyDefinition('{DAV:}displayname', true, true, true),
|
||||
new SearchPropertyDefinition('{DAV:}getcontenttype', true, true, true),
|
||||
new SearchPropertyDefinition('{DAV:}getlastmodified', true, true, true, SearchPropertyDefinition::DATATYPE_DATETIME),
|
||||
new SearchPropertyDefinition('{DAV:}creationdate', true, true, true, SearchPropertyDefinition::DATATYPE_DATETIME),
|
||||
new SearchPropertyDefinition('{http://nextcloud.org/ns}upload_time', true, true, true, SearchPropertyDefinition::DATATYPE_DATETIME),
|
||||
new SearchPropertyDefinition(FilesPlugin::SIZE_PROPERTYNAME, true, true, true, SearchPropertyDefinition::DATATYPE_NONNEGATIVE_INTEGER),
|
||||
new SearchPropertyDefinition(TagsPlugin::FAVORITE_PROPERTYNAME, true, true, true, SearchPropertyDefinition::DATATYPE_BOOLEAN),
|
||||
@@ -299,6 +300,8 @@ class FileSearchBackend implements ISearchBackend {
|
||||
return $node->getName();
|
||||
case '{DAV:}getlastmodified':
|
||||
return $node->getLastModified();
|
||||
case '{DAV:}creationdate':
|
||||
return $node->getNode()->getCreationTime();
|
||||
case '{http://nextcloud.org/ns}upload_time':
|
||||
return $node->getNode()->getUploadTime();
|
||||
case FilesPlugin::SIZE_PROPERTYNAME:
|
||||
@@ -461,6 +464,8 @@ class FileSearchBackend implements ISearchBackend {
|
||||
return 'mimetype';
|
||||
case '{DAV:}getlastmodified':
|
||||
return 'mtime';
|
||||
case '{DAV:}creationdate':
|
||||
return 'creation_time';
|
||||
case '{http://nextcloud.org/ns}upload_time':
|
||||
return 'upload_time';
|
||||
case FilesPlugin::SIZE_PROPERTYNAME:
|
||||
|
||||
@@ -150,13 +150,13 @@ class EventsSearchProvider extends ACalendarSearchProvider implements IFiltering
|
||||
$formattedResults = \array_map(function (array $eventRow) use ($calendarsById, $subscriptionsById): SearchResultEntry {
|
||||
$component = $this->getPrimaryComponent($eventRow['calendardata'], self::$componentType);
|
||||
$title = (string)($component->SUMMARY ?? $this->l10n->t('Untitled event'));
|
||||
$subline = $this->generateSubline($component);
|
||||
|
||||
if ($eventRow['calendartype'] === CalDavBackend::CALENDAR_TYPE_CALENDAR) {
|
||||
$calendar = $calendarsById[$eventRow['calendarid']];
|
||||
} else {
|
||||
$calendar = $subscriptionsById[$eventRow['calendarid']];
|
||||
}
|
||||
$subline = $this->generateSubline($component, $calendar);
|
||||
$resourceUrl = $this->getDeepLinkToCalendarApp($calendar['principaluri'], $calendar['uri'], $eventRow['uri']);
|
||||
$result = new SearchResultEntry('', $title, $subline, $resourceUrl, 'icon-calendar-dark', false);
|
||||
|
||||
@@ -204,7 +204,7 @@ class EventsSearchProvider extends ACalendarSearchProvider implements IFiltering
|
||||
. $calendarObjectUri;
|
||||
}
|
||||
|
||||
protected function generateSubline(Component $eventComponent): string {
|
||||
protected function generateSubline(Component $eventComponent, array $calendarInfo): string {
|
||||
$dtStart = $eventComponent->DTSTART;
|
||||
$dtEnd = $this->getDTEndForEvent($eventComponent);
|
||||
$isAllDayEvent = $dtStart instanceof Property\ICalendar\Date;
|
||||
@@ -214,24 +214,31 @@ class EventsSearchProvider extends ACalendarSearchProvider implements IFiltering
|
||||
if ($isAllDayEvent) {
|
||||
$endDateTime->modify('-1 day');
|
||||
if ($this->isDayEqual($startDateTime, $endDateTime)) {
|
||||
return $this->l10n->l('date', $startDateTime, ['width' => 'medium']);
|
||||
$formattedSubline = $this->l10n->l('date', $startDateTime, ['width' => 'medium']);
|
||||
} else {
|
||||
$formattedStart = $this->l10n->l('date', $startDateTime, ['width' => 'medium']);
|
||||
$formattedEnd = $this->l10n->l('date', $endDateTime, ['width' => 'medium']);
|
||||
$formattedSubline = "$formattedStart - $formattedEnd";
|
||||
}
|
||||
} else {
|
||||
$formattedStartDate = $this->l10n->l('date', $startDateTime, ['width' => 'medium']);
|
||||
$formattedEndDate = $this->l10n->l('date', $endDateTime, ['width' => 'medium']);
|
||||
$formattedStartTime = $this->l10n->l('time', $startDateTime, ['width' => 'short']);
|
||||
$formattedEndTime = $this->l10n->l('time', $endDateTime, ['width' => 'short']);
|
||||
|
||||
$formattedStart = $this->l10n->l('date', $startDateTime, ['width' => 'medium']);
|
||||
$formattedEnd = $this->l10n->l('date', $endDateTime, ['width' => 'medium']);
|
||||
return "$formattedStart - $formattedEnd";
|
||||
if ($this->isDayEqual($startDateTime, $endDateTime)) {
|
||||
$formattedSubline = "$formattedStartDate $formattedStartTime - $formattedEndTime";
|
||||
} else {
|
||||
$formattedSubline = "$formattedStartDate $formattedStartTime - $formattedEndDate $formattedEndTime";
|
||||
}
|
||||
}
|
||||
|
||||
$formattedStartDate = $this->l10n->l('date', $startDateTime, ['width' => 'medium']);
|
||||
$formattedEndDate = $this->l10n->l('date', $endDateTime, ['width' => 'medium']);
|
||||
$formattedStartTime = $this->l10n->l('time', $startDateTime, ['width' => 'short']);
|
||||
$formattedEndTime = $this->l10n->l('time', $endDateTime, ['width' => 'short']);
|
||||
|
||||
if ($this->isDayEqual($startDateTime, $endDateTime)) {
|
||||
return "$formattedStartDate $formattedStartTime - $formattedEndTime";
|
||||
if (isset($calendarInfo['{DAV:}displayname']) && !empty($calendarInfo['{DAV:}displayname'])) {
|
||||
$formattedSubline = $formattedSubline . " ({$calendarInfo['{DAV:}displayname']})";
|
||||
}
|
||||
|
||||
return "$formattedStartDate $formattedStartTime - $formattedEndDate $formattedEndTime";
|
||||
// string cast is just to make psalm happy
|
||||
return (string)$formattedSubline;
|
||||
}
|
||||
|
||||
protected function getDTEndForEvent(Component $eventComponent):Property {
|
||||
|
||||
@@ -96,13 +96,13 @@ class TasksSearchProvider extends ACalendarSearchProvider {
|
||||
$formattedResults = \array_map(function (array $taskRow) use ($calendarsById, $subscriptionsById):SearchResultEntry {
|
||||
$component = $this->getPrimaryComponent($taskRow['calendardata'], self::$componentType);
|
||||
$title = (string)($component->SUMMARY ?? $this->l10n->t('Untitled task'));
|
||||
$subline = $this->generateSubline($component);
|
||||
|
||||
if ($taskRow['calendartype'] === CalDavBackend::CALENDAR_TYPE_CALENDAR) {
|
||||
$calendar = $calendarsById[$taskRow['calendarid']];
|
||||
} else {
|
||||
$calendar = $subscriptionsById[$taskRow['calendarid']];
|
||||
}
|
||||
$subline = $this->generateSubline($component, $calendar);
|
||||
$resourceUrl = $this->getDeepLinkToTasksApp($calendar['uri'], $taskRow['uri']);
|
||||
|
||||
return new SearchResultEntry('', $title, $subline, $resourceUrl, 'icon-checkmark', false);
|
||||
@@ -128,25 +128,29 @@ class TasksSearchProvider extends ACalendarSearchProvider {
|
||||
);
|
||||
}
|
||||
|
||||
protected function generateSubline(Component $taskComponent): string {
|
||||
protected function generateSubline(Component $taskComponent, array $calendarInfo): string {
|
||||
if ($taskComponent->COMPLETED) {
|
||||
$completedDateTime = new \DateTime($taskComponent->COMPLETED->getDateTime()->format(\DateTimeInterface::ATOM));
|
||||
$formattedDate = $this->l10n->l('date', $completedDateTime, ['width' => 'medium']);
|
||||
return $this->l10n->t('Completed on %s', [$formattedDate]);
|
||||
}
|
||||
|
||||
if ($taskComponent->DUE) {
|
||||
$formattedSubline = $this->l10n->t('Completed on %s', [$formattedDate]);
|
||||
} elseif ($taskComponent->DUE) {
|
||||
$dueDateTime = new \DateTime($taskComponent->DUE->getDateTime()->format(\DateTimeInterface::ATOM));
|
||||
$formattedDate = $this->l10n->l('date', $dueDateTime, ['width' => 'medium']);
|
||||
|
||||
if ($taskComponent->DUE->hasTime()) {
|
||||
$formattedTime = $this->l10n->l('time', $dueDateTime, ['width' => 'short']);
|
||||
return $this->l10n->t('Due on %s by %s', [$formattedDate, $formattedTime]);
|
||||
$formattedSubline = $this->l10n->t('Due on %s by %s', [$formattedDate, $formattedTime]);
|
||||
} else {
|
||||
$formattedSubline = $this->l10n->t('Due on %s', [$formattedDate]);
|
||||
}
|
||||
|
||||
return $this->l10n->t('Due on %s', [$formattedDate]);
|
||||
} else {
|
||||
$formattedSubline = '';
|
||||
}
|
||||
|
||||
return '';
|
||||
if (isset($calendarInfo['{DAV:}displayname']) && !empty($calendarInfo['{DAV:}displayname'])) {
|
||||
$formattedSubline = $formattedSubline . (!empty($formattedSubline) ? ' ' : '') . "({$calendarInfo['{DAV:}displayname']})";
|
||||
}
|
||||
|
||||
return $formattedSubline;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,9 @@
|
||||
"type": "object",
|
||||
"required": [
|
||||
"chunking",
|
||||
"public_shares_chunking"
|
||||
"public_shares_chunking",
|
||||
"search_supports_creation_time",
|
||||
"search_supports_upload_time"
|
||||
],
|
||||
"properties": {
|
||||
"chunking": {
|
||||
@@ -39,6 +41,12 @@
|
||||
"public_shares_chunking": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"search_supports_creation_time": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"search_supports_upload_time": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"bulkupload": {
|
||||
"type": "string"
|
||||
},
|
||||
|
||||
@@ -17,6 +17,7 @@ use OCP\Config\IUserConfig;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IL10N;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\L10N\IFactory;
|
||||
use OCP\Security\ISecureRandom;
|
||||
@@ -163,7 +164,7 @@ class IMipServiceTest extends TestCase {
|
||||
|
||||
public function testIsSystemUserWhenUserExists(): void {
|
||||
$email = 'user@example.com';
|
||||
$user = $this->createMock(\OCP\IUser::class);
|
||||
$user = $this->createMock(IUser::class);
|
||||
|
||||
$this->userManager->expects(self::once())
|
||||
->method('getByEmail')
|
||||
|
||||
@@ -31,6 +31,8 @@ class CapabilitiesTest extends TestCase {
|
||||
'dav' => [
|
||||
'chunking' => '1.0',
|
||||
'public_shares_chunking' => true,
|
||||
'search_supports_creation_time' => true,
|
||||
'search_supports_upload_time' => true,
|
||||
],
|
||||
];
|
||||
$this->assertSame($expected, $capabilities->getCapabilities());
|
||||
@@ -51,6 +53,8 @@ class CapabilitiesTest extends TestCase {
|
||||
'dav' => [
|
||||
'chunking' => '1.0',
|
||||
'public_shares_chunking' => true,
|
||||
'search_supports_creation_time' => true,
|
||||
'search_supports_upload_time' => true,
|
||||
'bulkupload' => '1.0',
|
||||
],
|
||||
];
|
||||
@@ -72,6 +76,8 @@ class CapabilitiesTest extends TestCase {
|
||||
'dav' => [
|
||||
'chunking' => '1.0',
|
||||
'public_shares_chunking' => true,
|
||||
'search_supports_creation_time' => true,
|
||||
'search_supports_upload_time' => true,
|
||||
'absence-supported' => true,
|
||||
'absence-replacement' => true,
|
||||
],
|
||||
|
||||
@@ -436,7 +436,7 @@ class EventsSearchProviderTest extends TestCase {
|
||||
}
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'generateSublineDataProvider')]
|
||||
public function testGenerateSubline(string $ics, string $expectedSubline): void {
|
||||
public function testGenerateSubline(string $ics, string $expectedSubline, array $calendarInfo = []): void {
|
||||
$vCalendar = Reader::read($ics, Reader::OPTION_FORGIVING);
|
||||
$eventComponent = $vCalendar->VEVENT;
|
||||
|
||||
@@ -449,19 +449,23 @@ class EventsSearchProviderTest extends TestCase {
|
||||
return $date->format('m-d');
|
||||
});
|
||||
|
||||
$actual = self::invokePrivate($this->provider, 'generateSubline', [$eventComponent]);
|
||||
$actual = self::invokePrivate($this->provider, 'generateSubline', [$eventComponent, $calendarInfo]);
|
||||
$this->assertEquals($expectedSubline, $actual);
|
||||
}
|
||||
|
||||
public static function generateSublineDataProvider(): array {
|
||||
return [
|
||||
[self::$vEvent1, '08-16 09:00 - 10:00'],
|
||||
[self::$vEvent2, '08-16 09:00 - 08-17 10:00'],
|
||||
[self::$vEvent3, '10-05'],
|
||||
[self::$vEvent4, '10-05 - 10-07'],
|
||||
[self::$vEvent5, '10-05 - 10-09'],
|
||||
[self::$vEvent6, '10-05'],
|
||||
[self::$vEvent7, '08-16 09:00 - 09:00'],
|
||||
[self::$vEvent1, '08-16 09:00 - 10:00', []],
|
||||
[self::$vEvent2, '08-16 09:00 - 08-17 10:00', []],
|
||||
[self::$vEvent3, '10-05', []],
|
||||
[self::$vEvent4, '10-05 - 10-07', []],
|
||||
[self::$vEvent5, '10-05 - 10-09', []],
|
||||
[self::$vEvent6, '10-05', []],
|
||||
[self::$vEvent7, '08-16 09:00 - 09:00', []],
|
||||
[self::$vEvent1, '08-16 09:00 - 10:00 (My Calendar)', ['{DAV:}displayname' => 'My Calendar']],
|
||||
[self::$vEvent3, '10-05 (My Calendar)', ['{DAV:}displayname' => 'My Calendar']],
|
||||
[self::$vEvent2, '08-16 09:00 - 08-17 10:00 (My Calendar)', ['{DAV:}displayname' => 'My Calendar']],
|
||||
[self::$vEvent1, '08-16 09:00 - 10:00', ['{DAV:}displayname' => '']],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,24 +290,29 @@ class TasksSearchProviderTest extends TestCase {
|
||||
}
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'generateSublineDataProvider')]
|
||||
public function testGenerateSubline(string $ics, string $expectedSubline): void {
|
||||
public function testGenerateSubline(string $ics, string $expectedSubline, array $calendarInfo = []): void {
|
||||
$vCalendar = Reader::read($ics, Reader::OPTION_FORGIVING);
|
||||
$taskComponent = $vCalendar->VTODO;
|
||||
|
||||
$this->l10n->method('t')->willReturnArgument(0);
|
||||
$this->l10n->method('l')->willReturnArgument(0);
|
||||
|
||||
$actual = self::invokePrivate($this->provider, 'generateSubline', [$taskComponent]);
|
||||
$actual = self::invokePrivate($this->provider, 'generateSubline', [$taskComponent, $calendarInfo]);
|
||||
$this->assertEquals($expectedSubline, $actual);
|
||||
}
|
||||
|
||||
public static function generateSublineDataProvider(): array {
|
||||
return [
|
||||
[self::$vTodo0, ''],
|
||||
[self::$vTodo1, 'Completed on %s'],
|
||||
[self::$vTodo2, 'Completed on %s'],
|
||||
[self::$vTodo3, 'Due on %s'],
|
||||
[self::$vTodo4, 'Due on %s by %s'],
|
||||
[self::$vTodo0, '', []],
|
||||
[self::$vTodo1, 'Completed on %s', []],
|
||||
[self::$vTodo2, 'Completed on %s', []],
|
||||
[self::$vTodo3, 'Due on %s', []],
|
||||
[self::$vTodo4, 'Due on %s by %s', []],
|
||||
[self::$vTodo0, '(My Tasks)', ['{DAV:}displayname' => 'My Tasks']],
|
||||
[self::$vTodo1, 'Completed on %s (My Tasks)', ['{DAV:}displayname' => 'My Tasks']],
|
||||
[self::$vTodo3, 'Due on %s (My Tasks)', ['{DAV:}displayname' => 'My Tasks']],
|
||||
[self::$vTodo4, 'Due on %s by %s (My Tasks)', ['{DAV:}displayname' => 'My Tasks']],
|
||||
[self::$vTodo1, 'Completed on %s', ['{DAV:}displayname' => '']],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,21 +33,31 @@ 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." : "Por favor ingrese en la interfaz web, vaya a la sección \"Seguridad\" de sus ajustes personales y actualice su contraseña de cifrado ingresando esta contraseña en el campo \"Contraseña de inicio de sesión antigua\" y su contraseña actual.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descifrar este archivo, probablemente se trate de un archivo compartido. Por favor, pida al propietario del archivo que vuelva a compartirlo con usted.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede leer este archivo, probablemente se trate de un archivo compartido. Por favor, pida al propietario del archivo que vuelva a compartirlo con usted.",
|
||||
"Default Encryption Module" : "Módulo de cifrado predeterminado",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Módulo de cifrado predeterminado para el cifrado del lado del servidor (SSE) de Nextcloud",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Al activar esta opción se encriptarán todos los archivos almacenados en la memoria principal, de lo contrario, serán cifrados sólo los archivos de almacenamiento externo",
|
||||
"Encrypt the home storage" : "Encriptar el almacenamiento personal",
|
||||
"Disable recovery key" : "Desactiva la clave de recuperación",
|
||||
"Enable recovery key" : "Activa la clave de recuperación",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "La llave de recuperación es una llave de cifrado adicional utilizada para cifrar archivos. Es utilizada para recuperar los archivos de una cuenta si la contraseña fuese olvidada.",
|
||||
"Recovery key password" : "Contraseña de clave de recuperación",
|
||||
"Passwords fields do not match" : "Las contraseñas no coinciden",
|
||||
"Repeat recovery key password" : "Repita la contraseña de recuperación",
|
||||
"An error occurred while updating the recovery key settings. Please try again." : "Se produjo un error al actualizar la configuración de la clave de recuperación. Por favor, inténtelo de nuevo.",
|
||||
"Change recovery key password" : "Cambiar la contraseña de la clave de recuperación",
|
||||
"Old recovery key password" : "Antigua contraseña de recuperación",
|
||||
"New recovery key password" : "Nueva contraseña de recuperación",
|
||||
"Repeat new recovery key password" : "Repita la nueva contraseña de recuperación",
|
||||
"An error occurred while changing the recovery key password. Please try again." : "Se produjo un error al cambiar la contraseña de la clave de recuperación. Por favor, inténtelo de nuevo.",
|
||||
"Update private key password" : "Actualizar la contraseña de la clave privada",
|
||||
"Your private key password no longer matches your log-in password. Set your old private key password to your current log-in password." : "Tu contraseña de clave privada ya no coincide con tu contraseña de inicio de sesión. Cambia tu contraseña de clave privada anterior a tu contraseña de inicio de sesión actual.",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña, puede pedir a su administrador que recupere sus archivos.",
|
||||
"Old log-in password" : "Contraseña de acceso antigua",
|
||||
"Current log-in password" : "Contraseña de acceso actual",
|
||||
"Update" : "Actualizar",
|
||||
"Updating recovery keys. This can take some time…" : "Actualizando las claves de recuperación. Esto puede tardar algún tiempo …",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus archivos cifrados en caso de pérdida de contraseña",
|
||||
"Enable password recovery" : "Habilitar la contraseña de recuperación",
|
||||
"Default encryption module" : "Módulo de cifrado por defecto",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.",
|
||||
"Basic encryption module" : "Módulo de cifrado básico",
|
||||
|
||||
@@ -31,21 +31,31 @@
|
||||
"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." : "Por favor ingrese en la interfaz web, vaya a la sección \"Seguridad\" de sus ajustes personales y actualice su contraseña de cifrado ingresando esta contraseña en el campo \"Contraseña de inicio de sesión antigua\" y su contraseña actual.",
|
||||
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede descifrar este archivo, probablemente se trate de un archivo compartido. Por favor, pida al propietario del archivo que vuelva a compartirlo con usted.",
|
||||
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede leer este archivo, probablemente se trate de un archivo compartido. Por favor, pida al propietario del archivo que vuelva a compartirlo con usted.",
|
||||
"Default Encryption Module" : "Módulo de cifrado predeterminado",
|
||||
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Módulo de cifrado predeterminado para el cifrado del lado del servidor (SSE) de Nextcloud",
|
||||
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Al activar esta opción se encriptarán todos los archivos almacenados en la memoria principal, de lo contrario, serán cifrados sólo los archivos de almacenamiento externo",
|
||||
"Encrypt the home storage" : "Encriptar el almacenamiento personal",
|
||||
"Disable recovery key" : "Desactiva la clave de recuperación",
|
||||
"Enable recovery key" : "Activa la clave de recuperación",
|
||||
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "La llave de recuperación es una llave de cifrado adicional utilizada para cifrar archivos. Es utilizada para recuperar los archivos de una cuenta si la contraseña fuese olvidada.",
|
||||
"Recovery key password" : "Contraseña de clave de recuperación",
|
||||
"Passwords fields do not match" : "Las contraseñas no coinciden",
|
||||
"Repeat recovery key password" : "Repita la contraseña de recuperación",
|
||||
"An error occurred while updating the recovery key settings. Please try again." : "Se produjo un error al actualizar la configuración de la clave de recuperación. Por favor, inténtelo de nuevo.",
|
||||
"Change recovery key password" : "Cambiar la contraseña de la clave de recuperación",
|
||||
"Old recovery key password" : "Antigua contraseña de recuperación",
|
||||
"New recovery key password" : "Nueva contraseña de recuperación",
|
||||
"Repeat new recovery key password" : "Repita la nueva contraseña de recuperación",
|
||||
"An error occurred while changing the recovery key password. Please try again." : "Se produjo un error al cambiar la contraseña de la clave de recuperación. Por favor, inténtelo de nuevo.",
|
||||
"Update private key password" : "Actualizar la contraseña de la clave privada",
|
||||
"Your private key password no longer matches your log-in password. Set your old private key password to your current log-in password." : "Tu contraseña de clave privada ya no coincide con tu contraseña de inicio de sesión. Cambia tu contraseña de clave privada anterior a tu contraseña de inicio de sesión actual.",
|
||||
"If you do not remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña, puede pedir a su administrador que recupere sus archivos.",
|
||||
"Old log-in password" : "Contraseña de acceso antigua",
|
||||
"Current log-in password" : "Contraseña de acceso actual",
|
||||
"Update" : "Actualizar",
|
||||
"Updating recovery keys. This can take some time…" : "Actualizando las claves de recuperación. Esto puede tardar algún tiempo …",
|
||||
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus archivos cifrados en caso de pérdida de contraseña",
|
||||
"Enable password recovery" : "Habilitar la contraseña de recuperación",
|
||||
"Default encryption module" : "Módulo de cifrado por defecto",
|
||||
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.",
|
||||
"Basic encryption module" : "Módulo de cifrado básico",
|
||||
|
||||
@@ -17,6 +17,7 @@ use OCP\AppFramework\Bootstrap\IBootContext;
|
||||
use OCP\AppFramework\Bootstrap\IBootstrap;
|
||||
use OCP\AppFramework\Bootstrap\IRegistrationContext;
|
||||
use OCP\Federation\ICloudFederationProviderManager;
|
||||
use OCP\Server;
|
||||
|
||||
class Application extends App implements IBootstrap {
|
||||
|
||||
@@ -41,7 +42,7 @@ class Application extends App implements IBootstrap {
|
||||
$manager->addCloudFederationProvider($type,
|
||||
'Federated Files Sharing',
|
||||
function (): CloudFederationProviderFiles {
|
||||
return \OCP\Server::get(CloudFederationProviderFiles::class);
|
||||
return Server::get(CloudFederationProviderFiles::class);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,14 +329,29 @@ class FederatedShareProvider implements IShareProvider, IShareProviderSupportsAl
|
||||
->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATETIME_MUTABLE))
|
||||
->executeStatement();
|
||||
|
||||
// send the updated permission to the owner/initiator, if they are not the same
|
||||
if ($share->getShareOwner() !== $share->getSharedBy()) {
|
||||
/*
|
||||
* If the share owner and share initiator are on the same instance,
|
||||
* then we're done here as the share was just updated above.
|
||||
*
|
||||
* However, if the share owner/sharee is on a remote instance (and thus we're dealing with a federated share),
|
||||
* then we are supposed to let the share owner/ sharee on the remote instance know.
|
||||
*/
|
||||
if ($this->shouldNotifyRemote($share)) {
|
||||
$this->sendPermissionUpdate($share);
|
||||
}
|
||||
|
||||
return $share;
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify owner/sharee if they are not the same and ANY of them is a remote user.
|
||||
*/
|
||||
protected function shouldNotifyRemote(IShare $share): bool {
|
||||
$ownerOrSharerIsRemoteUser = !$this->userManager->userExists($share->getShareOwner())
|
||||
|| !$this->userManager->userExists($share->getSharedBy());
|
||||
return $ownerOrSharerIsRemoteUser && $share->getShareOwner() !== $share->getSharedBy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the updated permission to the owner/initiator, if they are not the same.
|
||||
*
|
||||
@@ -466,13 +481,8 @@ class FederatedShareProvider implements IShareProvider, IShareProviderSupportsAl
|
||||
* @throws HintException
|
||||
*/
|
||||
protected function revokeShare($share, $isOwner) {
|
||||
if ($this->userManager->userExists($share->getShareOwner()) && $this->userManager->userExists($share->getSharedBy())) {
|
||||
// If both the owner and the initiator of the share are local users we don't have to notify anybody else
|
||||
return;
|
||||
}
|
||||
|
||||
// also send a unShare request to the initiator, if this is a different user than the owner
|
||||
if ($share->getShareOwner() !== $share->getSharedBy()) {
|
||||
if ($this->shouldNotifyRemote($share)) {
|
||||
if ($isOwner) {
|
||||
[, $remote] = $this->addressHandler->splitUserRemote($share->getSharedBy());
|
||||
} else {
|
||||
|
||||
@@ -14,6 +14,7 @@ use OCP\GlobalScale\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\Settings\IDelegatedSettings;
|
||||
use OCP\Util;
|
||||
|
||||
class Admin implements IDelegatedSettings {
|
||||
/**
|
||||
@@ -44,8 +45,8 @@ class Admin implements IDelegatedSettings {
|
||||
$this->initialState->provideInitialState('lookupServerUploadEnabled', $this->fedShareProvider->isLookupServerUploadEnabled());
|
||||
$this->initialState->provideInitialState('federatedTrustedShareAutoAccept', $this->fedShareProvider->isFederatedTrustedShareAutoAccept());
|
||||
|
||||
\OCP\Util::addStyle(Application::APP_ID, 'settings-admin');
|
||||
\OCP\Util::addScript(Application::APP_ID, 'settings-admin');
|
||||
Util::addStyle(Application::APP_ID, 'settings-admin');
|
||||
Util::addScript(Application::APP_ID, 'settings-admin');
|
||||
return new TemplateResponse(Application::APP_ID, 'settings-admin', renderAs: '');
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ use OCP\Defaults;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\IUserSession;
|
||||
use OCP\Settings\ISettings;
|
||||
use OCP\Util;
|
||||
|
||||
class Personal implements ISettings {
|
||||
public function __construct(
|
||||
@@ -42,8 +43,8 @@ class Personal implements ISettings {
|
||||
$this->initialState->provideInitialState('cloudId', $cloudID);
|
||||
$this->initialState->provideInitialState('docUrlFederated', $this->urlGenerator->linkToDocs('user-sharing-federated'));
|
||||
|
||||
\OCP\Util::addStyle(Application::APP_ID, 'settings-personal');
|
||||
\OCP\Util::addScript(Application::APP_ID, 'settings-personal');
|
||||
Util::addStyle(Application::APP_ID, 'settings-personal');
|
||||
Util::addScript(Application::APP_ID, 'settings-personal');
|
||||
return new TemplateResponse(Application::APP_ID, 'settings-personal', renderAs: TemplateResponse::RENDER_AS_BLANK);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,417 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\FederatedFileSharing\Tests;
|
||||
|
||||
use LogicException;
|
||||
use OC\Federation\CloudId;
|
||||
use OC\Share20\Share;
|
||||
use OCA\FederatedFileSharing\AddressHandler;
|
||||
use OCA\FederatedFileSharing\FederatedShareProvider;
|
||||
use OCA\FederatedFileSharing\Notifications;
|
||||
use OCA\FederatedFileSharing\TokenHandler;
|
||||
use OCP\Constants;
|
||||
use OCP\DB\IResult;
|
||||
use OCP\DB\QueryBuilder\IExpressionBuilder;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\Federation\ICloudFederationProviderManager;
|
||||
use OCP\Federation\ICloudIdManager;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\GlobalScale\IConfig as GlobalScaleConfig;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IL10N;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Share\IShare;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Psr\Log\NullLogger;
|
||||
|
||||
class FederatedShareProviderReshareRemoteTest extends \Test\TestCase {
|
||||
private IDBConnection&MockObject $connection;
|
||||
private AddressHandler&MockObject $addressHandler;
|
||||
private Notifications&MockObject $notifications;
|
||||
private TokenHandler&MockObject $tokenHandler;
|
||||
private IL10N&MockObject $l10n;
|
||||
private IRootFolder&MockObject $rootFolder;
|
||||
private IConfig&MockObject $config;
|
||||
|
||||
private IUserManager&MockObject $userManager;
|
||||
private ICloudIdManager&MockObject $cloudIdManager;
|
||||
private GlobalScaleConfig&MockObject $gsConfig;
|
||||
private ICloudFederationProviderManager&MockObject $cloudFederationProviderManager;
|
||||
private LoggerInterface $logger;
|
||||
private FederatedShareProvider $shareProvider;
|
||||
|
||||
|
||||
protected function setUp(): void {
|
||||
$this->connection = $this->createMock(IDBConnection::class);
|
||||
$this->addressHandler = $this->createMock(AddressHandler::class);
|
||||
$this->notifications = $this->createMock(Notifications::class);
|
||||
$this->tokenHandler = $this->createMock(TokenHandler::class);
|
||||
$this->l10n = $this->createMock(IL10N::class);
|
||||
$this->rootFolder = $this->createMock(IRootFolder::class);
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
$this->userManager = $this->createMock(IUserManager::class);
|
||||
$this->cloudIdManager = $this->createMock(ICloudIdManager::class);
|
||||
$this->gsConfig = $this->createMock(GlobalScaleConfig::class);
|
||||
$this->cloudFederationProviderManager = $this->createMock(ICloudFederationProviderManager::class);
|
||||
$this->logger = new NullLogger();
|
||||
|
||||
$this->shareProvider = new FederatedShareProvider(
|
||||
$this->connection,
|
||||
$this->addressHandler,
|
||||
$this->notifications,
|
||||
$this->tokenHandler,
|
||||
$this->l10n,
|
||||
$this->rootFolder,
|
||||
$this->config,
|
||||
$this->userManager,
|
||||
$this->cloudIdManager,
|
||||
$this->gsConfig,
|
||||
$this->cloudFederationProviderManager,
|
||||
$this->logger,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This test case validates that requestReShare is called when creating a federated share.
|
||||
*
|
||||
* We have three actors:
|
||||
*
|
||||
* jane@https://origin.test
|
||||
* alice@https://local.test
|
||||
* bob@https://destination.test
|
||||
*
|
||||
* Jane shared the folder with Alice which re-shares the folder with Bob.
|
||||
*
|
||||
* The expected outcome is, that Alice sends a request to Jane to share the folder with Bob.
|
||||
*/
|
||||
public function testCreateRemoteOwner(): void {
|
||||
$permissions = Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE;
|
||||
|
||||
$node = $this->createMock(Folder::class);
|
||||
$node->method('getId')->willReturn(1000);
|
||||
$node->method('getName')->willReturn('Share 1');
|
||||
|
||||
/*
|
||||
* Mocks getSharedWith ($alreadyShared and $alreadySharedGroup).
|
||||
* The share we are going to create does not already exist.
|
||||
*/
|
||||
$expr1 = $this->createMock(IExpressionBuilder::class);
|
||||
$expr1->method('in')->willReturn('');
|
||||
$expr1->method('eq')->willReturn('');
|
||||
|
||||
$result1 = $this->createMock(IResult::class);
|
||||
$result1->method('fetchAssociative')->willReturn(false);
|
||||
|
||||
$qb1 = $this->createMock(IQueryBuilder::class);
|
||||
$qb1->method('select')->willReturnSelf();
|
||||
$qb1->method('from')->willReturnSelf();
|
||||
$qb1->method('where')->willReturnSelf();
|
||||
$qb1->method('expr')->willReturn($expr1);
|
||||
$qb1->method('createNamedParameter')->willReturn('');
|
||||
$qb1->method('executeQuery')->willReturn($result1);
|
||||
|
||||
/*
|
||||
* Mocks for getShareFromExternalShareTable.
|
||||
* The share we are going to create is an external share.
|
||||
*/
|
||||
$expr2 = $this->createMock(IExpressionBuilder::class);
|
||||
$expr2->method('eq')->willReturn('');
|
||||
|
||||
$result2 = $this->createMock(IResult::class);
|
||||
$result2->method('fetchAllAssociative')->willReturn([
|
||||
[
|
||||
'id' => 100000,
|
||||
'parent' => -1,
|
||||
'share_type' => 0,
|
||||
'remote' => 'https://origin.test/',
|
||||
'remote_id' => '10',
|
||||
'share_token' => 'share_token1',
|
||||
'password' => '',
|
||||
'name' => '/Share1',
|
||||
'owner' => 'jane', // owner in share_external is the user on the remote instance
|
||||
'user' => 'alice', // user in share_external is the receiver on the current instance
|
||||
'mountpoint' => '/Share1',
|
||||
'mountpoint_hash' => '94ee935396a30e27953838d0f65d1e17', // md5(mountpoint)
|
||||
'accepted' => 1,
|
||||
],
|
||||
]);
|
||||
|
||||
$qb2 = $this->createMock(IQueryBuilder::class);
|
||||
$qb2->method('select')->willReturnSelf();
|
||||
$qb2->method('from')->willReturnSelf();
|
||||
$qb2->method('where')->willReturnSelf();
|
||||
$qb2->method('expr')->willReturn($expr2);
|
||||
$qb2->method('createNamedParameter')->willReturn('');
|
||||
$qb2->method('executeQuery')->willReturn($result2);
|
||||
|
||||
/*
|
||||
* Mocks for addShareToDB.
|
||||
* The record on the local instance for the outgoing share.
|
||||
*/
|
||||
$expr3 = $this->createMock(IExpressionBuilder::class);
|
||||
$expr3->method('eq')->willReturn('');
|
||||
|
||||
$result3 = $this->createMock(IResult::class);
|
||||
$result3->method('fetchAllAssociative')->willReturn([
|
||||
[
|
||||
'id' => 100000,
|
||||
'parent' => -1,
|
||||
'share_type' => 0,
|
||||
'remote' => 'https://origin.test/',
|
||||
'remote_id' => '10',
|
||||
'share_token' => 'share_token2',
|
||||
'password' => '',
|
||||
'name' => '/Share1',
|
||||
'owner' => 'jane', // owner in share_external is the user on the remote instance
|
||||
'user' => 'alice', // user in share_external is the receiver on the current instance
|
||||
'mountpoint' => '/Share1',
|
||||
'mountpoint_hash' => '94ee935396a30e27953838d0f65d1e17', // md5(mountpoint)
|
||||
'accepted' => 1,
|
||||
],
|
||||
]);
|
||||
|
||||
$qb3 = $this->createMock(IQueryBuilder::class);
|
||||
$qb3->method('insert')->willReturnSelf();
|
||||
$qb3->method('setValue')->willReturnSelf();
|
||||
$qb3->method('getLastInsertId')->willReturn(2000);
|
||||
|
||||
/*
|
||||
* Mocks for updateSuccessfulReShare
|
||||
*/
|
||||
$expr4 = $this->createMock(IExpressionBuilder::class);
|
||||
$expr4->method('eq')->willReturn('');
|
||||
|
||||
$qb4 = $this->createMock(IQueryBuilder::class);
|
||||
$qb4->method('update')->willReturnSelf();
|
||||
$qb4->method('where')->willReturnSelf();
|
||||
$qb4->method('expr')->willReturn($expr4);
|
||||
$qb4->method('set')->willReturnSelf();
|
||||
$qb4->method('createNamedParameter')->willReturn('');
|
||||
|
||||
/*
|
||||
* Mocks for storeRemoteId.
|
||||
*/
|
||||
$qb5 = $this->createMock(IQueryBuilder::class);
|
||||
$qb5->method('insert')->willReturnSelf();
|
||||
$qb5->method('values')->willReturnSelf();
|
||||
|
||||
/*
|
||||
* Mocks for getRawShare.
|
||||
*/
|
||||
$expr6 = $this->createMock(IExpressionBuilder::class);
|
||||
$expr6->method('eq')->willReturn('');
|
||||
|
||||
$result6 = $this->createMock(IResult::class);
|
||||
$result6->method('fetchAssociative')->willReturn([
|
||||
'id' => 20000,
|
||||
'share_type' => IShare::TYPE_REMOTE,
|
||||
'share_with' => 'bob@https://destination.test',
|
||||
'password' => null,
|
||||
'uid_owner' => 'jane@origin.test',
|
||||
'uid_initiator' => 'alice',
|
||||
'parent' => null,
|
||||
'item_type' => 'folder',
|
||||
'item_source' => (string)$node->getId(),
|
||||
'item_target' => null,
|
||||
'file_source' => $node->getId(),
|
||||
'file_target' => '',
|
||||
'permissions' => $permissions,
|
||||
'stime' => 0,
|
||||
'accepted' => 0,
|
||||
'expiration' => null,
|
||||
'token' => 'share_token3',
|
||||
'mail_send' => 0,
|
||||
'share_name' => null,
|
||||
'password_by_talk' => 0,
|
||||
'note' => null,
|
||||
'hide_download' => 0,
|
||||
'label' => null,
|
||||
'attributes' => null,
|
||||
'password_expiration_time' => null,
|
||||
'reminder_sent' => 0,
|
||||
]);
|
||||
|
||||
$qb6 = $this->createMock(IQueryBuilder::class);
|
||||
$qb6->method('select')->willReturnSelf();
|
||||
$qb6->method('from')->willReturnSelf();
|
||||
$qb6->method('where')->willReturnSelf();
|
||||
$qb6->method('expr')->willReturn($expr6);
|
||||
$qb6->method('createNamedParameter')->willReturn('');
|
||||
$qb6->method('executeQuery')->willReturn($result6);
|
||||
|
||||
|
||||
$queryBuilderMatcher = $this->exactly(8);
|
||||
$this->connection
|
||||
->expects($queryBuilderMatcher)
|
||||
->method('getQueryBuilder')
|
||||
->willReturnCallback(function () use ($queryBuilderMatcher, $qb1, $qb2, $qb3, $qb4, $qb5, $qb6) {
|
||||
return match ($queryBuilderMatcher->numberOfInvocations()) {
|
||||
1, 2 => $qb1,
|
||||
3, 5 => $qb2,
|
||||
4 => $qb3,
|
||||
6 => $qb4,
|
||||
7 => $qb5,
|
||||
8 => $qb6,
|
||||
default => throw new LogicException('Unexpected number of invocations for getQueryBuilder')
|
||||
};
|
||||
});
|
||||
|
||||
// the cloud id for the recipient
|
||||
$this->cloudIdManager->method('resolveCloudId')
|
||||
->with('bob@https://destination.test')
|
||||
->willReturn(new CloudId(
|
||||
'bob@https://destination.test',
|
||||
'bob',
|
||||
'https://destination.test',
|
||||
'Bob', // is usually null in prod, setting it here to avoid additional mocking
|
||||
));
|
||||
|
||||
$this->addressHandler->method('generateRemoteURL')
|
||||
->willReturn('https://local.test');
|
||||
$this->addressHandler->method('compareAddresses')
|
||||
->willReturn(false);
|
||||
|
||||
// the cloud id of the actual owner
|
||||
$this->cloudIdManager->method('getCloudId')
|
||||
->willReturn(new CloudId(
|
||||
'jane@https://origin.test',
|
||||
'jane',
|
||||
'https://origin.test',
|
||||
'Jane', // is usually null in prod, setting it here to avoid additional mocking
|
||||
));
|
||||
|
||||
$this->notifications->expects($this->once())
|
||||
->method('requestReShare')
|
||||
->with(
|
||||
$this->equalTo('share_token1'),
|
||||
$this->equalTo('10'),
|
||||
$this->equalTo('2000'),
|
||||
$this->equalTo('https://origin.test/'),
|
||||
$this->equalTo('bob@https://destination.test'),
|
||||
$this->equalTo($permissions),
|
||||
$this->equalTo('Share 1'),
|
||||
$this->equalTo(IShare::TYPE_REMOTE),
|
||||
)
|
||||
->willReturn(['share_token2', '20']);
|
||||
|
||||
$share = new Share($this->rootFolder, $this->userManager);
|
||||
$share
|
||||
->setSharedWith('bob@https://destination.test')
|
||||
->setShareOwner('alice')
|
||||
->setSharedBy('alice')
|
||||
->setPermissions($permissions)
|
||||
->setShareType(IShare::TYPE_REMOTE)
|
||||
->setNode($node)
|
||||
->setTarget('/Share1');
|
||||
|
||||
$this->shareProvider->create($share);
|
||||
}
|
||||
|
||||
/**
|
||||
* This test case validates that sendPermission is called when updating a federated share.
|
||||
*
|
||||
* We have three actors:
|
||||
*
|
||||
* jane@https://origin.test
|
||||
* alice@https://local.test
|
||||
* bob@https://destination.test
|
||||
*
|
||||
* Jane shared the folder with Alice which re-shared the folder with Bob.
|
||||
* Alice is now changing the permissions for the share.
|
||||
*
|
||||
* The expected outcome is, that Alice sends a request to Jane to change the share.
|
||||
*/
|
||||
public function testUpdateRemoteOwner(): void {
|
||||
$permissions = Constants::PERMISSION_READ;
|
||||
|
||||
$node = $this->createMock(Folder::class);
|
||||
$node->method('getId')->willReturn(1000);
|
||||
$node->method('getName')->willReturn('Share 1');
|
||||
|
||||
/*
|
||||
* Mocks update share.
|
||||
*/
|
||||
$expr1 = $this->createMock(IExpressionBuilder::class);
|
||||
$expr1->method('eq')->willReturn('');
|
||||
|
||||
$qb1 = $this->createMock(IQueryBuilder::class);
|
||||
$qb1->method('update')->willReturnSelf();
|
||||
$qb1->method('where')->willReturnSelf();
|
||||
$qb1->method('expr')->willReturn($expr1);
|
||||
$qb1->method('createNamedParameter')->willReturn('');
|
||||
$qb1->method('set')->willReturnSelf();
|
||||
|
||||
/*
|
||||
* Mocks getRemoteId.
|
||||
*/
|
||||
$expr2 = $this->createMock(IExpressionBuilder::class);
|
||||
$expr2->method('eq')->willReturn('');
|
||||
|
||||
$result2 = $this->createMock(IResult::class);
|
||||
$result2->method('fetchAssociative')->willReturn([
|
||||
'share_id' => 3000,
|
||||
'remote_id' => '10',
|
||||
]);
|
||||
|
||||
$qb2 = $this->createMock(IQueryBuilder::class);
|
||||
$qb2->method('select')->willReturnSelf();
|
||||
$qb2->method('from')->willReturnSelf();
|
||||
$qb2->method('where')->willReturnSelf();
|
||||
$qb2->method('expr')->willReturn($expr2);
|
||||
$qb2->method('createNamedParameter')->willReturn('');
|
||||
$qb2->method('executeQuery')->willReturn($result2);
|
||||
|
||||
$queryBuilderMatcher = $this->exactly(2);
|
||||
$this->connection
|
||||
->expects($queryBuilderMatcher)
|
||||
->method('getQueryBuilder')
|
||||
->willReturnCallback(function () use ($queryBuilderMatcher, $qb1, $qb2) {
|
||||
return match ($queryBuilderMatcher->numberOfInvocations()) {
|
||||
1 => $qb1,
|
||||
2 => $qb2,
|
||||
default => throw new LogicException('Unexpected number of invocations for getQueryBuilder')
|
||||
};
|
||||
});
|
||||
|
||||
$this->userManager->method('userExists')
|
||||
->willReturnMap([
|
||||
['jane@https://origin.test', false],
|
||||
['alice', true],
|
||||
]);
|
||||
|
||||
$this->addressHandler->method('splitUserRemote')
|
||||
->willReturn(['jane', 'https://origin.test']);
|
||||
|
||||
$this->notifications->expects($this->once())
|
||||
->method('sendPermissionChange')
|
||||
->with(
|
||||
$this->equalTo('https://origin.test'),
|
||||
$this->equalTo('10'),
|
||||
$this->equalTo('share_token3'),
|
||||
$this->equalTo($permissions),
|
||||
);
|
||||
|
||||
$share = new Share($this->rootFolder, $this->userManager);
|
||||
$share
|
||||
->setId('3000')
|
||||
->setToken('share_token3')
|
||||
->setSharedWith('bob@https://destination.test')
|
||||
->setShareOwner('jane@https://origin.test')
|
||||
->setSharedBy('alice')
|
||||
->setPermissions($permissions)
|
||||
->setShareType(IShare::TYPE_REMOTE)
|
||||
->setNode($node)
|
||||
->setTarget('/Share1');
|
||||
|
||||
$this->shareProvider->update($share);
|
||||
}
|
||||
}
|
||||
@@ -450,11 +450,7 @@ class FederatedShareProviderTest extends \Test\TestCase {
|
||||
$sharedBy . '@http://localhost'
|
||||
)->willReturn(true);
|
||||
|
||||
if ($owner === $sharedBy) {
|
||||
$this->provider->expects($this->never())->method('sendPermissionUpdate');
|
||||
} else {
|
||||
$this->provider->expects($this->once())->method('sendPermissionUpdate');
|
||||
}
|
||||
$this->provider->expects($this->never())->method('sendPermissionUpdate');
|
||||
|
||||
$this->rootFolder->expects($this->never())->method($this->anything());
|
||||
|
||||
|
||||
@@ -328,10 +328,6 @@ OC.L10N.register(
|
||||
"Tags" : "الوسوم",
|
||||
"Save as …" : "حفظ باسم ...",
|
||||
"Converting files …" : "تحويل الملفات ...",
|
||||
"Converting file …" : "تحويل الملف ...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "نقل \"{source}\" إلى \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "نسخ \"{source}\" إلى \"{destination}\" …",
|
||||
"(copy)" : "(نسخ)",
|
||||
"(copy %n)" : "(نسخ %n)"
|
||||
"Converting file …" : "تحويل الملف ..."
|
||||
},
|
||||
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
|
||||
|
||||
@@ -326,10 +326,6 @@
|
||||
"Tags" : "الوسوم",
|
||||
"Save as …" : "حفظ باسم ...",
|
||||
"Converting files …" : "تحويل الملفات ...",
|
||||
"Converting file …" : "تحويل الملف ...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "نقل \"{source}\" إلى \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "نسخ \"{source}\" إلى \"{destination}\" …",
|
||||
"(copy)" : "(نسخ)",
|
||||
"(copy %n)" : "(نسخ %n)"
|
||||
"Converting file …" : "تحويل الملف ..."
|
||||
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
|
||||
}
|
||||
@@ -245,8 +245,6 @@ OC.L10N.register(
|
||||
"You" : "Tu",
|
||||
"Shared multiple times with different people" : "Compartióse múltiples vegaes con otres persones",
|
||||
"Error while loading the file data" : "Hebo un error mentanto de cargaben los datos de los ficheros",
|
||||
"Tags" : "Etiquetes",
|
||||
"(copy)" : "(copia)",
|
||||
"(copy %n)" : "(copia %n)"
|
||||
"Tags" : "Etiquetes"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -243,8 +243,6 @@
|
||||
"You" : "Tu",
|
||||
"Shared multiple times with different people" : "Compartióse múltiples vegaes con otres persones",
|
||||
"Error while loading the file data" : "Hebo un error mentanto de cargaben los datos de los ficheros",
|
||||
"Tags" : "Etiquetes",
|
||||
"(copy)" : "(copia)",
|
||||
"(copy %n)" : "(copia %n)"
|
||||
"Tags" : "Etiquetes"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -390,10 +390,6 @@ OC.L10N.register(
|
||||
"Tags" : "Тэгі",
|
||||
"Save as …" : "Захаваць як …",
|
||||
"Converting files …" : "Канвертацыя файлаў …",
|
||||
"Converting file …" : "Канвертацыя файла …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Перамяшчэнне \"{source}\" у \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Капіяванне \"{source}\" у \"{destination}\" …",
|
||||
"(copy)" : "(копія)",
|
||||
"(copy %n)" : "(копія %n)"
|
||||
"Converting file …" : "Канвертацыя файла …"
|
||||
},
|
||||
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
|
||||
|
||||
@@ -388,10 +388,6 @@
|
||||
"Tags" : "Тэгі",
|
||||
"Save as …" : "Захаваць як …",
|
||||
"Converting files …" : "Канвертацыя файлаў …",
|
||||
"Converting file …" : "Канвертацыя файла …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Перамяшчэнне \"{source}\" у \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Капіяванне \"{source}\" у \"{destination}\" …",
|
||||
"(copy)" : "(копія)",
|
||||
"(copy %n)" : "(копія %n)"
|
||||
"Converting file …" : "Канвертацыя файла …"
|
||||
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
|
||||
}
|
||||
@@ -397,10 +397,6 @@ OC.L10N.register(
|
||||
"Tags" : "Етикети",
|
||||
"Save as …" : "Запази като...",
|
||||
"Converting files …" : "Конвертиране на файлове...",
|
||||
"Converting file …" : "Файлът се преобразува...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Преместване на \"{source}\" към \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Копиране на \"{source}\" в \"{destination}\" …",
|
||||
"(copy)" : "(копие)",
|
||||
"(copy %n)" : "(копирай %n)"
|
||||
"Converting file …" : "Файлът се преобразува..."
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -395,10 +395,6 @@
|
||||
"Tags" : "Етикети",
|
||||
"Save as …" : "Запази като...",
|
||||
"Converting files …" : "Конвертиране на файлове...",
|
||||
"Converting file …" : "Файлът се преобразува...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Преместване на \"{source}\" към \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Копиране на \"{source}\" в \"{destination}\" …",
|
||||
"(copy)" : "(копие)",
|
||||
"(copy %n)" : "(копирай %n)"
|
||||
"Converting file …" : "Файлът се преобразува..."
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -326,10 +326,6 @@ OC.L10N.register(
|
||||
"Tags" : "Etiquetes",
|
||||
"Save as …" : "Anomena i desa …",
|
||||
"Converting files …" : "Convertint fitxers …",
|
||||
"Converting file …" : "S'està convertint el fitxer …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "S'està movent \"{source}\" a \"{destination}”…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "S'està copiant \"{source}\" a \"{destination}” …",
|
||||
"(copy)" : "(còpia)",
|
||||
"(copy %n)" : "(còpia %n)"
|
||||
"Converting file …" : "S'està convertint el fitxer …"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -324,10 +324,6 @@
|
||||
"Tags" : "Etiquetes",
|
||||
"Save as …" : "Anomena i desa …",
|
||||
"Converting files …" : "Convertint fitxers …",
|
||||
"Converting file …" : "S'està convertint el fitxer …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "S'està movent \"{source}\" a \"{destination}”…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "S'està copiant \"{source}\" a \"{destination}” …",
|
||||
"(copy)" : "(còpia)",
|
||||
"(copy %n)" : "(còpia %n)"
|
||||
"Converting file …" : "S'està convertint el fitxer …"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -411,10 +411,6 @@ OC.L10N.register(
|
||||
"Tags" : "Štítky",
|
||||
"Save as …" : "Uložit jako …",
|
||||
"Converting files …" : "Převádění souborů …",
|
||||
"Converting file …" : "Převádění souboru …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Přesouvání „{source}“ do „{destination}“ …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopírování „{source}“ do „{destination}“ …",
|
||||
"(copy)" : "(zkopírovat)",
|
||||
"(copy %n)" : "(zkopírovat %n)"
|
||||
"Converting file …" : "Převádění souboru …"
|
||||
},
|
||||
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
|
||||
|
||||
@@ -409,10 +409,6 @@
|
||||
"Tags" : "Štítky",
|
||||
"Save as …" : "Uložit jako …",
|
||||
"Converting files …" : "Převádění souborů …",
|
||||
"Converting file …" : "Převádění souboru …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Přesouvání „{source}“ do „{destination}“ …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopírování „{source}“ do „{destination}“ …",
|
||||
"(copy)" : "(zkopírovat)",
|
||||
"(copy %n)" : "(zkopírovat %n)"
|
||||
"Converting file …" : "Převádění souboru …"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
|
||||
}
|
||||
@@ -395,10 +395,6 @@ OC.L10N.register(
|
||||
"Tags" : "Tags",
|
||||
"Save as …" : "Gem som ...",
|
||||
"Converting files …" : "Konverterer filer ...",
|
||||
"Converting file …" : "Konverterer fil ...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Flytter \"{source}\" til \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopierer \"{source}\" til \"{destination}\" …",
|
||||
"(copy)" : "(kopier)",
|
||||
"(copy %n)" : "(kopier %n)"
|
||||
"Converting file …" : "Konverterer fil ..."
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -393,10 +393,6 @@
|
||||
"Tags" : "Tags",
|
||||
"Save as …" : "Gem som ...",
|
||||
"Converting files …" : "Konverterer filer ...",
|
||||
"Converting file …" : "Konverterer fil ...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Flytter \"{source}\" til \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopierer \"{source}\" til \"{destination}\" …",
|
||||
"(copy)" : "(kopier)",
|
||||
"(copy %n)" : "(kopier %n)"
|
||||
"Converting file …" : "Konverterer fil ..."
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -95,6 +95,7 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Ein anderer Eintrag mit diesem Namen existiert bereits.",
|
||||
"Invalid filename." : "Ungültiger Dateiname.",
|
||||
"Rename file" : "Datei umbenennen",
|
||||
"Recently created" : "Zuletzt erstellt",
|
||||
"Folder" : "Ordner",
|
||||
"Unknown file type" : "Unbekannter Dateityp",
|
||||
"{ext} image" : "{ext}-Bild",
|
||||
@@ -411,10 +412,6 @@ OC.L10N.register(
|
||||
"Tags" : "Schlagworte",
|
||||
"Save as …" : "Speichern als …",
|
||||
"Converting files …" : "Dateien werden konvertiert …",
|
||||
"Converting file …" : "Datei wird konvertiert …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Verschiebe \"{source}\" nach \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopiere \"{source}\" nach \"{destination}\" …",
|
||||
"(copy)" : "(Kopie)",
|
||||
"(copy %n)" : "(Kopie %n)"
|
||||
"Converting file …" : "Datei wird konvertiert …"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
"Another entry with the same name already exists." : "Ein anderer Eintrag mit diesem Namen existiert bereits.",
|
||||
"Invalid filename." : "Ungültiger Dateiname.",
|
||||
"Rename file" : "Datei umbenennen",
|
||||
"Recently created" : "Zuletzt erstellt",
|
||||
"Folder" : "Ordner",
|
||||
"Unknown file type" : "Unbekannter Dateityp",
|
||||
"{ext} image" : "{ext}-Bild",
|
||||
@@ -409,10 +410,6 @@
|
||||
"Tags" : "Schlagworte",
|
||||
"Save as …" : "Speichern als …",
|
||||
"Converting files …" : "Dateien werden konvertiert …",
|
||||
"Converting file …" : "Datei wird konvertiert …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Verschiebe \"{source}\" nach \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopiere \"{source}\" nach \"{destination}\" …",
|
||||
"(copy)" : "(Kopie)",
|
||||
"(copy %n)" : "(Kopie %n)"
|
||||
"Converting file …" : "Datei wird konvertiert …"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -95,6 +95,7 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Ein anderer Eintrag mit diesem Namen existiert bereits.",
|
||||
"Invalid filename." : "Ungültiger Dateiname.",
|
||||
"Rename file" : "Datei umbenennen",
|
||||
"Recently created" : "Zuletzt erstellt",
|
||||
"Folder" : "Ordner",
|
||||
"Unknown file type" : "Unbekannter Dateityp",
|
||||
"{ext} image" : "{ext}-Bild",
|
||||
@@ -411,10 +412,6 @@ OC.L10N.register(
|
||||
"Tags" : "Schlagworte",
|
||||
"Save as …" : "Speichern als …",
|
||||
"Converting files …" : "Dateien werden konvertiert …",
|
||||
"Converting file …" : "Datei wird konvertiert …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Verschiebe \"{source}\" nach \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopiere \"{source}\" nach \"{destination}\" …",
|
||||
"(copy)" : "(Kopie)",
|
||||
"(copy %n)" : "(Kopie %n)"
|
||||
"Converting file …" : "Datei wird konvertiert …"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
"Another entry with the same name already exists." : "Ein anderer Eintrag mit diesem Namen existiert bereits.",
|
||||
"Invalid filename." : "Ungültiger Dateiname.",
|
||||
"Rename file" : "Datei umbenennen",
|
||||
"Recently created" : "Zuletzt erstellt",
|
||||
"Folder" : "Ordner",
|
||||
"Unknown file type" : "Unbekannter Dateityp",
|
||||
"{ext} image" : "{ext}-Bild",
|
||||
@@ -409,10 +410,6 @@
|
||||
"Tags" : "Schlagworte",
|
||||
"Save as …" : "Speichern als …",
|
||||
"Converting files …" : "Dateien werden konvertiert …",
|
||||
"Converting file …" : "Datei wird konvertiert …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Verschiebe \"{source}\" nach \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopiere \"{source}\" nach \"{destination}\" …",
|
||||
"(copy)" : "(Kopie)",
|
||||
"(copy %n)" : "(Kopie %n)"
|
||||
"Converting file …" : "Datei wird konvertiert …"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -409,10 +409,6 @@ OC.L10N.register(
|
||||
"Tags" : "Ετικέτες",
|
||||
"Save as …" : "Αποθήκευση ως …",
|
||||
"Converting files …" : "Μετατροπή αρχείων …",
|
||||
"Converting file …" : "Μετατροπή αρχείου …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Μετακίνηση του \"{source}\" στο \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Αντιγραφή του \"{source}\" στο \"{destination}\" …",
|
||||
"(copy)" : "(αντιγραφή)",
|
||||
"(copy %n)" : "(αντιγραφή %n)"
|
||||
"Converting file …" : "Μετατροπή αρχείου …"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -407,10 +407,6 @@
|
||||
"Tags" : "Ετικέτες",
|
||||
"Save as …" : "Αποθήκευση ως …",
|
||||
"Converting files …" : "Μετατροπή αρχείων …",
|
||||
"Converting file …" : "Μετατροπή αρχείου …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Μετακίνηση του \"{source}\" στο \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Αντιγραφή του \"{source}\" στο \"{destination}\" …",
|
||||
"(copy)" : "(αντιγραφή)",
|
||||
"(copy %n)" : "(αντιγραφή %n)"
|
||||
"Converting file …" : "Μετατροπή αρχείου …"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -95,6 +95,7 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Another entry with the same name already exists.",
|
||||
"Invalid filename." : "Invalid filename.",
|
||||
"Rename file" : "Rename file",
|
||||
"Recently created" : "Recently created",
|
||||
"Folder" : "Folder",
|
||||
"Unknown file type" : "Unknown file type",
|
||||
"{ext} image" : "{ext} image",
|
||||
@@ -411,10 +412,6 @@ OC.L10N.register(
|
||||
"Tags" : "Tags",
|
||||
"Save as …" : "Save as …",
|
||||
"Converting files …" : "Converting files …",
|
||||
"Converting file …" : "Converting file …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Moving \"{source}\" to \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copying \"{source}\" to \"{destination}\" …",
|
||||
"(copy)" : "(copy)",
|
||||
"(copy %n)" : "(copy %n)"
|
||||
"Converting file …" : "Converting file …"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
"Another entry with the same name already exists." : "Another entry with the same name already exists.",
|
||||
"Invalid filename." : "Invalid filename.",
|
||||
"Rename file" : "Rename file",
|
||||
"Recently created" : "Recently created",
|
||||
"Folder" : "Folder",
|
||||
"Unknown file type" : "Unknown file type",
|
||||
"{ext} image" : "{ext} image",
|
||||
@@ -409,10 +410,6 @@
|
||||
"Tags" : "Tags",
|
||||
"Save as …" : "Save as …",
|
||||
"Converting files …" : "Converting files …",
|
||||
"Converting file …" : "Converting file …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Moving \"{source}\" to \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copying \"{source}\" to \"{destination}\" …",
|
||||
"(copy)" : "(copy)",
|
||||
"(copy %n)" : "(copy %n)"
|
||||
"Converting file …" : "Converting file …"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -411,10 +411,6 @@ OC.L10N.register(
|
||||
"Tags" : "Etiquetas",
|
||||
"Save as …" : "Guardar como …",
|
||||
"Converting files …" : "Convirtiendo archivos …",
|
||||
"Converting file …" : "Convirtiendo archivo …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Moviendo \"{source}\" a \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copiando \"{source}\" a \"{destination}\" …",
|
||||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)"
|
||||
"Converting file …" : "Convirtiendo archivo …"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -409,10 +409,6 @@
|
||||
"Tags" : "Etiquetas",
|
||||
"Save as …" : "Guardar como …",
|
||||
"Converting files …" : "Convirtiendo archivos …",
|
||||
"Converting file …" : "Convirtiendo archivo …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Moviendo \"{source}\" a \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copiando \"{source}\" a \"{destination}\" …",
|
||||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)"
|
||||
"Converting file …" : "Convirtiendo archivo …"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -287,10 +287,6 @@ OC.L10N.register(
|
||||
"You" : "Usted",
|
||||
"Shared multiple times with different people" : "Compartido múltiples veces con diferentes personas",
|
||||
"Error while loading the file data" : "Error al cargar los datos del archivo",
|
||||
"Tags" : "Etiquetas",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Moviendo \"{source}\" a \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copiando \"{source}\" a \"{destination}\" …",
|
||||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)"
|
||||
"Tags" : "Etiquetas"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -285,10 +285,6 @@
|
||||
"You" : "Usted",
|
||||
"Shared multiple times with different people" : "Compartido múltiples veces con diferentes personas",
|
||||
"Error while loading the file data" : "Error al cargar los datos del archivo",
|
||||
"Tags" : "Etiquetas",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Moviendo \"{source}\" a \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copiando \"{source}\" a \"{destination}\" …",
|
||||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)"
|
||||
"Tags" : "Etiquetas"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -95,6 +95,7 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Selle nimega kirje on juba olemas.",
|
||||
"Invalid filename." : "Vigane failinimi.",
|
||||
"Rename file" : "Muuda failinime",
|
||||
"Recently created" : "Loodud hiljuti",
|
||||
"Folder" : "Kaust",
|
||||
"Unknown file type" : "Tundmatu failitüüp",
|
||||
"{ext} image" : "{ext} pilt",
|
||||
@@ -366,7 +367,7 @@ OC.L10N.register(
|
||||
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "„{newName}“ nimi on juba „{dir}“ kaustas kasutusel. Palun vali teine nimi.",
|
||||
"Could not rename \"{oldName}\"" : "„{oldName}“ faili nime muutmine ei õnnestunud",
|
||||
"This operation is forbidden" : "See toiming on keelatud",
|
||||
"This folder is unavailable, please try again later or contact the administration" : "See kaust pole saadaval, palun proovi hiljem uuesti või võta ühendust haldajaaga",
|
||||
"This folder is unavailable, please try again later or contact the administration" : "See kaust pole saadaval, palun proovi hiljem uuesti või võta ühendust haldajaga",
|
||||
"Storage is temporarily not available" : "Salvestusruum pole ajutiselt kättesaadav",
|
||||
"Unexpected error: {error}" : "Tundmatu viga: {error}",
|
||||
"_%n file_::_%n files_" : ["%n fail","%n faili"],
|
||||
@@ -390,7 +391,7 @@ OC.L10N.register(
|
||||
"No recently modified files" : "Hiljuti muudetud faile pole.",
|
||||
"Files and folders you recently modified will show up here." : "Failid ja kaustad, mida oled hiljuti muutnud, ilmuvad siia.",
|
||||
"Search" : "Otsi",
|
||||
"Search results within your files." : "Otsingutulemusd sinu failide seast.",
|
||||
"Search results within your files." : "Otsingutulemused sinu failide seast.",
|
||||
"No entries found in this folder" : "Selles kaustast ei leitud kirjeid",
|
||||
"Select all" : "Vali kõik",
|
||||
"Upload too large" : "Üleslaadimine on liiga suur",
|
||||
@@ -411,10 +412,6 @@ OC.L10N.register(
|
||||
"Tags" : "Sildid",
|
||||
"Save as …" : "Salvesta kui…",
|
||||
"Converting files …" : "Teisendan faile…",
|
||||
"Converting file …" : "Teisendan faili…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Teisaldan „{source}“ → „{destination}“…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopeerin „{source}“ → „{destination}“…",
|
||||
"(copy)" : "(koopia)",
|
||||
"(copy %n)" : "(%n koopia)"
|
||||
"Converting file …" : "Teisendan faili…"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
"Another entry with the same name already exists." : "Selle nimega kirje on juba olemas.",
|
||||
"Invalid filename." : "Vigane failinimi.",
|
||||
"Rename file" : "Muuda failinime",
|
||||
"Recently created" : "Loodud hiljuti",
|
||||
"Folder" : "Kaust",
|
||||
"Unknown file type" : "Tundmatu failitüüp",
|
||||
"{ext} image" : "{ext} pilt",
|
||||
@@ -364,7 +365,7 @@
|
||||
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "„{newName}“ nimi on juba „{dir}“ kaustas kasutusel. Palun vali teine nimi.",
|
||||
"Could not rename \"{oldName}\"" : "„{oldName}“ faili nime muutmine ei õnnestunud",
|
||||
"This operation is forbidden" : "See toiming on keelatud",
|
||||
"This folder is unavailable, please try again later or contact the administration" : "See kaust pole saadaval, palun proovi hiljem uuesti või võta ühendust haldajaaga",
|
||||
"This folder is unavailable, please try again later or contact the administration" : "See kaust pole saadaval, palun proovi hiljem uuesti või võta ühendust haldajaga",
|
||||
"Storage is temporarily not available" : "Salvestusruum pole ajutiselt kättesaadav",
|
||||
"Unexpected error: {error}" : "Tundmatu viga: {error}",
|
||||
"_%n file_::_%n files_" : ["%n fail","%n faili"],
|
||||
@@ -388,7 +389,7 @@
|
||||
"No recently modified files" : "Hiljuti muudetud faile pole.",
|
||||
"Files and folders you recently modified will show up here." : "Failid ja kaustad, mida oled hiljuti muutnud, ilmuvad siia.",
|
||||
"Search" : "Otsi",
|
||||
"Search results within your files." : "Otsingutulemusd sinu failide seast.",
|
||||
"Search results within your files." : "Otsingutulemused sinu failide seast.",
|
||||
"No entries found in this folder" : "Selles kaustast ei leitud kirjeid",
|
||||
"Select all" : "Vali kõik",
|
||||
"Upload too large" : "Üleslaadimine on liiga suur",
|
||||
@@ -409,10 +410,6 @@
|
||||
"Tags" : "Sildid",
|
||||
"Save as …" : "Salvesta kui…",
|
||||
"Converting files …" : "Teisendan faile…",
|
||||
"Converting file …" : "Teisendan faili…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Teisaldan „{source}“ → „{destination}“…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopeerin „{source}“ → „{destination}“…",
|
||||
"(copy)" : "(koopia)",
|
||||
"(copy %n)" : "(%n koopia)"
|
||||
"Converting file …" : "Teisendan faili…"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -405,10 +405,6 @@ OC.L10N.register(
|
||||
"Tags" : "Etiketak",
|
||||
"Save as …" : "Gorde honela...",
|
||||
"Converting files …" : "Fitxategiak bihurtzen...",
|
||||
"Converting file …" : "Fitxategia bihurtzen...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "«{source}» «{destination}»(e)ra mugitzen",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "«{source}» «{destination}»(e)ra mugitzen",
|
||||
"(copy)" : "(kopiatu)",
|
||||
"(copy %n)" : "(kopiatu %n)"
|
||||
"Converting file …" : "Fitxategia bihurtzen..."
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -403,10 +403,6 @@
|
||||
"Tags" : "Etiketak",
|
||||
"Save as …" : "Gorde honela...",
|
||||
"Converting files …" : "Fitxategiak bihurtzen...",
|
||||
"Converting file …" : "Fitxategia bihurtzen...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "«{source}» «{destination}»(e)ra mugitzen",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "«{source}» «{destination}»(e)ra mugitzen",
|
||||
"(copy)" : "(kopiatu)",
|
||||
"(copy %n)" : "(kopiatu %n)"
|
||||
"Converting file …" : "Fitxategia bihurtzen..."
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -397,10 +397,6 @@ OC.L10N.register(
|
||||
"Tags" : "برچسبها",
|
||||
"Save as …" : "ذخیره به عنوان …",
|
||||
"Converting files …" : "تبدیل فایلها…",
|
||||
"Converting file …" : "تبدیل فایل …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "انتقال «{source}» به «{destination}» ...",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "کپی کردن \"{source}\" به \"{destination}\" ...",
|
||||
"(copy)" : "(کپی)",
|
||||
"(copy %n)" : "(کپی %n)"
|
||||
"Converting file …" : "تبدیل فایل …"
|
||||
},
|
||||
"nplurals=2; plural=(n > 1);");
|
||||
|
||||
@@ -395,10 +395,6 @@
|
||||
"Tags" : "برچسبها",
|
||||
"Save as …" : "ذخیره به عنوان …",
|
||||
"Converting files …" : "تبدیل فایلها…",
|
||||
"Converting file …" : "تبدیل فایل …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "انتقال «{source}» به «{destination}» ...",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "کپی کردن \"{source}\" به \"{destination}\" ...",
|
||||
"(copy)" : "(کپی)",
|
||||
"(copy %n)" : "(کپی %n)"
|
||||
"Converting file …" : "تبدیل فایل …"
|
||||
},"pluralForm" :"nplurals=2; plural=(n > 1);"
|
||||
}
|
||||
@@ -144,6 +144,7 @@ OC.L10N.register(
|
||||
"Warn before deleting a file" : "Varoita ennen tiedoston poistamista",
|
||||
"WebDAV URL" : "WebDAV:in URL-osoite",
|
||||
"Create an app password" : "Luo sovellussalasana",
|
||||
"How to access files using WebDAV" : "Tiedostojen käyttö WebDAVin avulla",
|
||||
"Name" : "Nimi",
|
||||
"File type" : "Tiedoston tyyppi",
|
||||
"Size" : "Koko",
|
||||
@@ -361,9 +362,6 @@ OC.L10N.register(
|
||||
"Tags" : "Tunnisteet",
|
||||
"Save as …" : "Tallenna nimellä",
|
||||
"Converting files …" : "Muunnetaan tiedostoja…",
|
||||
"Converting file …" : "Muunnetaan tiedostoa…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Siirretään \"{source}\" kohteeseen \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopioidaan \"{source}\" kohteeseen \"{destination}\" …",
|
||||
"(copy)" : "(kopioi)"
|
||||
"Converting file …" : "Muunnetaan tiedostoa…"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
"Warn before deleting a file" : "Varoita ennen tiedoston poistamista",
|
||||
"WebDAV URL" : "WebDAV:in URL-osoite",
|
||||
"Create an app password" : "Luo sovellussalasana",
|
||||
"How to access files using WebDAV" : "Tiedostojen käyttö WebDAVin avulla",
|
||||
"Name" : "Nimi",
|
||||
"File type" : "Tiedoston tyyppi",
|
||||
"Size" : "Koko",
|
||||
@@ -359,9 +360,6 @@
|
||||
"Tags" : "Tunnisteet",
|
||||
"Save as …" : "Tallenna nimellä",
|
||||
"Converting files …" : "Muunnetaan tiedostoja…",
|
||||
"Converting file …" : "Muunnetaan tiedostoa…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Siirretään \"{source}\" kohteeseen \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopioidaan \"{source}\" kohteeseen \"{destination}\" …",
|
||||
"(copy)" : "(kopioi)"
|
||||
"Converting file …" : "Muunnetaan tiedostoa…"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -411,10 +411,6 @@ OC.L10N.register(
|
||||
"Tags" : "Étiquettes",
|
||||
"Save as …" : "Enregistrer sous...",
|
||||
"Converting files …" : "Conversion des fichiers...",
|
||||
"Converting file …" : "Conversion du fichier...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Déplacement de \"{source}\" vers \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copie de \"{source}\" vers \"{destination}\" …",
|
||||
"(copy)" : "(copie)",
|
||||
"(copy %n)" : "(copier %n)"
|
||||
"Converting file …" : "Conversion du fichier..."
|
||||
},
|
||||
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -409,10 +409,6 @@
|
||||
"Tags" : "Étiquettes",
|
||||
"Save as …" : "Enregistrer sous...",
|
||||
"Converting files …" : "Conversion des fichiers...",
|
||||
"Converting file …" : "Conversion du fichier...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Déplacement de \"{source}\" vers \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copie de \"{source}\" vers \"{destination}\" …",
|
||||
"(copy)" : "(copie)",
|
||||
"(copy %n)" : "(copier %n)"
|
||||
"Converting file …" : "Conversion du fichier..."
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -95,6 +95,7 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Tá iontráil eile leis an ainm céanna ann cheana féin.",
|
||||
"Invalid filename." : "Ainm comhaid neamhbhailí.",
|
||||
"Rename file" : "Athainmnigh an comhad",
|
||||
"Recently created" : "Cruthaithe le déanaí",
|
||||
"Folder" : "Fillteán",
|
||||
"Unknown file type" : "Cineál comhaid anaithnid",
|
||||
"{ext} image" : "íomhá {ext}",
|
||||
@@ -411,10 +412,6 @@ OC.L10N.register(
|
||||
"Tags" : "Clibeanna",
|
||||
"Save as …" : "Sábháil mar…",
|
||||
"Converting files …" : "Comhaid á thiontú…",
|
||||
"Converting file …" : "Comhad á thiontú…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Ag bogadh \"{source}\" go \"{destination}\" ...",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "“{source}” á chóipeáil go “{destination}”…",
|
||||
"(copy)" : "(cóip)",
|
||||
"(copy %n)" : "(cóip %n)"
|
||||
"Converting file …" : "Comhad á thiontú…"
|
||||
},
|
||||
"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);");
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
"Another entry with the same name already exists." : "Tá iontráil eile leis an ainm céanna ann cheana féin.",
|
||||
"Invalid filename." : "Ainm comhaid neamhbhailí.",
|
||||
"Rename file" : "Athainmnigh an comhad",
|
||||
"Recently created" : "Cruthaithe le déanaí",
|
||||
"Folder" : "Fillteán",
|
||||
"Unknown file type" : "Cineál comhaid anaithnid",
|
||||
"{ext} image" : "íomhá {ext}",
|
||||
@@ -409,10 +410,6 @@
|
||||
"Tags" : "Clibeanna",
|
||||
"Save as …" : "Sábháil mar…",
|
||||
"Converting files …" : "Comhaid á thiontú…",
|
||||
"Converting file …" : "Comhad á thiontú…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Ag bogadh \"{source}\" go \"{destination}\" ...",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "“{source}” á chóipeáil go “{destination}”…",
|
||||
"(copy)" : "(cóip)",
|
||||
"(copy %n)" : "(cóip %n)"
|
||||
"Converting file …" : "Comhad á thiontú…"
|
||||
},"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"
|
||||
}
|
||||
@@ -411,10 +411,6 @@ OC.L10N.register(
|
||||
"Tags" : "Etiquetas",
|
||||
"Save as …" : "Gardar como…",
|
||||
"Converting files …" : "Convertendo ficheiros…",
|
||||
"Converting file …" : "Convertendo o ficheiro…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Movendo «{source}» a «{destination}»…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copiando «{source}» en «{destination}»…",
|
||||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)"
|
||||
"Converting file …" : "Convertendo o ficheiro…"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -409,10 +409,6 @@
|
||||
"Tags" : "Etiquetas",
|
||||
"Save as …" : "Gardar como…",
|
||||
"Converting files …" : "Convertendo ficheiros…",
|
||||
"Converting file …" : "Convertendo o ficheiro…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Movendo «{source}» a «{destination}»…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copiando «{source}» en «{destination}»…",
|
||||
"(copy)" : "(copiar)",
|
||||
"(copy %n)" : "(copiar %n)"
|
||||
"Converting file …" : "Convertendo o ficheiro…"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -411,10 +411,6 @@ OC.L10N.register(
|
||||
"Tags" : "Oznake",
|
||||
"Save as …" : "Spremi kao …",
|
||||
"Converting files …" : "Pretvaranje datoteka …",
|
||||
"Converting file …" : "Pretvaranje datoteke …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Premještanje iz \"{source}\" u \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopiranje iz \"{source}\" u \"{destination}\" …",
|
||||
"(copy)" : "(kopiraj)",
|
||||
"(copy %n)" : "(kopiraj %n)"
|
||||
"Converting file …" : "Pretvaranje datoteke …"
|
||||
},
|
||||
"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
|
||||
|
||||
@@ -409,10 +409,6 @@
|
||||
"Tags" : "Oznake",
|
||||
"Save as …" : "Spremi kao …",
|
||||
"Converting files …" : "Pretvaranje datoteka …",
|
||||
"Converting file …" : "Pretvaranje datoteke …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Premještanje iz \"{source}\" u \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopiranje iz \"{source}\" u \"{destination}\" …",
|
||||
"(copy)" : "(kopiraj)",
|
||||
"(copy %n)" : "(kopiraj %n)"
|
||||
"Converting file …" : "Pretvaranje datoteke …"
|
||||
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
|
||||
}
|
||||
@@ -400,10 +400,6 @@ OC.L10N.register(
|
||||
"Tags" : "Címkék",
|
||||
"Save as …" : "Mentés másként…",
|
||||
"Converting files …" : "Fájlok átalakítása…",
|
||||
"Converting file …" : "Fájl átalakítása…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "„{source}” áthelyezése ide: „{destination}” …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "„{source}” másolása ide: „{destination}” …",
|
||||
"(copy)" : "(másolat)",
|
||||
"(copy %n)" : "(%n. másolat)"
|
||||
"Converting file …" : "Fájl átalakítása…"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -398,10 +398,6 @@
|
||||
"Tags" : "Címkék",
|
||||
"Save as …" : "Mentés másként…",
|
||||
"Converting files …" : "Fájlok átalakítása…",
|
||||
"Converting file …" : "Fájl átalakítása…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "„{source}” áthelyezése ide: „{destination}” …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "„{source}” másolása ide: „{destination}” …",
|
||||
"(copy)" : "(másolat)",
|
||||
"(copy %n)" : "(%n. másolat)"
|
||||
"Converting file …" : "Fájl átalakítása…"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -401,10 +401,6 @@ OC.L10N.register(
|
||||
"Tags" : "Tag",
|
||||
"Save as …" : "Simpan sebagai …",
|
||||
"Converting files …" : "Mengonversi file …",
|
||||
"Converting file …" : "Mengonversi file …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Memindahkan \"{source}\" ke \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Menyalin \"{source}\" ke \"{destination}\" …",
|
||||
"(copy)" : "(salinan)",
|
||||
"(copy %n)" : "(salinan %n)"
|
||||
"Converting file …" : "Mengonversi file …"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -399,10 +399,6 @@
|
||||
"Tags" : "Tag",
|
||||
"Save as …" : "Simpan sebagai …",
|
||||
"Converting files …" : "Mengonversi file …",
|
||||
"Converting file …" : "Mengonversi file …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Memindahkan \"{source}\" ke \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Menyalin \"{source}\" ke \"{destination}\" …",
|
||||
"(copy)" : "(salinan)",
|
||||
"(copy %n)" : "(salinan %n)"
|
||||
"Converting file …" : "Mengonversi file …"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -391,10 +391,6 @@ OC.L10N.register(
|
||||
"Tags" : "Merki",
|
||||
"Save as …" : "Vista sem …",
|
||||
"Converting files …" : "Umbreyti skrám …",
|
||||
"Converting file …" : "Umbreyti skrá…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Færi \"{source}\" í \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Afrita \"{source}\" í \"{destination}\" …",
|
||||
"(copy)" : "(afrita)",
|
||||
"(copy %n)" : "(afrita %n)"
|
||||
"Converting file …" : "Umbreyti skrá…"
|
||||
},
|
||||
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
|
||||
|
||||
@@ -389,10 +389,6 @@
|
||||
"Tags" : "Merki",
|
||||
"Save as …" : "Vista sem …",
|
||||
"Converting files …" : "Umbreyti skrám …",
|
||||
"Converting file …" : "Umbreyti skrá…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Færi \"{source}\" í \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Afrita \"{source}\" í \"{destination}\" …",
|
||||
"(copy)" : "(afrita)",
|
||||
"(copy %n)" : "(afrita %n)"
|
||||
"Converting file …" : "Umbreyti skrá…"
|
||||
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
|
||||
}
|
||||
@@ -95,6 +95,7 @@ OC.L10N.register(
|
||||
"Another entry with the same name already exists." : "Esiste già un'altra voce con lo stesso nome.",
|
||||
"Invalid filename." : "Nome di file non valido.",
|
||||
"Rename file" : "Rinomina file",
|
||||
"Recently created" : "Creato di recente",
|
||||
"Folder" : "Cartella",
|
||||
"Unknown file type" : "Tipo di file sconosciuto",
|
||||
"{ext} image" : "{ext} image",
|
||||
@@ -234,6 +235,9 @@ OC.L10N.register(
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "Rimuovendo dell'estensione del file \"{old}\" potrebbe rendere il file illeggibile.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "Aggiungere l'estensione del file \"{new}\" potrebbe rendere il file illeggibile.",
|
||||
"Do not show this dialog again." : "Non visualizzare più questa finestra di dialogo.",
|
||||
"Rename file to hidden" : "Rinomina il file in nascosto",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "Aggiungere un punto come prefisso al nome di un file può rendere il file nascosto.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Sei sicuro di voler rinominare il file in \"{filename}\"?",
|
||||
"Cancel" : "Annulla",
|
||||
"Rename" : "Rinomina",
|
||||
"Select file or folder to link to" : "Seleziona un file o una cartella da collegare",
|
||||
@@ -248,6 +252,7 @@ OC.L10N.register(
|
||||
"Error during upload: {message}" : "Errore durante il caricamento: {message}",
|
||||
"Error during upload, status code {status}" : "Errore durante il caricamento, codice di stato {status}",
|
||||
"Unknown error during upload" : "Errore sconosciuto durante il caricamento",
|
||||
"File list is reloading" : "L'elenco dei file si sta ricaricando",
|
||||
"Loading current folder" : "Sto caricando la cartella corrente",
|
||||
"Retry" : "Riprova",
|
||||
"No files in here" : "Qui non c'è alcun file",
|
||||
@@ -315,7 +320,9 @@ OC.L10N.register(
|
||||
"The files are locked" : "I files sono bloccati",
|
||||
"The file does not exist anymore" : "Il file non esiste più",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Spostare \"{source}\" in \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Spostamento di {count} file in \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copiare \"{source}\" in \"{destination}\" …",
|
||||
"Copying {count} files to \"{destination}\" …" : "Copiatura di {count} file in \"{destination}\" …",
|
||||
"Choose destination" : "Scegli la destinazione",
|
||||
"Copy to {target}" : "Copia in {target}",
|
||||
"Move to {target}" : "Sposta in {target}",
|
||||
@@ -405,10 +412,6 @@ OC.L10N.register(
|
||||
"Tags" : "Etichette",
|
||||
"Save as …" : "Salva come …",
|
||||
"Converting files …" : "Conversione dei file …",
|
||||
"Converting file …" : "Conversione del file …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Sposta \"{source}\" in \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copia \"{source}\" in \"{destination}\" …",
|
||||
"(copy)" : "(copia)",
|
||||
"(copy %n)" : "(copia %n)"
|
||||
"Converting file …" : "Conversione del file …"
|
||||
},
|
||||
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
"Another entry with the same name already exists." : "Esiste già un'altra voce con lo stesso nome.",
|
||||
"Invalid filename." : "Nome di file non valido.",
|
||||
"Rename file" : "Rinomina file",
|
||||
"Recently created" : "Creato di recente",
|
||||
"Folder" : "Cartella",
|
||||
"Unknown file type" : "Tipo di file sconosciuto",
|
||||
"{ext} image" : "{ext} image",
|
||||
@@ -232,6 +233,9 @@
|
||||
"Removing the file extension \"{old}\" may render the file unreadable." : "Rimuovendo dell'estensione del file \"{old}\" potrebbe rendere il file illeggibile.",
|
||||
"Adding the file extension \"{new}\" may render the file unreadable." : "Aggiungere l'estensione del file \"{new}\" potrebbe rendere il file illeggibile.",
|
||||
"Do not show this dialog again." : "Non visualizzare più questa finestra di dialogo.",
|
||||
"Rename file to hidden" : "Rinomina il file in nascosto",
|
||||
"Prefixing a filename with a dot may render the file hidden." : "Aggiungere un punto come prefisso al nome di un file può rendere il file nascosto.",
|
||||
"Are you sure you want to rename the file to \"{filename}\"?" : "Sei sicuro di voler rinominare il file in \"{filename}\"?",
|
||||
"Cancel" : "Annulla",
|
||||
"Rename" : "Rinomina",
|
||||
"Select file or folder to link to" : "Seleziona un file o una cartella da collegare",
|
||||
@@ -246,6 +250,7 @@
|
||||
"Error during upload: {message}" : "Errore durante il caricamento: {message}",
|
||||
"Error during upload, status code {status}" : "Errore durante il caricamento, codice di stato {status}",
|
||||
"Unknown error during upload" : "Errore sconosciuto durante il caricamento",
|
||||
"File list is reloading" : "L'elenco dei file si sta ricaricando",
|
||||
"Loading current folder" : "Sto caricando la cartella corrente",
|
||||
"Retry" : "Riprova",
|
||||
"No files in here" : "Qui non c'è alcun file",
|
||||
@@ -313,7 +318,9 @@
|
||||
"The files are locked" : "I files sono bloccati",
|
||||
"The file does not exist anymore" : "Il file non esiste più",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Spostare \"{source}\" in \"{destination}\" …",
|
||||
"Moving {count} files to \"{destination}\" …" : "Spostamento di {count} file in \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copiare \"{source}\" in \"{destination}\" …",
|
||||
"Copying {count} files to \"{destination}\" …" : "Copiatura di {count} file in \"{destination}\" …",
|
||||
"Choose destination" : "Scegli la destinazione",
|
||||
"Copy to {target}" : "Copia in {target}",
|
||||
"Move to {target}" : "Sposta in {target}",
|
||||
@@ -403,10 +410,6 @@
|
||||
"Tags" : "Etichette",
|
||||
"Save as …" : "Salva come …",
|
||||
"Converting files …" : "Conversione dei file …",
|
||||
"Converting file …" : "Conversione del file …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Sposta \"{source}\" in \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copia \"{source}\" in \"{destination}\" …",
|
||||
"(copy)" : "(copia)",
|
||||
"(copy %n)" : "(copia %n)"
|
||||
"Converting file …" : "Conversione del file …"
|
||||
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -411,10 +411,6 @@ OC.L10N.register(
|
||||
"Tags" : "タグ",
|
||||
"Save as …" : "保存…",
|
||||
"Converting files …" : "ファイルの変換…",
|
||||
"Converting file …" : "ファイルの変換…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "\"{source}\" を \"{destination}\"に移動",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "\"{source}\" を \"{destination}\"にコピー",
|
||||
"(copy)" : "(copy)",
|
||||
"(copy %n)" : "(copy %n)"
|
||||
"Converting file …" : "ファイルの変換…"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -409,10 +409,6 @@
|
||||
"Tags" : "タグ",
|
||||
"Save as …" : "保存…",
|
||||
"Converting files …" : "ファイルの変換…",
|
||||
"Converting file …" : "ファイルの変換…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "\"{source}\" を \"{destination}\"に移動",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "\"{source}\" を \"{destination}\"にコピー",
|
||||
"(copy)" : "(copy)",
|
||||
"(copy %n)" : "(copy %n)"
|
||||
"Converting file …" : "ファイルの変換…"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
OC.L10N.register(
|
||||
"files",
|
||||
{
|
||||
"Added to favorites" : "Added to favorites",
|
||||
"Removed from favorites" : "Removed from favorites",
|
||||
"You added {file} to your favorites" : "You added {file} to your favorites",
|
||||
"You removed {file} from your favorites" : "You removed {file} from your favorites",
|
||||
"Favorites" : "ფავორიტები",
|
||||
"File changes" : "ფაილის ცვლილებები",
|
||||
"Created by {user}" : "Created by {user}",
|
||||
"Changed by {user}" : "Changed by {user}",
|
||||
"Deleted by {user}" : "Deleted by {user}",
|
||||
"Restored by {user}" : "Restored by {user}",
|
||||
"Renamed by {user}" : "Renamed by {user}",
|
||||
"Moved by {user}" : "Moved by {user}",
|
||||
"You created {file}" : "You created {file}",
|
||||
"You created an encrypted file in {file}" : "You created an encrypted file in {file}",
|
||||
"{user} created {file}" : "{user} created {file}",
|
||||
"{user} created an encrypted file in {file}" : "{user} created an encrypted file in {file}",
|
||||
"{file} was created in a public folder" : "{file} was created in a public folder",
|
||||
"You changed {file}" : "You changed {file}",
|
||||
"You changed an encrypted file in {file}" : "You changed an encrypted file in {file}",
|
||||
"{user} changed {file}" : "{user} changed {file}",
|
||||
"{user} changed an encrypted file in {file}" : "{user} changed an encrypted file in {file}",
|
||||
"You deleted {file}" : "You deleted {file}",
|
||||
"You deleted an encrypted file in {file}" : "You deleted an encrypted file in {file}",
|
||||
"{user} deleted {file}" : "{user} deleted {file}",
|
||||
"{user} deleted an encrypted file in {file}" : "{user} deleted an encrypted file in {file}",
|
||||
"You restored {file}" : "You restored {file}",
|
||||
"{user} restored {file}" : "{user} restored {file}",
|
||||
"You renamed {oldfile} (hidden) to {newfile} (hidden)" : "You renamed {oldfile} (hidden) to {newfile} (hidden)",
|
||||
"You renamed {oldfile} (hidden) to {newfile}" : "You renamed {oldfile} (hidden) to {newfile}",
|
||||
"You renamed {oldfile} to {newfile} (hidden)" : "You renamed {oldfile} to {newfile} (hidden)",
|
||||
"You renamed {oldfile} to {newfile}" : "You renamed {oldfile} to {newfile}",
|
||||
"{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renamed {oldfile} (hidden) to {newfile} (hidden)",
|
||||
"{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renamed {oldfile} (hidden) to {newfile}",
|
||||
"{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renamed {oldfile} to {newfile} (hidden)",
|
||||
"{user} renamed {oldfile} to {newfile}" : "{user} renamed {oldfile} to {newfile}",
|
||||
"You moved {oldfile} to {newfile}" : "You moved {oldfile} to {newfile}",
|
||||
"{user} moved {oldfile} to {newfile}" : "{user} moved {oldfile} to {newfile}",
|
||||
"A file has been added to or removed from your <strong>favorites</strong>" : "A file has been added to or removed from your <strong>favorites</strong>",
|
||||
"Files" : "ფაილები",
|
||||
"A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>",
|
||||
"A favorite file or folder has been <strong>changed</strong>" : "A favorite file or folder has been <strong>changed</strong>",
|
||||
"Accept" : "Accept",
|
||||
"Reject" : "Reject",
|
||||
"Incoming ownership transfer from {user}" : "Incoming ownership transfer from {user}",
|
||||
"Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour." : "Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour.",
|
||||
"Ownership transfer failed" : "Ownership transfer failed",
|
||||
"Your ownership transfer of {path} to {user} failed." : "Your ownership transfer of {path} to {user} failed.",
|
||||
"The ownership transfer of {path} from {user} failed." : "The ownership transfer of {path} from {user} failed.",
|
||||
"Ownership transfer done" : "Ownership transfer done",
|
||||
"Your ownership transfer of {path} to {user} has completed." : "Your ownership transfer of {path} to {user} has completed.",
|
||||
"The ownership transfer of {path} from {user} has completed." : "The ownership transfer of {path} from {user} has completed.",
|
||||
"in %s" : "in %s",
|
||||
"File Management" : "File Management",
|
||||
"Home" : "Home",
|
||||
"Target folder does not exist any more" : "Target folder does not exist any more",
|
||||
"Reload current directory" : "Reload current directory",
|
||||
"Go to the \"{dir}\" directory" : "Go to the \"{dir}\" directory",
|
||||
"Current directory path" : "Current directory path",
|
||||
"Share" : "Share",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Your have used your space quota and cannot upload files anymore",
|
||||
"Drag and drop files here to upload" : "Drag and drop files here to upload",
|
||||
"Favorite" : "Favorite",
|
||||
"Back" : "Back",
|
||||
"Filename" : "Filename",
|
||||
"Folder name" : "Folder name",
|
||||
"This node is unavailable" : "This node is unavailable",
|
||||
"Rename file" : "Rename file",
|
||||
"Folder" : "Folder",
|
||||
"Pending" : "Pending",
|
||||
"Active filters" : "Active filters",
|
||||
"Remove filter" : "Remove filter",
|
||||
"Today" : "დღეს",
|
||||
"Last 7 days" : "Last 7 days",
|
||||
"Last 30 days" : "Last 30 days",
|
||||
"Custom date range" : "Custom date range",
|
||||
"Search everywhere" : "მოძებნე ყველგან",
|
||||
"Documents" : "Documents",
|
||||
"Audio" : "Audio",
|
||||
"Images" : "Images",
|
||||
"Videos" : "Videos",
|
||||
"Show hidden files" : "Show hidden files",
|
||||
"Crop image previews" : "Crop image previews",
|
||||
"General" : "General",
|
||||
"Sort favorites first" : "Sort favorites first",
|
||||
"All files" : "All files",
|
||||
"Additional settings" : "Additional settings",
|
||||
"Actions" : "Actions",
|
||||
"Deselect all" : "Deselect all",
|
||||
"Navigation" : "Navigation",
|
||||
"View" : "View",
|
||||
"Toggle grid view" : "Toggle grid view",
|
||||
"WebDAV URL" : "WebDAV URL",
|
||||
"Total rows summary" : "Total rows summary",
|
||||
"Name" : "Name",
|
||||
"Size" : "Size",
|
||||
"Modified" : "Modified",
|
||||
"List of files and folders." : "List of files and folders.",
|
||||
"Column headers with buttons are sortable." : "Column headers with buttons are sortable.",
|
||||
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.",
|
||||
"File not found" : "File not found",
|
||||
"_{count} selected_::_{count} selected_" : ["{count} selected","{count} selected"],
|
||||
"Views" : "Views",
|
||||
"Owner" : "Owner",
|
||||
"{usedQuotaByte} used" : "{usedQuotaByte} used",
|
||||
"{used} of {quota} used" : "{used} of {quota} used",
|
||||
"{relative}% used" : "{relative}% used",
|
||||
"Could not refresh storage stats" : "Could not refresh storage stats",
|
||||
"Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!",
|
||||
"New folder" : "New folder",
|
||||
"Create new folder" : "Create new folder",
|
||||
"Create" : "Create",
|
||||
"Refresh" : "Refresh",
|
||||
"Submit" : "Submit",
|
||||
"Choose a file or folder to transfer" : "Choose a file or folder to transfer",
|
||||
"Transfer" : "Transfer",
|
||||
"Transfer {path} to {userid}" : "Transfer {path} to {userid}",
|
||||
"Invalid path selected" : "Invalid path selected",
|
||||
"Unknown error" : "Unknown error",
|
||||
"Ownership transfer request sent" : "Ownership transfer request sent",
|
||||
"Cannot transfer ownership of a file or folder you do not own" : "Cannot transfer ownership of a file or folder you do not own",
|
||||
"Transfer ownership of a file or folder" : "Transfer ownership of a file or folder",
|
||||
"Choose file or folder to transfer" : "Choose file or folder to transfer",
|
||||
"Change" : "Change",
|
||||
"New owner" : "New owner",
|
||||
"Cancel" : "Cancel",
|
||||
"Rename" : "Rename",
|
||||
"Select file or folder to link to" : "Select file or folder to link to",
|
||||
"Choose {file}" : "Choose {file}",
|
||||
"Files settings" : "Files settings",
|
||||
"Switch to list view" : "Switch to list view",
|
||||
"Switch to grid view" : "Switch to grid view",
|
||||
"Not enough free space" : "Not enough free space",
|
||||
"Operation is blocked by access control" : "Operation is blocked by access control",
|
||||
"Error during upload: {message}" : "Error during upload: {message}",
|
||||
"Unknown error during upload" : "Unknown error during upload",
|
||||
"Loading current folder" : "Loading current folder",
|
||||
"Retry" : "Retry",
|
||||
"No files in here" : "No files in here",
|
||||
"Upload some content or sync with your devices!" : "Upload some content or sync with your devices!",
|
||||
"Go back" : "Go back",
|
||||
"File cannot be accessed" : "File cannot be accessed",
|
||||
"Blank" : "Blank",
|
||||
"Unable to create new file from template" : "Unable to create new file from template",
|
||||
"Pick a template for {name}" : "Pick a template for {name}",
|
||||
"Create a new file with the selected template" : "Create a new file with the selected template",
|
||||
"Creating file" : "Creating file",
|
||||
"Delete" : "Delete",
|
||||
"Leave this share" : "Leave this share",
|
||||
"Disconnect storage" : "Disconnect storage",
|
||||
"Delete permanently" : "Delete permanently",
|
||||
"Delete file" : "Delete file",
|
||||
"Delete folder" : "Delete folder",
|
||||
"Download" : "Download",
|
||||
"Add to favorites" : "Add to favorites",
|
||||
"Remove from favorites" : "Remove from favorites",
|
||||
"Move" : "Move",
|
||||
"Copy" : "Copy",
|
||||
"Move or copy" : "Move or copy",
|
||||
"Destination is not a folder" : "Destination is not a folder",
|
||||
"This file/folder is already in that directory" : "This file/folder is already in that directory",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "You cannot move a file/folder onto itself or into a subfolder of itself",
|
||||
"A file or folder with that name already exists in this folder" : "A file or folder with that name already exists in this folder",
|
||||
"The file does not exist anymore" : "The file does not exist anymore",
|
||||
"Choose destination" : "Choose destination",
|
||||
"Copy to {target}" : "Copy to {target}",
|
||||
"Move to {target}" : "Move to {target}",
|
||||
"Open folder" : "Open folder",
|
||||
"Open folder {displayName}" : "Open folder {displayName}",
|
||||
"Open in Files" : "Open in Files",
|
||||
"Open locally" : "Open locally",
|
||||
"Failed to redirect to client" : "Failed to redirect to client",
|
||||
"Open file locally" : "Open file locally",
|
||||
"Details" : "Details",
|
||||
"Unfavorite" : "Unfavorite",
|
||||
"View in folder" : "View in folder",
|
||||
"Type" : "Type",
|
||||
"Created new folder \"{name}\"" : "Created new folder \"{name}\"",
|
||||
"Unable to initialize the templates directory" : "Unable to initialize the templates directory",
|
||||
"Templates" : "Templates",
|
||||
"One of the dropped files could not be processed" : "One of the dropped files could not be processed",
|
||||
"Some files could not be moved" : "Some files could not be moved",
|
||||
"Could not rename \"{oldName}\", it does not exist any more" : "Could not rename \"{oldName}\", it does not exist any more",
|
||||
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name.",
|
||||
"Could not rename \"{oldName}\"" : "Could not rename \"{oldName}\"",
|
||||
"This operation is forbidden" : "This operation is forbidden",
|
||||
"Storage is temporarily not available" : "Storage is temporarily not available",
|
||||
"_%n file_::_%n files_" : ["%n file","%n files"],
|
||||
"_%n folder_::_%n folders_" : ["%n folder","%n folders"],
|
||||
"No favorites yet" : "No favorites yet",
|
||||
"Files and folders you mark as favorite will show up here" : "Files and folders you mark as favorite will show up here",
|
||||
"List of your files and folders." : "List of your files and folders.",
|
||||
"Recent" : "Recent",
|
||||
"List of recently modified files and folders." : "List of recently modified files and folders.",
|
||||
"No recently modified files" : "No recently modified files",
|
||||
"Files and folders you recently modified will show up here." : "Files and folders you recently modified will show up here.",
|
||||
"Search" : "ძიება",
|
||||
"No entries found in this folder" : "No entries found in this folder",
|
||||
"Select all" : "Select all",
|
||||
"Upload too large" : "Upload too large",
|
||||
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "The files you are trying to upload exceed the maximum size for file uploads on this server.",
|
||||
"Renamed \"{oldName}\" to \"{newName}\"" : "Renamed \"{oldName}\" to \"{newName}\"",
|
||||
"Clear filter" : "Clear filter",
|
||||
"Shared by link" : "Shared by link",
|
||||
"Shared" : "Shared",
|
||||
"You" : "You",
|
||||
"Error while loading the file data" : "Error while loading the file data",
|
||||
"Tags" : "Tags"
|
||||
},
|
||||
"nplurals=2; plural=(n!=1);");
|
||||
@@ -0,0 +1,210 @@
|
||||
{ "translations": {
|
||||
"Added to favorites" : "Added to favorites",
|
||||
"Removed from favorites" : "Removed from favorites",
|
||||
"You added {file} to your favorites" : "You added {file} to your favorites",
|
||||
"You removed {file} from your favorites" : "You removed {file} from your favorites",
|
||||
"Favorites" : "ფავორიტები",
|
||||
"File changes" : "ფაილის ცვლილებები",
|
||||
"Created by {user}" : "Created by {user}",
|
||||
"Changed by {user}" : "Changed by {user}",
|
||||
"Deleted by {user}" : "Deleted by {user}",
|
||||
"Restored by {user}" : "Restored by {user}",
|
||||
"Renamed by {user}" : "Renamed by {user}",
|
||||
"Moved by {user}" : "Moved by {user}",
|
||||
"You created {file}" : "You created {file}",
|
||||
"You created an encrypted file in {file}" : "You created an encrypted file in {file}",
|
||||
"{user} created {file}" : "{user} created {file}",
|
||||
"{user} created an encrypted file in {file}" : "{user} created an encrypted file in {file}",
|
||||
"{file} was created in a public folder" : "{file} was created in a public folder",
|
||||
"You changed {file}" : "You changed {file}",
|
||||
"You changed an encrypted file in {file}" : "You changed an encrypted file in {file}",
|
||||
"{user} changed {file}" : "{user} changed {file}",
|
||||
"{user} changed an encrypted file in {file}" : "{user} changed an encrypted file in {file}",
|
||||
"You deleted {file}" : "You deleted {file}",
|
||||
"You deleted an encrypted file in {file}" : "You deleted an encrypted file in {file}",
|
||||
"{user} deleted {file}" : "{user} deleted {file}",
|
||||
"{user} deleted an encrypted file in {file}" : "{user} deleted an encrypted file in {file}",
|
||||
"You restored {file}" : "You restored {file}",
|
||||
"{user} restored {file}" : "{user} restored {file}",
|
||||
"You renamed {oldfile} (hidden) to {newfile} (hidden)" : "You renamed {oldfile} (hidden) to {newfile} (hidden)",
|
||||
"You renamed {oldfile} (hidden) to {newfile}" : "You renamed {oldfile} (hidden) to {newfile}",
|
||||
"You renamed {oldfile} to {newfile} (hidden)" : "You renamed {oldfile} to {newfile} (hidden)",
|
||||
"You renamed {oldfile} to {newfile}" : "You renamed {oldfile} to {newfile}",
|
||||
"{user} renamed {oldfile} (hidden) to {newfile} (hidden)" : "{user} renamed {oldfile} (hidden) to {newfile} (hidden)",
|
||||
"{user} renamed {oldfile} (hidden) to {newfile}" : "{user} renamed {oldfile} (hidden) to {newfile}",
|
||||
"{user} renamed {oldfile} to {newfile} (hidden)" : "{user} renamed {oldfile} to {newfile} (hidden)",
|
||||
"{user} renamed {oldfile} to {newfile}" : "{user} renamed {oldfile} to {newfile}",
|
||||
"You moved {oldfile} to {newfile}" : "You moved {oldfile} to {newfile}",
|
||||
"{user} moved {oldfile} to {newfile}" : "{user} moved {oldfile} to {newfile}",
|
||||
"A file has been added to or removed from your <strong>favorites</strong>" : "A file has been added to or removed from your <strong>favorites</strong>",
|
||||
"Files" : "ფაილები",
|
||||
"A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>",
|
||||
"A favorite file or folder has been <strong>changed</strong>" : "A favorite file or folder has been <strong>changed</strong>",
|
||||
"Accept" : "Accept",
|
||||
"Reject" : "Reject",
|
||||
"Incoming ownership transfer from {user}" : "Incoming ownership transfer from {user}",
|
||||
"Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour." : "Do you want to accept {path}?\n\nNote: The transfer process after accepting may take up to 1 hour.",
|
||||
"Ownership transfer failed" : "Ownership transfer failed",
|
||||
"Your ownership transfer of {path} to {user} failed." : "Your ownership transfer of {path} to {user} failed.",
|
||||
"The ownership transfer of {path} from {user} failed." : "The ownership transfer of {path} from {user} failed.",
|
||||
"Ownership transfer done" : "Ownership transfer done",
|
||||
"Your ownership transfer of {path} to {user} has completed." : "Your ownership transfer of {path} to {user} has completed.",
|
||||
"The ownership transfer of {path} from {user} has completed." : "The ownership transfer of {path} from {user} has completed.",
|
||||
"in %s" : "in %s",
|
||||
"File Management" : "File Management",
|
||||
"Home" : "Home",
|
||||
"Target folder does not exist any more" : "Target folder does not exist any more",
|
||||
"Reload current directory" : "Reload current directory",
|
||||
"Go to the \"{dir}\" directory" : "Go to the \"{dir}\" directory",
|
||||
"Current directory path" : "Current directory path",
|
||||
"Share" : "Share",
|
||||
"Your have used your space quota and cannot upload files anymore" : "Your have used your space quota and cannot upload files anymore",
|
||||
"Drag and drop files here to upload" : "Drag and drop files here to upload",
|
||||
"Favorite" : "Favorite",
|
||||
"Back" : "Back",
|
||||
"Filename" : "Filename",
|
||||
"Folder name" : "Folder name",
|
||||
"This node is unavailable" : "This node is unavailable",
|
||||
"Rename file" : "Rename file",
|
||||
"Folder" : "Folder",
|
||||
"Pending" : "Pending",
|
||||
"Active filters" : "Active filters",
|
||||
"Remove filter" : "Remove filter",
|
||||
"Today" : "დღეს",
|
||||
"Last 7 days" : "Last 7 days",
|
||||
"Last 30 days" : "Last 30 days",
|
||||
"Custom date range" : "Custom date range",
|
||||
"Search everywhere" : "მოძებნე ყველგან",
|
||||
"Documents" : "Documents",
|
||||
"Audio" : "Audio",
|
||||
"Images" : "Images",
|
||||
"Videos" : "Videos",
|
||||
"Show hidden files" : "Show hidden files",
|
||||
"Crop image previews" : "Crop image previews",
|
||||
"General" : "General",
|
||||
"Sort favorites first" : "Sort favorites first",
|
||||
"All files" : "All files",
|
||||
"Additional settings" : "Additional settings",
|
||||
"Actions" : "Actions",
|
||||
"Deselect all" : "Deselect all",
|
||||
"Navigation" : "Navigation",
|
||||
"View" : "View",
|
||||
"Toggle grid view" : "Toggle grid view",
|
||||
"WebDAV URL" : "WebDAV URL",
|
||||
"Total rows summary" : "Total rows summary",
|
||||
"Name" : "Name",
|
||||
"Size" : "Size",
|
||||
"Modified" : "Modified",
|
||||
"List of files and folders." : "List of files and folders.",
|
||||
"Column headers with buttons are sortable." : "Column headers with buttons are sortable.",
|
||||
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list.",
|
||||
"File not found" : "File not found",
|
||||
"_{count} selected_::_{count} selected_" : ["{count} selected","{count} selected"],
|
||||
"Views" : "Views",
|
||||
"Owner" : "Owner",
|
||||
"{usedQuotaByte} used" : "{usedQuotaByte} used",
|
||||
"{used} of {quota} used" : "{used} of {quota} used",
|
||||
"{relative}% used" : "{relative}% used",
|
||||
"Could not refresh storage stats" : "Could not refresh storage stats",
|
||||
"Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!",
|
||||
"New folder" : "New folder",
|
||||
"Create new folder" : "Create new folder",
|
||||
"Create" : "Create",
|
||||
"Refresh" : "Refresh",
|
||||
"Submit" : "Submit",
|
||||
"Choose a file or folder to transfer" : "Choose a file or folder to transfer",
|
||||
"Transfer" : "Transfer",
|
||||
"Transfer {path} to {userid}" : "Transfer {path} to {userid}",
|
||||
"Invalid path selected" : "Invalid path selected",
|
||||
"Unknown error" : "Unknown error",
|
||||
"Ownership transfer request sent" : "Ownership transfer request sent",
|
||||
"Cannot transfer ownership of a file or folder you do not own" : "Cannot transfer ownership of a file or folder you do not own",
|
||||
"Transfer ownership of a file or folder" : "Transfer ownership of a file or folder",
|
||||
"Choose file or folder to transfer" : "Choose file or folder to transfer",
|
||||
"Change" : "Change",
|
||||
"New owner" : "New owner",
|
||||
"Cancel" : "Cancel",
|
||||
"Rename" : "Rename",
|
||||
"Select file or folder to link to" : "Select file or folder to link to",
|
||||
"Choose {file}" : "Choose {file}",
|
||||
"Files settings" : "Files settings",
|
||||
"Switch to list view" : "Switch to list view",
|
||||
"Switch to grid view" : "Switch to grid view",
|
||||
"Not enough free space" : "Not enough free space",
|
||||
"Operation is blocked by access control" : "Operation is blocked by access control",
|
||||
"Error during upload: {message}" : "Error during upload: {message}",
|
||||
"Unknown error during upload" : "Unknown error during upload",
|
||||
"Loading current folder" : "Loading current folder",
|
||||
"Retry" : "Retry",
|
||||
"No files in here" : "No files in here",
|
||||
"Upload some content or sync with your devices!" : "Upload some content or sync with your devices!",
|
||||
"Go back" : "Go back",
|
||||
"File cannot be accessed" : "File cannot be accessed",
|
||||
"Blank" : "Blank",
|
||||
"Unable to create new file from template" : "Unable to create new file from template",
|
||||
"Pick a template for {name}" : "Pick a template for {name}",
|
||||
"Create a new file with the selected template" : "Create a new file with the selected template",
|
||||
"Creating file" : "Creating file",
|
||||
"Delete" : "Delete",
|
||||
"Leave this share" : "Leave this share",
|
||||
"Disconnect storage" : "Disconnect storage",
|
||||
"Delete permanently" : "Delete permanently",
|
||||
"Delete file" : "Delete file",
|
||||
"Delete folder" : "Delete folder",
|
||||
"Download" : "Download",
|
||||
"Add to favorites" : "Add to favorites",
|
||||
"Remove from favorites" : "Remove from favorites",
|
||||
"Move" : "Move",
|
||||
"Copy" : "Copy",
|
||||
"Move or copy" : "Move or copy",
|
||||
"Destination is not a folder" : "Destination is not a folder",
|
||||
"This file/folder is already in that directory" : "This file/folder is already in that directory",
|
||||
"You cannot move a file/folder onto itself or into a subfolder of itself" : "You cannot move a file/folder onto itself or into a subfolder of itself",
|
||||
"A file or folder with that name already exists in this folder" : "A file or folder with that name already exists in this folder",
|
||||
"The file does not exist anymore" : "The file does not exist anymore",
|
||||
"Choose destination" : "Choose destination",
|
||||
"Copy to {target}" : "Copy to {target}",
|
||||
"Move to {target}" : "Move to {target}",
|
||||
"Open folder" : "Open folder",
|
||||
"Open folder {displayName}" : "Open folder {displayName}",
|
||||
"Open in Files" : "Open in Files",
|
||||
"Open locally" : "Open locally",
|
||||
"Failed to redirect to client" : "Failed to redirect to client",
|
||||
"Open file locally" : "Open file locally",
|
||||
"Details" : "Details",
|
||||
"Unfavorite" : "Unfavorite",
|
||||
"View in folder" : "View in folder",
|
||||
"Type" : "Type",
|
||||
"Created new folder \"{name}\"" : "Created new folder \"{name}\"",
|
||||
"Unable to initialize the templates directory" : "Unable to initialize the templates directory",
|
||||
"Templates" : "Templates",
|
||||
"One of the dropped files could not be processed" : "One of the dropped files could not be processed",
|
||||
"Some files could not be moved" : "Some files could not be moved",
|
||||
"Could not rename \"{oldName}\", it does not exist any more" : "Could not rename \"{oldName}\", it does not exist any more",
|
||||
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name.",
|
||||
"Could not rename \"{oldName}\"" : "Could not rename \"{oldName}\"",
|
||||
"This operation is forbidden" : "This operation is forbidden",
|
||||
"Storage is temporarily not available" : "Storage is temporarily not available",
|
||||
"_%n file_::_%n files_" : ["%n file","%n files"],
|
||||
"_%n folder_::_%n folders_" : ["%n folder","%n folders"],
|
||||
"No favorites yet" : "No favorites yet",
|
||||
"Files and folders you mark as favorite will show up here" : "Files and folders you mark as favorite will show up here",
|
||||
"List of your files and folders." : "List of your files and folders.",
|
||||
"Recent" : "Recent",
|
||||
"List of recently modified files and folders." : "List of recently modified files and folders.",
|
||||
"No recently modified files" : "No recently modified files",
|
||||
"Files and folders you recently modified will show up here." : "Files and folders you recently modified will show up here.",
|
||||
"Search" : "ძიება",
|
||||
"No entries found in this folder" : "No entries found in this folder",
|
||||
"Select all" : "Select all",
|
||||
"Upload too large" : "Upload too large",
|
||||
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "The files you are trying to upload exceed the maximum size for file uploads on this server.",
|
||||
"Renamed \"{oldName}\" to \"{newName}\"" : "Renamed \"{oldName}\" to \"{newName}\"",
|
||||
"Clear filter" : "Clear filter",
|
||||
"Shared by link" : "Shared by link",
|
||||
"Shared" : "Shared",
|
||||
"You" : "You",
|
||||
"Error while loading the file data" : "Error while loading the file data",
|
||||
"Tags" : "Tags"
|
||||
},"pluralForm" :"nplurals=2; plural=(n!=1);"
|
||||
}
|
||||
@@ -335,10 +335,6 @@ OC.L10N.register(
|
||||
"Error while loading the file data" : "파일 데이터를 불러오는 중 오류 발생",
|
||||
"Tags" : "태그",
|
||||
"Save as …" : "... 으로 저장하기",
|
||||
"Converting files …" : "파일 변환하기 ...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "\"{source}\"을(를) \"{destination}\"(으)로 이동...",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "\"{source}\"을(를) \"{destination}\"(으)로 복사...",
|
||||
"(copy)" : "(복사)",
|
||||
"(copy %n)" : "(%n 복사)"
|
||||
"Converting files …" : "파일 변환하기 ..."
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -333,10 +333,6 @@
|
||||
"Error while loading the file data" : "파일 데이터를 불러오는 중 오류 발생",
|
||||
"Tags" : "태그",
|
||||
"Save as …" : "... 으로 저장하기",
|
||||
"Converting files …" : "파일 변환하기 ...",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "\"{source}\"을(를) \"{destination}\"(으)로 이동...",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "\"{source}\"을(를) \"{destination}\"(으)로 복사...",
|
||||
"(copy)" : "(복사)",
|
||||
"(copy %n)" : "(%n 복사)"
|
||||
"Converting files …" : "파일 변환하기 ..."
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -399,10 +399,6 @@ OC.L10N.register(
|
||||
"Tags" : "ປ້າຍກຳກັບ",
|
||||
"Save as …" : "Save as …",
|
||||
"Converting files …" : "Converting files …",
|
||||
"Converting file …" : "Converting file …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Moving \"{source}\" to \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copying \"{source}\" to \"{destination}\" …",
|
||||
"(copy)" : "(copy)",
|
||||
"(copy %n)" : "(copy %n)"
|
||||
"Converting file …" : "Converting file …"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -397,10 +397,6 @@
|
||||
"Tags" : "ປ້າຍກຳກັບ",
|
||||
"Save as …" : "Save as …",
|
||||
"Converting files …" : "Converting files …",
|
||||
"Converting file …" : "Converting file …",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Moving \"{source}\" to \"{destination}\" …",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Copying \"{source}\" to \"{destination}\" …",
|
||||
"(copy)" : "(copy)",
|
||||
"(copy %n)" : "(copy %n)"
|
||||
"Converting file …" : "Converting file …"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -228,10 +228,6 @@ OC.L10N.register(
|
||||
"You" : "Jūs",
|
||||
"Error while loading the file data" : "Klaida įkeliant failo duomenis",
|
||||
"Tags" : "Žymos",
|
||||
"Save as …" : "Įrašyti kaip…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Perkeliama „{source}“ į „{destination}“…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopijuojama „{source}“ į „{destination}“…",
|
||||
"(copy)" : "(kopija)",
|
||||
"(copy %n)" : "(kopija %n)"
|
||||
"Save as …" : "Įrašyti kaip…"
|
||||
},
|
||||
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");
|
||||
|
||||
@@ -226,10 +226,6 @@
|
||||
"You" : "Jūs",
|
||||
"Error while loading the file data" : "Klaida įkeliant failo duomenis",
|
||||
"Tags" : "Žymos",
|
||||
"Save as …" : "Įrašyti kaip…",
|
||||
"Moving \"{source}\" to \"{destination}\" …" : "Perkeliama „{source}“ į „{destination}“…",
|
||||
"Copying \"{source}\" to \"{destination}\" …" : "Kopijuojama „{source}“ į „{destination}“…",
|
||||
"(copy)" : "(kopija)",
|
||||
"(copy %n)" : "(kopija %n)"
|
||||
"Save as …" : "Įrašyti kaip…"
|
||||
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user