aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/autoloader.php4
-rw-r--r--lib/base.php3
-rw-r--r--lib/composer/composer/autoload_classmap.php1
-rw-r--r--lib/composer/composer/autoload_static.php1
-rw-r--r--lib/l10n/cs.js4
-rw-r--r--lib/l10n/cs.json4
-rw-r--r--lib/l10n/da.js4
-rw-r--r--lib/l10n/da.json4
-rw-r--r--lib/l10n/de.js5
-rw-r--r--lib/l10n/de.json5
-rw-r--r--lib/l10n/de_DE.js5
-rw-r--r--lib/l10n/de_DE.json5
-rw-r--r--lib/l10n/en_GB.js5
-rw-r--r--lib/l10n/en_GB.json5
-rw-r--r--lib/l10n/es.js4
-rw-r--r--lib/l10n/es.json4
-rw-r--r--lib/l10n/et_EE.js5
-rw-r--r--lib/l10n/et_EE.json5
-rw-r--r--lib/l10n/fa.js388
-rw-r--r--lib/l10n/fa.json388
-rw-r--r--lib/l10n/fr.js1
-rw-r--r--lib/l10n/fr.json1
-rw-r--r--lib/l10n/ga.js4
-rw-r--r--lib/l10n/ga.json4
-rw-r--r--lib/l10n/ja.js5
-rw-r--r--lib/l10n/ja.json5
-rw-r--r--lib/l10n/lv.js4
-rw-r--r--lib/l10n/lv.json4
-rw-r--r--lib/l10n/pt_BR.js33
-rw-r--r--lib/l10n/pt_BR.json33
-rw-r--r--lib/l10n/ru.js5
-rw-r--r--lib/l10n/ru.json5
-rw-r--r--lib/l10n/sr.js5
-rw-r--r--lib/l10n/sr.json5
-rw-r--r--lib/l10n/sv.js5
-rw-r--r--lib/l10n/sv.json5
-rw-r--r--lib/l10n/tr.js4
-rw-r--r--lib/l10n/tr.json4
-rw-r--r--lib/l10n/uk.js6
-rw-r--r--lib/l10n/uk.json6
-rw-r--r--lib/l10n/zh_CN.js5
-rw-r--r--lib/l10n/zh_CN.json5
-rw-r--r--lib/l10n/zh_HK.js5
-rw-r--r--lib/l10n/zh_HK.json5
-rw-r--r--lib/l10n/zh_TW.js5
-rw-r--r--lib/l10n/zh_TW.json5
-rw-r--r--lib/private/AppFramework/Bootstrap/RegistrationContext.php2
-rw-r--r--lib/private/Files/Mount/ObjectHomeMountProvider.php110
-rw-r--r--lib/private/Files/Mount/RootMountProvider.php62
-rw-r--r--lib/private/Files/ObjectStore/PrimaryObjectStoreConfig.php140
-rw-r--r--lib/private/Files/View.php4
-rw-r--r--lib/private/Server.php6
-rw-r--r--lib/private/Settings/DeclarativeManager.php71
-rw-r--r--lib/private/User/Manager.php3
-rw-r--r--lib/public/Settings/IDeclarativeSettingsForm.php1
55 files changed, 981 insertions, 441 deletions
diff --git a/lib/autoloader.php b/lib/autoloader.php
index 7084eb93c89..2a95f5944a3 100644
--- a/lib/autoloader.php
+++ b/lib/autoloader.php
@@ -95,10 +95,6 @@ class Autoloader {
} catch (AppPathNotFoundException) {
// App not found, ignore
}
- } elseif ($class === 'Test\\TestCase') {
- // This File is considered public API, so we make sure that the class
- // can still be loaded, although the PSR-4 paths have not been loaded.
- $paths[] = \OC::$SERVERROOT . '/tests/lib/TestCase.php';
}
return $paths;
}
diff --git a/lib/base.php b/lib/base.php
index 639568cf640..75f5cfee3e8 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -601,9 +601,6 @@ class OC {
self::$loader = new \OC\Autoloader([
OC::$SERVERROOT . '/lib/private/legacy',
]);
- if (defined('PHPUNIT_RUN')) {
- self::$loader->addValidRoot(OC::$SERVERROOT . '/tests');
- }
spl_autoload_register([self::$loader, 'load']);
$loaderEnd = microtime(true);
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index 61c06939d15..9f4321129af 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -1644,6 +1644,7 @@ return array(
'OC\\Files\\ObjectStore\\Mapper' => $baseDir . '/lib/private/Files/ObjectStore/Mapper.php',
'OC\\Files\\ObjectStore\\ObjectStoreScanner' => $baseDir . '/lib/private/Files/ObjectStore/ObjectStoreScanner.php',
'OC\\Files\\ObjectStore\\ObjectStoreStorage' => $baseDir . '/lib/private/Files/ObjectStore/ObjectStoreStorage.php',
+ 'OC\\Files\\ObjectStore\\PrimaryObjectStoreConfig' => $baseDir . '/lib/private/Files/ObjectStore/PrimaryObjectStoreConfig.php',
'OC\\Files\\ObjectStore\\S3' => $baseDir . '/lib/private/Files/ObjectStore/S3.php',
'OC\\Files\\ObjectStore\\S3ConfigTrait' => $baseDir . '/lib/private/Files/ObjectStore/S3ConfigTrait.php',
'OC\\Files\\ObjectStore\\S3ConnectionTrait' => $baseDir . '/lib/private/Files/ObjectStore/S3ConnectionTrait.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index f6da9ef7382..26e0a34275d 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -1685,6 +1685,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OC\\Files\\ObjectStore\\Mapper' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/Mapper.php',
'OC\\Files\\ObjectStore\\ObjectStoreScanner' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/ObjectStoreScanner.php',
'OC\\Files\\ObjectStore\\ObjectStoreStorage' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/ObjectStoreStorage.php',
+ 'OC\\Files\\ObjectStore\\PrimaryObjectStoreConfig' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/PrimaryObjectStoreConfig.php',
'OC\\Files\\ObjectStore\\S3' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/S3.php',
'OC\\Files\\ObjectStore\\S3ConfigTrait' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/S3ConfigTrait.php',
'OC\\Files\\ObjectStore\\S3ConnectionTrait' => __DIR__ . '/../../..' . '/lib/private/Files/ObjectStore/S3ConnectionTrait.php',
diff --git a/lib/l10n/cs.js b/lib/l10n/cs.js
index ec1e76e1471..ae17a582e39 100644
--- a/lib/l10n/cs.js
+++ b/lib/l10n/cs.js
@@ -275,7 +275,6 @@ OC.L10N.register(
"A valid Login must be provided" : "Je třeba zadat platné přihlašovací jméno",
"Login contains whitespace at the beginning or at the end" : "Přihlašovací jméno je chybné – na jeho začátku či konci se nachází prázdný znak (mezera, tabulátor, atp.)",
"Login must not consist of dots only" : "Přihlašovací jméno se nemůže skládat pouze ze samých teček",
- "Login is too long" : "Přihlašovací jméno je příliš dlouhé",
"Login is invalid because files already exist for this user" : "Přihlašovací jméno není platné, protože protože pro tohoto uživatele už existují soubory",
"Account disabled" : "Účet znepřístupněn",
"Login canceled by app" : "Přihlášení zrušeno aplikací",
@@ -451,6 +450,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Vytvoří stručný souhrn textu tím, že zkrátí jeho délku aniž by byly ztraceny klíčové informace",
"Extracts topics from a text and outputs them separated by commas." : "Vyzíská témata z textu a vypíše je oddělované čárkami.",
"File is currently busy, please try again later" : "Soubor je nyní používán, zkuste to později",
- "Cannot download file" : "Soubor se nedaří stáhnout"
+ "Cannot download file" : "Soubor se nedaří stáhnout",
+ "Login is too long" : "Přihlašovací jméno je příliš dlouhé"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
diff --git a/lib/l10n/cs.json b/lib/l10n/cs.json
index 0075e7f087c..59deb2babce 100644
--- a/lib/l10n/cs.json
+++ b/lib/l10n/cs.json
@@ -273,7 +273,6 @@
"A valid Login must be provided" : "Je třeba zadat platné přihlašovací jméno",
"Login contains whitespace at the beginning or at the end" : "Přihlašovací jméno je chybné – na jeho začátku či konci se nachází prázdný znak (mezera, tabulátor, atp.)",
"Login must not consist of dots only" : "Přihlašovací jméno se nemůže skládat pouze ze samých teček",
- "Login is too long" : "Přihlašovací jméno je příliš dlouhé",
"Login is invalid because files already exist for this user" : "Přihlašovací jméno není platné, protože protože pro tohoto uživatele už existují soubory",
"Account disabled" : "Účet znepřístupněn",
"Login canceled by app" : "Přihlášení zrušeno aplikací",
@@ -449,6 +448,7 @@
"Summarizes text by reducing its length without losing key information." : "Vytvoří stručný souhrn textu tím, že zkrátí jeho délku aniž by byly ztraceny klíčové informace",
"Extracts topics from a text and outputs them separated by commas." : "Vyzíská témata z textu a vypíše je oddělované čárkami.",
"File is currently busy, please try again later" : "Soubor je nyní používán, zkuste to později",
- "Cannot download file" : "Soubor se nedaří stáhnout"
+ "Cannot download file" : "Soubor se nedaří stáhnout",
+ "Login is too long" : "Přihlašovací jméno je příliš dlouhé"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
} \ No newline at end of file
diff --git a/lib/l10n/da.js b/lib/l10n/da.js
index b7c05641888..e1ed6d62bcd 100644
--- a/lib/l10n/da.js
+++ b/lib/l10n/da.js
@@ -273,7 +273,6 @@ OC.L10N.register(
"A valid Login must be provided" : "Et gyldigt login skal angives",
"Login contains whitespace at the beginning or at the end" : "Login indeholder mellemrum i begyndelsen eller slutningen",
"Login must not consist of dots only" : "Login må ikke kun bestå af prikker",
- "Login is too long" : "Login er for lang",
"Login is invalid because files already exist for this user" : "Login er ugyldigt, fordi filer allerede eksisterer for denne bruger",
"Account disabled" : "Konto deaktiveret",
"Login canceled by app" : "Login annulleret af app",
@@ -444,6 +443,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Opsummerer tekst ved at reducere dens længde uden at miste nøgleinformation.",
"Extracts topics from a text and outputs them separated by commas." : "Uddrager emner fra en tekst og skriver dem adskilt af kommaer.",
"File is currently busy, please try again later" : "Filen er i øjeblikket optaget - forsøg igen senere",
- "Cannot download file" : "Kan ikke downloade filen"
+ "Cannot download file" : "Kan ikke downloade filen",
+ "Login is too long" : "Login er for lang"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/da.json b/lib/l10n/da.json
index 0dd4df01090..36bd40121d8 100644
--- a/lib/l10n/da.json
+++ b/lib/l10n/da.json
@@ -271,7 +271,6 @@
"A valid Login must be provided" : "Et gyldigt login skal angives",
"Login contains whitespace at the beginning or at the end" : "Login indeholder mellemrum i begyndelsen eller slutningen",
"Login must not consist of dots only" : "Login må ikke kun bestå af prikker",
- "Login is too long" : "Login er for lang",
"Login is invalid because files already exist for this user" : "Login er ugyldigt, fordi filer allerede eksisterer for denne bruger",
"Account disabled" : "Konto deaktiveret",
"Login canceled by app" : "Login annulleret af app",
@@ -442,6 +441,7 @@
"Summarizes text by reducing its length without losing key information." : "Opsummerer tekst ved at reducere dens længde uden at miste nøgleinformation.",
"Extracts topics from a text and outputs them separated by commas." : "Uddrager emner fra en tekst og skriver dem adskilt af kommaer.",
"File is currently busy, please try again later" : "Filen er i øjeblikket optaget - forsøg igen senere",
- "Cannot download file" : "Kan ikke downloade filen"
+ "Cannot download file" : "Kan ikke downloade filen",
+ "Login is too long" : "Login er for lang"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/de.js b/lib/l10n/de.js
index ef4da64d96f..d1090a1d341 100644
--- a/lib/l10n/de.js
+++ b/lib/l10n/de.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "Ein gültiger Anmeldename muss eingegeben werden.",
"Login contains whitespace at the beginning or at the end" : "Anmeldename enthält Leerzeichen am Anfang oder am Ende",
"Login must not consist of dots only" : "Der Anmeldename darf nicht nur aus Punkten bestehen",
- "Login is too long" : "Die Anmeldung dauert zu lange",
+ "Username is too long" : "Benutzername ist zu lang",
"Login is invalid because files already exist for this user" : "Der Anmeldename ist ungültig, da bereits Dateien von diesem Konto existieren",
"Account disabled" : "Konto deaktiviert",
"Login canceled by app" : "Anmeldung durch die App abgebrochen",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Fasst Text zusammen, indem die Länge reduziert wird, ohne dass wichtige Informationen verloren gehen.",
"Extracts topics from a text and outputs them separated by commas." : "Extrahiert Themen aus einem Text und gibt sie durch Kommas getrennt aus.",
"File is currently busy, please try again later" : "Die Datei ist in Benutzung, bitte versuche es später noch einmal",
- "Cannot download file" : "Datei kann nicht heruntergeladen werden."
+ "Cannot download file" : "Datei kann nicht heruntergeladen werden.",
+ "Login is too long" : "Die Anmeldung dauert zu lange"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/de.json b/lib/l10n/de.json
index de85210572d..1c5a9e52f3d 100644
--- a/lib/l10n/de.json
+++ b/lib/l10n/de.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "Ein gültiger Anmeldename muss eingegeben werden.",
"Login contains whitespace at the beginning or at the end" : "Anmeldename enthält Leerzeichen am Anfang oder am Ende",
"Login must not consist of dots only" : "Der Anmeldename darf nicht nur aus Punkten bestehen",
- "Login is too long" : "Die Anmeldung dauert zu lange",
+ "Username is too long" : "Benutzername ist zu lang",
"Login is invalid because files already exist for this user" : "Der Anmeldename ist ungültig, da bereits Dateien von diesem Konto existieren",
"Account disabled" : "Konto deaktiviert",
"Login canceled by app" : "Anmeldung durch die App abgebrochen",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "Fasst Text zusammen, indem die Länge reduziert wird, ohne dass wichtige Informationen verloren gehen.",
"Extracts topics from a text and outputs them separated by commas." : "Extrahiert Themen aus einem Text und gibt sie durch Kommas getrennt aus.",
"File is currently busy, please try again later" : "Die Datei ist in Benutzung, bitte versuche es später noch einmal",
- "Cannot download file" : "Datei kann nicht heruntergeladen werden."
+ "Cannot download file" : "Datei kann nicht heruntergeladen werden.",
+ "Login is too long" : "Die Anmeldung dauert zu lange"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js
index 835e6af7269..d8599c0262f 100644
--- a/lib/l10n/de_DE.js
+++ b/lib/l10n/de_DE.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "Ein gültiger Anmeldename muss angegeben werden.",
"Login contains whitespace at the beginning or at the end" : "Anmeldename enthält Leerzeichen am Anfang oder am Ende",
"Login must not consist of dots only" : "Der Anmeldename darf nicht nur aus Punkten bestehen",
- "Login is too long" : "Der Kontenname ist zu lang",
+ "Username is too long" : "Benutzername ist zu lang",
"Login is invalid because files already exist for this user" : "Der Anmeldename ist ungültig, da bereits Dateien von diesem Benutzer existieren",
"Account disabled" : "Konto deaktiviert",
"Login canceled by app" : "Anmeldung durch die App abgebrochen",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Fasst Text zusammen, indem die Länge reduziert wird, ohne dass wichtige Informationen verloren gehen.",
"Extracts topics from a text and outputs them separated by commas." : "Extrahiert Themen aus einem Text und gibt sie durch Kommas getrennt aus.",
"File is currently busy, please try again later" : "Die Datei ist in Benutzung, bitte später erneut versuchen.",
- "Cannot download file" : "Datei kann nicht heruntergeladen werden"
+ "Cannot download file" : "Datei kann nicht heruntergeladen werden",
+ "Login is too long" : "Der Kontenname ist zu lang"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json
index 6225e659833..5149f3f2d97 100644
--- a/lib/l10n/de_DE.json
+++ b/lib/l10n/de_DE.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "Ein gültiger Anmeldename muss angegeben werden.",
"Login contains whitespace at the beginning or at the end" : "Anmeldename enthält Leerzeichen am Anfang oder am Ende",
"Login must not consist of dots only" : "Der Anmeldename darf nicht nur aus Punkten bestehen",
- "Login is too long" : "Der Kontenname ist zu lang",
+ "Username is too long" : "Benutzername ist zu lang",
"Login is invalid because files already exist for this user" : "Der Anmeldename ist ungültig, da bereits Dateien von diesem Benutzer existieren",
"Account disabled" : "Konto deaktiviert",
"Login canceled by app" : "Anmeldung durch die App abgebrochen",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "Fasst Text zusammen, indem die Länge reduziert wird, ohne dass wichtige Informationen verloren gehen.",
"Extracts topics from a text and outputs them separated by commas." : "Extrahiert Themen aus einem Text und gibt sie durch Kommas getrennt aus.",
"File is currently busy, please try again later" : "Die Datei ist in Benutzung, bitte später erneut versuchen.",
- "Cannot download file" : "Datei kann nicht heruntergeladen werden"
+ "Cannot download file" : "Datei kann nicht heruntergeladen werden",
+ "Login is too long" : "Der Kontenname ist zu lang"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/en_GB.js b/lib/l10n/en_GB.js
index 21731cb3516..b1a73cec9ad 100644
--- a/lib/l10n/en_GB.js
+++ b/lib/l10n/en_GB.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "A valid Login must be provided",
"Login contains whitespace at the beginning or at the end" : "Login contains whitespace at the beginning or at the end",
"Login must not consist of dots only" : "Login must not consist of dots only",
- "Login is too long" : "Login is too long",
+ "Username is too long" : "Username is too long",
"Login is invalid because files already exist for this user" : "Login is invalid because files already exist for this user",
"Account disabled" : "Account disabled",
"Login canceled by app" : "Login cancelled by app",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Summarizes text by reducing its length without losing key information.",
"Extracts topics from a text and outputs them separated by commas." : "Extracts topics from a text and outputs them separated by commas.",
"File is currently busy, please try again later" : "File is currently busy, please try again later",
- "Cannot download file" : "Cannot download file"
+ "Cannot download file" : "Cannot download file",
+ "Login is too long" : "Login is too long"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/en_GB.json b/lib/l10n/en_GB.json
index 043cb98581e..fb477ccbca3 100644
--- a/lib/l10n/en_GB.json
+++ b/lib/l10n/en_GB.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "A valid Login must be provided",
"Login contains whitespace at the beginning or at the end" : "Login contains whitespace at the beginning or at the end",
"Login must not consist of dots only" : "Login must not consist of dots only",
- "Login is too long" : "Login is too long",
+ "Username is too long" : "Username is too long",
"Login is invalid because files already exist for this user" : "Login is invalid because files already exist for this user",
"Account disabled" : "Account disabled",
"Login canceled by app" : "Login cancelled by app",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "Summarizes text by reducing its length without losing key information.",
"Extracts topics from a text and outputs them separated by commas." : "Extracts topics from a text and outputs them separated by commas.",
"File is currently busy, please try again later" : "File is currently busy, please try again later",
- "Cannot download file" : "Cannot download file"
+ "Cannot download file" : "Cannot download file",
+ "Login is too long" : "Login is too long"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/es.js b/lib/l10n/es.js
index 4346343d733..f53ec599a0b 100644
--- a/lib/l10n/es.js
+++ b/lib/l10n/es.js
@@ -275,7 +275,6 @@ OC.L10N.register(
"A valid Login must be provided" : "Se debe proporcionar un usuario válido",
"Login contains whitespace at the beginning or at the end" : "El usuario contiene espacios en blanco al inicio o al final",
"Login must not consist of dots only" : "El usuario no debe consistir sólo de puntos",
- "Login is too long" : "El nombre de inicio de sesión es demasiado largo",
"Login is invalid because files already exist for this user" : "El nombre de inicio de sesión es inválido porque ya existen archivos para este usuario",
"Account disabled" : "Cuenta deshabilitada",
"Login canceled by app" : "Login cancelado por la app",
@@ -451,6 +450,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Resume el texto reduciendo su longitud sin perder información clave.",
"Extracts topics from a text and outputs them separated by commas." : "Extrae los tópicos de un texto y genera una salida separada por comas. ",
"File is currently busy, please try again later" : "El archivo se encuentra actualmente ocupado, por favor inténtelo de nuevo más tarde",
- "Cannot download file" : "No se puede descargar el archivo"
+ "Cannot download file" : "No se puede descargar el archivo",
+ "Login is too long" : "El nombre de inicio de sesión es demasiado largo"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/lib/l10n/es.json b/lib/l10n/es.json
index 03fab3069cd..a88b6c22513 100644
--- a/lib/l10n/es.json
+++ b/lib/l10n/es.json
@@ -273,7 +273,6 @@
"A valid Login must be provided" : "Se debe proporcionar un usuario válido",
"Login contains whitespace at the beginning or at the end" : "El usuario contiene espacios en blanco al inicio o al final",
"Login must not consist of dots only" : "El usuario no debe consistir sólo de puntos",
- "Login is too long" : "El nombre de inicio de sesión es demasiado largo",
"Login is invalid because files already exist for this user" : "El nombre de inicio de sesión es inválido porque ya existen archivos para este usuario",
"Account disabled" : "Cuenta deshabilitada",
"Login canceled by app" : "Login cancelado por la app",
@@ -449,6 +448,7 @@
"Summarizes text by reducing its length without losing key information." : "Resume el texto reduciendo su longitud sin perder información clave.",
"Extracts topics from a text and outputs them separated by commas." : "Extrae los tópicos de un texto y genera una salida separada por comas. ",
"File is currently busy, please try again later" : "El archivo se encuentra actualmente ocupado, por favor inténtelo de nuevo más tarde",
- "Cannot download file" : "No se puede descargar el archivo"
+ "Cannot download file" : "No se puede descargar el archivo",
+ "Login is too long" : "El nombre de inicio de sesión es demasiado largo"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/lib/l10n/et_EE.js b/lib/l10n/et_EE.js
index 6039d601449..5b0b86e2b73 100644
--- a/lib/l10n/et_EE.js
+++ b/lib/l10n/et_EE.js
@@ -268,7 +268,7 @@ OC.L10N.register(
"A valid Login must be provided" : "Palun sisesta korrektne kasutajanimi",
"Login contains whitespace at the beginning or at the end" : "Kasutajanime alguses või lõpus on tühik",
"Login must not consist of dots only" : "Kasutajanimi ei tohi koosneda ainult punktidest",
- "Login is too long" : "Kasutajanimi on liiga pikk",
+ "Username is too long" : "Kasutajanimi on liiga pikk",
"Login is invalid because files already exist for this user" : "See kasutajanimi ei sobi, kuna sellise kasutaja faile on juba olemas",
"Account disabled" : "Konto pole kasutusel",
"Login canceled by app" : "Rakendus katkestas sisselogimise",
@@ -401,6 +401,7 @@ OC.L10N.register(
"Result" : "Tulemus",
"The translated text" : "Tõlgitud tekst",
"File is currently busy, please try again later" : "Fail on hetkel kasutuses, proovi hiljem uuesti",
- "Cannot download file" : "Faili pole võimalik alla laadida"
+ "Cannot download file" : "Faili pole võimalik alla laadida",
+ "Login is too long" : "Kasutajanimi on liiga pikk"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/et_EE.json b/lib/l10n/et_EE.json
index 4f41a7963b0..2be96c0c83c 100644
--- a/lib/l10n/et_EE.json
+++ b/lib/l10n/et_EE.json
@@ -266,7 +266,7 @@
"A valid Login must be provided" : "Palun sisesta korrektne kasutajanimi",
"Login contains whitespace at the beginning or at the end" : "Kasutajanime alguses või lõpus on tühik",
"Login must not consist of dots only" : "Kasutajanimi ei tohi koosneda ainult punktidest",
- "Login is too long" : "Kasutajanimi on liiga pikk",
+ "Username is too long" : "Kasutajanimi on liiga pikk",
"Login is invalid because files already exist for this user" : "See kasutajanimi ei sobi, kuna sellise kasutaja faile on juba olemas",
"Account disabled" : "Konto pole kasutusel",
"Login canceled by app" : "Rakendus katkestas sisselogimise",
@@ -399,6 +399,7 @@
"Result" : "Tulemus",
"The translated text" : "Tõlgitud tekst",
"File is currently busy, please try again later" : "Fail on hetkel kasutuses, proovi hiljem uuesti",
- "Cannot download file" : "Faili pole võimalik alla laadida"
+ "Cannot download file" : "Faili pole võimalik alla laadida",
+ "Login is too long" : "Kasutajanimi on liiga pikk"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/fa.js b/lib/l10n/fa.js
index 0c3e496c42d..da77202e434 100644
--- a/lib/l10n/fa.js
+++ b/lib/l10n/fa.js
@@ -2,26 +2,28 @@ OC.L10N.register(
"lib",
{
"Cannot write into \"config\" directory!" : "نمیتوانید داخل دایرکتوری \"config\" تغییراتی ایجاد کنید",
- "This can usually be fixed by giving the web server write access to the config directory." : "This can usually be fixed by giving the web server write access to the config directory.",
- "But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it." : "But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it.",
+ "This can usually be fixed by giving the web server write access to the config directory." : "این مشکل معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری پیکربندی قابل رفع است.",
+ "But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it." : "اما، اگر ترجیح می‌دهید فایل config.php فقط خواندنی باشد، گزینه \"config_is_read_only\" را در آن به true تنظیم کنید.",
"See %s" : "مشاهده %s",
- "Application %1$s is not present or has a non-compatible version with this server. Please check the apps directory." : "Application %1$s is not present or has a non-compatible version with this server. Please check the apps directory.",
+ "Application %1$s is not present or has a non-compatible version with this server. Please check the apps directory." : "برنامه %1$s موجود نیست یا نسخه‌ای ناسازگار با این سرور دارد. لطفاً دایرکتوری برنامه‌ها را بررسی کنید.",
"Sample configuration detected" : "فایل پیکربندی نمونه پیدا شد",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "تشخیص داده شده است که پیکربندی نمونه کپی شده است. این می تواند نصب شما را خراب کند و پشتیبانی نمی شود. لطفاً قبل از انجام تغییرات در config.php ، اسناد را بخوانید",
- "The page could not be found on the server." : "The page could not be found on the server.",
- "%s email verification" : "%s email verification",
- "Email verification" : "Email verification",
- "Click the following button to confirm your email." : "Click the following button to confirm your email.",
- "Click the following link to confirm your email." : "Click the following link to confirm your email.",
- "Confirm your email" : "Confirm your email",
+ "The page could not be found on the server." : "صفحه در سرور یافت نشد.",
+ "%s email verification" : "تأیید ایمیل %s",
+ "Email verification" : "تأیید ایمیل",
+ "Click the following button to confirm your email." : "برای تأیید ایمیل خود روی دکمه زیر کلیک کنید.",
+ "Click the following link to confirm your email." : "برای تأیید ایمیل خود روی لینک زیر کلیک کنید.",
+ "Confirm your email" : "ایمیل خود را تأیید کنید",
"Other activities" : "سایر فعالیت ها",
- "%1$s and %2$s" : "%1$sو%2$s",
- "%1$s, %2$s and %3$s" : "%1$s،%2$sو%3$s",
- "%1$s, %2$s, %3$s and %4$s" : "%1$s،%2$s،%3$sو%4$s",
- "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s،%2$s،%3$s،%4$sو%5$s",
+ "%1$s and %2$s" : "%1$s و %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s، %2$s و %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s، %2$s، %3$s و %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s، %2$s، %3$s، %4$s و %5$s",
+ "Education bundle" : "بسته آموزشی",
"Enterprise bundle" : "بستهٔ سازمانی",
"Groupware bundle" : "بستهٔ کار گروهی",
"Hub bundle" : "بستهٔ هسته‌ای",
+ "Public sector bundle" : "بسته بخش عمومی",
"Social sharing bundle" : "بستهٔ هم‌رسانی اجتماعی",
"PHP %s or higher is required." : "PHP نسخه‌ی %s یا بالاتر نیاز است.",
"PHP with a version lower than %s is required." : "نیاز به نگارش پایین‌تر از %s پی‌اچ‌پی.",
@@ -35,26 +37,34 @@ OC.L10N.register(
"The following platforms are supported: %s" : "بن‌سازه‌های زیر پشتیبانی می‌شوند: %s",
"Server version %s or higher is required." : "نیاز به کارساز با نگارش %s یا بالاتر.",
"Server version %s or lower is required." : "نیاز به کارساز با نگارش %s یا پایین‌تر.",
- "Wiping of device %s has started" : "پاک کردن دستگاه%s شروع شده است",
- "Wiping of device »%s« has started" : "پاک کردن دستگاه%s شروع شده است",
- "»%s« started remote wipe" : "%sپاک کردن از راه دور",
- "Device or application »%s« has started the remote wipe process. You will receive another email once the process has finished" : "دستگاه یا برنامه%s فرآیند پاک کردن از راه دور را آغاز کرده است. پس از اتمام مراحل ، ایمیل دیگری دریافت خواهید کرد",
- "Wiping of device %s has finished" : "پاک کردن دستگاه %sبه پایان رسیده است",
- "Wiping of device »%s« has finished" : "پاک کردن دستگاه %sبه پایان رسیده است",
- "»%s« finished remote wipe" : "%sپاک کردن از راه دور",
- "Device or application »%s« has finished the remote wipe process." : "دستگاه یا برنامه %sفرآیند پاک کردن از راه دور را به پایان رسانده است.",
+ "Logged in account must be an admin, a sub admin or gotten special right to access this setting" : "حساب وارد شده باید یک مدیر، یک مدیر فرعی یا دارای حق دسترسی ویژه برای دسترسی به این تنظیم باشد",
+ "Your current IP address doesn't allow you to perform admin actions" : "آدرس IP فعلی شما اجازه انجام اقدامات مدیریتی را به شما نمی‌دهد",
+ "Logged in account must be an admin or sub admin" : "حساب وارد شده باید یک مدیر یا مدیر فرعی باشد",
+ "Logged in account must be an admin" : "حساب وارد شده باید یک مدیر باشد",
+ "Wiping of device %s has started" : "پاک کردن دستگاه %s آغاز شد",
+ "Wiping of device »%s« has started" : "پاک کردن دستگاه «%s» آغاز شد",
+ "»%s« started remote wipe" : "«%s» پاک کردن از راه دور را آغاز کرد",
+ "Device or application »%s« has started the remote wipe process. You will receive another email once the process has finished" : "دستگاه یا برنامه «%s» فرآیند پاک کردن از راه دور را آغاز کرده است. پس از اتمام مراحل، ایمیل دیگری دریافت خواهید کرد.",
+ "Wiping of device %s has finished" : "پاک کردن دستگاه %s به پایان رسید",
+ "Wiping of device »%s« has finished" : "پاک کردن دستگاه «%s» به پایان رسید",
+ "»%s« finished remote wipe" : "«%s» پاک کردن از راه دور را به پایان رساند",
+ "Device or application »%s« has finished the remote wipe process." : "دستگاه یا برنامه «%s» فرآیند پاک کردن از راه دور را به پایان رسانده است.",
"Remote wipe started" : "پاک کردن از راه دور شروع شد",
- "A remote wipe was started on device %s" : "پاک کردن از راه دور روی دستگاه شروع شد%s",
+ "A remote wipe was started on device %s" : "پاک کردن از راه دور روی دستگاه %s شروع شد",
"Remote wipe finished" : "پاک کردن از راه دور به پایان رسید",
- "The remote wipe on %s has finished" : "پاک کردن از راه دور روی%s کار تمام شد",
+ "The remote wipe on %s has finished" : "پاک کردن از راه دور روی %s کار تمام شد",
"Authentication" : "احراز هویت",
"Unknown filetype" : "نوع فایل ناشناخته",
"Invalid image" : "عکس نامعتبر",
"Avatar image is not square" : "تصویر آواتار مربع نیست",
"Files" : "پوشه‌ها",
"View profile" : "مشاهدهٔ نمایه",
- "_%nh_::_%nh_" : ["%nh","%nh"],
- "Local time: %s" : "Local time: %s",
+ "same time" : "همزمان",
+ "_%nh_::_%nh_" : ["%n ساعت","%n ساعت"],
+ "_%nm_::_%nm_" : ["%n دقیقه","%n دقیقه"],
+ "%s ahead" : "%s جلوتر",
+ "%s behind" : "%s عقب‌تر",
+ "Local time: %s" : "زمان محلی: %s",
"today" : "امروز",
"tomorrow" : "فردا",
"yesterday" : "دیروز",
@@ -75,13 +85,37 @@ OC.L10N.register(
"in a few seconds" : "در چند ثانیه",
"seconds ago" : "ثانیه‌ها پیش",
"Empty file" : "پروندهٔ خالی",
- "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ماژول با شناسه:%s وجود ندارد. لطفاً آن را در تنظیمات برنامه خود فعال کنید یا با سرپرست خود تماس بگیرید",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ماژول با شناسه: %s وجود ندارد. لطفاً آن را در تنظیمات برنامه خود فعال کنید یا با سرپرست خود تماس بگیرید.",
+ "No file conversion providers available" : "ارائه‌دهنده تبدیل فایل در دسترس نیست",
+ "File is too large to convert" : "فایل برای تبدیل خیلی بزرگ است",
+ "Destination does not match conversion extension" : "مقصد با پسوند تبدیل مطابقت ندارد",
+ "Could not convert file" : "فایل قابل تبدیل نبود",
+ "Destination does not exist" : "مقصد وجود ندارد",
+ "Destination is not creatable" : "مقصد قابل ایجاد نیست",
"Dot files are not allowed" : "پرونده‌های نقطه‌دار مجاز نیستند",
+ "%1$s (renamed)" : "%1$s (تغییر نام داده شد)",
+ "renamed file" : "فایل تغییر نام داده شد",
+ "\"%1$s\" is a forbidden file or folder name." : "«%1$s» یک نام فایل یا پوشه ممنوع است.",
+ "\"%1$s\" is a forbidden prefix for file or folder names." : "«%1$s» یک پیشوند ممنوع برای نام فایل یا پوشه است.",
+ "\"%1$s\" is not allowed inside a file or folder name." : "«%1$s» در نام فایل یا پوشه مجاز نیست.",
+ "\"%1$s\" is a forbidden file type." : "«%1$s» یک نوع فایل ممنوع است.",
+ "Filenames must not end with \"%1$s\"." : "نام فایل‌ها نباید با «%1$s» به پایان برسند.",
+ "Invalid parent path" : "مسیر والد نامعتبر",
"File already exists" : "پرونده از پیش موجود است",
"Invalid path" : "مسیر نامعتبر",
"Failed to create file from template" : "شکست در ایجاد پرونده از قالب",
"Templates" : "قالب‌ها",
+ "Storage %s cannot be moved" : "حافظه %s قابل جابجایی نیست",
+ "Moving a share (%s) into a shared folder is not allowed" : "انتقال یک اشتراک (%s) به یک پوشه مشترک مجاز نیست",
+ "Moving a storage (%s) into a shared folder is not allowed" : "انتقال یک حافظه (%s) به یک پوشه مشترک مجاز نیست",
+ "Moving a share (%s) into another share (%s) is not allowed" : "انتقال یک اشتراک (%s) به اشتراک دیگر (%s) مجاز نیست",
+ "Moving a share (%s) into another storage (%s) is not allowed" : "انتقال یک اشتراک (%s) به حافظه دیگر (%s) مجاز نیست",
+ "Moving a storage (%s) into a share (%s) is not allowed" : "انتقال یک حافظه (%s) به یک اشتراک (%s) مجاز نیست",
+ "Moving a storage (%s) into another storage (%s) is not allowed" : "انتقال یک حافظه (%s) به حافظه دیگر (%s) مجاز نیست",
+ "Path contains invalid segments" : "مسیر شامل بخش‌های نامعتبر است",
+ "Filename is a reserved word" : "نام فایل یک کلمه رزرو شده است",
"Filename contains at least one invalid character" : "نام فایل حداقل دارای یک کاراکتر نامعتبر است",
+ "Filename is too long" : "نام فایل بیش از حد طولانی است",
"Empty filename is not allowed" : "نام فایل نمی‌تواند خالی باشد",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "کارهٔ «%s» به دلیل ناتوانی در خواندن پروندهٔ appinfo نمی‌تواند نصب شود.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "کارهٔ «%s» به دلیل سازگار نبودن با این نگارش از کارساز نمی‌تواند نصب شود.",
@@ -97,8 +131,8 @@ OC.L10N.register(
"Accounts" : "حساب‌ها",
"Email" : "رایانامه",
"Mail %s" : "نامه به %s",
- "Fediverse" : "Fediverse",
- "View %s on the fediverse" : "View %s on the fediverse",
+ "Fediverse" : "فدیورس",
+ "View %s on the fediverse" : "مشاهده %s در فدیورس",
"Phone" : "تلفن",
"Call %s" : "تماس با %s",
"Twitter" : "توییتر",
@@ -108,35 +142,87 @@ OC.L10N.register(
"Address" : "نشانی",
"Profile picture" : "تصویر نمایه",
"About" : "درباره",
- "Display name" : "Display name",
+ "Display name" : "نام نمایشی",
"Headline" : "عنوان",
"Organisation" : "سازمان",
"Role" : "نقش",
+ "Pronouns" : "ضمایر",
+ "Unknown account" : "حساب ناشناخته",
"Additional settings" : "تنظیمات اضافی",
+ "Enter the database Login and name for %s" : "نام کاربری و نام پایگاه داده را برای %s وارد کنید",
+ "Enter the database Login for %s" : "نام کاربری پایگاه داده را برای %s وارد کنید",
"Enter the database name for %s" : "ورود نام پایگاه داده برای %s",
"You cannot use dots in the database name %s" : "نمی‌توانید در در نام پایگاه دادهٔ %s از نقطه استفاده کنید",
+ "MySQL Login and/or password not valid" : "نام کاربری و/یا رمز عبور MySQL نامعتبر است",
"You need to enter details of an existing account." : "لازم است جزییات یک حساب موحود را وارد کنید.",
"Oracle connection could not be established" : "ارتباط اراکل نمیتواند برقرار باشد.",
+ "Oracle Login and/or password not valid" : "نام کاربری و/یا رمز عبور Oracle نامعتبر است",
+ "PostgreSQL Login and/or password not valid" : "نام کاربری و/یا رمز عبور PostgreSQL نامعتبر است",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk!" : "Mac OS X پشتیبانی نمی‌شود و %s روی این پلتفرم به درستی کار نخواهد کرد. با مسئولیت خودتان از آن استفاده کنید!",
"For the best results, please consider using a GNU/Linux server instead." : "برای بهترین نتیجه، استفاده از یک کارساز گنو/لینوکسی را در نظر داشته باشید.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "به نظر می رسد%s که این نمونه در یک محیط PHP 32 بیتی در حال اجرا است و open_baseir در php.ini پیکربندی شده است. این مسئله به پرونده هایی با بیش از 4 گیگ منجر می شود و بسیار دلسرد می شود",
- "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "لطفاً تنظیمات open_baseir را درون php.ini خود حذف کنید یا به PHP 64 بیتی تغییر دهید.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "به نظر می رسد %s که این نمونه در یک محیط PHP 32 بیتی در حال اجرا است و open_basedir در php.ini پیکربندی شده است. این مسئله به پرونده هایی با بیش از 4 گیگ منجر می شود و بسیار دلسرد می شود.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "لطفاً تنظیمات open_basedir را درون php.ini خود حذف کنید یا به PHP 64 بیتی تغییر دهید.",
+ "Set an admin Login." : "یک نام کاربری برای مدیر تنظیم کنید.",
"Set an admin password." : "یک رمزعبور برای مدیر تنظیم نمایید.",
- "Cannot create or write into the data directory %s" : "Cannot create or write into the data directory %s",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "به اشتراک گذاشتن باطن باید رابط OCP \\ Share_Backend %sرا پیاده سازی کند",
- "Sharing backend %s not found" : "به اشتراک گذاشتن باطن%s یافت نشد",
- "Sharing backend for %s not found" : "به اشتراک گذاشتن باطن برای%s یافت نشد",
+ "Cannot create or write into the data directory %s" : "نمی‌توان در دایرکتوری داده %s ایجاد یا نوشت",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "بک‌اند اشتراک‌گذاری %s باید رابط OCP\\Share_Backend را پیاده‌سازی کند",
+ "Sharing backend %s not found" : "بک‌اند اشتراک‌گذاری %s یافت نشد",
+ "Sharing backend for %s not found" : "بک‌اند اشتراک‌گذاری برای %s یافت نشد",
+ "%1$s shared %2$s with you" : "%1$s %2$s را با شما به اشتراک گذاشت",
+ "Open %s" : "باز کردن %s",
"%1$s via %2$s" : "%1$s از طریق %2$s",
+ "%1$s shared %2$s with you and wants to add:" : "%1$s %2$s را با شما به اشتراک گذاشت و می‌خواهد اضافه کند:",
+ "%1$s shared %2$s with you and wants to add" : "%1$s %2$s را با شما به اشتراک گذاشت و می‌خواهد اضافه کند",
+ "%s added a note to a file shared with you" : "%s یک یادداشت به فایلی که با شما به اشتراک گذاشته شده است اضافه کرد",
+ "Passwords are enforced for link and mail shares" : "رمزهای عبور برای اشتراک‌گذاری لینک و ایمیل اجباری هستند",
+ "Share recipient is not a valid user" : "گیرنده اشتراک یک کاربر معتبر نیست",
+ "Share recipient is not a valid group" : "گیرنده اشتراک یک گروه معتبر نیست",
+ "Share recipient should be empty" : "گیرنده اشتراک باید خالی باشد",
+ "Share recipient should not be empty" : "گیرنده اشتراک نباید خالی باشد",
+ "Share recipient is not a valid circle" : "گیرنده اشتراک یک دایره معتبر نیست",
"Unknown share type" : "نوع اشتراک ناشناخته",
- "You are not allowed to share %s" : "شما مجاز به اشتراک گذاری نیستید%s",
- "Cannot increase permissions of %s" : "Cannot increase permissions of %s",
- "Files cannot be shared with delete permissions" : "Files cannot be shared with delete permissions",
- "Files cannot be shared with create permissions" : "Files cannot be shared with create permissions",
+ "Share initiator must be set" : "شروع‌کننده اشتراک باید تنظیم شود",
+ "Cannot share with yourself" : "نمی‌توانید با خودتان به اشتراک بگذارید",
+ "Shared path must be set" : "مسیر مشترک باید تنظیم شود",
+ "Shared path must be either a file or a folder" : "مسیر مشترک باید یک فایل یا یک پوشه باشد",
+ "You cannot share your root folder" : "نمی‌توانید پوشه ریشه خود را به اشتراک بگذارید",
+ "You are not allowed to share %s" : "شما مجاز به اشتراک گذاری %s نیستید",
+ "Valid permissions are required for sharing" : "مجوزهای معتبر برای اشتراک‌گذاری لازم است",
+ "File shares cannot have create or delete permissions" : "اشتراک‌گذاری فایل‌ها نمی‌تواند مجوزهای ایجاد یا حذف داشته باشد",
+ "Cannot increase permissions of %s" : "نمی‌توان مجوزهای %s را افزایش داد",
+ "Shares need at least read permissions" : "اشتراک‌گذاری‌ها حداقل به مجوزهای خواندن نیاز دارند",
+ "Files cannot be shared with delete permissions" : "فایل‌ها را نمی‌توان با مجوزهای حذف به اشتراک گذاشت",
+ "Files cannot be shared with create permissions" : "فایل‌ها را نمی‌توان با مجوزهای ایجاد به اشتراک گذاشت",
"Expiration date is in the past" : "تاریخ انقضا در گذشته است",
- "_Cannot set expiration date more than %n day in the future_::_Cannot set expiration date more than %n days in the future_" : ["Cannot set expiration date more than %n day in the future","Cannot set expiration date more than %n days in the future"],
- "Sharing is only allowed with group members" : "Sharing is only allowed with group members",
+ "Expiration date is enforced" : "تاریخ انقضا اجباری است",
+ "_Cannot set expiration date more than %n day in the future_::_Cannot set expiration date more than %n days in the future_" : ["نمی‌توان تاریخ انقضا را بیش از %n روز در آینده تنظیم کرد","نمی‌توان تاریخ انقضا را بیش از %n روز در آینده تنظیم کرد"],
+ "Sharing is only allowed with group members" : "اشتراک‌گذاری فقط با اعضای گروه مجاز است",
+ "Sharing %s failed, because this item is already shared with the account %s" : "اشتراک‌گذاری %s ناموفق بود، زیرا این مورد قبلاً با حساب %s به اشتراک گذاشته شده است",
+ "Group sharing is now allowed" : "اشتراک‌گذاری گروهی اکنون مجاز است",
+ "Sharing is only allowed within your own groups" : "اشتراک‌گذاری فقط در گروه‌های خودتان مجاز است",
+ "Path is already shared with this group" : "این مسیر قبلاً با این گروه به اشتراک گذاشته شده است",
+ "Link sharing is not allowed" : "اشتراک‌گذاری لینک مجاز نیست",
+ "Public upload is not allowed" : "بارگذاری عمومی مجاز نیست",
+ "You cannot share a folder that contains other shares" : "نمی‌توانید پوشه‌ای را به اشتراک بگذارید که حاوی اشتراک‌های دیگر است",
+ "Sharing is disabled" : "اشتراک‌گذاری غیرفعال است",
+ "Sharing is disabled for you" : "اشتراک‌گذاری برای شما غیرفعال است",
+ "Cannot share with the share owner" : "نمی‌توان با صاحب اشتراک به اشتراک گذاشت",
+ "Share does not have a full ID" : "اشتراک شناسه کامل ندارد",
+ "Cannot change share type" : "نمی‌توان نوع اشتراک را تغییر داد",
+ "Can only update recipient on user shares" : "فقط می‌توان گیرنده را در اشتراک‌های کاربر به‌روزرسانی کرد",
+ "Cannot enable sending the password by Talk with an empty password" : "نمی‌توان ارسال رمز عبور از طریق Talk را با رمز عبور خالی فعال کرد",
+ "Cannot enable sending the password by Talk without setting a new password" : "نمی‌توان ارسال رمز عبور از طریق Talk را بدون تنظیم رمز عبور جدید فعال کرد",
+ "Cannot disable sending the password by Talk without setting a new password" : "نمی‌توان ارسال رمز عبور از طریق Talk را بدون تنظیم رمز عبور جدید غیرفعال کرد",
+ "Share provider does not support accepting" : "ارائه‌دهنده اشتراک از پذیرش پشتیبانی نمی‌کند",
+ "Cannot change target of link share" : "نمی‌توان مقصد اشتراک لینک را تغییر داد",
+ "Invalid share recipient" : "گیرنده اشتراک نامعتبر است",
+ "Group \"%s\" does not exist" : "گروه «%s» وجود ندارد",
"The requested share does not exist anymore" : "سهم درخواست شده دیگر وجود ندارد",
- "The user was not created because the user limit has been reached. Check your notifications to learn more." : "The user was not created because the user limit has been reached. Check your notifications to learn more.",
+ "The requested share comes from a disabled user" : "اشتراک درخواستی از یک کاربر غیرفعال است",
+ "The user was not created because the user limit has been reached. Check your notifications to learn more." : "کاربر ایجاد نشد زیرا محدودیت کاربر به پایان رسیده است. برای اطلاعات بیشتر اعلان‌های خود را بررسی کنید.",
"Could not find category \"%s\"" : "دسته بندی %s یافت نشد",
+ "Input text" : "متن ورودی",
+ "The input text" : "متن ورودی",
"Sunday" : "یک‌شنبه",
"Monday" : "دوشنبه",
"Tuesday" : "سه‌شنبه",
@@ -183,6 +269,15 @@ OC.L10N.register(
"Nov." : "نو.",
"Dec." : "دس.",
"A valid password must be provided" : "رمز عبور صحیح باید وارد شود",
+ "The Login is already being used" : "نام کاربری قبلاً استفاده شده است",
+ "Could not create account" : "حساب کاربری ایجاد نشد",
+ "Only the following characters are allowed in an Login: \"a-z\", \"A-Z\", \"0-9\", spaces and \"_.@-'\"" : "فقط کاراکترهای زیر در نام کاربری مجاز هستند: \"a-z\", \"A-Z\", \"0-9\", فاصله و \"_.@-'\"",
+ "A valid Login must be provided" : "یک نام کاربری معتبر باید ارائه شود",
+ "Login contains whitespace at the beginning or at the end" : "نام کاربری حاوی فاصله در ابتدا یا انتها است",
+ "Login must not consist of dots only" : "نام کاربری نباید فقط از نقطه تشکیل شده باشد",
+ "Username is too long" : "نام کاربری بیش از حد طولانی است",
+ "Login is invalid because files already exist for this user" : "نام کاربری نامعتبر است زیرا فایل‌ها برای این کاربر از قبل وجود دارند",
+ "Account disabled" : "حساب کاربری غیرفعال است",
"Login canceled by app" : "ورود به دست کاره لغو شد",
"App \"%1$s\" cannot be installed because the following dependencies are not fulfilled: %2$s" : "کارهٔ «%1$s» نمی‌تواند نصب شود؛ چرا که وابستگی زیر تأمین نشده: %2$s",
"a safe home for all your data" : "خانه‌ای امن برای تمامی داده‌هایتان",
@@ -190,60 +285,173 @@ OC.L10N.register(
"Authentication error" : "خطا در اعتبار سنجی",
"Token expired. Please reload page." : "Token منقضی شده است. لطفا دوباره صفحه را بارگذاری نمایید.",
"No database drivers (sqlite, mysql, or postgresql) installed." : "هیچ درایور پایگاه داده (sqlite ، mysql یا postgresql) نصب نشده است.",
- "Cannot write into \"config\" directory." : "Cannot write into \"config\" directory.",
- "This can usually be fixed by giving the web server write access to the config directory. See %s" : "This can usually be fixed by giving the web server write access to the config directory. See %s",
- "Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "یا اگر ترجیح می دهید پرونده config.php را فقط بخوانید ، گزینه \"config_is_read_only\" را در آن تنظیم کنید. دیدن%s",
- "Cannot write into \"apps\" directory." : "Cannot write into \"apps\" directory.",
- "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file.",
- "Cannot create \"data\" directory." : "Cannot create \"data\" directory.",
- "This can usually be fixed by giving the web server write access to the root directory. See %s" : "This can usually be fixed by giving the web server write access to the root directory. See %s",
- "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "Permissions can usually be fixed by giving the web server write access to the root directory. See %s.",
- "Your data directory is not writable." : "Your data directory is not writable.",
- "Setting locale to %s failed." : "Setting locale to %s failed.",
- "Please install one of these locales on your system and restart your web server." : "Please install one of these locales on your system and restart your web server.",
+ "Cannot write into \"config\" directory." : "نمی‌توان در دایرکتوری «config» نوشت.",
+ "This can usually be fixed by giving the web server write access to the config directory. See %s" : "این مشکل معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری پیکربندی قابل رفع است. مشاهده %s",
+ "Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "یا اگر ترجیح می‌دهید فایل config.php فقط خواندنی باشد، گزینه \"config_is_read_only\" را در آن به true تنظیم کنید. مشاهده %s",
+ "Cannot write into \"apps\" directory." : "نمی‌توان در دایرکتوری «apps» نوشت.",
+ "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "این مشکل معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری برنامه‌ها یا غیرفعال کردن فروشگاه برنامه در فایل پیکربندی قابل رفع است.",
+ "Cannot create \"data\" directory." : "نمی‌توان دایرکتوری «data» را ایجاد کرد.",
+ "This can usually be fixed by giving the web server write access to the root directory. See %s" : "این مشکل معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری ریشه قابل رفع است. مشاهده %s",
+ "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "مجوزها معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری ریشه قابل رفع هستند. مشاهده %s.",
+ "Your data directory is not writable." : "دایرکتوری داده شما قابل نوشتن نیست.",
+ "Setting locale to %s failed." : "تنظیم محلی به %s ناموفق بود.",
+ "Please install one of these locales on your system and restart your web server." : "لطفاً یکی از این محلی‌ها را روی سیستم خود نصب کرده و وب‌سرور خود را مجدداً راه‌اندازی کنید.",
"PHP module %s not installed." : "ماژول PHP %s نصب نشده است.",
"Please ask your server administrator to install the module." : "لطفا از مدیر سیستم بخواهید تا ماژول را نصب کند.",
- "PHP setting \"%s\" is not set to \"%s\"." : "تنظیمات PHP%s تنظیم نشده است%s",
+ "PHP setting \"%s\" is not set to \"%s\"." : "تنظیمات PHP «%s» روی «%s» تنظیم نشده است.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "تنظیم این تنظیمات در php.ini باعث می شود Nextcloud دوباره اجرا شود",
- "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>.",
- "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini.",
- "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ظاهراً برای خنثی کردن بلوک های اسناد درون خطی تنظیم شده است. این کار چندین برنامه اصلی را غیرقابل دسترسی خواهد کرد.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "این احتمالاً توسط حافظه پنهان / کش مانند Zend OPcache یا eAccelerator ایجاد شده است.",
- "PHP modules have been installed, but they are still listed as missing?" : "ماژول های پی اچ پی نصب شده اند ، اما هنوز هم به عنوان مفقود شده ذکر شده اند؟",
- "Please ask your server administrator to restart the web server." : "لطفاً از سرور سرور خود بخواهید که وب سرور را مجدداً راه اندازی کند.",
- "The required %s config variable is not configured in the config.php file." : "The required %s config variable is not configured in the config.php file.",
- "Please ask your server administrator to check the Nextcloud configuration." : "Please ask your server administrator to check the Nextcloud configuration.",
- "Your data directory must be an absolute path." : "Your data directory must be an absolute path.",
- "Check the value of \"datadirectory\" in your configuration." : "Check the value of \"datadirectory\" in your configuration.",
- "Your data directory is invalid." : "Your data directory is invalid.",
- "Action \"%s\" not supported or implemented." : "عملی%s پشتیبانی یا اجرا نشده است.",
- "Authentication failed, wrong token or provider ID given" : "تأیید اعتبار انجام نشد ، نشانه اشتباه یا شناسه ارائه دهنده داده شد",
- "Parameters missing in order to complete the request. Missing Parameters: \"%s\"" : "پارامترهای موجود برای تکمیل درخواست. پارامترهای موجود نیست%s",
- "ID \"%1$s\" already used by cloud federation provider \"%2$s\"" : "شناسه%1$s قبلاً توسط ارائه دهنده فدراسیون ابر استفاده شده است%2$s",
- "Cloud Federation Provider with ID: \"%s\" does not exist." : "ارائه دهنده فدراسیون Cloud با شناسه:%s وجود ندارد.",
- "Could not obtain lock type %d on \"%s\"." : "نمی توان نوع%d قفل را به دست آورد%s",
- "Storage unauthorized. %s" : "ذخیره سازی غیر مجاز.%s",
- "Storage incomplete configuration. %s" : "پیکربندی ناقص ذخیره سازی.%s<br>",
- "Storage connection error. %s" : "خطای اتصال ذخیره سازی%s",
- "Storage is temporarily not available" : "ذخیره سازی به طور موقت در دسترس نیست",
- "Storage connection timeout. %s" : "مدت زمان اتصال ذخیره سازی%s",
- "Confirmation" : "Confirmation",
- "Prompt" : "Prompt",
- "Chat" : "Chat",
- "Generates a possible headline for a text." : "Generates a possible headline for a text.",
+ "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> به جای مقدار مورد انتظار <code>0</code> روی <code>%s</code> تنظیم شده است.",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "برای رفع این مشکل، <code>mbstring.func_overload</code> را در php.ini خود روی <code>0</code> تنظیم کنید.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ظاهراً برای حذف بلوک‌های مستندات درون‌خطی تنظیم شده است. این کار چندین برنامه اصلی را غیرقابل دسترس خواهد کرد.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "این احتمالاً توسط حافظه پنهان/شتاب‌دهنده‌ای مانند Zend OPcache یا eAccelerator ایجاد شده است.",
+ "PHP modules have been installed, but they are still listed as missing?" : "ماژول‌های PHP نصب شده‌اند، اما همچنان به عنوان گم‌شده لیست شده‌اند؟",
+ "Please ask your server administrator to restart the web server." : "لطفاً از مدیر سرور خود بخواهید که وب‌سرور را مجدداً راه‌اندازی کند.",
+ "The required %s config variable is not configured in the config.php file." : "متغیر پیکربندی مورد نیاز %s در فایل config.php پیکربندی نشده است.",
+ "Please ask your server administrator to check the Nextcloud configuration." : "لطفاً از مدیر سرور خود بخواهید پیکربندی Nextcloud را بررسی کند.",
+ "Your data directory is readable by other people." : "دایرکتوری داده شما برای دیگران قابل خواندن است.",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other people." : "لطفاً مجوزها را به 0770 تغییر دهید تا دایرکتوری توسط افراد دیگر قابل فهرست شدن نباشد.",
+ "Your data directory must be an absolute path." : "دایرکتوری داده شما باید یک مسیر مطلق باشد.",
+ "Check the value of \"datadirectory\" in your configuration." : "مقدار \"datadirectory\" را در پیکربندی خود بررسی کنید.",
+ "Your data directory is invalid." : "دایرکتوری داده شما نامعتبر است.",
+ "Ensure there is a file called \"%1$s\" in the root of the data directory. It should have the content: \"%2$s\"" : "اطمینان حاصل کنید که فایلی به نام «%1$s» در ریشه دایرکتوری داده وجود دارد. این فایل باید حاوی: «%2$s» باشد",
+ "Action \"%s\" not supported or implemented." : "عملیات «%s» پشتیبانی یا اجرا نشده است.",
+ "Authentication failed, wrong token or provider ID given" : "تأیید اعتبار انجام نشد، نشانه اشتباه یا شناسه ارائه دهنده داده شد",
+ "Parameters missing in order to complete the request. Missing Parameters: \"%s\"" : "پارامترهای مورد نیاز برای تکمیل درخواست وجود ندارند. پارامترهای از دست رفته: «%s»",
+ "ID \"%1$s\" already used by cloud federation provider \"%2$s\"" : "شناسه «%1$s» قبلاً توسط ارائه‌دهنده فدراسیون ابری «%2$s» استفاده شده است",
+ "Cloud Federation Provider with ID: \"%s\" does not exist." : "ارائه‌دهنده فدراسیون ابری با شناسه: «%s» وجود ندارد.",
+ "Could not obtain lock type %d on \"%s\"." : "نمی‌توان قفل از نوع %d را روی «%s» به دست آورد.",
+ "Storage unauthorized. %s" : "دسترسی به حافظه غیرمجاز است. %s",
+ "Storage incomplete configuration. %s" : "پیکربندی حافظه ناقص است. %s",
+ "Storage connection error. %s" : "خطای اتصال حافظه. %s",
+ "Storage is temporarily not available" : "حافظه به طور موقت در دسترس نیست",
+ "Storage connection timeout. %s" : "مهلت اتصال حافظه به پایان رسید. %s",
+ "To allow this check to run you have to make sure that your Web server can connect to itself. Therefore it must be able to resolve and connect to at least one of its `trusted_domains` or the `overwrite.cli.url`. This failure may be the result of a server-side DNS mismatch or outbound firewall rule." : "برای اجرای این بررسی، باید مطمئن شوید که وب‌سرور شما می‌تواند به خودش متصل شود. بنابراین باید بتواند حداقل یکی از `trusted_domains` یا `overwrite.cli.url` خود را حل و به آن متصل شود. این خطا ممکن است نتیجه عدم تطابق DNS سمت سرور یا قانون فایروال خروجی باشد.",
+ "Transcribe audio" : "رونوشت صوتی",
+ "Transcribe the things said in an audio" : "رونوشت چیزهای گفته شده در یک فایل صوتی",
+ "Audio input" : "ورودی صوتی",
+ "The audio to transcribe" : "فایل صوتی برای رونوشت",
+ "Transcription" : "رونوشت",
+ "The transcribed text" : "متن رونوشت شده",
+ "Chat with an agent" : "چت با یک عامل",
+ "Chat message" : "پیام چت",
+ "A chat message to send to the agent." : "یک پیام چت برای ارسال به عامل.",
+ "Confirmation" : "تأیید",
+ "Whether to confirm previously requested actions: 0 for denial and 1 for confirmation." : "آیا اقدامات قبلاً درخواست شده را تأیید کنید: 0 برای رد و 1 برای تأیید.",
+ "Conversation token" : "توکن مکالمه",
+ "A token representing the conversation." : "یک توکن نماینده مکالمه.",
+ "Generated response" : "پاسخ تولید شده",
+ "The response from the chat model." : "پاسخ از مدل چت.",
+ "The new conversation token" : "توکن مکالمه جدید",
+ "Send this along with the next interaction." : "این را همراه با تعامل بعدی ارسال کنید.",
+ "Requested actions by the agent" : "اقدامات درخواستی توسط عامل",
+ "Actions that the agent would like to carry out in JSON format." : "اقدامات که عامل مایل به انجام آنها در قالب JSON است.",
+ "Context write" : "نوشتن متنی",
+ "Writes text in a given style based on the provided source material." : "متن را با سبکی مشخص بر اساس محتوای منبع ارائه شده می‌نویسد.",
+ "Writing style" : "سبک نگارش",
+ "Demonstrate a writing style that you would like to immitate" : "یک سبک نگارش را که می‌خواهید تقلید کنید، نشان دهید",
+ "Source material" : "محتوای منبع",
+ "The content that would like to be rewritten in the new writing style" : "محتوایی که می‌خواهید با سبک نگارش جدید بازنویسی شود",
+ "Generated text" : "متن تولید شده",
+ "The generated text with content from the source material in the given style" : "متن تولید شده با محتوای منبع در سبک مشخص شده",
+ "Emoji generator" : "تولیدکننده اموجی",
+ "Takes text and generates a representative emoji for it." : "متن را دریافت کرده و یک اموجی مناسب برای آن تولید می‌کند.",
+ "The text to generate an emoji for" : "متنی که می‌خواهید برای آن اموجی تولید شود",
+ "Generated emoji" : "اموجی تولید شده",
+ "The generated emoji based on the input text" : "اموجی تولید شده بر اساس متن ورودی",
+ "Generate image" : "تولید تصویر",
+ "Generate an image from a text prompt" : "تولید تصویر از یک متن ورودی",
+ "Prompt" : "درخواست",
+ "Describe the image you want to generate" : "تصویری که می‌خواهید تولید شود را توصیف کنید",
+ "Number of images" : "تعداد تصاویر",
+ "How many images to generate" : "چه تعداد تصویر تولید شود",
+ "Output images" : "تصاویر خروجی",
+ "The generated images" : "تصاویر تولید شده",
+ "Generate speech" : "تولید گفتار",
+ "Generate speech from a transcript" : "تولید گفتار از یک رونوشت",
+ "Write transcript that you want the assistant to generate speech from" : "رونوشتی را بنویسید که می‌خواهید دستیار از آن گفتار تولید کند",
+ "Output speech" : "گفتار خروجی",
+ "The generated speech" : "گفتار تولید شده",
+ "Free text to text prompt" : "درخواست متن به متن آزاد",
+ "Runs an arbitrary prompt through a language model that returns a reply" : "یک درخواست دلخواه را از طریق یک مدل زبانی اجرا می‌کند که پاسخی را برمی‌گرداند",
+ "Describe a task that you want the assistant to do or ask a question" : "وظیفه‌ای که می‌خواهید دستیار انجام دهد را توصیف کنید یا سؤالی بپرسید",
+ "Generated reply" : "پاسخ تولید شده",
+ "The generated text from the assistant" : "متن تولید شده توسط دستیار",
+ "Change Tone" : "تغییر لحن",
+ "Change the tone of a piece of text." : "لحن یک قطعه متن را تغییر دهید.",
+ "Write a text that you want the assistant to rewrite in another tone." : "متنی را بنویسید که می‌خواهید دستیار آن را با لحن دیگری بازنویسی کند.",
+ "Desired tone" : "لحن مورد نظر",
+ "In which tone should your text be rewritten?" : "متن شما با چه لحنی بازنویسی شود؟",
+ "The rewritten text in the desired tone, written by the assistant:" : "متن بازنویسی شده با لحن مورد نظر، نوشته شده توسط دستیار:",
+ "Chat" : "چت",
+ "Chat with the assistant" : "چت با دستیار",
+ "System prompt" : "درخواست سیستمی",
+ "Define rules and assumptions that the assistant should follow during the conversation." : "قوانین و فرضیاتی را که دستیار باید در طول مکالمه رعایت کند، تعریف کنید.",
+ "Chat history" : "تاریخچه چت",
+ "The history of chat messages before the current message, starting with a message by the user" : "تاریخچه پیام‌های چت قبل از پیام فعلی، با شروع از یک پیام توسط کاربر",
+ "Response message" : "پیام پاسخ",
+ "The generated response as part of the conversation" : "پاسخ تولید شده به عنوان بخشی از مکالمه",
+ "Chat with tools" : "چت با ابزارها",
+ "Chat with the language model with tool calling support." : "چت با مدل زبانی با پشتیبانی از فراخوانی ابزار.",
+ "Tool message" : "پیام ابزار",
+ "The result of tool calls in the last interaction" : "نتیجه فراخوانی ابزارها در تعامل قبلی",
+ "Available tools" : "ابزارهای موجود",
+ "The available tools in JSON format" : "ابزارهای موجود در قالب JSON",
+ "The response from the chat model" : "پاسخ از مدل چت",
+ "Tool calls" : "فراخوانی ابزار",
+ "Tools call instructions from the model in JSON format" : "دستورالعمل‌های فراخوانی ابزار از مدل در قالب JSON",
+ "Formalize text" : "رسمی کردن متن",
+ "Takes a text and makes it sound more formal" : "یک متن را دریافت کرده و آن را رسمی‌تر می‌کند",
+ "Write a text that you want the assistant to formalize" : "متنی را بنویسید که می‌خواهید دستیار آن را رسمی کند",
+ "Formalized text" : "متن رسمی شده",
+ "The formalized text" : "متن رسمی شده",
+ "Generate a headline" : "تولید یک عنوان",
+ "Generates a possible headline for a text." : "یک عنوان احتمالی برای یک متن تولید می‌کند.",
+ "Original text" : "متن اصلی",
+ "The original text to generate a headline for" : "متن اصلی برای تولید عنوان",
+ "The generated headline" : "عنوان تولید شده",
+ "Proofread" : "ویرایش",
+ "Proofreads a text and lists corrections" : "یک متن را ویرایش کرده و اصلاحات را لیست می‌کند",
"Text" : "متن",
- "Summarize" : "Summarize",
+ "The text to proofread" : "متن برای ویرایش",
+ "Corrections" : "اصلاحات",
+ "The corrections that should be made in your text" : "اصلاحاتی که باید در متن شما انجام شود",
+ "Reformulate text" : "بازنویسی متن",
+ "Takes a text and reformulates it" : "یک متن را دریافت کرده و آن را بازنویسی می‌کند",
+ "Write a text that you want the assistant to reformulate" : "متنی را بنویسید که می‌خواهید دستیار آن را بازنویسی کند",
+ "Reformulated text" : "متن بازنویسی شده",
+ "The reformulated text, written by the assistant" : "متن بازنویسی شده، نوشته شده توسط دستیار",
+ "Simplify text" : "ساده‌سازی متن",
+ "Takes a text and simplifies it" : "یک متن را دریافت کرده و آن را ساده می‌کند",
+ "Write a text that you want the assistant to simplify" : "متنی را بنویسید که می‌خواهید دستیار آن را ساده کند",
+ "Simplified text" : "متن ساده شده",
+ "The simplified text" : "متن ساده شده",
+ "Summarize" : "خلاصه‌سازی",
+ "Summarizes a text" : "یک متن را خلاصه‌سازی می‌کند",
+ "The original text to summarize" : "متن اصلی برای خلاصه‌سازی",
"Summary" : "چکیده",
- "Extract topics" : "Extract topics",
+ "The generated summary" : "خلاصه تولید شده",
+ "Extract topics" : "استخراج موضوعات",
+ "Extracts topics from a text and outputs them separated by commas" : "موضوعات را از یک متن استخراج کرده و با کاما جدا شده خروجی می‌دهد",
+ "The original text to extract topics from" : "متن اصلی برای استخراج موضوعات",
+ "Topics" : "موضوعات",
+ "The list of extracted topics" : "لیست موضوعات استخراج شده",
"Translate" : "ترجمه",
- "Target language" : "Target language",
- "Result" : "شروع به اسکنیک",
- "Free prompt" : "Free prompt",
- "Runs an arbitrary prompt through the language model." : "Runs an arbitrary prompt through the language model.",
- "Generate headline" : "Generate headline",
- "Summarizes text by reducing its length without losing key information." : "Summarizes text by reducing its length without losing key information.",
- "Extracts topics from a text and outputs them separated by commas." : "Extracts topics from a text and outputs them separated by commas.",
+ "Translate text from one language to another" : "ترجمه متن از یک زبان به زبان دیگر",
+ "Origin text" : "متن مبدأ",
+ "The text to translate" : "متن برای ترجمه",
+ "Origin language" : "زبان مبدأ",
+ "The language of the origin text" : "زبان متن مبدأ",
+ "Target language" : "زبان مقصد",
+ "The desired language to translate the origin text in" : "زبان مورد نظر برای ترجمه متن مبدأ",
+ "Result" : "نتیجه",
+ "The translated text" : "متن ترجمه شده",
+ "Free prompt" : "درخواست آزاد",
+ "Runs an arbitrary prompt through the language model." : "یک درخواست دلخواه را از طریق مدل زبانی اجرا می‌کند.",
+ "Generate headline" : "تولید عنوان",
+ "Summarizes text by reducing its length without losing key information." : "متن را با کاهش طول آن و بدون از دست دادن اطلاعات کلیدی، خلاصه‌سازی می‌کند.",
+ "Extracts topics from a text and outputs them separated by commas." : "موضوعات را از یک متن استخراج کرده و با کاما جدا شده خروجی می‌دهد.",
"File is currently busy, please try again later" : "فایل در حال حاضر مشغول است، لطفا مجددا تلاش کنید",
- "Cannot download file" : "نمی‌توان پرونده را بارگرفت"
+ "Cannot download file" : "نمی‌توان پرونده را بارگرفت",
+ "Login is too long" : "نام کاربری بیش از حد طولانی است"
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/fa.json b/lib/l10n/fa.json
index a16f86e6522..7fda24b1e51 100644
--- a/lib/l10n/fa.json
+++ b/lib/l10n/fa.json
@@ -1,25 +1,27 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "نمیتوانید داخل دایرکتوری \"config\" تغییراتی ایجاد کنید",
- "This can usually be fixed by giving the web server write access to the config directory." : "This can usually be fixed by giving the web server write access to the config directory.",
- "But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it." : "But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it.",
+ "This can usually be fixed by giving the web server write access to the config directory." : "این مشکل معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری پیکربندی قابل رفع است.",
+ "But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it." : "اما، اگر ترجیح می‌دهید فایل config.php فقط خواندنی باشد، گزینه \"config_is_read_only\" را در آن به true تنظیم کنید.",
"See %s" : "مشاهده %s",
- "Application %1$s is not present or has a non-compatible version with this server. Please check the apps directory." : "Application %1$s is not present or has a non-compatible version with this server. Please check the apps directory.",
+ "Application %1$s is not present or has a non-compatible version with this server. Please check the apps directory." : "برنامه %1$s موجود نیست یا نسخه‌ای ناسازگار با این سرور دارد. لطفاً دایرکتوری برنامه‌ها را بررسی کنید.",
"Sample configuration detected" : "فایل پیکربندی نمونه پیدا شد",
"It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "تشخیص داده شده است که پیکربندی نمونه کپی شده است. این می تواند نصب شما را خراب کند و پشتیبانی نمی شود. لطفاً قبل از انجام تغییرات در config.php ، اسناد را بخوانید",
- "The page could not be found on the server." : "The page could not be found on the server.",
- "%s email verification" : "%s email verification",
- "Email verification" : "Email verification",
- "Click the following button to confirm your email." : "Click the following button to confirm your email.",
- "Click the following link to confirm your email." : "Click the following link to confirm your email.",
- "Confirm your email" : "Confirm your email",
+ "The page could not be found on the server." : "صفحه در سرور یافت نشد.",
+ "%s email verification" : "تأیید ایمیل %s",
+ "Email verification" : "تأیید ایمیل",
+ "Click the following button to confirm your email." : "برای تأیید ایمیل خود روی دکمه زیر کلیک کنید.",
+ "Click the following link to confirm your email." : "برای تأیید ایمیل خود روی لینک زیر کلیک کنید.",
+ "Confirm your email" : "ایمیل خود را تأیید کنید",
"Other activities" : "سایر فعالیت ها",
- "%1$s and %2$s" : "%1$sو%2$s",
- "%1$s, %2$s and %3$s" : "%1$s،%2$sو%3$s",
- "%1$s, %2$s, %3$s and %4$s" : "%1$s،%2$s،%3$sو%4$s",
- "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s،%2$s،%3$s،%4$sو%5$s",
+ "%1$s and %2$s" : "%1$s و %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s، %2$s و %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s، %2$s، %3$s و %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s، %2$s، %3$s، %4$s و %5$s",
+ "Education bundle" : "بسته آموزشی",
"Enterprise bundle" : "بستهٔ سازمانی",
"Groupware bundle" : "بستهٔ کار گروهی",
"Hub bundle" : "بستهٔ هسته‌ای",
+ "Public sector bundle" : "بسته بخش عمومی",
"Social sharing bundle" : "بستهٔ هم‌رسانی اجتماعی",
"PHP %s or higher is required." : "PHP نسخه‌ی %s یا بالاتر نیاز است.",
"PHP with a version lower than %s is required." : "نیاز به نگارش پایین‌تر از %s پی‌اچ‌پی.",
@@ -33,26 +35,34 @@
"The following platforms are supported: %s" : "بن‌سازه‌های زیر پشتیبانی می‌شوند: %s",
"Server version %s or higher is required." : "نیاز به کارساز با نگارش %s یا بالاتر.",
"Server version %s or lower is required." : "نیاز به کارساز با نگارش %s یا پایین‌تر.",
- "Wiping of device %s has started" : "پاک کردن دستگاه%s شروع شده است",
- "Wiping of device »%s« has started" : "پاک کردن دستگاه%s شروع شده است",
- "»%s« started remote wipe" : "%sپاک کردن از راه دور",
- "Device or application »%s« has started the remote wipe process. You will receive another email once the process has finished" : "دستگاه یا برنامه%s فرآیند پاک کردن از راه دور را آغاز کرده است. پس از اتمام مراحل ، ایمیل دیگری دریافت خواهید کرد",
- "Wiping of device %s has finished" : "پاک کردن دستگاه %sبه پایان رسیده است",
- "Wiping of device »%s« has finished" : "پاک کردن دستگاه %sبه پایان رسیده است",
- "»%s« finished remote wipe" : "%sپاک کردن از راه دور",
- "Device or application »%s« has finished the remote wipe process." : "دستگاه یا برنامه %sفرآیند پاک کردن از راه دور را به پایان رسانده است.",
+ "Logged in account must be an admin, a sub admin or gotten special right to access this setting" : "حساب وارد شده باید یک مدیر، یک مدیر فرعی یا دارای حق دسترسی ویژه برای دسترسی به این تنظیم باشد",
+ "Your current IP address doesn't allow you to perform admin actions" : "آدرس IP فعلی شما اجازه انجام اقدامات مدیریتی را به شما نمی‌دهد",
+ "Logged in account must be an admin or sub admin" : "حساب وارد شده باید یک مدیر یا مدیر فرعی باشد",
+ "Logged in account must be an admin" : "حساب وارد شده باید یک مدیر باشد",
+ "Wiping of device %s has started" : "پاک کردن دستگاه %s آغاز شد",
+ "Wiping of device »%s« has started" : "پاک کردن دستگاه «%s» آغاز شد",
+ "»%s« started remote wipe" : "«%s» پاک کردن از راه دور را آغاز کرد",
+ "Device or application »%s« has started the remote wipe process. You will receive another email once the process has finished" : "دستگاه یا برنامه «%s» فرآیند پاک کردن از راه دور را آغاز کرده است. پس از اتمام مراحل، ایمیل دیگری دریافت خواهید کرد.",
+ "Wiping of device %s has finished" : "پاک کردن دستگاه %s به پایان رسید",
+ "Wiping of device »%s« has finished" : "پاک کردن دستگاه «%s» به پایان رسید",
+ "»%s« finished remote wipe" : "«%s» پاک کردن از راه دور را به پایان رساند",
+ "Device or application »%s« has finished the remote wipe process." : "دستگاه یا برنامه «%s» فرآیند پاک کردن از راه دور را به پایان رسانده است.",
"Remote wipe started" : "پاک کردن از راه دور شروع شد",
- "A remote wipe was started on device %s" : "پاک کردن از راه دور روی دستگاه شروع شد%s",
+ "A remote wipe was started on device %s" : "پاک کردن از راه دور روی دستگاه %s شروع شد",
"Remote wipe finished" : "پاک کردن از راه دور به پایان رسید",
- "The remote wipe on %s has finished" : "پاک کردن از راه دور روی%s کار تمام شد",
+ "The remote wipe on %s has finished" : "پاک کردن از راه دور روی %s کار تمام شد",
"Authentication" : "احراز هویت",
"Unknown filetype" : "نوع فایل ناشناخته",
"Invalid image" : "عکس نامعتبر",
"Avatar image is not square" : "تصویر آواتار مربع نیست",
"Files" : "پوشه‌ها",
"View profile" : "مشاهدهٔ نمایه",
- "_%nh_::_%nh_" : ["%nh","%nh"],
- "Local time: %s" : "Local time: %s",
+ "same time" : "همزمان",
+ "_%nh_::_%nh_" : ["%n ساعت","%n ساعت"],
+ "_%nm_::_%nm_" : ["%n دقیقه","%n دقیقه"],
+ "%s ahead" : "%s جلوتر",
+ "%s behind" : "%s عقب‌تر",
+ "Local time: %s" : "زمان محلی: %s",
"today" : "امروز",
"tomorrow" : "فردا",
"yesterday" : "دیروز",
@@ -73,13 +83,37 @@
"in a few seconds" : "در چند ثانیه",
"seconds ago" : "ثانیه‌ها پیش",
"Empty file" : "پروندهٔ خالی",
- "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ماژول با شناسه:%s وجود ندارد. لطفاً آن را در تنظیمات برنامه خود فعال کنید یا با سرپرست خود تماس بگیرید",
+ "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "ماژول با شناسه: %s وجود ندارد. لطفاً آن را در تنظیمات برنامه خود فعال کنید یا با سرپرست خود تماس بگیرید.",
+ "No file conversion providers available" : "ارائه‌دهنده تبدیل فایل در دسترس نیست",
+ "File is too large to convert" : "فایل برای تبدیل خیلی بزرگ است",
+ "Destination does not match conversion extension" : "مقصد با پسوند تبدیل مطابقت ندارد",
+ "Could not convert file" : "فایل قابل تبدیل نبود",
+ "Destination does not exist" : "مقصد وجود ندارد",
+ "Destination is not creatable" : "مقصد قابل ایجاد نیست",
"Dot files are not allowed" : "پرونده‌های نقطه‌دار مجاز نیستند",
+ "%1$s (renamed)" : "%1$s (تغییر نام داده شد)",
+ "renamed file" : "فایل تغییر نام داده شد",
+ "\"%1$s\" is a forbidden file or folder name." : "«%1$s» یک نام فایل یا پوشه ممنوع است.",
+ "\"%1$s\" is a forbidden prefix for file or folder names." : "«%1$s» یک پیشوند ممنوع برای نام فایل یا پوشه است.",
+ "\"%1$s\" is not allowed inside a file or folder name." : "«%1$s» در نام فایل یا پوشه مجاز نیست.",
+ "\"%1$s\" is a forbidden file type." : "«%1$s» یک نوع فایل ممنوع است.",
+ "Filenames must not end with \"%1$s\"." : "نام فایل‌ها نباید با «%1$s» به پایان برسند.",
+ "Invalid parent path" : "مسیر والد نامعتبر",
"File already exists" : "پرونده از پیش موجود است",
"Invalid path" : "مسیر نامعتبر",
"Failed to create file from template" : "شکست در ایجاد پرونده از قالب",
"Templates" : "قالب‌ها",
+ "Storage %s cannot be moved" : "حافظه %s قابل جابجایی نیست",
+ "Moving a share (%s) into a shared folder is not allowed" : "انتقال یک اشتراک (%s) به یک پوشه مشترک مجاز نیست",
+ "Moving a storage (%s) into a shared folder is not allowed" : "انتقال یک حافظه (%s) به یک پوشه مشترک مجاز نیست",
+ "Moving a share (%s) into another share (%s) is not allowed" : "انتقال یک اشتراک (%s) به اشتراک دیگر (%s) مجاز نیست",
+ "Moving a share (%s) into another storage (%s) is not allowed" : "انتقال یک اشتراک (%s) به حافظه دیگر (%s) مجاز نیست",
+ "Moving a storage (%s) into a share (%s) is not allowed" : "انتقال یک حافظه (%s) به یک اشتراک (%s) مجاز نیست",
+ "Moving a storage (%s) into another storage (%s) is not allowed" : "انتقال یک حافظه (%s) به حافظه دیگر (%s) مجاز نیست",
+ "Path contains invalid segments" : "مسیر شامل بخش‌های نامعتبر است",
+ "Filename is a reserved word" : "نام فایل یک کلمه رزرو شده است",
"Filename contains at least one invalid character" : "نام فایل حداقل دارای یک کاراکتر نامعتبر است",
+ "Filename is too long" : "نام فایل بیش از حد طولانی است",
"Empty filename is not allowed" : "نام فایل نمی‌تواند خالی باشد",
"App \"%s\" cannot be installed because appinfo file cannot be read." : "کارهٔ «%s» به دلیل ناتوانی در خواندن پروندهٔ appinfo نمی‌تواند نصب شود.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "کارهٔ «%s» به دلیل سازگار نبودن با این نگارش از کارساز نمی‌تواند نصب شود.",
@@ -95,8 +129,8 @@
"Accounts" : "حساب‌ها",
"Email" : "رایانامه",
"Mail %s" : "نامه به %s",
- "Fediverse" : "Fediverse",
- "View %s on the fediverse" : "View %s on the fediverse",
+ "Fediverse" : "فدیورس",
+ "View %s on the fediverse" : "مشاهده %s در فدیورس",
"Phone" : "تلفن",
"Call %s" : "تماس با %s",
"Twitter" : "توییتر",
@@ -106,35 +140,87 @@
"Address" : "نشانی",
"Profile picture" : "تصویر نمایه",
"About" : "درباره",
- "Display name" : "Display name",
+ "Display name" : "نام نمایشی",
"Headline" : "عنوان",
"Organisation" : "سازمان",
"Role" : "نقش",
+ "Pronouns" : "ضمایر",
+ "Unknown account" : "حساب ناشناخته",
"Additional settings" : "تنظیمات اضافی",
+ "Enter the database Login and name for %s" : "نام کاربری و نام پایگاه داده را برای %s وارد کنید",
+ "Enter the database Login for %s" : "نام کاربری پایگاه داده را برای %s وارد کنید",
"Enter the database name for %s" : "ورود نام پایگاه داده برای %s",
"You cannot use dots in the database name %s" : "نمی‌توانید در در نام پایگاه دادهٔ %s از نقطه استفاده کنید",
+ "MySQL Login and/or password not valid" : "نام کاربری و/یا رمز عبور MySQL نامعتبر است",
"You need to enter details of an existing account." : "لازم است جزییات یک حساب موحود را وارد کنید.",
"Oracle connection could not be established" : "ارتباط اراکل نمیتواند برقرار باشد.",
+ "Oracle Login and/or password not valid" : "نام کاربری و/یا رمز عبور Oracle نامعتبر است",
+ "PostgreSQL Login and/or password not valid" : "نام کاربری و/یا رمز عبور PostgreSQL نامعتبر است",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk!" : "Mac OS X پشتیبانی نمی‌شود و %s روی این پلتفرم به درستی کار نخواهد کرد. با مسئولیت خودتان از آن استفاده کنید!",
"For the best results, please consider using a GNU/Linux server instead." : "برای بهترین نتیجه، استفاده از یک کارساز گنو/لینوکسی را در نظر داشته باشید.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "به نظر می رسد%s که این نمونه در یک محیط PHP 32 بیتی در حال اجرا است و open_baseir در php.ini پیکربندی شده است. این مسئله به پرونده هایی با بیش از 4 گیگ منجر می شود و بسیار دلسرد می شود",
- "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "لطفاً تنظیمات open_baseir را درون php.ini خود حذف کنید یا به PHP 64 بیتی تغییر دهید.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "به نظر می رسد %s که این نمونه در یک محیط PHP 32 بیتی در حال اجرا است و open_basedir در php.ini پیکربندی شده است. این مسئله به پرونده هایی با بیش از 4 گیگ منجر می شود و بسیار دلسرد می شود.",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "لطفاً تنظیمات open_basedir را درون php.ini خود حذف کنید یا به PHP 64 بیتی تغییر دهید.",
+ "Set an admin Login." : "یک نام کاربری برای مدیر تنظیم کنید.",
"Set an admin password." : "یک رمزعبور برای مدیر تنظیم نمایید.",
- "Cannot create or write into the data directory %s" : "Cannot create or write into the data directory %s",
- "Sharing backend %s must implement the interface OCP\\Share_Backend" : "به اشتراک گذاشتن باطن باید رابط OCP \\ Share_Backend %sرا پیاده سازی کند",
- "Sharing backend %s not found" : "به اشتراک گذاشتن باطن%s یافت نشد",
- "Sharing backend for %s not found" : "به اشتراک گذاشتن باطن برای%s یافت نشد",
+ "Cannot create or write into the data directory %s" : "نمی‌توان در دایرکتوری داده %s ایجاد یا نوشت",
+ "Sharing backend %s must implement the interface OCP\\Share_Backend" : "بک‌اند اشتراک‌گذاری %s باید رابط OCP\\Share_Backend را پیاده‌سازی کند",
+ "Sharing backend %s not found" : "بک‌اند اشتراک‌گذاری %s یافت نشد",
+ "Sharing backend for %s not found" : "بک‌اند اشتراک‌گذاری برای %s یافت نشد",
+ "%1$s shared %2$s with you" : "%1$s %2$s را با شما به اشتراک گذاشت",
+ "Open %s" : "باز کردن %s",
"%1$s via %2$s" : "%1$s از طریق %2$s",
+ "%1$s shared %2$s with you and wants to add:" : "%1$s %2$s را با شما به اشتراک گذاشت و می‌خواهد اضافه کند:",
+ "%1$s shared %2$s with you and wants to add" : "%1$s %2$s را با شما به اشتراک گذاشت و می‌خواهد اضافه کند",
+ "%s added a note to a file shared with you" : "%s یک یادداشت به فایلی که با شما به اشتراک گذاشته شده است اضافه کرد",
+ "Passwords are enforced for link and mail shares" : "رمزهای عبور برای اشتراک‌گذاری لینک و ایمیل اجباری هستند",
+ "Share recipient is not a valid user" : "گیرنده اشتراک یک کاربر معتبر نیست",
+ "Share recipient is not a valid group" : "گیرنده اشتراک یک گروه معتبر نیست",
+ "Share recipient should be empty" : "گیرنده اشتراک باید خالی باشد",
+ "Share recipient should not be empty" : "گیرنده اشتراک نباید خالی باشد",
+ "Share recipient is not a valid circle" : "گیرنده اشتراک یک دایره معتبر نیست",
"Unknown share type" : "نوع اشتراک ناشناخته",
- "You are not allowed to share %s" : "شما مجاز به اشتراک گذاری نیستید%s",
- "Cannot increase permissions of %s" : "Cannot increase permissions of %s",
- "Files cannot be shared with delete permissions" : "Files cannot be shared with delete permissions",
- "Files cannot be shared with create permissions" : "Files cannot be shared with create permissions",
+ "Share initiator must be set" : "شروع‌کننده اشتراک باید تنظیم شود",
+ "Cannot share with yourself" : "نمی‌توانید با خودتان به اشتراک بگذارید",
+ "Shared path must be set" : "مسیر مشترک باید تنظیم شود",
+ "Shared path must be either a file or a folder" : "مسیر مشترک باید یک فایل یا یک پوشه باشد",
+ "You cannot share your root folder" : "نمی‌توانید پوشه ریشه خود را به اشتراک بگذارید",
+ "You are not allowed to share %s" : "شما مجاز به اشتراک گذاری %s نیستید",
+ "Valid permissions are required for sharing" : "مجوزهای معتبر برای اشتراک‌گذاری لازم است",
+ "File shares cannot have create or delete permissions" : "اشتراک‌گذاری فایل‌ها نمی‌تواند مجوزهای ایجاد یا حذف داشته باشد",
+ "Cannot increase permissions of %s" : "نمی‌توان مجوزهای %s را افزایش داد",
+ "Shares need at least read permissions" : "اشتراک‌گذاری‌ها حداقل به مجوزهای خواندن نیاز دارند",
+ "Files cannot be shared with delete permissions" : "فایل‌ها را نمی‌توان با مجوزهای حذف به اشتراک گذاشت",
+ "Files cannot be shared with create permissions" : "فایل‌ها را نمی‌توان با مجوزهای ایجاد به اشتراک گذاشت",
"Expiration date is in the past" : "تاریخ انقضا در گذشته است",
- "_Cannot set expiration date more than %n day in the future_::_Cannot set expiration date more than %n days in the future_" : ["Cannot set expiration date more than %n day in the future","Cannot set expiration date more than %n days in the future"],
- "Sharing is only allowed with group members" : "Sharing is only allowed with group members",
+ "Expiration date is enforced" : "تاریخ انقضا اجباری است",
+ "_Cannot set expiration date more than %n day in the future_::_Cannot set expiration date more than %n days in the future_" : ["نمی‌توان تاریخ انقضا را بیش از %n روز در آینده تنظیم کرد","نمی‌توان تاریخ انقضا را بیش از %n روز در آینده تنظیم کرد"],
+ "Sharing is only allowed with group members" : "اشتراک‌گذاری فقط با اعضای گروه مجاز است",
+ "Sharing %s failed, because this item is already shared with the account %s" : "اشتراک‌گذاری %s ناموفق بود، زیرا این مورد قبلاً با حساب %s به اشتراک گذاشته شده است",
+ "Group sharing is now allowed" : "اشتراک‌گذاری گروهی اکنون مجاز است",
+ "Sharing is only allowed within your own groups" : "اشتراک‌گذاری فقط در گروه‌های خودتان مجاز است",
+ "Path is already shared with this group" : "این مسیر قبلاً با این گروه به اشتراک گذاشته شده است",
+ "Link sharing is not allowed" : "اشتراک‌گذاری لینک مجاز نیست",
+ "Public upload is not allowed" : "بارگذاری عمومی مجاز نیست",
+ "You cannot share a folder that contains other shares" : "نمی‌توانید پوشه‌ای را به اشتراک بگذارید که حاوی اشتراک‌های دیگر است",
+ "Sharing is disabled" : "اشتراک‌گذاری غیرفعال است",
+ "Sharing is disabled for you" : "اشتراک‌گذاری برای شما غیرفعال است",
+ "Cannot share with the share owner" : "نمی‌توان با صاحب اشتراک به اشتراک گذاشت",
+ "Share does not have a full ID" : "اشتراک شناسه کامل ندارد",
+ "Cannot change share type" : "نمی‌توان نوع اشتراک را تغییر داد",
+ "Can only update recipient on user shares" : "فقط می‌توان گیرنده را در اشتراک‌های کاربر به‌روزرسانی کرد",
+ "Cannot enable sending the password by Talk with an empty password" : "نمی‌توان ارسال رمز عبور از طریق Talk را با رمز عبور خالی فعال کرد",
+ "Cannot enable sending the password by Talk without setting a new password" : "نمی‌توان ارسال رمز عبور از طریق Talk را بدون تنظیم رمز عبور جدید فعال کرد",
+ "Cannot disable sending the password by Talk without setting a new password" : "نمی‌توان ارسال رمز عبور از طریق Talk را بدون تنظیم رمز عبور جدید غیرفعال کرد",
+ "Share provider does not support accepting" : "ارائه‌دهنده اشتراک از پذیرش پشتیبانی نمی‌کند",
+ "Cannot change target of link share" : "نمی‌توان مقصد اشتراک لینک را تغییر داد",
+ "Invalid share recipient" : "گیرنده اشتراک نامعتبر است",
+ "Group \"%s\" does not exist" : "گروه «%s» وجود ندارد",
"The requested share does not exist anymore" : "سهم درخواست شده دیگر وجود ندارد",
- "The user was not created because the user limit has been reached. Check your notifications to learn more." : "The user was not created because the user limit has been reached. Check your notifications to learn more.",
+ "The requested share comes from a disabled user" : "اشتراک درخواستی از یک کاربر غیرفعال است",
+ "The user was not created because the user limit has been reached. Check your notifications to learn more." : "کاربر ایجاد نشد زیرا محدودیت کاربر به پایان رسیده است. برای اطلاعات بیشتر اعلان‌های خود را بررسی کنید.",
"Could not find category \"%s\"" : "دسته بندی %s یافت نشد",
+ "Input text" : "متن ورودی",
+ "The input text" : "متن ورودی",
"Sunday" : "یک‌شنبه",
"Monday" : "دوشنبه",
"Tuesday" : "سه‌شنبه",
@@ -181,6 +267,15 @@
"Nov." : "نو.",
"Dec." : "دس.",
"A valid password must be provided" : "رمز عبور صحیح باید وارد شود",
+ "The Login is already being used" : "نام کاربری قبلاً استفاده شده است",
+ "Could not create account" : "حساب کاربری ایجاد نشد",
+ "Only the following characters are allowed in an Login: \"a-z\", \"A-Z\", \"0-9\", spaces and \"_.@-'\"" : "فقط کاراکترهای زیر در نام کاربری مجاز هستند: \"a-z\", \"A-Z\", \"0-9\", فاصله و \"_.@-'\"",
+ "A valid Login must be provided" : "یک نام کاربری معتبر باید ارائه شود",
+ "Login contains whitespace at the beginning or at the end" : "نام کاربری حاوی فاصله در ابتدا یا انتها است",
+ "Login must not consist of dots only" : "نام کاربری نباید فقط از نقطه تشکیل شده باشد",
+ "Username is too long" : "نام کاربری بیش از حد طولانی است",
+ "Login is invalid because files already exist for this user" : "نام کاربری نامعتبر است زیرا فایل‌ها برای این کاربر از قبل وجود دارند",
+ "Account disabled" : "حساب کاربری غیرفعال است",
"Login canceled by app" : "ورود به دست کاره لغو شد",
"App \"%1$s\" cannot be installed because the following dependencies are not fulfilled: %2$s" : "کارهٔ «%1$s» نمی‌تواند نصب شود؛ چرا که وابستگی زیر تأمین نشده: %2$s",
"a safe home for all your data" : "خانه‌ای امن برای تمامی داده‌هایتان",
@@ -188,60 +283,173 @@
"Authentication error" : "خطا در اعتبار سنجی",
"Token expired. Please reload page." : "Token منقضی شده است. لطفا دوباره صفحه را بارگذاری نمایید.",
"No database drivers (sqlite, mysql, or postgresql) installed." : "هیچ درایور پایگاه داده (sqlite ، mysql یا postgresql) نصب نشده است.",
- "Cannot write into \"config\" directory." : "Cannot write into \"config\" directory.",
- "This can usually be fixed by giving the web server write access to the config directory. See %s" : "This can usually be fixed by giving the web server write access to the config directory. See %s",
- "Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "یا اگر ترجیح می دهید پرونده config.php را فقط بخوانید ، گزینه \"config_is_read_only\" را در آن تنظیم کنید. دیدن%s",
- "Cannot write into \"apps\" directory." : "Cannot write into \"apps\" directory.",
- "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file.",
- "Cannot create \"data\" directory." : "Cannot create \"data\" directory.",
- "This can usually be fixed by giving the web server write access to the root directory. See %s" : "This can usually be fixed by giving the web server write access to the root directory. See %s",
- "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "Permissions can usually be fixed by giving the web server write access to the root directory. See %s.",
- "Your data directory is not writable." : "Your data directory is not writable.",
- "Setting locale to %s failed." : "Setting locale to %s failed.",
- "Please install one of these locales on your system and restart your web server." : "Please install one of these locales on your system and restart your web server.",
+ "Cannot write into \"config\" directory." : "نمی‌توان در دایرکتوری «config» نوشت.",
+ "This can usually be fixed by giving the web server write access to the config directory. See %s" : "این مشکل معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری پیکربندی قابل رفع است. مشاهده %s",
+ "Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "یا اگر ترجیح می‌دهید فایل config.php فقط خواندنی باشد، گزینه \"config_is_read_only\" را در آن به true تنظیم کنید. مشاهده %s",
+ "Cannot write into \"apps\" directory." : "نمی‌توان در دایرکتوری «apps» نوشت.",
+ "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "این مشکل معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری برنامه‌ها یا غیرفعال کردن فروشگاه برنامه در فایل پیکربندی قابل رفع است.",
+ "Cannot create \"data\" directory." : "نمی‌توان دایرکتوری «data» را ایجاد کرد.",
+ "This can usually be fixed by giving the web server write access to the root directory. See %s" : "این مشکل معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری ریشه قابل رفع است. مشاهده %s",
+ "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : "مجوزها معمولاً با دادن دسترسی نوشتن به وب‌سرور در دایرکتوری ریشه قابل رفع هستند. مشاهده %s.",
+ "Your data directory is not writable." : "دایرکتوری داده شما قابل نوشتن نیست.",
+ "Setting locale to %s failed." : "تنظیم محلی به %s ناموفق بود.",
+ "Please install one of these locales on your system and restart your web server." : "لطفاً یکی از این محلی‌ها را روی سیستم خود نصب کرده و وب‌سرور خود را مجدداً راه‌اندازی کنید.",
"PHP module %s not installed." : "ماژول PHP %s نصب نشده است.",
"Please ask your server administrator to install the module." : "لطفا از مدیر سیستم بخواهید تا ماژول را نصب کند.",
- "PHP setting \"%s\" is not set to \"%s\"." : "تنظیمات PHP%s تنظیم نشده است%s",
+ "PHP setting \"%s\" is not set to \"%s\"." : "تنظیمات PHP «%s» روی «%s» تنظیم نشده است.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "تنظیم این تنظیمات در php.ini باعث می شود Nextcloud دوباره اجرا شود",
- "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>.",
- "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini.",
- "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ظاهراً برای خنثی کردن بلوک های اسناد درون خطی تنظیم شده است. این کار چندین برنامه اصلی را غیرقابل دسترسی خواهد کرد.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "این احتمالاً توسط حافظه پنهان / کش مانند Zend OPcache یا eAccelerator ایجاد شده است.",
- "PHP modules have been installed, but they are still listed as missing?" : "ماژول های پی اچ پی نصب شده اند ، اما هنوز هم به عنوان مفقود شده ذکر شده اند؟",
- "Please ask your server administrator to restart the web server." : "لطفاً از سرور سرور خود بخواهید که وب سرور را مجدداً راه اندازی کند.",
- "The required %s config variable is not configured in the config.php file." : "The required %s config variable is not configured in the config.php file.",
- "Please ask your server administrator to check the Nextcloud configuration." : "Please ask your server administrator to check the Nextcloud configuration.",
- "Your data directory must be an absolute path." : "Your data directory must be an absolute path.",
- "Check the value of \"datadirectory\" in your configuration." : "Check the value of \"datadirectory\" in your configuration.",
- "Your data directory is invalid." : "Your data directory is invalid.",
- "Action \"%s\" not supported or implemented." : "عملی%s پشتیبانی یا اجرا نشده است.",
- "Authentication failed, wrong token or provider ID given" : "تأیید اعتبار انجام نشد ، نشانه اشتباه یا شناسه ارائه دهنده داده شد",
- "Parameters missing in order to complete the request. Missing Parameters: \"%s\"" : "پارامترهای موجود برای تکمیل درخواست. پارامترهای موجود نیست%s",
- "ID \"%1$s\" already used by cloud federation provider \"%2$s\"" : "شناسه%1$s قبلاً توسط ارائه دهنده فدراسیون ابر استفاده شده است%2$s",
- "Cloud Federation Provider with ID: \"%s\" does not exist." : "ارائه دهنده فدراسیون Cloud با شناسه:%s وجود ندارد.",
- "Could not obtain lock type %d on \"%s\"." : "نمی توان نوع%d قفل را به دست آورد%s",
- "Storage unauthorized. %s" : "ذخیره سازی غیر مجاز.%s",
- "Storage incomplete configuration. %s" : "پیکربندی ناقص ذخیره سازی.%s<br>",
- "Storage connection error. %s" : "خطای اتصال ذخیره سازی%s",
- "Storage is temporarily not available" : "ذخیره سازی به طور موقت در دسترس نیست",
- "Storage connection timeout. %s" : "مدت زمان اتصال ذخیره سازی%s",
- "Confirmation" : "Confirmation",
- "Prompt" : "Prompt",
- "Chat" : "Chat",
- "Generates a possible headline for a text." : "Generates a possible headline for a text.",
+ "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> به جای مقدار مورد انتظار <code>0</code> روی <code>%s</code> تنظیم شده است.",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "برای رفع این مشکل، <code>mbstring.func_overload</code> را در php.ini خود روی <code>0</code> تنظیم کنید.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ظاهراً برای حذف بلوک‌های مستندات درون‌خطی تنظیم شده است. این کار چندین برنامه اصلی را غیرقابل دسترس خواهد کرد.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "این احتمالاً توسط حافظه پنهان/شتاب‌دهنده‌ای مانند Zend OPcache یا eAccelerator ایجاد شده است.",
+ "PHP modules have been installed, but they are still listed as missing?" : "ماژول‌های PHP نصب شده‌اند، اما همچنان به عنوان گم‌شده لیست شده‌اند؟",
+ "Please ask your server administrator to restart the web server." : "لطفاً از مدیر سرور خود بخواهید که وب‌سرور را مجدداً راه‌اندازی کند.",
+ "The required %s config variable is not configured in the config.php file." : "متغیر پیکربندی مورد نیاز %s در فایل config.php پیکربندی نشده است.",
+ "Please ask your server administrator to check the Nextcloud configuration." : "لطفاً از مدیر سرور خود بخواهید پیکربندی Nextcloud را بررسی کند.",
+ "Your data directory is readable by other people." : "دایرکتوری داده شما برای دیگران قابل خواندن است.",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other people." : "لطفاً مجوزها را به 0770 تغییر دهید تا دایرکتوری توسط افراد دیگر قابل فهرست شدن نباشد.",
+ "Your data directory must be an absolute path." : "دایرکتوری داده شما باید یک مسیر مطلق باشد.",
+ "Check the value of \"datadirectory\" in your configuration." : "مقدار \"datadirectory\" را در پیکربندی خود بررسی کنید.",
+ "Your data directory is invalid." : "دایرکتوری داده شما نامعتبر است.",
+ "Ensure there is a file called \"%1$s\" in the root of the data directory. It should have the content: \"%2$s\"" : "اطمینان حاصل کنید که فایلی به نام «%1$s» در ریشه دایرکتوری داده وجود دارد. این فایل باید حاوی: «%2$s» باشد",
+ "Action \"%s\" not supported or implemented." : "عملیات «%s» پشتیبانی یا اجرا نشده است.",
+ "Authentication failed, wrong token or provider ID given" : "تأیید اعتبار انجام نشد، نشانه اشتباه یا شناسه ارائه دهنده داده شد",
+ "Parameters missing in order to complete the request. Missing Parameters: \"%s\"" : "پارامترهای مورد نیاز برای تکمیل درخواست وجود ندارند. پارامترهای از دست رفته: «%s»",
+ "ID \"%1$s\" already used by cloud federation provider \"%2$s\"" : "شناسه «%1$s» قبلاً توسط ارائه‌دهنده فدراسیون ابری «%2$s» استفاده شده است",
+ "Cloud Federation Provider with ID: \"%s\" does not exist." : "ارائه‌دهنده فدراسیون ابری با شناسه: «%s» وجود ندارد.",
+ "Could not obtain lock type %d on \"%s\"." : "نمی‌توان قفل از نوع %d را روی «%s» به دست آورد.",
+ "Storage unauthorized. %s" : "دسترسی به حافظه غیرمجاز است. %s",
+ "Storage incomplete configuration. %s" : "پیکربندی حافظه ناقص است. %s",
+ "Storage connection error. %s" : "خطای اتصال حافظه. %s",
+ "Storage is temporarily not available" : "حافظه به طور موقت در دسترس نیست",
+ "Storage connection timeout. %s" : "مهلت اتصال حافظه به پایان رسید. %s",
+ "To allow this check to run you have to make sure that your Web server can connect to itself. Therefore it must be able to resolve and connect to at least one of its `trusted_domains` or the `overwrite.cli.url`. This failure may be the result of a server-side DNS mismatch or outbound firewall rule." : "برای اجرای این بررسی، باید مطمئن شوید که وب‌سرور شما می‌تواند به خودش متصل شود. بنابراین باید بتواند حداقل یکی از `trusted_domains` یا `overwrite.cli.url` خود را حل و به آن متصل شود. این خطا ممکن است نتیجه عدم تطابق DNS سمت سرور یا قانون فایروال خروجی باشد.",
+ "Transcribe audio" : "رونوشت صوتی",
+ "Transcribe the things said in an audio" : "رونوشت چیزهای گفته شده در یک فایل صوتی",
+ "Audio input" : "ورودی صوتی",
+ "The audio to transcribe" : "فایل صوتی برای رونوشت",
+ "Transcription" : "رونوشت",
+ "The transcribed text" : "متن رونوشت شده",
+ "Chat with an agent" : "چت با یک عامل",
+ "Chat message" : "پیام چت",
+ "A chat message to send to the agent." : "یک پیام چت برای ارسال به عامل.",
+ "Confirmation" : "تأیید",
+ "Whether to confirm previously requested actions: 0 for denial and 1 for confirmation." : "آیا اقدامات قبلاً درخواست شده را تأیید کنید: 0 برای رد و 1 برای تأیید.",
+ "Conversation token" : "توکن مکالمه",
+ "A token representing the conversation." : "یک توکن نماینده مکالمه.",
+ "Generated response" : "پاسخ تولید شده",
+ "The response from the chat model." : "پاسخ از مدل چت.",
+ "The new conversation token" : "توکن مکالمه جدید",
+ "Send this along with the next interaction." : "این را همراه با تعامل بعدی ارسال کنید.",
+ "Requested actions by the agent" : "اقدامات درخواستی توسط عامل",
+ "Actions that the agent would like to carry out in JSON format." : "اقدامات که عامل مایل به انجام آنها در قالب JSON است.",
+ "Context write" : "نوشتن متنی",
+ "Writes text in a given style based on the provided source material." : "متن را با سبکی مشخص بر اساس محتوای منبع ارائه شده می‌نویسد.",
+ "Writing style" : "سبک نگارش",
+ "Demonstrate a writing style that you would like to immitate" : "یک سبک نگارش را که می‌خواهید تقلید کنید، نشان دهید",
+ "Source material" : "محتوای منبع",
+ "The content that would like to be rewritten in the new writing style" : "محتوایی که می‌خواهید با سبک نگارش جدید بازنویسی شود",
+ "Generated text" : "متن تولید شده",
+ "The generated text with content from the source material in the given style" : "متن تولید شده با محتوای منبع در سبک مشخص شده",
+ "Emoji generator" : "تولیدکننده اموجی",
+ "Takes text and generates a representative emoji for it." : "متن را دریافت کرده و یک اموجی مناسب برای آن تولید می‌کند.",
+ "The text to generate an emoji for" : "متنی که می‌خواهید برای آن اموجی تولید شود",
+ "Generated emoji" : "اموجی تولید شده",
+ "The generated emoji based on the input text" : "اموجی تولید شده بر اساس متن ورودی",
+ "Generate image" : "تولید تصویر",
+ "Generate an image from a text prompt" : "تولید تصویر از یک متن ورودی",
+ "Prompt" : "درخواست",
+ "Describe the image you want to generate" : "تصویری که می‌خواهید تولید شود را توصیف کنید",
+ "Number of images" : "تعداد تصاویر",
+ "How many images to generate" : "چه تعداد تصویر تولید شود",
+ "Output images" : "تصاویر خروجی",
+ "The generated images" : "تصاویر تولید شده",
+ "Generate speech" : "تولید گفتار",
+ "Generate speech from a transcript" : "تولید گفتار از یک رونوشت",
+ "Write transcript that you want the assistant to generate speech from" : "رونوشتی را بنویسید که می‌خواهید دستیار از آن گفتار تولید کند",
+ "Output speech" : "گفتار خروجی",
+ "The generated speech" : "گفتار تولید شده",
+ "Free text to text prompt" : "درخواست متن به متن آزاد",
+ "Runs an arbitrary prompt through a language model that returns a reply" : "یک درخواست دلخواه را از طریق یک مدل زبانی اجرا می‌کند که پاسخی را برمی‌گرداند",
+ "Describe a task that you want the assistant to do or ask a question" : "وظیفه‌ای که می‌خواهید دستیار انجام دهد را توصیف کنید یا سؤالی بپرسید",
+ "Generated reply" : "پاسخ تولید شده",
+ "The generated text from the assistant" : "متن تولید شده توسط دستیار",
+ "Change Tone" : "تغییر لحن",
+ "Change the tone of a piece of text." : "لحن یک قطعه متن را تغییر دهید.",
+ "Write a text that you want the assistant to rewrite in another tone." : "متنی را بنویسید که می‌خواهید دستیار آن را با لحن دیگری بازنویسی کند.",
+ "Desired tone" : "لحن مورد نظر",
+ "In which tone should your text be rewritten?" : "متن شما با چه لحنی بازنویسی شود؟",
+ "The rewritten text in the desired tone, written by the assistant:" : "متن بازنویسی شده با لحن مورد نظر، نوشته شده توسط دستیار:",
+ "Chat" : "چت",
+ "Chat with the assistant" : "چت با دستیار",
+ "System prompt" : "درخواست سیستمی",
+ "Define rules and assumptions that the assistant should follow during the conversation." : "قوانین و فرضیاتی را که دستیار باید در طول مکالمه رعایت کند، تعریف کنید.",
+ "Chat history" : "تاریخچه چت",
+ "The history of chat messages before the current message, starting with a message by the user" : "تاریخچه پیام‌های چت قبل از پیام فعلی، با شروع از یک پیام توسط کاربر",
+ "Response message" : "پیام پاسخ",
+ "The generated response as part of the conversation" : "پاسخ تولید شده به عنوان بخشی از مکالمه",
+ "Chat with tools" : "چت با ابزارها",
+ "Chat with the language model with tool calling support." : "چت با مدل زبانی با پشتیبانی از فراخوانی ابزار.",
+ "Tool message" : "پیام ابزار",
+ "The result of tool calls in the last interaction" : "نتیجه فراخوانی ابزارها در تعامل قبلی",
+ "Available tools" : "ابزارهای موجود",
+ "The available tools in JSON format" : "ابزارهای موجود در قالب JSON",
+ "The response from the chat model" : "پاسخ از مدل چت",
+ "Tool calls" : "فراخوانی ابزار",
+ "Tools call instructions from the model in JSON format" : "دستورالعمل‌های فراخوانی ابزار از مدل در قالب JSON",
+ "Formalize text" : "رسمی کردن متن",
+ "Takes a text and makes it sound more formal" : "یک متن را دریافت کرده و آن را رسمی‌تر می‌کند",
+ "Write a text that you want the assistant to formalize" : "متنی را بنویسید که می‌خواهید دستیار آن را رسمی کند",
+ "Formalized text" : "متن رسمی شده",
+ "The formalized text" : "متن رسمی شده",
+ "Generate a headline" : "تولید یک عنوان",
+ "Generates a possible headline for a text." : "یک عنوان احتمالی برای یک متن تولید می‌کند.",
+ "Original text" : "متن اصلی",
+ "The original text to generate a headline for" : "متن اصلی برای تولید عنوان",
+ "The generated headline" : "عنوان تولید شده",
+ "Proofread" : "ویرایش",
+ "Proofreads a text and lists corrections" : "یک متن را ویرایش کرده و اصلاحات را لیست می‌کند",
"Text" : "متن",
- "Summarize" : "Summarize",
+ "The text to proofread" : "متن برای ویرایش",
+ "Corrections" : "اصلاحات",
+ "The corrections that should be made in your text" : "اصلاحاتی که باید در متن شما انجام شود",
+ "Reformulate text" : "بازنویسی متن",
+ "Takes a text and reformulates it" : "یک متن را دریافت کرده و آن را بازنویسی می‌کند",
+ "Write a text that you want the assistant to reformulate" : "متنی را بنویسید که می‌خواهید دستیار آن را بازنویسی کند",
+ "Reformulated text" : "متن بازنویسی شده",
+ "The reformulated text, written by the assistant" : "متن بازنویسی شده، نوشته شده توسط دستیار",
+ "Simplify text" : "ساده‌سازی متن",
+ "Takes a text and simplifies it" : "یک متن را دریافت کرده و آن را ساده می‌کند",
+ "Write a text that you want the assistant to simplify" : "متنی را بنویسید که می‌خواهید دستیار آن را ساده کند",
+ "Simplified text" : "متن ساده شده",
+ "The simplified text" : "متن ساده شده",
+ "Summarize" : "خلاصه‌سازی",
+ "Summarizes a text" : "یک متن را خلاصه‌سازی می‌کند",
+ "The original text to summarize" : "متن اصلی برای خلاصه‌سازی",
"Summary" : "چکیده",
- "Extract topics" : "Extract topics",
+ "The generated summary" : "خلاصه تولید شده",
+ "Extract topics" : "استخراج موضوعات",
+ "Extracts topics from a text and outputs them separated by commas" : "موضوعات را از یک متن استخراج کرده و با کاما جدا شده خروجی می‌دهد",
+ "The original text to extract topics from" : "متن اصلی برای استخراج موضوعات",
+ "Topics" : "موضوعات",
+ "The list of extracted topics" : "لیست موضوعات استخراج شده",
"Translate" : "ترجمه",
- "Target language" : "Target language",
- "Result" : "شروع به اسکنیک",
- "Free prompt" : "Free prompt",
- "Runs an arbitrary prompt through the language model." : "Runs an arbitrary prompt through the language model.",
- "Generate headline" : "Generate headline",
- "Summarizes text by reducing its length without losing key information." : "Summarizes text by reducing its length without losing key information.",
- "Extracts topics from a text and outputs them separated by commas." : "Extracts topics from a text and outputs them separated by commas.",
+ "Translate text from one language to another" : "ترجمه متن از یک زبان به زبان دیگر",
+ "Origin text" : "متن مبدأ",
+ "The text to translate" : "متن برای ترجمه",
+ "Origin language" : "زبان مبدأ",
+ "The language of the origin text" : "زبان متن مبدأ",
+ "Target language" : "زبان مقصد",
+ "The desired language to translate the origin text in" : "زبان مورد نظر برای ترجمه متن مبدأ",
+ "Result" : "نتیجه",
+ "The translated text" : "متن ترجمه شده",
+ "Free prompt" : "درخواست آزاد",
+ "Runs an arbitrary prompt through the language model." : "یک درخواست دلخواه را از طریق مدل زبانی اجرا می‌کند.",
+ "Generate headline" : "تولید عنوان",
+ "Summarizes text by reducing its length without losing key information." : "متن را با کاهش طول آن و بدون از دست دادن اطلاعات کلیدی، خلاصه‌سازی می‌کند.",
+ "Extracts topics from a text and outputs them separated by commas." : "موضوعات را از یک متن استخراج کرده و با کاما جدا شده خروجی می‌دهد.",
"File is currently busy, please try again later" : "فایل در حال حاضر مشغول است، لطفا مجددا تلاش کنید",
- "Cannot download file" : "نمی‌توان پرونده را بارگرفت"
+ "Cannot download file" : "نمی‌توان پرونده را بارگرفت",
+ "Login is too long" : "نام کاربری بیش از حد طولانی است"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 4c531b76411..9c247440a40 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -274,6 +274,7 @@ OC.L10N.register(
"A valid Login must be provided" : "Un identifiant valide doit être saisi",
"Login contains whitespace at the beginning or at the end" : "L'identifiant contient des espaces au début ou à la fin",
"Login must not consist of dots only" : "L'identifiant ne doit pas être composé uniquement de points",
+ "Username is too long" : "Le nom d'utilisateur est trop long",
"Login is invalid because files already exist for this user" : "L’identifiant n'est pas valide car des fichiers existent déjà pour cet utilisateur",
"Account disabled" : "Compte désactivé",
"Login canceled by app" : "L'authentification a été annulée par l'application",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index b7fb111568a..422df8e5cdc 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -272,6 +272,7 @@
"A valid Login must be provided" : "Un identifiant valide doit être saisi",
"Login contains whitespace at the beginning or at the end" : "L'identifiant contient des espaces au début ou à la fin",
"Login must not consist of dots only" : "L'identifiant ne doit pas être composé uniquement de points",
+ "Username is too long" : "Le nom d'utilisateur est trop long",
"Login is invalid because files already exist for this user" : "L’identifiant n'est pas valide car des fichiers existent déjà pour cet utilisateur",
"Account disabled" : "Compte désactivé",
"Login canceled by app" : "L'authentification a été annulée par l'application",
diff --git a/lib/l10n/ga.js b/lib/l10n/ga.js
index 42607da43bc..a2d3355d7b1 100644
--- a/lib/l10n/ga.js
+++ b/lib/l10n/ga.js
@@ -275,7 +275,6 @@ OC.L10N.register(
"A valid Login must be provided" : "Ní mór Logáil Isteach bailí a sholáthar",
"Login contains whitespace at the beginning or at the end" : "Tá spás bán sa logáil isteach ag an tús nó ag an deireadh",
"Login must not consist of dots only" : "Níor cheart go gcuimseodh logáil isteach poncanna amháin",
- "Login is too long" : "Tá logáil isteach ró-fhada",
"Login is invalid because files already exist for this user" : "Tá logáil isteach neamhbhailí toisc go bhfuil comhaid ann cheana don úsáideoir seo",
"Account disabled" : "Díchumasaíodh an cuntas",
"Login canceled by app" : "Cealaíodh logáil isteach ag an aip",
@@ -451,6 +450,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Déanann sé achoimre ar théacs trína fhad a laghdú gan eochairfhaisnéis a chailliúint.",
"Extracts topics from a text and outputs them separated by commas." : "Sliocht topaicí as téacs agus aschuir iad scartha le camóga.",
"File is currently busy, please try again later" : "Tá an comhad gnóthach faoi láthair, bain triail eile as ar ball le do thoil",
- "Cannot download file" : "Ní féidir an comhad a íoslódáil"
+ "Cannot download file" : "Ní féidir an comhad a íoslódáil",
+ "Login is too long" : "Tá logáil isteach ró-fhada"
},
"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);");
diff --git a/lib/l10n/ga.json b/lib/l10n/ga.json
index e1367c8b5bd..82357708353 100644
--- a/lib/l10n/ga.json
+++ b/lib/l10n/ga.json
@@ -273,7 +273,6 @@
"A valid Login must be provided" : "Ní mór Logáil Isteach bailí a sholáthar",
"Login contains whitespace at the beginning or at the end" : "Tá spás bán sa logáil isteach ag an tús nó ag an deireadh",
"Login must not consist of dots only" : "Níor cheart go gcuimseodh logáil isteach poncanna amháin",
- "Login is too long" : "Tá logáil isteach ró-fhada",
"Login is invalid because files already exist for this user" : "Tá logáil isteach neamhbhailí toisc go bhfuil comhaid ann cheana don úsáideoir seo",
"Account disabled" : "Díchumasaíodh an cuntas",
"Login canceled by app" : "Cealaíodh logáil isteach ag an aip",
@@ -449,6 +448,7 @@
"Summarizes text by reducing its length without losing key information." : "Déanann sé achoimre ar théacs trína fhad a laghdú gan eochairfhaisnéis a chailliúint.",
"Extracts topics from a text and outputs them separated by commas." : "Sliocht topaicí as téacs agus aschuir iad scartha le camóga.",
"File is currently busy, please try again later" : "Tá an comhad gnóthach faoi láthair, bain triail eile as ar ball le do thoil",
- "Cannot download file" : "Ní féidir an comhad a íoslódáil"
+ "Cannot download file" : "Ní féidir an comhad a íoslódáil",
+ "Login is too long" : "Tá logáil isteach ró-fhada"
},"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"
} \ No newline at end of file
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index 56a3f7327fc..72a4b6f133b 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "ログイン名を提供する必要があります",
"Login contains whitespace at the beginning or at the end" : "ログイン名の最初か最後に空白が含まれています",
"Login must not consist of dots only" : "ログイン名はドットのみで構成されてはいけません",
- "Login is too long" : "ログインが長すぎます",
+ "Username is too long" : "ユーザー名が長すぎます",
"Login is invalid because files already exist for this user" : "このユーザのファイルが既に存在するため、このログイン名は使用できません",
"Account disabled" : "アカウントは無効",
"Login canceled by app" : "アプリによりログインが中止されました",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "重要な情報を失わずにテキストの長さを要約して短縮する。",
"Extracts topics from a text and outputs them separated by commas." : "テキストからトピックを抽出し、カンマ区切りで出力します。",
"File is currently busy, please try again later" : "現在ファイルはビジーです。後でもう一度試してください。",
- "Cannot download file" : "ファイルをダウンロードできません"
+ "Cannot download file" : "ファイルをダウンロードできません",
+ "Login is too long" : "ログインが長すぎます"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index ea04d3f522b..5a6af204f01 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "ログイン名を提供する必要があります",
"Login contains whitespace at the beginning or at the end" : "ログイン名の最初か最後に空白が含まれています",
"Login must not consist of dots only" : "ログイン名はドットのみで構成されてはいけません",
- "Login is too long" : "ログインが長すぎます",
+ "Username is too long" : "ユーザー名が長すぎます",
"Login is invalid because files already exist for this user" : "このユーザのファイルが既に存在するため、このログイン名は使用できません",
"Account disabled" : "アカウントは無効",
"Login canceled by app" : "アプリによりログインが中止されました",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "重要な情報を失わずにテキストの長さを要約して短縮する。",
"Extracts topics from a text and outputs them separated by commas." : "テキストからトピックを抽出し、カンマ区切りで出力します。",
"File is currently busy, please try again later" : "現在ファイルはビジーです。後でもう一度試してください。",
- "Cannot download file" : "ファイルをダウンロードできません"
+ "Cannot download file" : "ファイルをダウンロードできません",
+ "Login is too long" : "ログインが長すぎます"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/lv.js b/lib/l10n/lv.js
index f0ffc6f3235..13a169c3fd2 100644
--- a/lib/l10n/lv.js
+++ b/lib/l10n/lv.js
@@ -5,7 +5,7 @@ OC.L10N.register(
"See %s" : "Skatīt %s",
"Application %1$s is not present or has a non-compatible version with this server. Please check the apps directory." : "Lietotne %1$s nav pieejama vai tai ir ar šo serveri nesaderīga versija. Lūgums pārbaudīt lietotņu mapi.",
"Sample configuration detected" : "Atrasta konfigurācijas paraugs",
- "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Konstatēts, ka paraug konfigurācija ir nokopēta. Tas var izjaukt jūsu instalāciju un nav atbalstīts. Lūdzu, izlasiet dokumentāciju, pirms veicat izmaiņas config.php",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Tika noteikts, ka tika kopēta paraugkonfigurācija. Tas var salauzt uzstādīto un netiek atbalstīts. Lūgums pirms izmaiņu veikšanas config.php izlasīt dokumentāciju",
"%s email verification" : "%s e-pasta pārbaude",
"Email verification" : "E-pasta pārbaude",
"Click the following button to confirm your email." : "Jāklikšķina zemā esošā poga, lai apstiprinātu savu e-pasta adresi.",
@@ -68,7 +68,7 @@ OC.L10N.register(
"Set an admin password." : "Iestatīt pārvaldītāja paroli.",
"Open %s" : "Atvērt %s",
"Unknown share type" : "Nezināms kopīgošanas veids",
- "You are not allowed to share %s" : "Tev nav ļauts dalīties ar %s",
+ "You are not allowed to share %s" : "Tev nav ļauts kopīgot %s",
"Could not find category \"%s\"" : "Nevarēja atrast kategoriju “%s”",
"Sunday" : "Svētdiena",
"Monday" : "Pirmdiena",
diff --git a/lib/l10n/lv.json b/lib/l10n/lv.json
index 5400ea39460..0540c50ad27 100644
--- a/lib/l10n/lv.json
+++ b/lib/l10n/lv.json
@@ -3,7 +3,7 @@
"See %s" : "Skatīt %s",
"Application %1$s is not present or has a non-compatible version with this server. Please check the apps directory." : "Lietotne %1$s nav pieejama vai tai ir ar šo serveri nesaderīga versija. Lūgums pārbaudīt lietotņu mapi.",
"Sample configuration detected" : "Atrasta konfigurācijas paraugs",
- "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Konstatēts, ka paraug konfigurācija ir nokopēta. Tas var izjaukt jūsu instalāciju un nav atbalstīts. Lūdzu, izlasiet dokumentāciju, pirms veicat izmaiņas config.php",
+ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "Tika noteikts, ka tika kopēta paraugkonfigurācija. Tas var salauzt uzstādīto un netiek atbalstīts. Lūgums pirms izmaiņu veikšanas config.php izlasīt dokumentāciju",
"%s email verification" : "%s e-pasta pārbaude",
"Email verification" : "E-pasta pārbaude",
"Click the following button to confirm your email." : "Jāklikšķina zemā esošā poga, lai apstiprinātu savu e-pasta adresi.",
@@ -66,7 +66,7 @@
"Set an admin password." : "Iestatīt pārvaldītāja paroli.",
"Open %s" : "Atvērt %s",
"Unknown share type" : "Nezināms kopīgošanas veids",
- "You are not allowed to share %s" : "Tev nav ļauts dalīties ar %s",
+ "You are not allowed to share %s" : "Tev nav ļauts kopīgot %s",
"Could not find category \"%s\"" : "Nevarēja atrast kategoriju “%s”",
"Sunday" : "Svētdiena",
"Monday" : "Pirmdiena",
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index 3c654ddd844..bc5f451a985 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "Um Login válido deve ser fornecido",
"Login contains whitespace at the beginning or at the end" : "O login contém espaços em branco no início ou no final",
"Login must not consist of dots only" : "O login não deve consistir apenas de pontos",
- "Login is too long" : "Login é muito longo",
+ "Username is too long" : "O nome de usuário é muito longo",
"Login is invalid because files already exist for this user" : "O login é inválido porque já existem arquivos para este usuário",
"Account disabled" : "Conta desativada",
"Login canceled by app" : "Login cancelado pelo aplicativo",
@@ -301,7 +301,7 @@ OC.L10N.register(
"PHP setting \"%s\" is not set to \"%s\"." : "Configuração PHP \"%s\" não está configurado para \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Ajustar a configuração no php.ini fará com que o Nextcloud execute novamente",
"<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> está configurado para <code>%s</code> em vez do valor esperado <code>0</code>.",
- "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Para corrigir este conjunto de problemas <code>mbstring.func_overload</code> para <code>0</code> no seu php.ini.",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Para corrigir esse problema, defina <code>mbstring.func_overload</code> como <code>0</code> em seu php.ini.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP aparentemente está configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por um cache/acelerador, como Zend OPcache ou eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como faltantes?",
@@ -325,9 +325,9 @@ OC.L10N.register(
"Storage connection error. %s" : "Erro na conexão de armazenamento. %s",
"Storage is temporarily not available" : "Armazenamento temporariamente indisponível",
"Storage connection timeout. %s" : "Atingido o tempo limite de conexão ao armazenamento. %s",
- "To allow this check to run you have to make sure that your Web server can connect to itself. Therefore it must be able to resolve and connect to at least one of its `trusted_domains` or the `overwrite.cli.url`. This failure may be the result of a server-side DNS mismatch or outbound firewall rule." : "Para permitir que esta verificação seja executada, você deve certificar-se de que seu servidor Web pode se conectar a si mesmo. Portanto, ele deve ser capaz de resolver e conectar-se a pelo menos um de seus `trusted_domains` ou `overwrite.cli.url`. Essa falha pode ser o resultado de uma incompatibilidade de DNS no servidor ou de uma regra de firewall de saída.",
+ "To allow this check to run you have to make sure that your Web server can connect to itself. Therefore it must be able to resolve and connect to at least one of its `trusted_domains` or the `overwrite.cli.url`. This failure may be the result of a server-side DNS mismatch or outbound firewall rule." : "Para permitir que esta verificação seja executada, você deve certificar-se de que seu servidor web pode se conectar a si mesmo. Portanto, ele deve ser capaz de resolver e conectar a pelo menos um de seus `trusted_domains` ou `overwrite.cli.url`. Esta falha pode ser o resultado de uma incompatibilidade de DNS no servidor ou de uma regra de firewall de saída.",
"Transcribe audio" : "Transcrever áudio",
- "Transcribe the things said in an audio" : "Transcreva as coisas ditas em um áudio",
+ "Transcribe the things said in an audio" : "Transcrever o que foi dito em um áudio",
"Audio input" : "Entrada de áudio",
"The audio to transcribe" : "O áudio a ser transcrito",
"Transcription" : "Transcrição",
@@ -345,7 +345,7 @@ OC.L10N.register(
"Send this along with the next interaction." : "Envie isso junto com a próxima interação.",
"Requested actions by the agent" : "Ações solicitadas pelo agente",
"Actions that the agent would like to carry out in JSON format." : "Ações que o agente gostaria de realizar no formato JSON.",
- "Context write" : "Gravação de contexto",
+ "Context write" : "Escrita contextual",
"Writes text in a given style based on the provided source material." : "Escreve texto em um determinado estilo com base no material de origem fornecido.",
"Writing style" : "Estilo de escrita",
"Demonstrate a writing style that you would like to immitate" : "Demonstre um estilo de escrita que você gostaria de imitar",
@@ -355,7 +355,7 @@ OC.L10N.register(
"The generated text with content from the source material in the given style" : "O texto gerado com conteúdo do material de origem no estilo determinado",
"Emoji generator" : "Gerador de emojis",
"Takes text and generates a representative emoji for it." : "Pega texto e gera um emoji representativo para ele.",
- "The text to generate an emoji for" : "O texto para gerar um emoji para",
+ "The text to generate an emoji for" : "O texto para o qual gerar um emoji",
"Generated emoji" : "Emoji gerado",
"The generated emoji based on the input text" : "O emoji gerado com base no texto de entrada",
"Generate image" : "Gerar imagem",
@@ -363,7 +363,7 @@ OC.L10N.register(
"Prompt" : "Prompt",
"Describe the image you want to generate" : "Descreva a imagem que você deseja gerar",
"Number of images" : "Número de imagens",
- "How many images to generate" : "Quantas imagens gerar",
+ "How many images to generate" : "Quantas imagens devem ser geradas",
"Output images" : "Imagens de saída",
"The generated images" : "As imagens geradas",
"Generate speech" : "Gerar fala",
@@ -382,7 +382,7 @@ OC.L10N.register(
"Desired tone" : "Tom desejado",
"In which tone should your text be rewritten?" : "Em qual tom seu texto deve ser reescrito?",
"The rewritten text in the desired tone, written by the assistant:" : "O texto reescrito no tom desejado, escrito pelo assistente:",
- "Chat" : "Conversa",
+ "Chat" : "Bate-papo",
"Chat with the assistant" : "Converse com o assistente",
"System prompt" : "Prompt do sistema",
"Define rules and assumptions that the assistant should follow during the conversation." : "Defina regras e suposições que o assistente deve seguir durante a conversa.",
@@ -430,11 +430,11 @@ OC.L10N.register(
"The original text to summarize" : "O texto original para resumir",
"Summary" : "Resumo",
"The generated summary" : "O resumo gerado",
- "Extract topics" : "Extrair tópicos",
- "Extracts topics from a text and outputs them separated by commas" : "Extrai tópicos de um texto e os exibe separados por vírgulas",
- "The original text to extract topics from" : "O texto original para extrair tópicos de",
- "Topics" : "Tópicos",
- "The list of extracted topics" : "A lista de tópicos extraídos",
+ "Extract topics" : "Extrair temas",
+ "Extracts topics from a text and outputs them separated by commas" : "Extrai temas de um texto e os exibe separados por vírgulas",
+ "The original text to extract topics from" : "O texto original do qual extrair temas",
+ "Topics" : "Temas",
+ "The list of extracted topics" : "A lista de temas extraídos",
"Translate" : "Traduzir",
"Translate text from one language to another" : "Traduzir um texto de um idioma para outro",
"Origin text" : "Texto original",
@@ -446,11 +446,12 @@ OC.L10N.register(
"Result" : "Resultado",
"The translated text" : "O texto traduzido",
"Free prompt" : "Prompt livre",
- "Runs an arbitrary prompt through the language model." : "Executa um prompt arbitrário por meio do modelo de idioma.",
+ "Runs an arbitrary prompt through the language model." : "Executa um prompt arbitrário por meio do modelo de linguagem.",
"Generate headline" : "Gerar título",
"Summarizes text by reducing its length without losing key information." : "Resume o texto reduzindo seu comprimento sem perder informações importantes.",
- "Extracts topics from a text and outputs them separated by commas." : "Extrai tópicos de um texto e os gera separados por vírgulas.",
+ "Extracts topics from a text and outputs them separated by commas." : "Extrai temas de um texto e os exibe separados por vírgulas.",
"File is currently busy, please try again later" : "O arquivo está ocupado, tente novamente mais tarde",
- "Cannot download file" : "Não é possível baixar o arquivo"
+ "Cannot download file" : "Não é possível baixar o arquivo",
+ "Login is too long" : "Login é muito longo"
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index cf58327d3ee..791f8eff351 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "Um Login válido deve ser fornecido",
"Login contains whitespace at the beginning or at the end" : "O login contém espaços em branco no início ou no final",
"Login must not consist of dots only" : "O login não deve consistir apenas de pontos",
- "Login is too long" : "Login é muito longo",
+ "Username is too long" : "O nome de usuário é muito longo",
"Login is invalid because files already exist for this user" : "O login é inválido porque já existem arquivos para este usuário",
"Account disabled" : "Conta desativada",
"Login canceled by app" : "Login cancelado pelo aplicativo",
@@ -299,7 +299,7 @@
"PHP setting \"%s\" is not set to \"%s\"." : "Configuração PHP \"%s\" não está configurado para \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Ajustar a configuração no php.ini fará com que o Nextcloud execute novamente",
"<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code> está configurado para <code>%s</code> em vez do valor esperado <code>0</code>.",
- "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Para corrigir este conjunto de problemas <code>mbstring.func_overload</code> para <code>0</code> no seu php.ini.",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Para corrigir esse problema, defina <code>mbstring.func_overload</code> como <code>0</code> em seu php.ini.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP aparentemente está configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por um cache/acelerador, como Zend OPcache ou eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como faltantes?",
@@ -323,9 +323,9 @@
"Storage connection error. %s" : "Erro na conexão de armazenamento. %s",
"Storage is temporarily not available" : "Armazenamento temporariamente indisponível",
"Storage connection timeout. %s" : "Atingido o tempo limite de conexão ao armazenamento. %s",
- "To allow this check to run you have to make sure that your Web server can connect to itself. Therefore it must be able to resolve and connect to at least one of its `trusted_domains` or the `overwrite.cli.url`. This failure may be the result of a server-side DNS mismatch or outbound firewall rule." : "Para permitir que esta verificação seja executada, você deve certificar-se de que seu servidor Web pode se conectar a si mesmo. Portanto, ele deve ser capaz de resolver e conectar-se a pelo menos um de seus `trusted_domains` ou `overwrite.cli.url`. Essa falha pode ser o resultado de uma incompatibilidade de DNS no servidor ou de uma regra de firewall de saída.",
+ "To allow this check to run you have to make sure that your Web server can connect to itself. Therefore it must be able to resolve and connect to at least one of its `trusted_domains` or the `overwrite.cli.url`. This failure may be the result of a server-side DNS mismatch or outbound firewall rule." : "Para permitir que esta verificação seja executada, você deve certificar-se de que seu servidor web pode se conectar a si mesmo. Portanto, ele deve ser capaz de resolver e conectar a pelo menos um de seus `trusted_domains` ou `overwrite.cli.url`. Esta falha pode ser o resultado de uma incompatibilidade de DNS no servidor ou de uma regra de firewall de saída.",
"Transcribe audio" : "Transcrever áudio",
- "Transcribe the things said in an audio" : "Transcreva as coisas ditas em um áudio",
+ "Transcribe the things said in an audio" : "Transcrever o que foi dito em um áudio",
"Audio input" : "Entrada de áudio",
"The audio to transcribe" : "O áudio a ser transcrito",
"Transcription" : "Transcrição",
@@ -343,7 +343,7 @@
"Send this along with the next interaction." : "Envie isso junto com a próxima interação.",
"Requested actions by the agent" : "Ações solicitadas pelo agente",
"Actions that the agent would like to carry out in JSON format." : "Ações que o agente gostaria de realizar no formato JSON.",
- "Context write" : "Gravação de contexto",
+ "Context write" : "Escrita contextual",
"Writes text in a given style based on the provided source material." : "Escreve texto em um determinado estilo com base no material de origem fornecido.",
"Writing style" : "Estilo de escrita",
"Demonstrate a writing style that you would like to immitate" : "Demonstre um estilo de escrita que você gostaria de imitar",
@@ -353,7 +353,7 @@
"The generated text with content from the source material in the given style" : "O texto gerado com conteúdo do material de origem no estilo determinado",
"Emoji generator" : "Gerador de emojis",
"Takes text and generates a representative emoji for it." : "Pega texto e gera um emoji representativo para ele.",
- "The text to generate an emoji for" : "O texto para gerar um emoji para",
+ "The text to generate an emoji for" : "O texto para o qual gerar um emoji",
"Generated emoji" : "Emoji gerado",
"The generated emoji based on the input text" : "O emoji gerado com base no texto de entrada",
"Generate image" : "Gerar imagem",
@@ -361,7 +361,7 @@
"Prompt" : "Prompt",
"Describe the image you want to generate" : "Descreva a imagem que você deseja gerar",
"Number of images" : "Número de imagens",
- "How many images to generate" : "Quantas imagens gerar",
+ "How many images to generate" : "Quantas imagens devem ser geradas",
"Output images" : "Imagens de saída",
"The generated images" : "As imagens geradas",
"Generate speech" : "Gerar fala",
@@ -380,7 +380,7 @@
"Desired tone" : "Tom desejado",
"In which tone should your text be rewritten?" : "Em qual tom seu texto deve ser reescrito?",
"The rewritten text in the desired tone, written by the assistant:" : "O texto reescrito no tom desejado, escrito pelo assistente:",
- "Chat" : "Conversa",
+ "Chat" : "Bate-papo",
"Chat with the assistant" : "Converse com o assistente",
"System prompt" : "Prompt do sistema",
"Define rules and assumptions that the assistant should follow during the conversation." : "Defina regras e suposições que o assistente deve seguir durante a conversa.",
@@ -428,11 +428,11 @@
"The original text to summarize" : "O texto original para resumir",
"Summary" : "Resumo",
"The generated summary" : "O resumo gerado",
- "Extract topics" : "Extrair tópicos",
- "Extracts topics from a text and outputs them separated by commas" : "Extrai tópicos de um texto e os exibe separados por vírgulas",
- "The original text to extract topics from" : "O texto original para extrair tópicos de",
- "Topics" : "Tópicos",
- "The list of extracted topics" : "A lista de tópicos extraídos",
+ "Extract topics" : "Extrair temas",
+ "Extracts topics from a text and outputs them separated by commas" : "Extrai temas de um texto e os exibe separados por vírgulas",
+ "The original text to extract topics from" : "O texto original do qual extrair temas",
+ "Topics" : "Temas",
+ "The list of extracted topics" : "A lista de temas extraídos",
"Translate" : "Traduzir",
"Translate text from one language to another" : "Traduzir um texto de um idioma para outro",
"Origin text" : "Texto original",
@@ -444,11 +444,12 @@
"Result" : "Resultado",
"The translated text" : "O texto traduzido",
"Free prompt" : "Prompt livre",
- "Runs an arbitrary prompt through the language model." : "Executa um prompt arbitrário por meio do modelo de idioma.",
+ "Runs an arbitrary prompt through the language model." : "Executa um prompt arbitrário por meio do modelo de linguagem.",
"Generate headline" : "Gerar título",
"Summarizes text by reducing its length without losing key information." : "Resume o texto reduzindo seu comprimento sem perder informações importantes.",
- "Extracts topics from a text and outputs them separated by commas." : "Extrai tópicos de um texto e os gera separados por vírgulas.",
+ "Extracts topics from a text and outputs them separated by commas." : "Extrai temas de um texto e os exibe separados por vírgulas.",
"File is currently busy, please try again later" : "O arquivo está ocupado, tente novamente mais tarde",
- "Cannot download file" : "Não é possível baixar o arquivo"
+ "Cannot download file" : "Não é possível baixar o arquivo",
+ "Login is too long" : "Login é muito longo"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js
index 1fa28c281be..4cd51ae9b80 100644
--- a/lib/l10n/ru.js
+++ b/lib/l10n/ru.js
@@ -325,6 +325,11 @@ OC.L10N.register(
"Describe a task that you want the assistant to do or ask a question" : "Опишите задачу, которую вы хотите поручить ассистенту, или задайте вопрос",
"Generated reply" : "Сгенерированный ответ",
"The generated text from the assistant" : "Сгенерированный текст от помощника",
+ "Change Tone" : "Сменить тон",
+ "Write a text that you want the assistant to rewrite in another tone." : "Напишите текст, чтобы ассистент переписал его в другом тоне.",
+ "Desired tone" : "Желаемый тон",
+ "In which tone should your text be rewritten?" : "В каком тоне следует переписать ваш текст?",
+ "The rewritten text in the desired tone, written by the assistant:" : "Переписанный текст в нужном тоне, написанный ассистентом:",
"Chat" : "Разговор",
"Chat with the assistant" : "Пообщайтесь с ассистентом",
"System prompt" : "Системная подсказка",
diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json
index 3266d0f6088..4842de706a2 100644
--- a/lib/l10n/ru.json
+++ b/lib/l10n/ru.json
@@ -323,6 +323,11 @@
"Describe a task that you want the assistant to do or ask a question" : "Опишите задачу, которую вы хотите поручить ассистенту, или задайте вопрос",
"Generated reply" : "Сгенерированный ответ",
"The generated text from the assistant" : "Сгенерированный текст от помощника",
+ "Change Tone" : "Сменить тон",
+ "Write a text that you want the assistant to rewrite in another tone." : "Напишите текст, чтобы ассистент переписал его в другом тоне.",
+ "Desired tone" : "Желаемый тон",
+ "In which tone should your text be rewritten?" : "В каком тоне следует переписать ваш текст?",
+ "The rewritten text in the desired tone, written by the assistant:" : "Переписанный текст в нужном тоне, написанный ассистентом:",
"Chat" : "Разговор",
"Chat with the assistant" : "Пообщайтесь с ассистентом",
"System prompt" : "Системная подсказка",
diff --git a/lib/l10n/sr.js b/lib/l10n/sr.js
index 6760be8e4a9..bea3ea369a6 100644
--- a/lib/l10n/sr.js
+++ b/lib/l10n/sr.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "Морате да унесете исправно име за пријаву",
"Login contains whitespace at the beginning or at the end" : "Име за пријаву садржи белине на почетку или на крају",
"Login must not consist of dots only" : "Име за пријаву не може да се састоји само од тачака",
- "Login is too long" : "Име за пријаву је сувише дугачко",
+ "Username is too long" : "Корисничко име је сувише дугачко",
"Login is invalid because files already exist for this user" : "Име за пријаву није исправно пошто већ постоје фајлови овог корисника",
"Account disabled" : "Налог је искључен",
"Login canceled by app" : "Пријава отказана од стране апликације",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Резимира текст тако што га скраћује без губитка кључних информација.",
"Extracts topics from a text and outputs them separated by commas." : "Издваја теме из текста и исписује их раздвојене запетама.",
"File is currently busy, please try again later" : "Фајл је тренутно заузет, покушајте поново касније",
- "Cannot download file" : "Фајл не може да се преузме"
+ "Cannot download file" : "Фајл не може да се преузме",
+ "Login is too long" : "Име за пријаву је сувише дугачко"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/lib/l10n/sr.json b/lib/l10n/sr.json
index 42ad00dc46d..a9b9e940482 100644
--- a/lib/l10n/sr.json
+++ b/lib/l10n/sr.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "Морате да унесете исправно име за пријаву",
"Login contains whitespace at the beginning or at the end" : "Име за пријаву садржи белине на почетку или на крају",
"Login must not consist of dots only" : "Име за пријаву не може да се састоји само од тачака",
- "Login is too long" : "Име за пријаву је сувише дугачко",
+ "Username is too long" : "Корисничко име је сувише дугачко",
"Login is invalid because files already exist for this user" : "Име за пријаву није исправно пошто већ постоје фајлови овог корисника",
"Account disabled" : "Налог је искључен",
"Login canceled by app" : "Пријава отказана од стране апликације",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "Резимира текст тако што га скраћује без губитка кључних информација.",
"Extracts topics from a text and outputs them separated by commas." : "Издваја теме из текста и исписује их раздвојене запетама.",
"File is currently busy, please try again later" : "Фајл је тренутно заузет, покушајте поново касније",
- "Cannot download file" : "Фајл не може да се преузме"
+ "Cannot download file" : "Фајл не може да се преузме",
+ "Login is too long" : "Име за пријаву је сувише дугачко"
},"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);"
} \ No newline at end of file
diff --git a/lib/l10n/sv.js b/lib/l10n/sv.js
index 121a87b137b..77c836b42d3 100644
--- a/lib/l10n/sv.js
+++ b/lib/l10n/sv.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "En giltig inloggning måste anges",
"Login contains whitespace at the beginning or at the end" : "Inloggningen innehåller blanksteg i början eller slutet",
"Login must not consist of dots only" : "Inloggningen får inte innehålla enbart punkter",
- "Login is too long" : "Inloggningen är för lång",
+ "Username is too long" : "Användarnamnet är för långt",
"Login is invalid because files already exist for this user" : "Inloggningen är ogiltigt eftersom det redan finns filer för den här användaren",
"Account disabled" : "Konto inaktiverat",
"Login canceled by app" : "Inloggningen avbruten av appen",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Sammanfattar text genom att minska dess längd utan att förlora viktig information.",
"Extracts topics from a text and outputs them separated by commas." : "Extraherar ämnen från en text och matar ut dem separerade med kommatecken.",
"File is currently busy, please try again later" : "Filen är för tillfället upptagen, försök igen senare",
- "Cannot download file" : "Kan inte ladda ner fil"
+ "Cannot download file" : "Kan inte ladda ner fil",
+ "Login is too long" : "Inloggningen är för lång"
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/sv.json b/lib/l10n/sv.json
index 7c44fef111a..f4eb5f933f3 100644
--- a/lib/l10n/sv.json
+++ b/lib/l10n/sv.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "En giltig inloggning måste anges",
"Login contains whitespace at the beginning or at the end" : "Inloggningen innehåller blanksteg i början eller slutet",
"Login must not consist of dots only" : "Inloggningen får inte innehålla enbart punkter",
- "Login is too long" : "Inloggningen är för lång",
+ "Username is too long" : "Användarnamnet är för långt",
"Login is invalid because files already exist for this user" : "Inloggningen är ogiltigt eftersom det redan finns filer för den här användaren",
"Account disabled" : "Konto inaktiverat",
"Login canceled by app" : "Inloggningen avbruten av appen",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "Sammanfattar text genom att minska dess längd utan att förlora viktig information.",
"Extracts topics from a text and outputs them separated by commas." : "Extraherar ämnen från en text och matar ut dem separerade med kommatecken.",
"File is currently busy, please try again later" : "Filen är för tillfället upptagen, försök igen senare",
- "Cannot download file" : "Kan inte ladda ner fil"
+ "Cannot download file" : "Kan inte ladda ner fil",
+ "Login is too long" : "Inloggningen är för lång"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js
index 76f8d0b1e1b..05ea0d25177 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -273,7 +273,6 @@ OC.L10N.register(
"A valid Login must be provided" : "Geçerli bir kullanıcı adı yazmalısınız",
"Login contains whitespace at the beginning or at the end" : "Kullanıcı adının başında ya da sonunda boşluk var",
"Login must not consist of dots only" : "Kullanıcı adı yalnızca noktalardan oluşamaz",
- "Login is too long" : "Kullanıcı adı çok uzun",
"Login is invalid because files already exist for this user" : "Kullanıcı adı geçersiz, bu kullanıcı için zaten bazı dosyalar var",
"Account disabled" : "Hesap kullanımdan kaldırılmış",
"Login canceled by app" : "Oturum açma uygulama tarafından iptal edildi",
@@ -444,6 +443,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Temel içeriği kaybetmeden uzunluğunu kısaltarak metni özetler.",
"Extracts topics from a text and outputs them separated by commas." : "Bir metindeki konuları ayıklar ve bunları virgül ile ayırarak sıralar.",
"File is currently busy, please try again later" : "Dosya şu anda meşgul. Lütfen bir süre sonra yeniden deneyin",
- "Cannot download file" : "Dosya indirilemedi"
+ "Cannot download file" : "Dosya indirilemedi",
+ "Login is too long" : "Kullanıcı adı çok uzun"
},
"nplurals=2; plural=(n > 1);");
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index 5161808df23..9b8aa8cfeac 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -271,7 +271,6 @@
"A valid Login must be provided" : "Geçerli bir kullanıcı adı yazmalısınız",
"Login contains whitespace at the beginning or at the end" : "Kullanıcı adının başında ya da sonunda boşluk var",
"Login must not consist of dots only" : "Kullanıcı adı yalnızca noktalardan oluşamaz",
- "Login is too long" : "Kullanıcı adı çok uzun",
"Login is invalid because files already exist for this user" : "Kullanıcı adı geçersiz, bu kullanıcı için zaten bazı dosyalar var",
"Account disabled" : "Hesap kullanımdan kaldırılmış",
"Login canceled by app" : "Oturum açma uygulama tarafından iptal edildi",
@@ -442,6 +441,7 @@
"Summarizes text by reducing its length without losing key information." : "Temel içeriği kaybetmeden uzunluğunu kısaltarak metni özetler.",
"Extracts topics from a text and outputs them separated by commas." : "Bir metindeki konuları ayıklar ve bunları virgül ile ayırarak sıralar.",
"File is currently busy, please try again later" : "Dosya şu anda meşgul. Lütfen bir süre sonra yeniden deneyin",
- "Cannot download file" : "Dosya indirilemedi"
+ "Cannot download file" : "Dosya indirilemedi",
+ "Login is too long" : "Kullanıcı adı çok uzun"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/lib/l10n/uk.js b/lib/l10n/uk.js
index 21ba04ce6dc..d511d276c9e 100644
--- a/lib/l10n/uk.js
+++ b/lib/l10n/uk.js
@@ -93,6 +93,8 @@ OC.L10N.register(
"Destination does not exist" : "Призначення відсутнє",
"Destination is not creatable" : "Неможливо створити призначення",
"Dot files are not allowed" : "Файли які починаються з крапки не допустимі",
+ "%1$s (renamed)" : "%1$s (перейменовано)",
+ "renamed file" : "перейменовано файл",
"\"%1$s\" is a forbidden file or folder name." : "\"%1$s\" є недозволеним ім'ям файлів або каталогів.",
"\"%1$s\" is a forbidden prefix for file or folder names." : "\"%1$s\" є недозволеним префіксом у іменах файлів або каталоів.",
"\"%1$s\" is not allowed inside a file or folder name." : "\"%1$s\" не дозволено всередині імени файлів або каталогів.",
@@ -273,7 +275,6 @@ OC.L10N.register(
"A valid Login must be provided" : "Зазначте дійсне ім'я користувача",
"Login contains whitespace at the beginning or at the end" : "Ім'я користувача містить символ пробілу на початку або наприкінці",
"Login must not consist of dots only" : "Ім'я користувача не може складатися лише з крапок",
- "Login is too long" : "Ім'я користувача для авторизації задовге",
"Login is invalid because files already exist for this user" : "Недійсне ім'я облікового запису, оскільки файли для цього користувача вже присутні",
"Account disabled" : "Обліковий запис вимкнено",
"Login canceled by app" : "Вхід скасовано застосунком",
@@ -355,6 +356,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "Викокремлює головне у тексті шляхом зменшення довжини тексту без втрати ключової інформації.",
"Extracts topics from a text and outputs them separated by commas." : "Виділяє теми, які висвітлює текст, зводить їх у перелік, що розділено комами.",
"File is currently busy, please try again later" : "Файл на разі зайнятий, будь ласка, спробуйте пізніше",
- "Cannot download file" : "Неможливо звантажити файл"
+ "Cannot download file" : "Неможливо звантажити файл",
+ "Login is too long" : "Ім'я користувача для авторизації задовге"
},
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json
index 208494144e3..c21e23f71f3 100644
--- a/lib/l10n/uk.json
+++ b/lib/l10n/uk.json
@@ -91,6 +91,8 @@
"Destination does not exist" : "Призначення відсутнє",
"Destination is not creatable" : "Неможливо створити призначення",
"Dot files are not allowed" : "Файли які починаються з крапки не допустимі",
+ "%1$s (renamed)" : "%1$s (перейменовано)",
+ "renamed file" : "перейменовано файл",
"\"%1$s\" is a forbidden file or folder name." : "\"%1$s\" є недозволеним ім'ям файлів або каталогів.",
"\"%1$s\" is a forbidden prefix for file or folder names." : "\"%1$s\" є недозволеним префіксом у іменах файлів або каталоів.",
"\"%1$s\" is not allowed inside a file or folder name." : "\"%1$s\" не дозволено всередині імени файлів або каталогів.",
@@ -271,7 +273,6 @@
"A valid Login must be provided" : "Зазначте дійсне ім'я користувача",
"Login contains whitespace at the beginning or at the end" : "Ім'я користувача містить символ пробілу на початку або наприкінці",
"Login must not consist of dots only" : "Ім'я користувача не може складатися лише з крапок",
- "Login is too long" : "Ім'я користувача для авторизації задовге",
"Login is invalid because files already exist for this user" : "Недійсне ім'я облікового запису, оскільки файли для цього користувача вже присутні",
"Account disabled" : "Обліковий запис вимкнено",
"Login canceled by app" : "Вхід скасовано застосунком",
@@ -353,6 +354,7 @@
"Summarizes text by reducing its length without losing key information." : "Викокремлює головне у тексті шляхом зменшення довжини тексту без втрати ключової інформації.",
"Extracts topics from a text and outputs them separated by commas." : "Виділяє теми, які висвітлює текст, зводить їх у перелік, що розділено комами.",
"File is currently busy, please try again later" : "Файл на разі зайнятий, будь ласка, спробуйте пізніше",
- "Cannot download file" : "Неможливо звантажити файл"
+ "Cannot download file" : "Неможливо звантажити файл",
+ "Login is too long" : "Ім'я користувача для авторизації задовге"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
} \ No newline at end of file
diff --git a/lib/l10n/zh_CN.js b/lib/l10n/zh_CN.js
index d4684c4b96a..7a2f7cca2a4 100644
--- a/lib/l10n/zh_CN.js
+++ b/lib/l10n/zh_CN.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "必须提供有效的登录名",
"Login contains whitespace at the beginning or at the end" : "登录名开头或结尾包含空格",
"Login must not consist of dots only" : "登录名不能仅由点组成",
- "Login is too long" : "登录名太长",
+ "Username is too long" : "用户名太长",
"Login is invalid because files already exist for this user" : "登录无效,因为此用户的文件已存在",
"Account disabled" : "帐户已禁用",
"Login canceled by app" : "已通过应用取消登录",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "总结一段文本以减少长度而不丢失关键信息",
"Extracts topics from a text and outputs them separated by commas." : "从文本中摘出主题,输出逗号分隔的结果",
"File is currently busy, please try again later" : "文件当前正忙,请稍后再试",
- "Cannot download file" : "无法下载文件"
+ "Cannot download file" : "无法下载文件",
+ "Login is too long" : "登录名太长"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_CN.json b/lib/l10n/zh_CN.json
index 75250cad139..1727656ae7d 100644
--- a/lib/l10n/zh_CN.json
+++ b/lib/l10n/zh_CN.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "必须提供有效的登录名",
"Login contains whitespace at the beginning or at the end" : "登录名开头或结尾包含空格",
"Login must not consist of dots only" : "登录名不能仅由点组成",
- "Login is too long" : "登录名太长",
+ "Username is too long" : "用户名太长",
"Login is invalid because files already exist for this user" : "登录无效,因为此用户的文件已存在",
"Account disabled" : "帐户已禁用",
"Login canceled by app" : "已通过应用取消登录",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "总结一段文本以减少长度而不丢失关键信息",
"Extracts topics from a text and outputs them separated by commas." : "从文本中摘出主题,输出逗号分隔的结果",
"File is currently busy, please try again later" : "文件当前正忙,请稍后再试",
- "Cannot download file" : "无法下载文件"
+ "Cannot download file" : "无法下载文件",
+ "Login is too long" : "登录名太长"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/zh_HK.js b/lib/l10n/zh_HK.js
index 7e94d5fb9cc..17c629aba08 100644
--- a/lib/l10n/zh_HK.js
+++ b/lib/l10n/zh_HK.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "必須提供有效帳戶",
"Login contains whitespace at the beginning or at the end" : "帳戶的開頭或結尾有空白",
"Login must not consist of dots only" : "帳戶不能只包含小數點",
- "Login is too long" : "帳號太長了",
+ "Username is too long" : "用戶名稱太長",
"Login is invalid because files already exist for this user" : "帳戶無效,因為此用戶的檔案已經存在",
"Account disabled" : "帳戶已停用",
"Login canceled by app" : "登入已被應用程式取消",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "通過減少文字長度來總結而不丟失關鍵資訊。",
"Extracts topics from a text and outputs them separated by commas." : "從文字中提取主題並輸出,並用逗號分隔。",
"File is currently busy, please try again later" : "檔案目前忙碌中,請稍候再試",
- "Cannot download file" : "無法下載檔案"
+ "Cannot download file" : "無法下載檔案",
+ "Login is too long" : "帳號太長了"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_HK.json b/lib/l10n/zh_HK.json
index fd28486dccb..b2ef29118b8 100644
--- a/lib/l10n/zh_HK.json
+++ b/lib/l10n/zh_HK.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "必須提供有效帳戶",
"Login contains whitespace at the beginning or at the end" : "帳戶的開頭或結尾有空白",
"Login must not consist of dots only" : "帳戶不能只包含小數點",
- "Login is too long" : "帳號太長了",
+ "Username is too long" : "用戶名稱太長",
"Login is invalid because files already exist for this user" : "帳戶無效,因為此用戶的檔案已經存在",
"Account disabled" : "帳戶已停用",
"Login canceled by app" : "登入已被應用程式取消",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "通過減少文字長度來總結而不丟失關鍵資訊。",
"Extracts topics from a text and outputs them separated by commas." : "從文字中提取主題並輸出,並用逗號分隔。",
"File is currently busy, please try again later" : "檔案目前忙碌中,請稍候再試",
- "Cannot download file" : "無法下載檔案"
+ "Cannot download file" : "無法下載檔案",
+ "Login is too long" : "帳號太長了"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index 39bf221f009..196cb52767f 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -275,7 +275,7 @@ OC.L10N.register(
"A valid Login must be provided" : "必須提供有效帳號",
"Login contains whitespace at the beginning or at the end" : "帳號的開頭或結尾有空白",
"Login must not consist of dots only" : "帳號不能只包含小數點",
- "Login is too long" : "帳號太長了",
+ "Username is too long" : "使用者名稱太長了",
"Login is invalid because files already exist for this user" : "帳號無效,因為使用者的檔案已經存在",
"Account disabled" : "帳號已停用",
"Login canceled by app" : "應用程式取消了登入",
@@ -451,6 +451,7 @@ OC.L10N.register(
"Summarizes text by reducing its length without losing key information." : "寫成摘要,減少文字長度而不丟失關鍵資訊。",
"Extracts topics from a text and outputs them separated by commas." : "從文字中取出涵蓋的主題並輸出,然後用逗號分隔。",
"File is currently busy, please try again later" : "檔案目前忙碌中,請稍候再試",
- "Cannot download file" : "無法下載檔案"
+ "Cannot download file" : "無法下載檔案",
+ "Login is too long" : "帳號太長了"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index 101da41381b..5bde18ad24d 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -273,7 +273,7 @@
"A valid Login must be provided" : "必須提供有效帳號",
"Login contains whitespace at the beginning or at the end" : "帳號的開頭或結尾有空白",
"Login must not consist of dots only" : "帳號不能只包含小數點",
- "Login is too long" : "帳號太長了",
+ "Username is too long" : "使用者名稱太長了",
"Login is invalid because files already exist for this user" : "帳號無效,因為使用者的檔案已經存在",
"Account disabled" : "帳號已停用",
"Login canceled by app" : "應用程式取消了登入",
@@ -449,6 +449,7 @@
"Summarizes text by reducing its length without losing key information." : "寫成摘要,減少文字長度而不丟失關鍵資訊。",
"Extracts topics from a text and outputs them separated by commas." : "從文字中取出涵蓋的主題並輸出,然後用逗號分隔。",
"File is currently busy, please try again later" : "檔案目前忙碌中,請稍候再試",
- "Cannot download file" : "無法下載檔案"
+ "Cannot download file" : "無法下載檔案",
+ "Login is too long" : "帳號太長了"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/private/AppFramework/Bootstrap/RegistrationContext.php b/lib/private/AppFramework/Bootstrap/RegistrationContext.php
index c3b829825c2..95ad129c466 100644
--- a/lib/private/AppFramework/Bootstrap/RegistrationContext.php
+++ b/lib/private/AppFramework/Bootstrap/RegistrationContext.php
@@ -157,7 +157,7 @@ class RegistrationContext {
/** @var ServiceRegistration<\OCP\Files\Conversion\IConversionProvider>[] */
private array $fileConversionProviders = [];
-
+
/** @var ServiceRegistration<IMailProvider>[] */
private $mailProviders = [];
diff --git a/lib/private/Files/Mount/ObjectHomeMountProvider.php b/lib/private/Files/Mount/ObjectHomeMountProvider.php
index 99c52108fa8..4b088f2c808 100644
--- a/lib/private/Files/Mount/ObjectHomeMountProvider.php
+++ b/lib/private/Files/Mount/ObjectHomeMountProvider.php
@@ -7,117 +7,39 @@
*/
namespace OC\Files\Mount;
+use OC\Files\ObjectStore\HomeObjectStoreStorage;
+use OC\Files\ObjectStore\PrimaryObjectStoreConfig;
use OCP\Files\Config\IHomeMountProvider;
+use OCP\Files\Mount\IMountPoint;
use OCP\Files\Storage\IStorageFactory;
-use OCP\IConfig;
use OCP\IUser;
-use Psr\Log\LoggerInterface;
/**
* Mount provider for object store home storages
*/
class ObjectHomeMountProvider implements IHomeMountProvider {
- /**
- * @var IConfig
- */
- private $config;
-
- /**
- * ObjectStoreHomeMountProvider constructor.
- *
- * @param IConfig $config
- */
- public function __construct(IConfig $config) {
- $this->config = $config;
+ public function __construct(
+ private PrimaryObjectStoreConfig $objectStoreConfig,
+ ) {
}
/**
- * Get the cache mount for a user
+ * Get the home mount for a user
*
* @param IUser $user
* @param IStorageFactory $loader
- * @return \OCP\Files\Mount\IMountPoint
+ * @return ?IMountPoint
*/
- public function getHomeMountForUser(IUser $user, IStorageFactory $loader) {
- $config = $this->getMultiBucketObjectStoreConfig($user);
- if ($config === null) {
- $config = $this->getSingleBucketObjectStoreConfig($user);
- }
-
- if ($config === null) {
+ public function getHomeMountForUser(IUser $user, IStorageFactory $loader): ?IMountPoint {
+ $objectStoreConfig = $this->objectStoreConfig->getObjectStoreConfigForUser($user);
+ if ($objectStoreConfig === null) {
return null;
}
+ $arguments = array_merge($objectStoreConfig['arguments'], [
+ 'objectstore' => $this->objectStoreConfig->buildObjectStore($objectStoreConfig),
+ 'user' => $user,
+ ]);
- return new HomeMountPoint($user, '\OC\Files\ObjectStore\HomeObjectStoreStorage', '/' . $user->getUID(), $config['arguments'], $loader, null, null, self::class);
- }
-
- /**
- * @param IUser $user
- * @return array|null
- */
- private function getSingleBucketObjectStoreConfig(IUser $user) {
- $config = $this->config->getSystemValue('objectstore');
- if (!is_array($config)) {
- return null;
- }
-
- // sanity checks
- if (empty($config['class'])) {
- \OC::$server->get(LoggerInterface::class)->error('No class given for objectstore', ['app' => 'files']);
- }
- if (!isset($config['arguments'])) {
- $config['arguments'] = [];
- }
- // instantiate object store implementation
- $config['arguments']['objectstore'] = new $config['class']($config['arguments']);
-
- $config['arguments']['user'] = $user;
-
- return $config;
- }
-
- /**
- * @param IUser $user
- * @return array|null
- */
- private function getMultiBucketObjectStoreConfig(IUser $user) {
- $config = $this->config->getSystemValue('objectstore_multibucket');
- if (!is_array($config)) {
- return null;
- }
-
- // sanity checks
- if (empty($config['class'])) {
- \OC::$server->get(LoggerInterface::class)->error('No class given for objectstore', ['app' => 'files']);
- }
- if (!isset($config['arguments'])) {
- $config['arguments'] = [];
- }
-
- $bucket = $this->config->getUserValue($user->getUID(), 'homeobjectstore', 'bucket', null);
-
- if ($bucket === null) {
- /*
- * Use any provided bucket argument as prefix
- * and add the mapping from username => bucket
- */
- if (!isset($config['arguments']['bucket'])) {
- $config['arguments']['bucket'] = '';
- }
- $mapper = new \OC\Files\ObjectStore\Mapper($user, $this->config);
- $numBuckets = $config['arguments']['num_buckets'] ?? 64;
- $config['arguments']['bucket'] .= $mapper->getBucket($numBuckets);
-
- $this->config->setUserValue($user->getUID(), 'homeobjectstore', 'bucket', $config['arguments']['bucket']);
- } else {
- $config['arguments']['bucket'] = $bucket;
- }
-
- // instantiate object store implementation
- $config['arguments']['objectstore'] = new $config['class']($config['arguments']);
-
- $config['arguments']['user'] = $user;
-
- return $config;
+ return new HomeMountPoint($user, HomeObjectStoreStorage::class, '/' . $user->getUID(), $arguments, $loader, null, null, self::class);
}
}
diff --git a/lib/private/Files/Mount/RootMountProvider.php b/lib/private/Files/Mount/RootMountProvider.php
index 86f8188978f..5e0c924ad38 100644
--- a/lib/private/Files/Mount/RootMountProvider.php
+++ b/lib/private/Files/Mount/RootMountProvider.php
@@ -10,79 +10,41 @@ namespace OC\Files\Mount;
use OC;
use OC\Files\ObjectStore\ObjectStoreStorage;
+use OC\Files\ObjectStore\PrimaryObjectStoreConfig;
use OC\Files\Storage\LocalRootStorage;
-use OC_App;
use OCP\Files\Config\IRootMountProvider;
use OCP\Files\Storage\IStorageFactory;
use OCP\IConfig;
-use Psr\Log\LoggerInterface;
class RootMountProvider implements IRootMountProvider {
+ private PrimaryObjectStoreConfig $objectStoreConfig;
private IConfig $config;
- private LoggerInterface $logger;
- public function __construct(IConfig $config, LoggerInterface $logger) {
+ public function __construct(PrimaryObjectStoreConfig $objectStoreConfig, IConfig $config) {
+ $this->objectStoreConfig = $objectStoreConfig;
$this->config = $config;
- $this->logger = $logger;
}
public function getRootMounts(IStorageFactory $loader): array {
- $objectStore = $this->config->getSystemValue('objectstore', null);
- $objectStoreMultiBucket = $this->config->getSystemValue('objectstore_multibucket', null);
+ $objectStoreConfig = $this->objectStoreConfig->getObjectStoreConfigForRoot();
- if ($objectStoreMultiBucket) {
- return [$this->getMultiBucketStoreRootMount($loader, $objectStoreMultiBucket)];
- } elseif ($objectStore) {
- return [$this->getObjectStoreRootMount($loader, $objectStore)];
+ if ($objectStoreConfig) {
+ return [$this->getObjectStoreRootMount($loader, $objectStoreConfig)];
} else {
return [$this->getLocalRootMount($loader)];
}
}
- private function validateObjectStoreConfig(array &$config) {
- if (empty($config['class'])) {
- $this->logger->error('No class given for objectstore', ['app' => 'files']);
- }
- if (!isset($config['arguments'])) {
- $config['arguments'] = [];
- }
-
- // instantiate object store implementation
- $name = $config['class'];
- if (str_starts_with($name, 'OCA\\') && substr_count($name, '\\') >= 2) {
- $segments = explode('\\', $name);
- OC_App::loadApp(strtolower($segments[1]));
- }
- }
-
private function getLocalRootMount(IStorageFactory $loader): MountPoint {
$configDataDirectory = $this->config->getSystemValue('datadirectory', OC::$SERVERROOT . '/data');
return new MountPoint(LocalRootStorage::class, '/', ['datadir' => $configDataDirectory], $loader, null, null, self::class);
}
- private function getObjectStoreRootMount(IStorageFactory $loader, array $config): MountPoint {
- $this->validateObjectStoreConfig($config);
-
- $config['arguments']['objectstore'] = new $config['class']($config['arguments']);
- // mount with plain / root object store implementation
- $config['class'] = ObjectStoreStorage::class;
-
- return new MountPoint($config['class'], '/', $config['arguments'], $loader, null, null, self::class);
- }
-
- private function getMultiBucketStoreRootMount(IStorageFactory $loader, array $config): MountPoint {
- $this->validateObjectStoreConfig($config);
-
- if (!isset($config['arguments']['bucket'])) {
- $config['arguments']['bucket'] = '';
- }
- // put the root FS always in first bucket for multibucket configuration
- $config['arguments']['bucket'] .= '0';
-
- $config['arguments']['objectstore'] = new $config['class']($config['arguments']);
- // mount with plain / root object store implementation
- $config['class'] = ObjectStoreStorage::class;
+ private function getObjectStoreRootMount(IStorageFactory $loader, array $objectStoreConfig): MountPoint {
+ $arguments = array_merge($objectStoreConfig['arguments'], [
+ 'objectstore' => $this->objectStoreConfig->buildObjectStore($objectStoreConfig),
+ ]);
- return new MountPoint($config['class'], '/', $config['arguments'], $loader, null, null, self::class);
+ return new MountPoint(ObjectStoreStorage::class, '/', $arguments, $loader, null, null, self::class);
}
}
diff --git a/lib/private/Files/ObjectStore/PrimaryObjectStoreConfig.php b/lib/private/Files/ObjectStore/PrimaryObjectStoreConfig.php
new file mode 100644
index 00000000000..fdfe989addc
--- /dev/null
+++ b/lib/private/Files/ObjectStore/PrimaryObjectStoreConfig.php
@@ -0,0 +1,140 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+namespace OC\Files\ObjectStore;
+
+use OCP\App\IAppManager;
+use OCP\Files\ObjectStore\IObjectStore;
+use OCP\IConfig;
+use OCP\IUser;
+
+/**
+ * @psalm-type ObjectStoreConfig array{class: class-string<IObjectStore>, arguments: array{multibucket: bool, ...}}
+ */
+class PrimaryObjectStoreConfig {
+ public function __construct(
+ private readonly IConfig $config,
+ private readonly IAppManager $appManager,
+ ) {
+ }
+
+ /**
+ * @param ObjectStoreConfig $config
+ */
+ public function buildObjectStore(array $config): IObjectStore {
+ return new $config['class']($config['arguments']);
+ }
+
+ /**
+ * @return ?ObjectStoreConfig
+ */
+ public function getObjectStoreConfigForRoot(): ?array {
+ $config = $this->getObjectStoreConfig();
+
+ if ($config && $config['arguments']['multibucket']) {
+ if (!isset($config['arguments']['bucket'])) {
+ $config['arguments']['bucket'] = '';
+ }
+
+ // put the root FS always in first bucket for multibucket configuration
+ $config['arguments']['bucket'] .= '0';
+ }
+ return $config;
+ }
+
+ /**
+ * @return ?ObjectStoreConfig
+ */
+ public function getObjectStoreConfigForUser(IUser $user): ?array {
+ $config = $this->getObjectStoreConfig();
+
+ if ($config && $config['arguments']['multibucket']) {
+ $config['arguments']['bucket'] = $this->getBucketForUser($user, $config);
+ }
+ return $config;
+ }
+
+ /**
+ * @return ?ObjectStoreConfig
+ */
+ private function getObjectStoreConfig(): ?array {
+ $objectStore = $this->config->getSystemValue('objectstore', null);
+ $objectStoreMultiBucket = $this->config->getSystemValue('objectstore_multibucket', null);
+
+ // new-style multibucket config uses the same 'objectstore' key but sets `'multibucket' => true`, transparently upgrade older style config
+ if ($objectStoreMultiBucket) {
+ $objectStoreMultiBucket['arguments']['multibucket'] = true;
+ return $this->validateObjectStoreConfig($objectStoreMultiBucket);
+ } elseif ($objectStore) {
+ return $this->validateObjectStoreConfig($objectStore);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @return ObjectStoreConfig
+ */
+ private function validateObjectStoreConfig(array $config) {
+ if (!isset($config['class'])) {
+ throw new \Exception('No class configured for object store');
+ }
+ if (!isset($config['arguments'])) {
+ $config['arguments'] = [];
+ }
+ $class = $config['class'];
+ $arguments = $config['arguments'];
+ if (!is_array($arguments)) {
+ throw new \Exception('Configured object store arguments are not an array');
+ }
+ if (!isset($arguments['multibucket'])) {
+ $arguments['multibucket'] = false;
+ }
+ if (!is_bool($arguments['multibucket'])) {
+ throw new \Exception('arguments.multibucket must be a boolean in object store configuration');
+ }
+
+ if (!is_string($class)) {
+ throw new \Exception('Configured class for object store is not a string');
+ }
+
+ if (str_starts_with($class, 'OCA\\') && substr_count($class, '\\') >= 2) {
+ [$appId] = explode('\\', $class);
+ $this->appManager->loadApp(strtolower($appId));
+ }
+
+ if (!is_a($class, IObjectStore::class, true)) {
+ throw new \Exception('Configured class for object store is not an object store');
+ }
+ return [
+ 'class' => $class,
+ 'arguments' => $arguments,
+ ];
+ }
+
+ private function getBucketForUser(IUser $user, array $config): string {
+ $bucket = $this->config->getUserValue($user->getUID(), 'homeobjectstore', 'bucket', null);
+
+ if ($bucket === null) {
+ /*
+ * Use any provided bucket argument as prefix
+ * and add the mapping from username => bucket
+ */
+ if (!isset($config['arguments']['bucket'])) {
+ $config['arguments']['bucket'] = '';
+ }
+ $mapper = new Mapper($user, $this->config);
+ $numBuckets = isset($config['arguments']['num_buckets']) ? $config['arguments']['num_buckets'] : 64;
+ $bucket = $config['arguments']['bucket'] . $mapper->getBucket($numBuckets);
+
+ $this->config->setUserValue($user->getUID(), 'homeobjectstore', 'bucket', $bucket);
+ }
+
+ return $bucket;
+ }
+}
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index 6832b4e1551..63eecf5e1d6 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -938,7 +938,7 @@ class View {
try {
$exists = $this->file_exists($target);
- if ($this->shouldEmitHooks()) {
+ if ($this->shouldEmitHooks($target)) {
\OC_Hook::emit(
Filesystem::CLASSNAME,
Filesystem::signal_copy,
@@ -978,7 +978,7 @@ class View {
$this->changeLock($target, ILockingProvider::LOCK_SHARED);
$lockTypePath2 = ILockingProvider::LOCK_SHARED;
- if ($this->shouldEmitHooks() && $result !== false) {
+ if ($this->shouldEmitHooks($target) && $result !== false) {
\OC_Hook::emit(
Filesystem::CLASSNAME,
Filesystem::signal_post_copy,
diff --git a/lib/private/Server.php b/lib/private/Server.php
index ea8c1ce3797..bf07ee355ea 100644
--- a/lib/private/Server.php
+++ b/lib/private/Server.php
@@ -55,6 +55,7 @@ use OC\Files\Mount\RootMountProvider;
use OC\Files\Node\HookConnector;
use OC\Files\Node\LazyRoot;
use OC\Files\Node\Root;
+use OC\Files\ObjectStore\PrimaryObjectStoreConfig;
use OC\Files\SetupManager;
use OC\Files\Storage\StorageFactory;
use OC\Files\Template\TemplateManager;
@@ -819,10 +820,11 @@ class Server extends ServerContainer implements IServerContainer {
$config = $c->get(\OCP\IConfig::class);
$logger = $c->get(LoggerInterface::class);
+ $objectStoreConfig = $c->get(PrimaryObjectStoreConfig::class);
$manager->registerProvider(new CacheMountProvider($config));
$manager->registerHomeProvider(new LocalHomeMountProvider());
- $manager->registerHomeProvider(new ObjectHomeMountProvider($config));
- $manager->registerRootProvider(new RootMountProvider($config, $c->get(LoggerInterface::class)));
+ $manager->registerHomeProvider(new ObjectHomeMountProvider($objectStoreConfig));
+ $manager->registerRootProvider(new RootMountProvider($objectStoreConfig, $config));
$manager->registerRootProvider(new ObjectStorePreviewCacheMountProvider($logger, $config));
return $manager;
diff --git a/lib/private/Settings/DeclarativeManager.php b/lib/private/Settings/DeclarativeManager.php
index dea0c678f20..534b4b19984 100644
--- a/lib/private/Settings/DeclarativeManager.php
+++ b/lib/private/Settings/DeclarativeManager.php
@@ -15,6 +15,7 @@ use OCP\IAppConfig;
use OCP\IConfig;
use OCP\IGroupManager;
use OCP\IUser;
+use OCP\Security\ICrypto;
use OCP\Server;
use OCP\Settings\DeclarativeSettingsTypes;
use OCP\Settings\Events\DeclarativeSettingsGetValueEvent;
@@ -49,6 +50,7 @@ class DeclarativeManager implements IDeclarativeManager {
private IConfig $config,
private IAppConfig $appConfig,
private LoggerInterface $logger,
+ private ICrypto $crypto,
) {
}
@@ -266,7 +268,7 @@ class DeclarativeManager implements IDeclarativeManager {
$this->eventDispatcher->dispatchTyped(new DeclarativeSettingsSetValueEvent($user, $app, $formId, $fieldId, $value));
break;
case DeclarativeSettingsTypes::STORAGE_TYPE_INTERNAL:
- $this->saveInternalValue($user, $app, $fieldId, $value);
+ $this->saveInternalValue($user, $app, $formId, $fieldId, $value);
break;
default:
throw new Exception('Unknown storage type "' . $storageType . '"');
@@ -290,18 +292,52 @@ class DeclarativeManager implements IDeclarativeManager {
private function getInternalValue(IUser $user, string $app, string $formId, string $fieldId): mixed {
$sectionType = $this->getSectionType($app, $fieldId);
$defaultValue = $this->getDefaultValue($app, $formId, $fieldId);
+
+ $field = $this->getSchemaField($app, $formId, $fieldId);
+ $isSensitive = $field !== null && isset($field['sensitive']) && $field['sensitive'] === true;
+
switch ($sectionType) {
case DeclarativeSettingsTypes::SECTION_TYPE_ADMIN:
- return $this->config->getAppValue($app, $fieldId, $defaultValue);
+ $value = $this->config->getAppValue($app, $fieldId, $defaultValue);
+ break;
case DeclarativeSettingsTypes::SECTION_TYPE_PERSONAL:
- return $this->config->getUserValue($user->getUID(), $app, $fieldId, $defaultValue);
+ $value = $this->config->getUserValue($user->getUID(), $app, $fieldId, $defaultValue);
+ break;
default:
throw new Exception('Unknown section type "' . $sectionType . '"');
}
+ if ($isSensitive && $value !== '') {
+ try {
+ $value = $this->crypto->decrypt($value);
+ } catch (Exception $e) {
+ $this->logger->warning('Failed to decrypt sensitive value for field {field} in app {app}: {message}', [
+ 'field' => $fieldId,
+ 'app' => $app,
+ 'message' => $e->getMessage(),
+ ]);
+ $value = $defaultValue;
+ }
+ }
+ return $value;
}
- private function saveInternalValue(IUser $user, string $app, string $fieldId, mixed $value): void {
+ private function saveInternalValue(IUser $user, string $app, string $formId, string $fieldId, mixed $value): void {
$sectionType = $this->getSectionType($app, $fieldId);
+
+ $field = $this->getSchemaField($app, $formId, $fieldId);
+ if ($field !== null && isset($field['sensitive']) && $field['sensitive'] === true && $value !== '' && $value !== 'dummySecret') {
+ try {
+ $value = $this->crypto->encrypt($value);
+ } catch (Exception $e) {
+ $this->logger->warning('Failed to decrypt sensitive value for field {field} in app {app}: {message}', [
+ 'field' => $fieldId,
+ 'app' => $app,
+ 'message' => $e->getMessage()]
+ );
+ throw new Exception('Failed to encrypt sensitive value');
+ }
+ }
+
switch ($sectionType) {
case DeclarativeSettingsTypes::SECTION_TYPE_ADMIN:
$this->appConfig->setValueString($app, $fieldId, $value);
@@ -314,6 +350,27 @@ class DeclarativeManager implements IDeclarativeManager {
}
}
+ private function getSchemaField(string $app, string $formId, string $fieldId): ?array {
+ $form = $this->getForm($app, $formId);
+ if ($form !== null) {
+ foreach ($form->getSchema()['fields'] as $field) {
+ if ($field['id'] === $fieldId) {
+ return $field;
+ }
+ }
+ }
+ foreach ($this->appSchemas[$app] ?? [] as $schema) {
+ if ($schema['id'] === $formId) {
+ foreach ($schema['fields'] as $field) {
+ if ($field['id'] === $fieldId) {
+ return $field;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
private function getDefaultValue(string $app, string $formId, string $fieldId): mixed {
foreach ($this->appSchemas[$app] as $schema) {
if ($schema['id'] === $formId) {
@@ -391,6 +448,12 @@ class DeclarativeManager implements IDeclarativeManager {
]);
return false;
}
+ if (isset($field['sensitive']) && $field['sensitive'] === true && !in_array($field['type'], [DeclarativeSettingsTypes::TEXT, DeclarativeSettingsTypes::PASSWORD])) {
+ $this->logger->warning('Declarative settings: sensitive field type is supported only for TEXT and PASSWORD types ({app}, {form_id}, {field_id})', [
+ 'app' => $appId, 'form_id' => $formId, 'field_id' => $fieldId,
+ ]);
+ return false;
+ }
if (!$this->validateField($appId, $formId, $field)) {
return false;
}
diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php
index ca5d90f8c00..229f3138e6d 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -724,7 +724,8 @@ class Manager extends PublicEmitter implements IUserManager {
// User ID is too long
if (strlen($uid) > IUser::MAX_USERID_LENGTH) {
- throw new \InvalidArgumentException($l->t('Login is too long'));
+ // TRANSLATORS User ID is too long
+ throw new \InvalidArgumentException($l->t('Username is too long'));
}
if (!$this->verifyUid($uid, $checkDataDirectory)) {
diff --git a/lib/public/Settings/IDeclarativeSettingsForm.php b/lib/public/Settings/IDeclarativeSettingsForm.php
index d471cdf4a93..419905b7b23 100644
--- a/lib/public/Settings/IDeclarativeSettingsForm.php
+++ b/lib/public/Settings/IDeclarativeSettingsForm.php
@@ -27,6 +27,7 @@ namespace OCP\Settings;
* label?: string,
* default: mixed,
* options?: list<string|array{name: string, value: mixed}>,
+ * sensitive?: boolean,
* }
*
* @psalm-type DeclarativeSettingsFormFieldWithValue = DeclarativeSettingsFormField&array{