diff options
49 files changed, 1125 insertions, 161 deletions
diff --git a/.drone.yml b/.drone.yml index 147de92ad37..8e9f2c2d270 100644 --- a/.drone.yml +++ b/.drone.yml @@ -171,7 +171,7 @@ pipeline: DB: NODB PHP: 7.1 nodb-php7.2: - image: nextcloudci/php7.2:php7.2-7 + image: nextcloudci/php7.2:php7.2-8 commands: - NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite when: @@ -203,7 +203,7 @@ pipeline: DB: sqlite PHP: 7.1 sqlite-php7.2: - image: nextcloudci/php7.2:php7.2-7 + image: nextcloudci/php7.2:php7.2-8 commands: - NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite when: diff --git a/apps/comments/l10n/fr.js b/apps/comments/l10n/fr.js index 1b5c137dab8..b1d94886f6e 100644 --- a/apps/comments/l10n/fr.js +++ b/apps/comments/l10n/fr.js @@ -2,14 +2,14 @@ OC.L10N.register( "comments", { "Comments" : "Commentaires", - "Unknown user" : "Utilisateur inconnu", + "Unknown user" : "Utilisateur·trice inconnu·e", "New comment …" : "Nouveau commentaire...", "Delete comment" : "Supprimer le commentaire", "Post" : "Poster", "Cancel" : "Annuler", "Edit comment" : "Modifier le commentaire", "[Deleted user]" : "[Utilisateur supprimé]", - "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !", + "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrez la conversation !", "More comments …" : "Plus de commentaires ...", "Save" : "Enregistrer", "Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés", @@ -22,12 +22,12 @@ OC.L10N.register( "%1$s commented" : "%1$s a commenté", "{author} commented" : "{author} a commenté", "You commented on %1$s" : "Vous avez commenté %1$s", - "You commented on {file}" : "Vous avez commenté sur {file}", + "You commented on {file}" : "Vous avez commenté {file}", "%1$s commented on %2$s" : "%1$s a commenté %2$s", "{author} commented on {file}" : "{author} a commenté sur {file}", - "<strong>Comments</strong> for files" : "<strong>Commentaires</strong> pour les fichiers", - "A (now) deleted user mentioned you in a comment on “%s”" : "Un utilisateur (maintenant supprimé) vous a mentionné dans un commentaire sur “%s”", - "A (now) deleted user mentioned you in a comment on “{file}”" : "Un utilisateur (maintenant supprimé) vous a mentionné dans un commentaire sur “{file}”", + "<strong>Comments</strong> for files" : "<strong>Commentaires</strong> sur les fichiers", + "A (now) deleted user mentioned you in a comment on “%s”" : "Un·e utilisateur·trice (maintenant supprimé·e) vous a mentionné·e dans un commentaire sur “%s”", + "A (now) deleted user mentioned you in a comment on “{file}”" : "Un·e utilisateur·trice (maintenant supprimé·e) vous a mentionné·e dans un commentaire sur “{file}”", "%1$s mentioned you in a comment on “%2$s”" : "%1$s vous a mentionné⋅e dans un commentaire sur “%2$s”", "{user} mentioned you in a comment on “{file}”" : "{user} vous a mentionné⋅e dans un commentaire sur “{file}”" }, diff --git a/apps/comments/l10n/fr.json b/apps/comments/l10n/fr.json index 1d741a43560..66374bbf484 100644 --- a/apps/comments/l10n/fr.json +++ b/apps/comments/l10n/fr.json @@ -1,13 +1,13 @@ { "translations": { "Comments" : "Commentaires", - "Unknown user" : "Utilisateur inconnu", + "Unknown user" : "Utilisateur·trice inconnu·e", "New comment …" : "Nouveau commentaire...", "Delete comment" : "Supprimer le commentaire", "Post" : "Poster", "Cancel" : "Annuler", "Edit comment" : "Modifier le commentaire", "[Deleted user]" : "[Utilisateur supprimé]", - "No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !", + "No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrez la conversation !", "More comments …" : "Plus de commentaires ...", "Save" : "Enregistrer", "Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés", @@ -20,12 +20,12 @@ "%1$s commented" : "%1$s a commenté", "{author} commented" : "{author} a commenté", "You commented on %1$s" : "Vous avez commenté %1$s", - "You commented on {file}" : "Vous avez commenté sur {file}", + "You commented on {file}" : "Vous avez commenté {file}", "%1$s commented on %2$s" : "%1$s a commenté %2$s", "{author} commented on {file}" : "{author} a commenté sur {file}", - "<strong>Comments</strong> for files" : "<strong>Commentaires</strong> pour les fichiers", - "A (now) deleted user mentioned you in a comment on “%s”" : "Un utilisateur (maintenant supprimé) vous a mentionné dans un commentaire sur “%s”", - "A (now) deleted user mentioned you in a comment on “{file}”" : "Un utilisateur (maintenant supprimé) vous a mentionné dans un commentaire sur “{file}”", + "<strong>Comments</strong> for files" : "<strong>Commentaires</strong> sur les fichiers", + "A (now) deleted user mentioned you in a comment on “%s”" : "Un·e utilisateur·trice (maintenant supprimé·e) vous a mentionné·e dans un commentaire sur “%s”", + "A (now) deleted user mentioned you in a comment on “{file}”" : "Un·e utilisateur·trice (maintenant supprimé·e) vous a mentionné·e dans un commentaire sur “{file}”", "%1$s mentioned you in a comment on “%2$s”" : "%1$s vous a mentionné⋅e dans un commentaire sur “%2$s”", "{user} mentioned you in a comment on “{file}”" : "{user} vous a mentionné⋅e dans un commentaire sur “{file}”" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/encryption/lib/Crypto/EncryptAll.php b/apps/encryption/lib/Crypto/EncryptAll.php index 60c7b13b708..2afab22d522 100644 --- a/apps/encryption/lib/Crypto/EncryptAll.php +++ b/apps/encryption/lib/Crypto/EncryptAll.php @@ -153,12 +153,8 @@ class EncryptAll { $this->createKeyPairs(); } - //setup users file system and encrypt all files one by one (take should encrypt setting of storage into account) - $this->output->writeln("\n"); - $this->output->writeln('Start to encrypt users files'); - $this->output->writeln('----------------------------'); - $this->output->writeln(''); - $this->encryptAllUsersFiles(); + + // output generated encryption key passwords if ($this->util->isMasterKeyEnabled() === false) { //send-out or display password list and write it to a file $this->output->writeln("\n"); @@ -167,6 +163,13 @@ class EncryptAll { $this->output->writeln(''); $this->outputPasswords(); } + + //setup users file system and encrypt all files one by one (take should encrypt setting of storage into account) + $this->output->writeln("\n"); + $this->output->writeln('Start to encrypt users files'); + $this->output->writeln('----------------------------'); + $this->output->writeln(''); + $this->encryptAllUsersFiles(); $this->output->writeln("\n"); } diff --git a/apps/encryption/tests/Crypto/EncryptAllTest.php b/apps/encryption/tests/Crypto/EncryptAllTest.php index 6c279a54f57..df8401c15b2 100644 --- a/apps/encryption/tests/Crypto/EncryptAllTest.php +++ b/apps/encryption/tests/Crypto/EncryptAllTest.php @@ -149,8 +149,8 @@ class EncryptAllTest extends TestCase { $this->util->expects($this->any())->method('isMasterKeyEnabled')->willReturn(false); $encryptAll->expects($this->at(0))->method('createKeyPairs')->with(); - $encryptAll->expects($this->at(1))->method('encryptAllUsersFiles')->with(); - $encryptAll->expects($this->at(2))->method('outputPasswords')->with(); + $encryptAll->expects($this->at(1))->method('outputPasswords')->with(); + $encryptAll->expects($this->at(2))->method('encryptAllUsersFiles')->with(); $encryptAll->encryptAll($this->inputInterface, $this->outputInterface); diff --git a/apps/files_external/l10n/da.js b/apps/files_external/l10n/da.js index 03a64fbe932..8b341419c55 100644 --- a/apps/files_external/l10n/da.js +++ b/apps/files_external/l10n/da.js @@ -12,6 +12,7 @@ OC.L10N.register( "Error generating key pair" : "Fejl under oprettelse af nøglepar", "All users. Type to select user or group." : "Alle brugere. Indtast for at vælge bruger eller gruppe.", "(group)" : "(gruppe)", + "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitet med Mac NFD encoding (langsom)", "Admin defined" : "Bestemt af administrator", "Saved" : "Gemt", "Saving..." : "Gemmer...", diff --git a/apps/files_external/l10n/da.json b/apps/files_external/l10n/da.json index 65c09e57730..66cf1369403 100644 --- a/apps/files_external/l10n/da.json +++ b/apps/files_external/l10n/da.json @@ -10,6 +10,7 @@ "Error generating key pair" : "Fejl under oprettelse af nøglepar", "All users. Type to select user or group." : "Alle brugere. Indtast for at vælge bruger eller gruppe.", "(group)" : "(gruppe)", + "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitet med Mac NFD encoding (langsom)", "Admin defined" : "Bestemt af administrator", "Saved" : "Gemt", "Saving..." : "Gemmer...", diff --git a/apps/oauth2/l10n/id.js b/apps/oauth2/l10n/id.js new file mode 100644 index 00000000000..41cac573832 --- /dev/null +++ b/apps/oauth2/l10n/id.js @@ -0,0 +1,13 @@ +OC.L10N.register( + "oauth2", + { + "OAuth 2.0 clients" : "Klien OAuth 2.0", + "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 memungkinkan layanan eksternal untuk meminta akses ke %s.", + "Name" : "Nama", + "Redirection URI" : "URI Pengalihan", + "Client Identifier" : "Identifier klien", + "Secret" : "Rahasia", + "Add client" : "Tambah klien", + "Add" : "Tambah" +}, +"nplurals=1; plural=0;"); diff --git a/apps/oauth2/l10n/id.json b/apps/oauth2/l10n/id.json new file mode 100644 index 00000000000..3d8bc6b690e --- /dev/null +++ b/apps/oauth2/l10n/id.json @@ -0,0 +1,11 @@ +{ "translations": { + "OAuth 2.0 clients" : "Klien OAuth 2.0", + "OAuth 2.0 allows external services to request access to %s." : "OAuth 2.0 memungkinkan layanan eksternal untuk meminta akses ke %s.", + "Name" : "Nama", + "Redirection URI" : "URI Pengalihan", + "Client Identifier" : "Identifier klien", + "Secret" : "Rahasia", + "Add client" : "Tambah klien", + "Add" : "Tambah" +},"pluralForm" :"nplurals=1; plural=0;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/lt_LT.js b/apps/sharebymail/l10n/lt_LT.js index 8d171636f9c..6aa01a7e6d1 100644 --- a/apps/sharebymail/l10n/lt_LT.js +++ b/apps/sharebymail/l10n/lt_LT.js @@ -30,15 +30,21 @@ OC.L10N.register( "Password to access »%s«" : "Slaptažodis prieigai prie »%s«", "It is protected with the following password: %s" : "Apsaugotas slaptažodžiu: %s", "Password to access »%s« shared with %s" : "Slaptažodis prieigai prie »%s« pasidalintas su %s", + "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Jūs ką tik pasidalinote »%s« su %s. Dalinimosi nuoroda buvo išsiųsta adresatui. Pagal saugumo taisykles, kurias nustatė %s administratorius, kiekvienas dalinimasis turi būti apsaugotas slaptažodžiu. Kadangi slaptažodžio negalima tiesiogiai siųsti adresatui, jūs turite jį perduoti gyvai.", "This is the password: %s" : "Štai yra slaptažodis: %s", "You can choose a different password at any time in the share dialog." : "Bendrinimo dialoge bet kuriuo metu galite pasirinkti kitą slaptažodį.", "Could not find share" : "Nepavyko rasti viešinio", "Share by mail" : "Bendrinama per el. paštą", "Allows users to share a personalized link to a file or folder by putting in an email address." : "Leidžia vartotojams bendrinti asmeninę nuorodą į failą ar aplanką, pateikiant el. pašto adresą.", "Send password by mail" : "Siųti slaptažodį elektroniniu paštu", + "Enforce password protection" : "Apsaugoti slaptažodžiu", "Failed to send share by E-mail" : "Nepavyko išsiųsti bendrinimo el. paštu", + "%s shared »%s« with you on behalf of %s" : "%s su jumis pasidalino »%s« , %s vardu.", "Failed to create the E-mail" : "Nepavyko sukurti el. pašto", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Labas,\n\n%s su jumis pasidalino »%s« , %s vardu.\n\n%s\n\n", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Labas,\n\n%s pasidalino »%s« su tavimi.\n\n%s\n\n", "Cheers!" : "Sveikinimai!", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Labas, <br><br>%s pasidalino su jumis <a href=\"%s\">%s</a> , %s vardu.<br><br>", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Sveiki,<br><br>%s pradėjo su jumis bendrinti <a href=\"%s\">%s</a>.<br><br>" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/sharebymail/l10n/lt_LT.json b/apps/sharebymail/l10n/lt_LT.json index 3c6d583c0ad..3e44ee5a12c 100644 --- a/apps/sharebymail/l10n/lt_LT.json +++ b/apps/sharebymail/l10n/lt_LT.json @@ -28,15 +28,21 @@ "Password to access »%s«" : "Slaptažodis prieigai prie »%s«", "It is protected with the following password: %s" : "Apsaugotas slaptažodžiu: %s", "Password to access »%s« shared with %s" : "Slaptažodis prieigai prie »%s« pasidalintas su %s", + "You just shared »%s« with %s. The share was already send to the recipient. Due to the security policies defined by the administrator of %s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Jūs ką tik pasidalinote »%s« su %s. Dalinimosi nuoroda buvo išsiųsta adresatui. Pagal saugumo taisykles, kurias nustatė %s administratorius, kiekvienas dalinimasis turi būti apsaugotas slaptažodžiu. Kadangi slaptažodžio negalima tiesiogiai siųsti adresatui, jūs turite jį perduoti gyvai.", "This is the password: %s" : "Štai yra slaptažodis: %s", "You can choose a different password at any time in the share dialog." : "Bendrinimo dialoge bet kuriuo metu galite pasirinkti kitą slaptažodį.", "Could not find share" : "Nepavyko rasti viešinio", "Share by mail" : "Bendrinama per el. paštą", "Allows users to share a personalized link to a file or folder by putting in an email address." : "Leidžia vartotojams bendrinti asmeninę nuorodą į failą ar aplanką, pateikiant el. pašto adresą.", "Send password by mail" : "Siųti slaptažodį elektroniniu paštu", + "Enforce password protection" : "Apsaugoti slaptažodžiu", "Failed to send share by E-mail" : "Nepavyko išsiųsti bendrinimo el. paštu", + "%s shared »%s« with you on behalf of %s" : "%s su jumis pasidalino »%s« , %s vardu.", "Failed to create the E-mail" : "Nepavyko sukurti el. pašto", + "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Labas,\n\n%s su jumis pasidalino »%s« , %s vardu.\n\n%s\n\n", + "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Labas,\n\n%s pasidalino »%s« su tavimi.\n\n%s\n\n", "Cheers!" : "Sveikinimai!", + "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Labas, <br><br>%s pasidalino su jumis <a href=\"%s\">%s</a> , %s vardu.<br><br>", "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Sveiki,<br><br>%s pradėjo su jumis bendrinti <a href=\"%s\">%s</a>.<br><br>" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/theming/appinfo/routes.php b/apps/theming/appinfo/routes.php index f4aa2f93162..530e13f53d4 100644 --- a/apps/theming/appinfo/routes.php +++ b/apps/theming/appinfo/routes.php @@ -61,6 +61,12 @@ return ['routes' => [ 'verb' => 'GET', ], [ + 'name' => 'Theming#getManifest', + 'url' => '/manifest/{app}', + 'verb' => 'GET', + 'defaults' => array('app' => 'core') + ], + [ 'name' => 'Icon#getFavicon', 'url' => '/favicon/{app}', 'verb' => 'GET', diff --git a/apps/theming/l10n/lt_LT.js b/apps/theming/l10n/lt_LT.js index dd895804418..b32978414d6 100644 --- a/apps/theming/l10n/lt_LT.js +++ b/apps/theming/l10n/lt_LT.js @@ -13,6 +13,7 @@ OC.L10N.register( "Unsupported image type" : "Nepalaikomas paveikslo tipas", "You are already using a custom theme" : "Jūs jau naudojate tinkintą temą", "Theming" : "Tema", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Temos leidžia lengvai parinkti ir pritaikyti administruojamų naudotojų atvaizdavimą. ", "Name" : "Pavadinimas", "Reset to default" : "Atstatyti į numatytąją", "Web address" : "Saityno adresas", diff --git a/apps/theming/l10n/lt_LT.json b/apps/theming/l10n/lt_LT.json index 74a192b259c..e695f4b6223 100644 --- a/apps/theming/l10n/lt_LT.json +++ b/apps/theming/l10n/lt_LT.json @@ -11,6 +11,7 @@ "Unsupported image type" : "Nepalaikomas paveikslo tipas", "You are already using a custom theme" : "Jūs jau naudojate tinkintą temą", "Theming" : "Tema", + "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Temos leidžia lengvai parinkti ir pritaikyti administruojamų naudotojų atvaizdavimą. ", "Name" : "Pavadinimas", "Reset to default" : "Atstatyti į numatytąją", "Web address" : "Saityno adresas", diff --git a/apps/theming/lib/Controller/ThemingController.php b/apps/theming/lib/Controller/ThemingController.php index b409d309f4d..06c2c430b7f 100644 --- a/apps/theming/lib/Controller/ThemingController.php +++ b/apps/theming/lib/Controller/ThemingController.php @@ -423,4 +423,39 @@ class ThemingController extends Controller { $response->cacheFor(3600); return $response; } + + /** + * @NoCSRFRequired + * @PublicPage + * + * @return Http\JSONResponse + */ + public function getManifest($app) { + $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); + $responseJS = [ + 'name' => $this->themingDefaults->getName(), + 'start_url' => $this->urlGenerator->getBaseUrl(), + 'icons' => + [ + [ + 'src' => $this->urlGenerator->linkToRoute('theming.Icon.getTouchIcon', + ['app' => $app]) . '?v=' . $cacheBusterValue, + 'type'=> 'image/png', + 'sizes'=> '128x128' + ], + [ + 'src' => $this->urlGenerator->linkToRoute('theming.Icon.getFavicon', + ['app' => $app]) . '?v=' . $cacheBusterValue, + 'type' => 'image/svg+xml', + 'sizes' => '16x16' + ] + ], + 'display' => 'standalone' + ]; + $response = new Http\JSONResponse($responseJS); + $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); + $response->addHeader('Pragma', 'cache'); + $response->cacheFor(3600); + return $response; + } } diff --git a/apps/theming/lib/IconBuilder.php b/apps/theming/lib/IconBuilder.php index 4383ccc7cd9..d0e26e110fc 100644 --- a/apps/theming/lib/IconBuilder.php +++ b/apps/theming/lib/IconBuilder.php @@ -58,7 +58,7 @@ class IconBuilder { if ($icon === false) { return false; } - $icon->setImageFormat("png24"); + $icon->setImageFormat("png32"); $data = $icon->getImageBlob(); $icon->destroy(); return $data; @@ -77,7 +77,7 @@ class IconBuilder { if ($icon === false) { return false; } - $icon->setImageFormat("png24"); + $icon->setImageFormat("png32"); $data = $icon->getImageBlob(); $icon->destroy(); return $data; @@ -145,6 +145,17 @@ class IconBuilder { $appIconFile->setResolution($resX, $resY); $appIconFile->setBackgroundColor(new ImagickPixel('transparent')); $appIconFile->readImageBlob($svg); + + /** + * invert app icons for bright primary colors + * the default nextcloud logo will not be inverted to black + */ + if ($this->util->invertTextColor($color) + && !$appIcon instanceof ISimpleFile + && $app !== "core" + ) { + $appIconFile->negateImage(false); + } $appIconFile->scaleImage(512, 512, true); } else { $appIconFile = new Imagick(); @@ -162,8 +173,6 @@ class IconBuilder { $offset_w = 512 / 2 - $innerWidth / 2; $offset_h = 512 / 2 - $innerHeight / 2; - $appIconFile->setImageFormat("png24"); - $finalIconFile = new Imagick(); $finalIconFile->setBackgroundColor(new ImagickPixel('transparent')); $finalIconFile->readImageBlob($background); diff --git a/apps/theming/lib/ThemingDefaults.php b/apps/theming/lib/ThemingDefaults.php index 8200957edc0..6ee546d2630 100644 --- a/apps/theming/lib/ThemingDefaults.php +++ b/apps/theming/lib/ThemingDefaults.php @@ -23,6 +23,8 @@ namespace OCA\Theming; +use OCP\App\AppPathNotFoundException; +use OCP\App\IAppManager; use OCP\Files\IAppData; use OCP\ICacheFactory; use OCP\IConfig; @@ -41,16 +43,23 @@ class ThemingDefaults extends \OC_Defaults { private $appData; /** @var ICacheFactory */ private $cacheFactory; + /** @var Util */ + private $util; + /** @var IAppManager */ + private $appManager; /** @var string */ private $name; /** @var string */ + private $title; + /** @var string */ + private $entity; + /** @var string */ private $url; /** @var string */ private $slogan; /** @var string */ private $color; - /** @var Util */ - private $util; + /** @var string */ private $iTunesAppId; /** @var string */ @@ -68,13 +77,15 @@ class ThemingDefaults extends \OC_Defaults { * @param IAppData $appData * @param ICacheFactory $cacheFactory * @param Util $util + * @param IAppManager $appManager */ public function __construct(IConfig $config, IL10N $l, IURLGenerator $urlGenerator, IAppData $appData, ICacheFactory $cacheFactory, - Util $util + Util $util, + IAppManager $appManager ) { parent::__construct(); $this->config = $config; @@ -83,8 +94,11 @@ class ThemingDefaults extends \OC_Defaults { $this->appData = $appData; $this->cacheFactory = $cacheFactory; $this->util = $util; + $this->appManager = $appManager; $this->name = parent::getName(); + $this->title = parent::getTitle(); + $this->entity = parent::getEntity(); $this->url = parent::getBaseUrl(); $this->slogan = parent::getSlogan(); $this->color = parent::getColorPrimary(); @@ -102,11 +116,11 @@ class ThemingDefaults extends \OC_Defaults { } public function getTitle() { - return $this->getName(); + return strip_tags($this->config->getAppValue('theming', 'name', $this->title)); } public function getEntity() { - return $this->getName(); + return strip_tags($this->config->getAppValue('theming', 'name', $this->entity)); } public function getBaseUrl() { @@ -249,6 +263,38 @@ class ThemingDefaults extends \OC_Defaults { } /** + * Check if the image should be replaced by the theming app + * and return the new image location then + * + * @param string $app name of the app + * @param string $image filename of the image + * @return bool|string false if image should not replaced, otherwise the location of the image + */ + public function replaceImagePath($app, $image) { + if($app==='') { + $app = 'core'; + } + $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); + + if ($image === 'favicon.ico' && $this->shouldReplaceIcons()) { + return $this->urlGenerator->linkToRoute('theming.Icon.getFavicon', ['app' => $app]) . '?v=' . $cacheBusterValue; + } + if ($image === 'favicon-touch.png' && $this->shouldReplaceIcons()) { + return $this->urlGenerator->linkToRoute('theming.Icon.getTouchIcon', ['app' => $app]) . '?v=' . $cacheBusterValue; + } + if ($image === 'manifest.json') { + try { + $appPath = $this->appManager->getAppPath($app); + if (file_exists($appPath . '/img/manifest.json')) { + return false; + } + } catch (AppPathNotFoundException $e) {} + return $this->urlGenerator->linkToRoute('theming.Theming.getManifest') . '?v=' . $cacheBusterValue; + } + return false; + } + + /** * Check if Imagemagick is enabled and if SVG is supported * otherwise we can't render custom icons * diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php index 5e6e43ca3cb..c03eccb6eef 100644 --- a/apps/theming/tests/Controller/ThemingControllerTest.php +++ b/apps/theming/tests/Controller/ThemingControllerTest.php @@ -729,4 +729,53 @@ class ThemingControllerTest extends TestCase { $expected->cacheFor(3600); @$this->assertEquals($expected, $this->themingController->getJavascript()); } + + public function testGetManifest() { + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('theming', 'cachebuster', '0') + ->willReturn('0'); + $this->themingDefaults + ->expects($this->any()) + ->method('getName') + ->willReturn('Nextcloud'); + $this->urlGenerator + ->expects($this->at(0)) + ->method('getBaseUrl') + ->willReturn('localhost'); + $this->urlGenerator + ->expects($this->at(1)) + ->method('linkToRoute') + ->with('theming.Icon.getTouchIcon', ['app' => 'core']) + ->willReturn('touchicon'); + $this->urlGenerator + ->expects($this->at(2)) + ->method('linkToRoute') + ->with('theming.Icon.getFavicon', ['app' => 'core']) + ->willReturn('favicon'); + $response = new Http\JSONResponse([ + 'name' => 'Nextcloud', + 'start_url' => 'localhost', + 'icons' => + [ + [ + 'src' => 'touchicon?v=0', + 'type'=> 'image/png', + 'sizes'=> '128x128' + ], + [ + 'src' => 'favicon?v=0', + 'type' => 'image/svg+xml', + 'sizes' => '16x16' + ] + ], + 'display' => 'standalone' + ]); + $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); + $response->addHeader('Pragma', 'cache'); + $response->cacheFor(3600); + $this->assertEquals($response, $this->themingController->getManifest('core')); + } + } diff --git a/apps/theming/tests/ThemingDefaultsTest.php b/apps/theming/tests/ThemingDefaultsTest.php index c6d1fec91dd..abd85a612c9 100644 --- a/apps/theming/tests/ThemingDefaultsTest.php +++ b/apps/theming/tests/ThemingDefaultsTest.php @@ -24,6 +24,7 @@ namespace OCA\Theming\Tests; use OCA\Theming\ThemingDefaults; +use OCP\App\IAppManager; use OCP\Files\IAppData; use OCA\Theming\Util; use OCP\Files\NotFoundException; @@ -55,6 +56,8 @@ class ThemingDefaultsTest extends TestCase { private $util; /** @var ICache|\PHPUnit_Framework_MockObject_MockObject */ private $cache; + /** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject */ + private $appManager; public function setUp() { parent::setUp(); @@ -65,6 +68,7 @@ class ThemingDefaultsTest extends TestCase { $this->cacheFactory = $this->createMock(ICacheFactory::class); $this->cache = $this->createMock(ICache::class); $this->util = $this->createMock(Util::class); + $this->appManager = $this->createMock(IAppManager::class); $this->defaults = new \OC_Defaults(); $this->cacheFactory ->expects($this->any()) @@ -77,7 +81,8 @@ class ThemingDefaultsTest extends TestCase { $this->urlGenerator, $this->appData, $this->cacheFactory, - $this->util + $this->util, + $this->appManager ); } @@ -607,4 +612,31 @@ class ThemingDefaultsTest extends TestCase { $this->assertEquals('1234567890', $this->template->getiTunesAppId()); } + public function dataReplaceImagePath() { + return [ + ['core', 'test.png', false], + ['core', 'manifest.json'], + ['core', 'favicon.ico'], + ['core', 'favicon-touch.png'] + ]; + } + + /** @dataProvider dataReplaceImagePath */ + public function testReplaceImagePath($app, $image, $result = 'themingRoute?v=0') { + $this->cache->expects($this->any()) + ->method('get') + ->with('shouldReplaceIcons') + ->willReturn(true); + $this->config + ->expects($this->any()) + ->method('getAppValue') + ->with('theming', 'cachebuster', '0') + ->willReturn('0'); + $this->urlGenerator + ->expects($this->any()) + ->method('linkToRoute') + ->willReturn('themingRoute'); + $this->assertEquals($result, $this->template->replaceImagePath($app, $image)); + } + } diff --git a/apps/updatenotification/l10n/lt_LT.js b/apps/updatenotification/l10n/lt_LT.js index 7b9e2098c46..0c3c0d966db 100644 --- a/apps/updatenotification/l10n/lt_LT.js +++ b/apps/updatenotification/l10n/lt_LT.js @@ -5,6 +5,7 @@ OC.L10N.register( "Could not start updater, please try the manual update" : "Nepavyko paleisti atnaujinimo programos, prašome bandyti atnaujinimą rankiniu būdu", "{version} is available. Get more information on how to update." : "Yra prieinama {version}. Gaukite daugiau informacijos apie tai kaip atnaujinti.", "Channel updated" : "Kanalas atnaujintas", + "The update server could not be reached since %d days to check for new updates." : " Atnaujinimo serveris nepasiekiamas %d dienas.", "Please check the Nextcloud and server log files for errors." : "Prašome patikrinti Nextcloud ir serverio žurnalų įrašus apie galimas klaidas.", "Update to %1$s is available." : "Yra prieinamas atnaujinimas į %1$s.", "Update for %1$s to version %2$s is available." : "Yra prieinamas %1$s atnaujinimas į versiją %2$s.", diff --git a/apps/updatenotification/l10n/lt_LT.json b/apps/updatenotification/l10n/lt_LT.json index 4d19ba33ac6..1ef054de405 100644 --- a/apps/updatenotification/l10n/lt_LT.json +++ b/apps/updatenotification/l10n/lt_LT.json @@ -3,6 +3,7 @@ "Could not start updater, please try the manual update" : "Nepavyko paleisti atnaujinimo programos, prašome bandyti atnaujinimą rankiniu būdu", "{version} is available. Get more information on how to update." : "Yra prieinama {version}. Gaukite daugiau informacijos apie tai kaip atnaujinti.", "Channel updated" : "Kanalas atnaujintas", + "The update server could not be reached since %d days to check for new updates." : " Atnaujinimo serveris nepasiekiamas %d dienas.", "Please check the Nextcloud and server log files for errors." : "Prašome patikrinti Nextcloud ir serverio žurnalų įrašus apie galimas klaidas.", "Update to %1$s is available." : "Yra prieinamas atnaujinimas į %1$s.", "Update for %1$s to version %2$s is available." : "Yra prieinamas %1$s atnaujinimas į versiją %2$s.", diff --git a/apps/user_ldap/lib/User/Manager.php b/apps/user_ldap/lib/User/Manager.php index ea4d071b646..743456d68e2 100644 --- a/apps/user_ldap/lib/User/Manager.php +++ b/apps/user_ldap/lib/User/Manager.php @@ -135,6 +135,19 @@ class Manager { } /** + * removes a user entry from the cache + * @param $uid + */ + public function invalidate($uid) { + if(!isset($this->usersByUid[$uid])) { + return; + } + $dn = $this->usersByUid[$uid]->getDN(); + unset($this->usersByUid[$uid]); + unset($this->usersByDN[$dn]); + } + + /** * @brief checks whether the Access instance has been set * @throws \Exception if Access has not been set * @return null diff --git a/apps/user_ldap/lib/User/OfflineUser.php b/apps/user_ldap/lib/User/OfflineUser.php index 0e60a29514e..942eee84cb7 100644 --- a/apps/user_ldap/lib/User/OfflineUser.php +++ b/apps/user_ldap/lib/User/OfflineUser.php @@ -25,6 +25,8 @@ namespace OCA\User_LDAP\User; use OCA\User_LDAP\Mapping\UserMapping; +use OCP\IConfig; +use OCP\IDBConnection; class OfflineUser { /** @@ -60,11 +62,11 @@ class OfflineUser { */ protected $hasActiveShares; /** - * @var \OCP\IConfig $config + * @var IConfig $config */ protected $config; /** - * @var \OCP\IDBConnection $db + * @var IDBConnection $db */ protected $db; /** @@ -74,11 +76,11 @@ class OfflineUser { /** * @param string $ocName - * @param \OCP\IConfig $config - * @param \OCP\IDBConnection $db + * @param IConfig $config + * @param IDBConnection $db * @param \OCA\User_LDAP\Mapping\UserMapping $mapping */ - public function __construct($ocName, \OCP\IConfig $config, \OCP\IDBConnection $db, UserMapping $mapping) { + public function __construct($ocName, IConfig $config, IDBConnection $db, UserMapping $mapping) { $this->ocName = $ocName; $this->config = $config; $this->db = $db; diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index 3cc2fec740e..6c438391380 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -41,19 +41,20 @@ use OCA\User_LDAP\Exceptions\NotOnLDAP; use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; use OCP\IConfig; +use OCP\IUser; use OCP\Notification\IManager as INotificationManager; use OCP\Util; class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP { - /** @var string[] $homesToKill */ - protected $homesToKill = array(); - /** @var \OCP\IConfig */ protected $ocConfig; /** @var INotificationManager */ protected $notificationManager; + /** @var string */ + protected $currentUserInDeletionProcess; + /** * @param Access $access * @param \OCP\IConfig $ocConfig @@ -63,6 +64,24 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn parent::__construct($access); $this->ocConfig = $ocConfig; $this->notificationManager = $notificationManager; + $this->registerHooks(); + } + + protected function registerHooks() { + Util::connectHook('OC_User','pre_deleteUser', $this, 'preDeleteUser'); + Util::connectHook('OC_User','post_deleteUser', $this, 'postDeleteUser'); + } + + public function preDeleteUser(array $param) { + $user = $param[0]; + if(!$user instanceof IUser) { + throw new \RuntimeException('IUser expected'); + } + $this->currentUserInDeletionProcess = $user->getUID(); + } + + public function postDeleteUser() { + $this->currentUserInDeletionProcess = null; } /** @@ -359,10 +378,8 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn //Get Home Directory out of user preferences so we can return it later, //necessary for removing directories as done by OC_User. - $home = $this->ocConfig->getUserValue($uid, 'user_ldap', 'homePath', ''); - $this->homesToKill[$uid] = $home; $this->access->getUserMapper()->unmap($uid); - + $this->access->userManager->invalidate($uid); return true; } @@ -375,11 +392,6 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn * @throws \Exception */ public function getHome($uid) { - if(isset($this->homesToKill[$uid]) && !empty($this->homesToKill[$uid])) { - //a deleted user who needs some clean up - return $this->homesToKill[$uid]; - } - // user Exists check required as it is not done in user proxy! if(!$this->userExists($uid)) { return false; @@ -391,16 +403,18 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn return $path; } + // early return path if it is a deleted user $user = $this->access->userManager->get($uid); - if(is_null($user) || ($user instanceof OfflineUser && !$this->userExistsOnLDAP($user->getOCName()))) { - throw new NoUserException($uid . ' is not a valid user anymore'); - } if($user instanceof OfflineUser) { - // apparently this user survived the userExistsOnLDAP check, - // we request the user instance again in order to retrieve a User - // instance instead - $user = $this->access->userManager->get($uid); + if($this->currentUserInDeletionProcess === $user->getUID()) { + return $user->getHomePath(); + } else { + throw new NoUserException($uid . ' is not a valid user anymore'); + } + } else if ($user === null) { + throw new NoUserException($uid . ' is not a valid user anymore'); } + $path = $user->getHomePath(); $this->access->cacheUserHome($uid, $path); diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php new file mode 100644 index 00000000000..7d45ee69fbc --- /dev/null +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserCleanUp.php @@ -0,0 +1,102 @@ +<?php +/** + * @copyright Copyright (c) 2016, ownCloud, Inc. + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * @author Joas Schilling <coding@schilljs.com> + * + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\User_LDAP\Tests\Integration\Lib\User; + +use OC\User\NoUserException; +use OCA\User_LDAP\Jobs\CleanUp; +use OCA\User_LDAP\Mapping\UserMapping; +use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; +use OCA\User_LDAP\User_LDAP; + +require_once __DIR__ . '/../../Bootstrap.php'; + +class IntegrationTestUserCleanUp extends AbstractIntegrationTest { + /** @var UserMapping */ + protected $mapping; + + /** + * prepares the LDAP environment and sets up a test configuration for + * the LDAP backend. + */ + public function init() { + require(__DIR__ . '/../../setup-scripts/createExplicitUsers.php'); + parent::init(); + $this->mapping = new UserMapping(\OC::$server->getDatabaseConnection()); + $this->mapping->clear(); + $this->access->setUserMapper($this->mapping); + + $userBackend = new User_LDAP($this->access, \OC::$server->getConfig(), \OC::$server->getNotificationManager()); + \OC_User::useBackend($userBackend); + } + + /** + * adds a map entry for the user, so we know the username + * + * @param $dn + * @param $username + */ + private function prepareUser($dn, $username) { + // assigns our self-picked oc username to the dn + $this->mapping->map($dn, $username, 'fakeUUID-' . $username); + } + + private function deleteUserFromLDAP($dn) { + $cr = $this->connection->getConnectionResource(); + ldap_delete($cr, $dn); + } + + /** + * tests whether a display name consisting of two parts is created correctly + * + * @return bool + */ + protected function case1() { + $username = 'alice1337'; + $dn = 'uid=alice,ou=Users,' . $this->base; + $this->prepareUser($dn, $username); + + $user = \OC::$server->getUserManager()->get($username); + if($user === null) { + return false; + } + + $this->deleteUserFromLDAP($dn); + + $job = new CleanUp(); + $job->run([]); + + $user->delete(); + + return null === \OC::$server->getUserManager()->get($username); + } +} + +/** @var string $host */ +/** @var int $port */ +/** @var string $adn */ +/** @var string $apwd */ +/** @var string $bdn */ +$test = new IntegrationTestUserCleanUp($host, $port, $adn, $apwd, $bdn); +$test->init(); +$test->run(); diff --git a/apps/user_ldap/tests/User/UserTest.php b/apps/user_ldap/tests/User/UserTest.php index f48abc9ce4a..637842d9ac7 100644 --- a/apps/user_ldap/tests/User/UserTest.php +++ b/apps/user_ldap/tests/User/UserTest.php @@ -295,7 +295,7 @@ class UserTest extends \Test\TestCase { } public function testUpdateQuotaToNoneAllProvided() { - list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr, $notiMgr) = + list(, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr, $notiMgr) = $this->getTestInstances(); list($access, $connection) = diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php index ced5009148d..f74a57e25eb 100644 --- a/apps/user_ldap/tests/User_LDAPTest.php +++ b/apps/user_ldap/tests/User_LDAPTest.php @@ -35,6 +35,7 @@ use OCA\User_LDAP\FilesystemHelper; use OCA\User_LDAP\Helper; use OCA\User_LDAP\ILDAPWrapper; use OCA\User_LDAP\LogWrapper; +use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User\Manager; use OCA\User_LDAP\User\OfflineUser; use OC\HintException; @@ -59,7 +60,10 @@ use OCP\Notification\IManager as INotificationManager; class User_LDAPTest extends TestCase { protected $backend; protected $access; + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ protected $configMock; + /** @var OfflineUser|\PHPUnit_Framework_MockObject_MockObject */ + protected $offlineUser; protected function setUp() { parent::setUp(); @@ -80,10 +84,9 @@ class User_LDAPTest extends TestCase { $this->configMock = $this->createMock(IConfig::class); - $offlineUser = $this->getMockBuilder('\OCA\User_LDAP\User\OfflineUser') - ->disableOriginalConstructor() - ->getMock(); + $this->offlineUser = $this->createMock(OfflineUser::class); + /** @var Manager|\PHPUnit_Framework_MockObject_MockObject $um */ $um = $this->getMockBuilder(Manager::class) ->setMethods(['getDeletedUser']) ->setConstructorArgs([ @@ -100,7 +103,7 @@ class User_LDAPTest extends TestCase { $um->expects($this->any()) ->method('getDeletedUser') - ->will($this->returnValue($offlineUser)); + ->will($this->returnValue($this->offlineUser)); $helper = new Helper(\OC::$server->getConfig()); @@ -284,10 +287,11 @@ class User_LDAPTest extends TestCase { } public function testDeleteUserSuccess() { + $uid = 'jeremy'; + $home = '/var/vhome/jdings/'; + $access = $this->getAccessMock(); - $mapping = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping') - ->disableOriginalConstructor() - ->getMock(); + $mapping = $this->createMock(UserMapping::class); $mapping->expects($this->once()) ->method('unmap') ->will($this->returnValue(true)); @@ -295,18 +299,20 @@ class User_LDAPTest extends TestCase { ->method('getUserMapper') ->will($this->returnValue($mapping)); - $config = $this->createMock(IConfig::class); - $config->expects($this->exactly(2)) + $this->configMock->expects($this->any()) ->method('getUserValue') - ->will($this->onConsecutiveCalls('1', '/var/vhome/jdings/')); + ->with($uid, 'user_ldap', 'isDeleted') + ->willReturn('1'); - $backend = new UserLDAP($access, $config, $this->createMock(INotificationManager::class)); + $this->offlineUser->expects($this->once()) + ->method('getHomePath') + ->willReturn($home); - $result = $backend->deleteUser('jeremy'); - $this->assertTrue($result); + $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class)); - $home = $backend->getHome('jeremy'); - $this->assertSame($home, '/var/vhome/jdings/'); + $result = $backend->deleteUser($uid); + $this->assertTrue($result); + $this->assertSame($backend->getHome($uid), $home); } /** @@ -577,11 +583,11 @@ class User_LDAPTest extends TestCase { $this->assertFalse($result); } - public function testDeleteUser() { + public function testDeleteUserExisting() { $access = $this->getAccessMock(); $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class)); - //we do not support deleting users at all + //we do not support deleting existing users at all $result = $backend->deleteUser('gunslinger'); $this->assertFalse($result); } @@ -699,8 +705,10 @@ class User_LDAPTest extends TestCase { * @expectedException \OC\User\NoUserException */ public function testGetHomeDeletedUser() { + $uid = 'newyorker'; + $access = $this->getAccessMock(); - $backend = new UserLDAP($access, $this->createMock(IConfig::class), $this->createMock(INotificationManager::class)); + $backend = new UserLDAP($access, $this->configMock, $this->createMock(INotificationManager::class)); $this->prepareMockForUserExists($access); $access->connection->expects($this->any()) @@ -716,9 +724,7 @@ class User_LDAPTest extends TestCase { ->method('readAttribute') ->will($this->returnValue([])); - $userMapper = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping') - ->disableOriginalConstructor() - ->getMock(); + $userMapper = $this->createMock(UserMapping::class); $access->expects($this->any()) ->method('getUserMapper') @@ -728,9 +734,13 @@ class User_LDAPTest extends TestCase { ->method('getUserValue') ->will($this->returnValue(true)); - //no path at all – triggers OC default behaviour - $result = $backend->getHome('newyorker'); - $this->assertFalse($result); + $this->offlineUser->expects($this->never()) + ->method('getHomePath'); + $this->offlineUser->expects($this->once()) + ->method('getUID') + ->willReturn($uid); + + $backend->getHome($uid); } private function prepareAccessForGetDisplayName(&$access) { diff --git a/core/l10n/hu.js b/core/l10n/hu.js index 5f6e5030644..b10e8b700db 100644 --- a/core/l10n/hu.js +++ b/core/l10n/hu.js @@ -147,6 +147,7 @@ OC.L10N.register( "Could not unshare" : "Nem sikerült visszavonni a megosztást", "Error while sharing" : "Nem sikerült létrehozni a megosztást", "Share details could not be loaded for this item." : "A megosztás részletei nem lehet betölteni ehhez az elemhez.", + "This list is maybe truncated - please refine your search term to see more results." : "Ez a lista lehet, hogy le van vágva - kérem pontosítsa a keresését, hogy több eredményt lásson.", "No users or groups found for {search}" : "{search} keresésre nem található felhasználó vagy csoport", "No users found for {search}" : "{search} keresésre nem található felhasználó", "An error occurred. Please try again" : "Hiba történt. Kérjük, próbálja meg újra!", diff --git a/core/l10n/hu.json b/core/l10n/hu.json index f447333f537..d8dee178ea9 100644 --- a/core/l10n/hu.json +++ b/core/l10n/hu.json @@ -145,6 +145,7 @@ "Could not unshare" : "Nem sikerült visszavonni a megosztást", "Error while sharing" : "Nem sikerült létrehozni a megosztást", "Share details could not be loaded for this item." : "A megosztás részletei nem lehet betölteni ehhez az elemhez.", + "This list is maybe truncated - please refine your search term to see more results." : "Ez a lista lehet, hogy le van vágva - kérem pontosítsa a keresését, hogy több eredményt lásson.", "No users or groups found for {search}" : "{search} keresésre nem található felhasználó vagy csoport", "No users found for {search}" : "{search} keresésre nem található felhasználó", "An error occurred. Please try again" : "Hiba történt. Kérjük, próbálja meg újra!", diff --git a/core/l10n/lt_LT.js b/core/l10n/lt_LT.js index c54b1bf9163..541bbd81625 100644 --- a/core/l10n/lt_LT.js +++ b/core/l10n/lt_LT.js @@ -220,6 +220,7 @@ OC.L10N.register( "You can click here to return to %s." : "Paspauskite čia norėdami grįžti į %s.", "Internal Server Error" : "Vidinė serverio klaida", "The server was unable to complete your request." : "Serveriui nepavyko įvykdyti jūsų užklausos.", + "If this happens again, please send the technical details below to the server administrator." : "Jei tai pasikartos, prašome nusiųskite administratoriui žemiau esančią informaciją .", "More details can be found in the server log." : "Detalesnė informacija yra sistemos žurnale.", "Technical details" : "Techniniai duomenys", "Remote Address: %s" : "Nuotolinis adresas: %s", @@ -271,6 +272,7 @@ OC.L10N.register( "Stay logged in" : "Likti prisijungus", "Alternative Logins" : "Alternatyvūs prisijungimai", "Account access" : "Paskyros prieiga", + "You are about to grant %s access to your %s account." : "Leisite %s naudoti jūsų %s paskyrą.", "App token" : "Išorinės sistemos įskiepio kodas", "Alternative login using app token" : "Alternatyvus prisijungimas naudojant išorinės sistemos kodą", "Redirecting …" : "Nukreipiama...", @@ -282,6 +284,9 @@ OC.L10N.register( "Cancel log in" : "Atšaukti prisijungimą", "Use backup code" : "Naudoti atsarginį kodą", "Error while validating your second factor" : "Klaida antrame prisijungimo žingsnyje", + "Access through untrusted domain" : "Prieiga iš nepatikimo domeno", + "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Susisiekite su sistemos administratoriumi. Jei jūs esate administratorius, pakeiskite \"trusted_domains\" nustatymą config/config.php byloje, kaip pavyzdyje config.sample.php.", + "Depending on your configuration, this button could also work to trust the domain:" : "Priklausomai nuo konfigūracijos, šiuo mygtuku taip pat galima patvirtinti domeną kaip patikimą.", "Add \"%s\" as trusted domain" : "Pridėti \"%s\" į patikimų domenų sąrašą", "App update required" : "Reikalingas įskiepio atnaujinimas", "%s will be updated to version %s" : "%s bus atnaujintas iki %s versijos", diff --git a/core/l10n/lt_LT.json b/core/l10n/lt_LT.json index 90b3b243bf9..3465b72f495 100644 --- a/core/l10n/lt_LT.json +++ b/core/l10n/lt_LT.json @@ -218,6 +218,7 @@ "You can click here to return to %s." : "Paspauskite čia norėdami grįžti į %s.", "Internal Server Error" : "Vidinė serverio klaida", "The server was unable to complete your request." : "Serveriui nepavyko įvykdyti jūsų užklausos.", + "If this happens again, please send the technical details below to the server administrator." : "Jei tai pasikartos, prašome nusiųskite administratoriui žemiau esančią informaciją .", "More details can be found in the server log." : "Detalesnė informacija yra sistemos žurnale.", "Technical details" : "Techniniai duomenys", "Remote Address: %s" : "Nuotolinis adresas: %s", @@ -269,6 +270,7 @@ "Stay logged in" : "Likti prisijungus", "Alternative Logins" : "Alternatyvūs prisijungimai", "Account access" : "Paskyros prieiga", + "You are about to grant %s access to your %s account." : "Leisite %s naudoti jūsų %s paskyrą.", "App token" : "Išorinės sistemos įskiepio kodas", "Alternative login using app token" : "Alternatyvus prisijungimas naudojant išorinės sistemos kodą", "Redirecting …" : "Nukreipiama...", @@ -280,6 +282,9 @@ "Cancel log in" : "Atšaukti prisijungimą", "Use backup code" : "Naudoti atsarginį kodą", "Error while validating your second factor" : "Klaida antrame prisijungimo žingsnyje", + "Access through untrusted domain" : "Prieiga iš nepatikimo domeno", + "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Susisiekite su sistemos administratoriumi. Jei jūs esate administratorius, pakeiskite \"trusted_domains\" nustatymą config/config.php byloje, kaip pavyzdyje config.sample.php.", + "Depending on your configuration, this button could also work to trust the domain:" : "Priklausomai nuo konfigūracijos, šiuo mygtuku taip pat galima patvirtinti domeną kaip patikimą.", "Add \"%s\" as trusted domain" : "Pridėti \"%s\" į patikimų domenų sąrašą", "App update required" : "Reikalingas įskiepio atnaujinimas", "%s will be updated to version %s" : "%s bus atnaujintas iki %s versijos", diff --git a/core/l10n/sr.js b/core/l10n/sr.js index 0d7ff410144..70a6dc06072 100644 --- a/core/l10n/sr.js +++ b/core/l10n/sr.js @@ -26,11 +26,11 @@ OC.L10N.register( "%s password reset" : "%s лозинка враћена", "Couldn't send reset email. Please contact your administrator." : "Не могу да пошаљем е-пошту за повраћај лозинке. Контактирајте администратора.", "Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за повраћај лозинке. Проверите да ли је корисничко име исправно.", - "Preparing update" : "Припремам надоградњу", + "Preparing update" : "Припремам ажурирање", "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Упозорење о поправци :", "Repair error: " : "Грешка поправке:", - "Please use the command line updater because automatic updating is disabled in the config.php." : "Молимо вас да надоградњу урадите преко командне линије јер је аутоматско надоградња онемогућена у config.php.", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Молимо вас да ажурирање урадите преко командне линије јер је аутоматско ажурирање онемогућено у config.php.", "[%d / %d]: Checking table %s" : "[%d / %d]: Проверавање табеле %s", "Turned on maintenance mode" : "Режим одржавања укључен", "Turned off maintenance mode" : "Режим одржавања искључен", @@ -39,10 +39,10 @@ OC.L10N.register( "Updated database" : "База података ажурирана", "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Провера да ли шема базе података може да се ажурира (ово може потрајати, у зависности колика Вам је база)", "Checked database schema update" : "Проверено ажурирање шеме базе података", - "Checking updates of apps" : "Провера надоградњи за апликације", - "Checking for update of app \"%s\" in appstore" : "Провера надоградње за апликацију \"%s\" у продавници", - "Update app \"%s\" from appstore" : "Надоградња апликације \"%s\" из продавнице", - "Checked for update of app \"%s\" in appstore" : "Проверана надоградња апликације \"%s\" у продавници", + "Checking updates of apps" : "Провера ажурирања апликација", + "Checking for update of app \"%s\" in appstore" : "Провера ажурирања апликације \"%s\" у продавници", + "Update app \"%s\" from appstore" : "Ажурирање апликације \"%s\" из продавнице", + "Checked for update of app \"%s\" in appstore" : "Проверено ажурирање апликације \"%s\" у продавници", "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Провера да ли шема база за %s може бити ажурирана (ово може да потраје, у зависности колико Вам је база)", "Checked database schema update for apps" : "Проверено ажурирање шеме базе података за апликације", "Updated \"%s\" to %s" : "„%s“ ажуриран на %s", @@ -106,9 +106,19 @@ OC.L10N.register( "Strong password" : "Јака лозинка", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију датотека. Изгледа да је ВебДАВ сучеље покварено.", "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ваш сервер није правилно подешен да разлучи \"{url}\". Можете наћи више информација у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>.", + "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овај сервер нема интернет конекцију: немогуће је доћи до више интернет крајњих тачака. Ово значи да неке могућности као што су качење спољних складишта, обавештења о ажурирањима или инсталација апликација треће стране неће радити. Приступање датотекама споља и слање обавештења е-поштом исто тако може да не ради. Саветујемо да омогућите интернет конекцију овом серверу ако желите све могућности.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Нисте подесили меморијски кеш. Да побољшате перформансе, подесите меморијски кеш, ако је доступан. Више информација има у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>.", "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "PHP не може да чита /dev/urandom. Ово се баш не препоручује из сигурносних разлога. Можете наћи више информација у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Тренутно користите {version} верзију PHP-а. Требало би да надоградите PHP верзију да искористите сва <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">безбедоносна ажурирања и побољшања брзине које обезбеђује PHP група</a>, чим Ваша дистрибуција почне да је подржава.", + "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Или подешавање обрнутих прокси заглавља није исправно, или приступате Некстклауду преко проксија од поверења. Ако не приступате Некстклауду преко проксија од поверења, ово је безбедоносни проблем и може омогућити нападачу да лажира да је његова IP адреса видљива Некстклауду. Више информација о овоме има у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached је подешен као дистрибуирани кеш, али је инсталиран погрешни PHP модуле \"memcache\". \\OC\\Memcache\\Memcached подржава само \"memcached\" модул, а не и \"memcache\". Погледајте <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached вики о оба модула</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Неке датотеке нису прошле проверу интегритета. Даљње информације о томе како да решите овај проблем се могу наћи у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Списак неисправних датотека</a>/<a href=\"{rescanEndpoint}\">Скенирај поново</a>)", + "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcache није подешен исправно. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">За боље перформанце предлажемо</a> да користите следећа подешавања у <code>php.ini</code> датотеци:", + "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "PHP функција \"set_time_limit\" није доступна. Ово може да узорукује да се скрипте закоче у сред извршавања, и тако да Вам покваре инсталацију. Препоручујемо да омогућите ову функцију.", "Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваша фасцикла са подацима и Ваше датотеке су вероватно доступне са интернета. .htaccess датотека не ради. Препоручујемо да подесите Ваш веб сервер тако да је фасцикла са подацима ван фасцикле кореног документа веб сервера.", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручујемо да подесите ову поставку.", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP заглавље није подешено да буде бар \"{seconds}\" секунди. За додатну сигурност, предлажемо да омогућите HSTS као што је описано у нашим <a href=\"{docUrl}\" rel=\"noreferrer\">сигурносним саветима</a>.", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Приступате овом сајту преко HTTP-а. Препоручујемо да подесите Ваш сервер да захтева HTTPS као што је описано у нашим <a href=\"{docUrl}\">безбедоносним саветима</a>.", "Shared" : "Дељено", "Shared with {recipients}" : "Дељено са {recipients}", @@ -154,27 +164,50 @@ OC.L10N.register( "Error while sharing" : "Грешка при дељењу", "Share details could not be loaded for this item." : "Не могу да учитам детаље дељења за ову ставку.", "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Најмање {count} слово је потребно за аутокомплетирање","Најмање {count} слова је потребно за аутокомплетирање","Најмање {count} слова је потребно за аутокомплетирање"], + "This list is maybe truncated - please refine your search term to see more results." : "Ова листа је можда скраћена - претражите опет користећи мало специфичније изразе да бисте добили још резултата.", + "No users or groups found for {search}" : "Није нађен ниједан корисник ни група за претрагу {search}", + "No users found for {search}" : "Није нађен ниједан корисник за претрагу {search}", "An error occurred. Please try again" : "Дошло је до грешке. Покушајте поново", + "{sharee} (group)" : "{sharee} (група)", + "{sharee} (remote)" : "{sharee} (удаљено)", + "{sharee} (email)" : "{sharee} (е-пошта)", + "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Дели", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Делите са другим људима тако што унесете корисника, групу, ID здруженог облака или адресу е-поште. ", + "Share with other people by entering a user or group or a federated cloud ID." : "Делите са другим људима тако што унесете корисника, групу или ID здруженог облака.", + "Share with other people by entering a user or group or an email address." : "Делите са другим људима тако што унесете корисника или групу.", + "Name or email address..." : "Име или адреса е-поште...", + "Name or federated cloud ID..." : "Име или ID здруженог облака...", + "Name, federated cloud ID or email address..." : "Име, ID здруженог облака или адреса е-поште...", + "Name..." : "Име...", "Error" : "Грешка", + "Error removing share" : "Грешка при уклањању дељења", "Non-existing tag #{tag}" : "Непостојећа ознака #{tag}", "restricted" : "ограничен", "invisible" : "невидљив", + "({scope})" : "({scope})", "Delete" : "Обриши", "Rename" : "Преименуј", + "Collaborative tags" : "Групне ознаке", "No tags found" : "Ознаке нису нађене", "unknown text" : "непознат текст", "Hello world!" : "Здраво свете!", "sunny" : "сунчано", "Hello {name}, the weather is {weather}" : "Здраво {name}, време је {weather}", "Hello {name}" : "Здраво {name}", + "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Ово су резултати Ваше претраге<script>alert(1)</script></strong>", "new" : "ново", "_download %n file_::_download %n files_" : ["преузми %n датотеку","преузми %n датотеке","преузми %n датотека"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Ажурирање је у току. У неким окружењима, напуштање ове стране може да прекине овај процес.", "Update to {version}" : "Ажурирај на {version}", "An error occurred." : "Дошло је до грешке.", "Please reload the page." : "Поново учитајте страницу.", - "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунду.","Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунде.","Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунди."], + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Ажурирање није успело. За више информација <a href=\"{url}\">проверите нашу објаву на форуму</a> која обрађује ову тему.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Ажурирање није успело. Молимо пријавите овај проблем <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Некстклауд заједници</a>.", + "Continue to Nextcloud" : "Наставите на Некстклауд", + "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунду.","Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунде.","Ажурирање је било успешно. Враћам Вас на Некстклауд за %n секунди."], "Searching other places" : "Претражујем остала места", + "No search results in other folders for {tag}{filter}{endtag}" : "Нема резултата претраге у осталим фасциклама за {tag}{filter}{endtag}", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} резултат претраге у осталим фасциклама","{count} резултата претраге у осталим фасциклама","{count} резултата претраге у осталим фасциклама"], "Personal" : "Лично", "Users" : "Корисници", @@ -182,39 +215,43 @@ OC.L10N.register( "Admin" : "Администрација", "Help" : "Помоћ", "Access forbidden" : "Забрањен приступ", - "File not found" : "Фајл није нађен", + "File not found" : "Датотека није нађена", "The specified document has not been found on the server." : "Наведени документ није нађен на серверу.", "You can click here to return to %s." : "Кликните овде да се вратите на %s.", "Internal Server Error" : "Унутрашња грешка сервера", + "The server was unable to complete your request." : "Сервер не може да обради Ваш захтев.", + "If this happens again, please send the technical details below to the server administrator." : "Ако се ово понови, пошаљите техниче детаље испод администратору овог сервера.", "More details can be found in the server log." : "Више детаља се може наћи у дневнику сервера.", "Technical details" : "Технички детаљи", "Remote Address: %s" : "Удаљена адреса: %s", - "Request ID: %s" : "ИД захтева: %s", + "Request ID: %s" : "ID захтева: %s", "Type: %s" : "Тип: %s", "Code: %s" : "Кôд: %s", "Message: %s" : "Порука: %s", - "File: %s" : "Фајл: %s", + "File: %s" : "Датотека: %s", "Line: %s" : "Линија: %s", "Trace" : "Траг", "Security warning" : "Безбедносно упозорење", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваш директоријум са подацима и фајлови су вероватно доступни са интернета јер .htaccess не ради.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "За информације како да правилно подесите Ваш сервер, погледајте <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">документацију</a>.", "Create an <strong>admin account</strong>" : "Направи <strong>административни налог</strong>", "Username" : "Корисничко име", "Storage & database" : "Складиште и база података", - "Data folder" : "Фацикла података", + "Data folder" : "Фасцикла за податке", "Configure the database" : "Подешавање базе", "Only %s is available." : "Само %s је доступна.", - "Install and activate additional PHP modules to choose other database types." : "Инсталирајте и активирајте додатне ПХП модуле за избор других врста база података.", + "Install and activate additional PHP modules to choose other database types." : "Инсталирајте и активирајте додатне PHP модуле за одабир других база података.", "For more details check out the documentation." : "За више детаља погледајте документацију.", "Database user" : "Корисник базе", "Database password" : "Лозинка базе", "Database name" : "Назив базе", "Database tablespace" : "Радни простор базе података", "Database host" : "Домаћин базе", + "Please specify the port number along with the host name (e.g., localhost:5432)." : "Наведите и број порта у имену домаћина (нпр. localhost:5432).", "Performance warning" : "Упозорење о перформансама", "SQLite will be used as database." : "СКуЛајт ће бити коришћен за базу података.", - "For larger installations we recommend to choose a different database backend." : "За веће инсталације препоручујемо да изаберете другу позадину базе података.", - "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент програм у графичком окружењу, коришћење СКуЛајта није препоручљиво.", + "For larger installations we recommend to choose a different database backend." : "За веће инсталације препоручујемо да изаберете другу базу података.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент у десктоп окружењу, коришћење СКуЛајта није препоручљиво.", "Finish setup" : "Заврши подешавање", "Finishing …" : "Завршавам…", "Need help?" : "Треба вам помоћ?", @@ -222,34 +259,73 @@ OC.L10N.register( "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ова апликација захтева Јава скрипт за исправан рад. {linkstart}Омогућите Јава скрипт{linkend} и поново учитајте страницу.", "More apps" : "Још апликација", "Search" : "Претражи", - "This action requires you to confirm your password:" : "Ова радња захтева да потврдите лозинку", - "Confirm your password" : "Потврди лозинку", - "Server side authentication failed!" : "Аутентификација на серверу није успела!", + "This action requires you to confirm your password:" : "Ова радња захтева да потврдите лозинку:", + "Confirm your password" : "Потврдите лозинку", + "Server side authentication failed!" : "Потврда идентитета на серверу није успела!", "Please contact your administrator." : "Контактирајте вашег администратора.", + "An internal error occurred." : "Догодила се унутрашња грешка. ", "Please try again or contact your administrator." : "Покушајте поново или контактирајте вашег администратора.", - "Wrong password." : "Погрешна лозинка", + "Username or email" : "Корисничко име или адреса е-поште", + "Wrong password. Reset it?" : "Погрешна лозинка. Желите ли да је повратите?", + "Wrong password." : "Погрешна лозинка.", "Log in" : "Пријава", + "Stay logged in" : "Останите пријављени", "Alternative Logins" : "Алтернативне пријаве", - "Redirecting …" : "Преусмеравање...", + "Account access" : "Приступ налогу", + "You are about to grant %s access to your %s account." : "Управо ћете одобрити %s приступ Вашем %s налогу.", + "App token" : "Апликативни токен", + "Alternative login using app token" : "Алтернативна пријава коришћењем апликативног токена", + "Redirecting …" : "Преусмеравање ...", "New password" : "Нова лозинка", "New Password" : "Нова лозинка", - "Reset password" : "Ресетуј лозинку", + "Reset password" : "Поврати лозинку", + "Two-factor authentication" : "Двофакторска провера идентитека", + "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Повећана сигурност је омогућена за овај налог. Проверите идентитет и другим фактором.", + "Cancel log in" : "Поништите пријаву", + "Use backup code" : "Користите резервни кôд", + "Error while validating your second factor" : "Грешка при провери Вашег другог фактора", + "Access through untrusted domain" : "Приступ кроз небезбедни домен", + "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Контактирајте Вашег администратора. Ако сте Ви администратор, измените \"trusted_domains\" подешавање у config/config.php као у примеру config.sample.php.", + "Depending on your configuration, this button could also work to trust the domain:" : "У зависности од Ваше конфигурације, овим дугметом може да послужи да почнете да верујете овом домену:", "Add \"%s\" as trusted domain" : "Додај „%s“ као поуздан домен", + "App update required" : "Потребно ажурирање апликације", + "%s will be updated to version %s" : "%s ће бити ажурирана на верзију %s", + "These apps will be updated:" : "Следеће апликације ће бити ажуриране:", + "These incompatible apps will be disabled:" : "Следеће некомпатибилне апликације ће бити онемогућене:", "The theme %s has been disabled." : "Тема %s је онемогућена.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Проверите да ли сте направили резервну копију фасцикли са подешавањима и подацима пре него што наставите.", - "Start update" : "Почни надоградњу", + "Start update" : "Почни ажурирање", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Да избегнете прекорачење времена одзива на већим инсталацијама, можете покренути следећу команду у инсталационом директоријуму:", + "Detailed logs" : "Детаљни дневници", "Update needed" : "Потребно је ажурирање", - "This %s instance is currently in maintenance mode, which may take a while." : "Овај %s је тренутно у режиму одржавања а то може потрајати.", + "Please use the command line updater because you have a big instance with more than 50 users." : "Молимо користите ажурирање из конзоле пошто имате велики сервер са више од 50 корисника.", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "За помоћ, погледајте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацију</a>.", + "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Свестан сам да уколико наставим ажурирање преко веба да постоји ризик да захтеву истекне време за извршење и да то може да изазове губитак података, али имам резервну копију и знам како да је повратим у случају грешака.", + "Upgrade via web on my own risk" : "Надогради преко веба на сопствену одговорност", + "This %s instance is currently in maintenance mode, which may take a while." : "Овај %s је тренутно у режиму одржавања што може потрајати.", "This page will refresh itself when the %s instance is available again." : "Ова страница ће се сама освежити када %s постане поново доступан.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Контактирајте администратора ако се порука понавља или се неочекивано појавила.", "Thank you for your patience." : "Хвала вам на стрпљењу.", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Фајлови су вам шифровани. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након ресетовања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?", + "Problem loading page, reloading in 5 seconds" : "Грешка приликом учитавања стране, покушавам поново за 5 секунди", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваше датотеке су шифроване. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након враћања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?", "Ok" : "У реду", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.", "Error while unsharing" : "Грешка при укидању дељења", + "can reshare" : "може да дели даље", "can edit" : "може да мења", + "can create" : "може да направи", + "can change" : "може да мења", + "can delete" : "може да брише", "access control" : "права приступа", + "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Поделите са људима у другим облацима користећи ID њиховог здруженог облика, као username@example.com/nextcloud", + "Share with users or by mail..." : "Дели са корисницима или преко е-поште", + "Share with users or remote users..." : "Дели са корисницима или удаљеним корисницима...", + "Share with users, remote users or by mail..." : "Дели са корисницима, удаљеним корисницима или преко е-поште...", + "Share with users or groups..." : "Дели са корисницима или групама...", + "Share with users, groups or by mail..." : "Дели са корисницима, групама или преко е-поште...", + "Share with users, groups or remote users..." : "Дели са корисницима, групама или са удаљеним корисницима...", + "Share with users, groups, remote users or by mail..." : "Дели са корисницима, удаљеним корисницима или преко е-поште...", + "Share with users..." : "Дели са корисницима...", "The object type is not specified." : "Тип објекта није наведен.", "Enter new" : "Унесите нови", "Add" : "Додај", @@ -257,16 +333,20 @@ OC.L10N.register( "Error loading dialog template: {error}" : "Грешка при учитавању шаблона дијалога: {error}", "No tags selected for deletion." : "Нема ознака за брисање.", "The update was successful. Redirecting you to Nextcloud now." : "Ажурирање је успело. Преусмеравање на Некстклауд. ", - "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Поздрав,\n\nсамо вас обавештавам да %s дели %s са вама.\nПогледајте: %s\n\n", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Поздрав,\n\nсамо Вас обавештавамо да %s дели %s са вама.\nПогледајте: %s\n\n", "The share will expire on %s." : "Дељење истиче %s.", "Cheers!" : "Здраво!", "The server encountered an internal error and was unable to complete your request." : "Због интерне грешке на серверу, ваш захтев није могао бити довршен.", - "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Контактирајте администратора ако се грешка понови и укључите у извештај техничке појединости наведене испод.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Контактирајте администратора ако се грешка понови више пута и укључите у извештај техничке појединости наведене испод.", "Log out" : "Одјава", - "Use the following link to reset your password: {link}" : "Употребите следећу везу да ресетујете своју лозинку: {link}", - "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Поздрав,<br><br>само вас обавештавам да %s дели <strong>%s</strong> са вама.<br><a href=\"%s\">Погледајте!</a><br><br>", + "Use the following link to reset your password: {link}" : "Употребите следећу везу да повратите Вашу лозинку: {link}", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Поздрав,<br><br>само вас обавештавамо да %s дели <strong>%s</strong> са Вама.<br><a href=\"%s\">Погледајте!</a><br><br>", + "This Nextcloud instance is currently in single user mode." : "Некстклауд сервер је тренутно у режиму приступа само једног корисника.", "This means only administrators can use the instance." : "То значи да га могу користити само администратори.", "You are accessing the server from an untrusted domain." : "Приступате серверу са непоузданог домена.", - "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Зависно од ваших подешавања, као администратор можете употребити дугме испод да потврдите поузданост домена." + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Контактирајте Вашег администратора. Ако сте Ви администратор, измените \"trusted_domains\" подешавање у config/config.php. Пример једног подешавања је дат у config/config.sample.php.", + "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Зависно од ваших подешавања, као администратор можете употребити дугме испод да потврдите поузданост домена.", + "Please use the command line updater because you have a big instance." : "Молимо користите ажурирање из конзоле пошто имате велики сервер.", + "You are about to grant \"%s\" access to your %s account." : "Управо ћете одобрити \"%s\" приступ Вашем %s налогу." }, "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/core/l10n/sr.json b/core/l10n/sr.json index a645f3db896..fb84a3e92a7 100644 --- a/core/l10n/sr.json +++ b/core/l10n/sr.json @@ -24,11 +24,11 @@ "%s password reset" : "%s лозинка враћена", "Couldn't send reset email. Please contact your administrator." : "Не могу да пошаљем е-пошту за повраћај лозинке. Контактирајте администратора.", "Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за повраћај лозинке. Проверите да ли је корисничко име исправно.", - "Preparing update" : "Припремам надоградњу", + "Preparing update" : "Припремам ажурирање", "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Упозорење о поправци :", "Repair error: " : "Грешка поправке:", - "Please use the command line updater because automatic updating is disabled in the config.php." : "Молимо вас да надоградњу урадите преко командне линије јер је аутоматско надоградња онемогућена у config.php.", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Молимо вас да ажурирање урадите преко командне линије јер је аутоматско ажурирање онемогућено у config.php.", "[%d / %d]: Checking table %s" : "[%d / %d]: Проверавање табеле %s", "Turned on maintenance mode" : "Режим одржавања укључен", "Turned off maintenance mode" : "Режим одржавања искључен", @@ -37,10 +37,10 @@ "Updated database" : "База података ажурирана", "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Провера да ли шема базе података може да се ажурира (ово може потрајати, у зависности колика Вам је база)", "Checked database schema update" : "Проверено ажурирање шеме базе података", - "Checking updates of apps" : "Провера надоградњи за апликације", - "Checking for update of app \"%s\" in appstore" : "Провера надоградње за апликацију \"%s\" у продавници", - "Update app \"%s\" from appstore" : "Надоградња апликације \"%s\" из продавнице", - "Checked for update of app \"%s\" in appstore" : "Проверана надоградња апликације \"%s\" у продавници", + "Checking updates of apps" : "Провера ажурирања апликација", + "Checking for update of app \"%s\" in appstore" : "Провера ажурирања апликације \"%s\" у продавници", + "Update app \"%s\" from appstore" : "Ажурирање апликације \"%s\" из продавнице", + "Checked for update of app \"%s\" in appstore" : "Проверено ажурирање апликације \"%s\" у продавници", "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Провера да ли шема база за %s може бити ажурирана (ово може да потраје, у зависности колико Вам је база)", "Checked database schema update for apps" : "Проверено ажурирање шеме базе података за апликације", "Updated \"%s\" to %s" : "„%s“ ажуриран на %s", @@ -104,9 +104,19 @@ "Strong password" : "Јака лозинка", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију датотека. Изгледа да је ВебДАВ сучеље покварено.", "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ваш сервер није правилно подешен да разлучи \"{url}\". Можете наћи више информација у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>.", + "This server has no working Internet connection: Multiple endpoints could not be reached. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овај сервер нема интернет конекцију: немогуће је доћи до више интернет крајњих тачака. Ово значи да неке могућности као што су качење спољних складишта, обавештења о ажурирањима или инсталација апликација треће стране неће радити. Приступање датотекама споља и слање обавештења е-поштом исто тако може да не ради. Саветујемо да омогућите интернет конекцију овом серверу ако желите све могућности.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Нисте подесили меморијски кеш. Да побољшате перформансе, подесите меморијски кеш, ако је доступан. Више информација има у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>.", "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "PHP не може да чита /dev/urandom. Ово се баш не препоручује из сигурносних разлога. Можете наћи више информација у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>.", + "You are currently running PHP {version}. We encourage you to upgrade your PHP version to take advantage of <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performance and security updates provided by the PHP Group</a> as soon as your distribution supports it." : "Тренутно користите {version} верзију PHP-а. Требало би да надоградите PHP верзију да искористите сва <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">безбедоносна ажурирања и побољшања брзине које обезбеђује PHP група</a>, чим Ваша дистрибуција почне да је подржава.", + "The reverse proxy headers configuration is incorrect, or you are accessing Nextcloud from a trusted proxy. If you are not accessing Nextcloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to Nextcloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Или подешавање обрнутих прокси заглавља није исправно, или приступате Некстклауду преко проксија од поверења. Ако не приступате Некстклауду преко проксија од поверења, ово је безбедоносни проблем и може омогућити нападачу да лажира да је његова IP адреса видљива Некстклауду. Више информација о овоме има у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>.", + "Memcached is configured as distributed cache, but the wrong PHP module \"memcache\" is installed. \\OC\\Memcache\\Memcached only supports \"memcached\" and not \"memcache\". See the <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki about both modules</a>." : "Memcached је подешен као дистрибуирани кеш, али је инсталиран погрешни PHP модуле \"memcache\". \\OC\\Memcache\\Memcached подржава само \"memcached\" модул, а не и \"memcache\". Погледајте <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached вики о оба модула</a>.", + "Some files have not passed the integrity check. Further information on how to resolve this issue can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">List of invalid files…</a> / <a href=\"{rescanEndpoint}\">Rescan…</a>)" : "Неке датотеке нису прошле проверу интегритета. Даљње информације о томе како да решите овај проблем се могу наћи у нашој <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">документацији</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Списак неисправних датотека</a>/<a href=\"{rescanEndpoint}\">Скенирај поново</a>)", + "The PHP OPcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend</a> to use following settings in the <code>php.ini</code>:" : "PHP OPcache није подешен исправно. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">За боље перформанце предлажемо</a> да користите следећа подешавања у <code>php.ini</code> датотеци:", + "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "PHP функција \"set_time_limit\" није доступна. Ово може да узорукује да се скрипте закоче у сред извршавања, и тако да Вам покваре инсталацију. Препоручујемо да омогућите ову функцију.", "Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваша фасцикла са подацима и Ваше датотеке су вероватно доступне са интернета. .htaccess датотека не ради. Препоручујемо да подесите Ваш веб сервер тако да је фасцикла са подацима ван фасцикле кореног документа веб сервера.", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручујемо да подесите ову поставку.", + "The \"Strict-Transport-Security\" HTTP header is not configured to at least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\" rel=\"noreferrer\">security tips</a>." : "\"Strict-Transport-Security\" HTTP заглавље није подешено да буде бар \"{seconds}\" секунди. За додатну сигурност, предлажемо да омогућите HSTS као што је описано у нашим <a href=\"{docUrl}\" rel=\"noreferrer\">сигурносним саветима</a>.", "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Приступате овом сајту преко HTTP-а. Препоручујемо да подесите Ваш сервер да захтева HTTPS као што је описано у нашим <a href=\"{docUrl}\">безбедоносним саветима</a>.", "Shared" : "Дељено", "Shared with {recipients}" : "Дељено са {recipients}", @@ -152,27 +162,50 @@ "Error while sharing" : "Грешка при дељењу", "Share details could not be loaded for this item." : "Не могу да учитам детаље дељења за ову ставку.", "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Најмање {count} слово је потребно за аутокомплетирање","Најмање {count} слова је потребно за аутокомплетирање","Најмање {count} слова је потребно за аутокомплетирање"], + "This list is maybe truncated - please refine your search term to see more results." : "Ова листа је можда скраћена - претражите опет користећи мало специфичније изразе да бисте добили још резултата.", + "No users or groups found for {search}" : "Није нађен ниједан корисник ни група за претрагу {search}", + "No users found for {search}" : "Није нађен ниједан корисник за претрагу {search}", "An error occurred. Please try again" : "Дошло је до грешке. Покушајте поново", + "{sharee} (group)" : "{sharee} (група)", + "{sharee} (remote)" : "{sharee} (удаљено)", + "{sharee} (email)" : "{sharee} (е-пошта)", + "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})", "Share" : "Дели", + "Share with other people by entering a user or group, a federated cloud ID or an email address." : "Делите са другим људима тако што унесете корисника, групу, ID здруженог облака или адресу е-поште. ", + "Share with other people by entering a user or group or a federated cloud ID." : "Делите са другим људима тако што унесете корисника, групу или ID здруженог облака.", + "Share with other people by entering a user or group or an email address." : "Делите са другим људима тако што унесете корисника или групу.", + "Name or email address..." : "Име или адреса е-поште...", + "Name or federated cloud ID..." : "Име или ID здруженог облака...", + "Name, federated cloud ID or email address..." : "Име, ID здруженог облака или адреса е-поште...", + "Name..." : "Име...", "Error" : "Грешка", + "Error removing share" : "Грешка при уклањању дељења", "Non-existing tag #{tag}" : "Непостојећа ознака #{tag}", "restricted" : "ограничен", "invisible" : "невидљив", + "({scope})" : "({scope})", "Delete" : "Обриши", "Rename" : "Преименуј", + "Collaborative tags" : "Групне ознаке", "No tags found" : "Ознаке нису нађене", "unknown text" : "непознат текст", "Hello world!" : "Здраво свете!", "sunny" : "сунчано", "Hello {name}, the weather is {weather}" : "Здраво {name}, време је {weather}", "Hello {name}" : "Здраво {name}", + "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Ово су резултати Ваше претраге<script>alert(1)</script></strong>", "new" : "ново", "_download %n file_::_download %n files_" : ["преузми %n датотеку","преузми %n датотеке","преузми %n датотека"], + "The update is in progress, leaving this page might interrupt the process in some environments." : "Ажурирање је у току. У неким окружењима, напуштање ове стране може да прекине овај процес.", "Update to {version}" : "Ажурирај на {version}", "An error occurred." : "Дошло је до грешке.", "Please reload the page." : "Поново учитајте страницу.", - "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунду.","Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунде.","Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунди."], + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Ажурирање није успело. За више информација <a href=\"{url}\">проверите нашу објаву на форуму</a> која обрађује ову тему.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Ажурирање није успело. Молимо пријавите овај проблем <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Некстклауд заједници</a>.", + "Continue to Nextcloud" : "Наставите на Некстклауд", + "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунду.","Надоградња је била успешна. Враћам Вас на Некстклауд за %n секунде.","Ажурирање је било успешно. Враћам Вас на Некстклауд за %n секунди."], "Searching other places" : "Претражујем остала места", + "No search results in other folders for {tag}{filter}{endtag}" : "Нема резултата претраге у осталим фасциклама за {tag}{filter}{endtag}", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} резултат претраге у осталим фасциклама","{count} резултата претраге у осталим фасциклама","{count} резултата претраге у осталим фасциклама"], "Personal" : "Лично", "Users" : "Корисници", @@ -180,39 +213,43 @@ "Admin" : "Администрација", "Help" : "Помоћ", "Access forbidden" : "Забрањен приступ", - "File not found" : "Фајл није нађен", + "File not found" : "Датотека није нађена", "The specified document has not been found on the server." : "Наведени документ није нађен на серверу.", "You can click here to return to %s." : "Кликните овде да се вратите на %s.", "Internal Server Error" : "Унутрашња грешка сервера", + "The server was unable to complete your request." : "Сервер не може да обради Ваш захтев.", + "If this happens again, please send the technical details below to the server administrator." : "Ако се ово понови, пошаљите техниче детаље испод администратору овог сервера.", "More details can be found in the server log." : "Више детаља се може наћи у дневнику сервера.", "Technical details" : "Технички детаљи", "Remote Address: %s" : "Удаљена адреса: %s", - "Request ID: %s" : "ИД захтева: %s", + "Request ID: %s" : "ID захтева: %s", "Type: %s" : "Тип: %s", "Code: %s" : "Кôд: %s", "Message: %s" : "Порука: %s", - "File: %s" : "Фајл: %s", + "File: %s" : "Датотека: %s", "Line: %s" : "Линија: %s", "Trace" : "Траг", "Security warning" : "Безбедносно упозорење", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваш директоријум са подацима и фајлови су вероватно доступни са интернета јер .htaccess не ради.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "За информације како да правилно подесите Ваш сервер, погледајте <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">документацију</a>.", "Create an <strong>admin account</strong>" : "Направи <strong>административни налог</strong>", "Username" : "Корисничко име", "Storage & database" : "Складиште и база података", - "Data folder" : "Фацикла података", + "Data folder" : "Фасцикла за податке", "Configure the database" : "Подешавање базе", "Only %s is available." : "Само %s је доступна.", - "Install and activate additional PHP modules to choose other database types." : "Инсталирајте и активирајте додатне ПХП модуле за избор других врста база података.", + "Install and activate additional PHP modules to choose other database types." : "Инсталирајте и активирајте додатне PHP модуле за одабир других база података.", "For more details check out the documentation." : "За више детаља погледајте документацију.", "Database user" : "Корисник базе", "Database password" : "Лозинка базе", "Database name" : "Назив базе", "Database tablespace" : "Радни простор базе података", "Database host" : "Домаћин базе", + "Please specify the port number along with the host name (e.g., localhost:5432)." : "Наведите и број порта у имену домаћина (нпр. localhost:5432).", "Performance warning" : "Упозорење о перформансама", "SQLite will be used as database." : "СКуЛајт ће бити коришћен за базу података.", - "For larger installations we recommend to choose a different database backend." : "За веће инсталације препоручујемо да изаберете другу позадину базе података.", - "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент програм у графичком окружењу, коришћење СКуЛајта није препоручљиво.", + "For larger installations we recommend to choose a different database backend." : "За веће инсталације препоручујемо да изаберете другу базу података.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент у десктоп окружењу, коришћење СКуЛајта није препоручљиво.", "Finish setup" : "Заврши подешавање", "Finishing …" : "Завршавам…", "Need help?" : "Треба вам помоћ?", @@ -220,34 +257,73 @@ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ова апликација захтева Јава скрипт за исправан рад. {linkstart}Омогућите Јава скрипт{linkend} и поново учитајте страницу.", "More apps" : "Још апликација", "Search" : "Претражи", - "This action requires you to confirm your password:" : "Ова радња захтева да потврдите лозинку", - "Confirm your password" : "Потврди лозинку", - "Server side authentication failed!" : "Аутентификација на серверу није успела!", + "This action requires you to confirm your password:" : "Ова радња захтева да потврдите лозинку:", + "Confirm your password" : "Потврдите лозинку", + "Server side authentication failed!" : "Потврда идентитета на серверу није успела!", "Please contact your administrator." : "Контактирајте вашег администратора.", + "An internal error occurred." : "Догодила се унутрашња грешка. ", "Please try again or contact your administrator." : "Покушајте поново или контактирајте вашег администратора.", - "Wrong password." : "Погрешна лозинка", + "Username or email" : "Корисничко име или адреса е-поште", + "Wrong password. Reset it?" : "Погрешна лозинка. Желите ли да је повратите?", + "Wrong password." : "Погрешна лозинка.", "Log in" : "Пријава", + "Stay logged in" : "Останите пријављени", "Alternative Logins" : "Алтернативне пријаве", - "Redirecting …" : "Преусмеравање...", + "Account access" : "Приступ налогу", + "You are about to grant %s access to your %s account." : "Управо ћете одобрити %s приступ Вашем %s налогу.", + "App token" : "Апликативни токен", + "Alternative login using app token" : "Алтернативна пријава коришћењем апликативног токена", + "Redirecting …" : "Преусмеравање ...", "New password" : "Нова лозинка", "New Password" : "Нова лозинка", - "Reset password" : "Ресетуј лозинку", + "Reset password" : "Поврати лозинку", + "Two-factor authentication" : "Двофакторска провера идентитека", + "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Повећана сигурност је омогућена за овај налог. Проверите идентитет и другим фактором.", + "Cancel log in" : "Поништите пријаву", + "Use backup code" : "Користите резервни кôд", + "Error while validating your second factor" : "Грешка при провери Вашег другог фактора", + "Access through untrusted domain" : "Приступ кроз небезбедни домен", + "Please contact your administrator. If you are an administrator, edit the \"trusted_domains\" setting in config/config.php like the example in config.sample.php." : "Контактирајте Вашег администратора. Ако сте Ви администратор, измените \"trusted_domains\" подешавање у config/config.php као у примеру config.sample.php.", + "Depending on your configuration, this button could also work to trust the domain:" : "У зависности од Ваше конфигурације, овим дугметом може да послужи да почнете да верујете овом домену:", "Add \"%s\" as trusted domain" : "Додај „%s“ као поуздан домен", + "App update required" : "Потребно ажурирање апликације", + "%s will be updated to version %s" : "%s ће бити ажурирана на верзију %s", + "These apps will be updated:" : "Следеће апликације ће бити ажуриране:", + "These incompatible apps will be disabled:" : "Следеће некомпатибилне апликације ће бити онемогућене:", "The theme %s has been disabled." : "Тема %s је онемогућена.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Проверите да ли сте направили резервну копију фасцикли са подешавањима и подацима пре него што наставите.", - "Start update" : "Почни надоградњу", + "Start update" : "Почни ажурирање", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Да избегнете прекорачење времена одзива на већим инсталацијама, можете покренути следећу команду у инсталационом директоријуму:", + "Detailed logs" : "Детаљни дневници", "Update needed" : "Потребно је ажурирање", - "This %s instance is currently in maintenance mode, which may take a while." : "Овај %s је тренутно у режиму одржавања а то може потрајати.", + "Please use the command line updater because you have a big instance with more than 50 users." : "Молимо користите ажурирање из конзоле пошто имате велики сервер са више од 50 корисника.", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "За помоћ, погледајте <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документацију</a>.", + "I know that if I continue doing the update via web UI has the risk, that the request runs into a timeout and could cause data loss, but I have a backup and know how to restore my instance in case of a failure." : "Свестан сам да уколико наставим ажурирање преко веба да постоји ризик да захтеву истекне време за извршење и да то може да изазове губитак података, али имам резервну копију и знам како да је повратим у случају грешака.", + "Upgrade via web on my own risk" : "Надогради преко веба на сопствену одговорност", + "This %s instance is currently in maintenance mode, which may take a while." : "Овај %s је тренутно у режиму одржавања што може потрајати.", "This page will refresh itself when the %s instance is available again." : "Ова страница ће се сама освежити када %s постане поново доступан.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Контактирајте администратора ако се порука понавља или се неочекивано појавила.", "Thank you for your patience." : "Хвала вам на стрпљењу.", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Фајлови су вам шифровани. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након ресетовања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?", + "Problem loading page, reloading in 5 seconds" : "Грешка приликом учитавања стране, покушавам поново за 5 секунди", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваше датотеке су шифроване. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након враћања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?", "Ok" : "У реду", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.", "Error while unsharing" : "Грешка при укидању дељења", + "can reshare" : "може да дели даље", "can edit" : "може да мења", + "can create" : "може да направи", + "can change" : "може да мења", + "can delete" : "може да брише", "access control" : "права приступа", + "Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Поделите са људима у другим облацима користећи ID њиховог здруженог облика, као username@example.com/nextcloud", + "Share with users or by mail..." : "Дели са корисницима или преко е-поште", + "Share with users or remote users..." : "Дели са корисницима или удаљеним корисницима...", + "Share with users, remote users or by mail..." : "Дели са корисницима, удаљеним корисницима или преко е-поште...", + "Share with users or groups..." : "Дели са корисницима или групама...", + "Share with users, groups or by mail..." : "Дели са корисницима, групама или преко е-поште...", + "Share with users, groups or remote users..." : "Дели са корисницима, групама или са удаљеним корисницима...", + "Share with users, groups, remote users or by mail..." : "Дели са корисницима, удаљеним корисницима или преко е-поште...", + "Share with users..." : "Дели са корисницима...", "The object type is not specified." : "Тип објекта није наведен.", "Enter new" : "Унесите нови", "Add" : "Додај", @@ -255,16 +331,20 @@ "Error loading dialog template: {error}" : "Грешка при учитавању шаблона дијалога: {error}", "No tags selected for deletion." : "Нема ознака за брисање.", "The update was successful. Redirecting you to Nextcloud now." : "Ажурирање је успело. Преусмеравање на Некстклауд. ", - "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Поздрав,\n\nсамо вас обавештавам да %s дели %s са вама.\nПогледајте: %s\n\n", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Поздрав,\n\nсамо Вас обавештавамо да %s дели %s са вама.\nПогледајте: %s\n\n", "The share will expire on %s." : "Дељење истиче %s.", "Cheers!" : "Здраво!", "The server encountered an internal error and was unable to complete your request." : "Због интерне грешке на серверу, ваш захтев није могао бити довршен.", - "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Контактирајте администратора ако се грешка понови и укључите у извештај техничке појединости наведене испод.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Контактирајте администратора ако се грешка понови више пута и укључите у извештај техничке појединости наведене испод.", "Log out" : "Одјава", - "Use the following link to reset your password: {link}" : "Употребите следећу везу да ресетујете своју лозинку: {link}", - "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Поздрав,<br><br>само вас обавештавам да %s дели <strong>%s</strong> са вама.<br><a href=\"%s\">Погледајте!</a><br><br>", + "Use the following link to reset your password: {link}" : "Употребите следећу везу да повратите Вашу лозинку: {link}", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Поздрав,<br><br>само вас обавештавамо да %s дели <strong>%s</strong> са Вама.<br><a href=\"%s\">Погледајте!</a><br><br>", + "This Nextcloud instance is currently in single user mode." : "Некстклауд сервер је тренутно у режиму приступа само једног корисника.", "This means only administrators can use the instance." : "То значи да га могу користити само администратори.", "You are accessing the server from an untrusted domain." : "Приступате серверу са непоузданог домена.", - "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Зависно од ваших подешавања, као администратор можете употребити дугме испод да потврдите поузданост домена." + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Контактирајте Вашег администратора. Ако сте Ви администратор, измените \"trusted_domains\" подешавање у config/config.php. Пример једног подешавања је дат у config/config.sample.php.", + "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Зависно од ваших подешавања, као администратор можете употребити дугме испод да потврдите поузданост домена.", + "Please use the command line updater because you have a big instance." : "Молимо користите ажурирање из конзоле пошто имате велики сервер.", + "You are about to grant \"%s\" access to your %s account." : "Управо ћете одобрити \"%s\" приступ Вашем %s налогу." },"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/core/templates/layout.guest.php b/core/templates/layout.guest.php index 9a4f9c37198..ce0eccb971d 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -13,6 +13,7 @@ <link rel="icon" href="<?php print_unescaped(image_path('', 'favicon.ico')); /* IE11+ supports png */ ?>"> <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>"> <link rel="mask-icon" sizes="any" href="<?php print_unescaped(image_path('', 'favicon-mask.svg')); ?>" color="<?php p($theme->getColorPrimary()); ?>"> + <link rel="manifest" href="<?php print_unescaped(image_path('', 'manifest.json')); ?>"> <?php emit_css_loading_tags($_); ?> <?php emit_script_loading_tags($_); ?> <?php print_unescaped($_['headers']); ?> diff --git a/lib/l10n/lt_LT.js b/lib/l10n/lt_LT.js new file mode 100644 index 00000000000..f08b3ab2b79 --- /dev/null +++ b/lib/l10n/lt_LT.js @@ -0,0 +1,201 @@ +OC.L10N.register( + "lib", + { + "Cannot write into \"config\" directory!" : "Nepavyksta rašyti į \"config\" katalogą!", + "This can usually be fixed by giving the webserver write access to the config directory" : "Tai, dažniausiai, gali būti ištaisyta suteikiant saityno serveriui rašymo prieigą prie konfigūracijos katalogo", + "See %s" : "Žiūrėkite %s", + "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Tai, dažniausiai, gali būti ištaisoma suteikiant žiniatinklio serveriui rašymo prieigą prie konfigūracijos katalogo. Daugiau informacijos %s", + "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Programėlės %$1s failai pakeisti neteisingai. Įsitikinkite, kad versija suderinama su serveriu.", + "Sample configuration detected" : "Aptiktas konfigūracijos pavyzdys", + "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" : "Pastebėta, kad nukopijuota pavyzdinė konfigūracija. Tai gali pažeisti diegimą ir yra nepalaikoma. Prašome perskaitykite dokumentaciją prieš atlikdami pakeitimus config.php faile.", + "%1$s and %2$s" : "%1$s ir %2$s", + "%1$s, %2$s and %3$s" : "%1$s, %2$s ir %3$s", + "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s ir %4$s", + "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s ir %5$s", + "PHP %s or higher is required." : "Reikalinga PHP %s arba aukštesnė.", + "PHP with a version lower than %s is required." : "Reikalinga žemesnė nei %s PHP versija. ", + "Following databases are supported: %s" : "Yra palaikomos šios duomenų bazės: %s", + "The command line tool %s could not be found" : "Nepavyko rasti komandų eilutės įrankio %s", + "The library %s is not available." : "Biblioteka %s nėra prieinama.", + "Library %s with a version higher than %s is required - available version %s." : "Bibliotekos %s versija turi būti aukštesnė nei %s - turima versija %s.", + "Library %s with a version lower than %s is required - available version %s." : "Bibliotekos %s versija turi būti žemesnė nei %s - turima versija %s.", + "Following platforms are supported: %s" : "Yra palaikomos šios platformos: %s", + "Server version %s or higher is required." : "Reikalinga %s arba aukštesnė serverio versija ", + "Server version %s or lower is required." : "Reikalinga %s arba žemesnė serverio versija. ", + "Unknown filetype" : "Nežinomas failo tipas", + "Invalid image" : "Neteisingas paveikslas", + "today" : "šiandien", + "yesterday" : "vakar", + "_%n day ago_::_%n days ago_" : ["prieš %n dieną","prieš %n dienas","prieš %n dienų"], + "last month" : "praeitą mėnesį", + "_%n month ago_::_%n months ago_" : ["prieš %n mėnesį","prieš %n mėnesius","prieš %n mėnesių"], + "last year" : "praeitais metais", + "_%n year ago_::_%n years ago_" : ["prieš %n metus","prieš %n metus","prieš %n metų"], + "_%n hour ago_::_%n hours ago_" : ["prieš %n valandą","prieš %n valandas","prieš %n valandų"], + "_%n minute ago_::_%n minutes ago_" : ["prieš %n minutę","prieš % minutes","prieš %n minučių"], + "seconds ago" : "prieš keletą sekundžių", + "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulio, kurio id: %s, nėra. Prašome jį įjungti savo programėlių nustatymuose arba susisiekti su savo administratoriumi.", + "File name is a reserved word" : "Failo pavadinimas negalimas, žodis rezervuotas", + "File name contains at least one invalid character" : "Failo vardas sudarytas iš neleistinų simbolių", + "File name is too long" : "Failo pavadinimas per ilgas", + "Empty filename is not allowed" : "Tuščias failo pavadinimas nėra leidžiamas", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "Programėlė \"%s\" negali būti įdiegta, kadangi negalima perskaityti appinfo failo.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Programėlė \"%s\" negali būti įdiegta, kadangi ji nėra suderinama su serverio versija.", + "This is an automatically sent email, please do not reply." : "Tai yra automatinis pranešimas, prašome neatsakyti.", + "Help" : "Pagalba", + "Apps" : "Programėlės", + "Settings" : "Nustatymai", + "Log out" : "Atsijungti", + "Users" : "Naudotojai", + "APCu" : "APCu", + "Redis" : "Redis", + "Basic settings" : "Pagrindiniai nustatymai", + "Sharing" : "Dalijimasis", + "Security" : "Saugumas", + "Encryption" : "Šifravimas", + "Additional settings" : "Papildomi nustatymai", + "Tips & tricks" : "Patarimai ir gudrybės", + "Personal info" : "Asmeninė informacija", + "Sync clients" : "Sinchronizavimo klientas", + "Unlimited" : "Neribota", + "__language_name__" : "Lietuvių", + "Verifying" : "Tikrinimas", + "Verifying …" : "Tikrinama...", + "Verify" : "Patikrinti", + "%s enter the database username and name." : "%s įrašykite duomenų bazės naudotojo vardą ir pavadinimą.", + "%s enter the database username." : "%s įrašykite duomenų bazės naudotojo vardą.", + "%s enter the database name." : "%s įrašykite duomenų bazės pavadinimą.", + "%s you may not use dots in the database name" : "%s negalite naudoti taškų duombazės pavadinime", + "Oracle connection could not be established" : "Nepavyko užmegzti Oracle ryšio", + "Oracle username and/or password not valid" : "Neteisingas Oracle naudotojo vardas ir/arba slaptažodis", + "PostgreSQL username and/or password not valid" : "Neteisingas PostgreSQL naudotojo vardas ir/arba slaptažodis", + "You need to enter details of an existing account." : "Jūs turite suvesti egzistuojančios paskyros duomenis.", + "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nėra palaikomas, %s neveiks tinkamai šioje platformoje. Naudodami prisiimate visą riziką !", + "Set an admin username." : "Nustatyti administratoriaus naudotojo vardą.", + "Set an admin password." : "Nustatyti administratoriaus slaptažodį.", + "Can't create or write into the data directory %s" : "Negalima nuskaityti arba rašyti į duomenų katalogą. %s", + "Invalid Federated Cloud ID" : "Netinkamas Centralizuoto Serverio ID", + "Sharing %s failed, because the backend does not allow shares from type %i" : "%s dalinimasis nepavyko, nes sistema nepalaiko šio duomenų tipo %i", + "Sharing %s failed, because the file does not exist" : "%s dalinimasis nepavyko, nes failas neegzistuoja.", + "You are not allowed to share %s" : "Jums neleidžiama bendrinti %s", + "Sharing %s failed, because you can not share with yourself" : "%s bendrinimas nepavyko, jūs negalite bendrinti su savimi pačiu.", + "Sharing %s failed, because the user %s does not exist" : "%s bendrinimas nepavyko, nes naudotojas %s neegzistuoja", + "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "%s bendrinimas nepavyko, nes naudotojas %s nėra tos pačios grupės, kaip %s, narys.", + "Sharing %s failed, because this item is already shared with %s" : "%s bendrinimas nepavyko, kadangi šis elementas jau yra bendrinamas su %s", + "Sharing %s failed, because this item is already shared with user %s" : "%s bendrinimas nepavyko, kadangi šis elementas jau yra bendrinamas su naudotoju %s", + "Sharing %s failed, because the group %s does not exist" : "%s bendrinimas nepavyko, nes grupė %s neegzistuoja", + "Sharing %s failed, because %s is not a member of the group %s" : " %s bendrinimas nepavyko, nes %s nėra %s grupės narys.", + "You need to provide a password to create a public link, only protected links are allowed" : "Viešoms nuorodoms būtinas slaptažodis, leidžiamos tik apsaugotos nuorodos.", + "Sharing %s failed, because sharing with links is not allowed" : "Bendrinimas %s nepavyko, kadangi bendrinimas su nuorodomis yra neleidžiamas.", + "Not allowed to create a federated share with the same user" : "Negalima dalintis su identišku naudotoju kitame serveryje", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s pasidalinimas nepavyko, neįmanoma rasti %s, tikėtina, kad serveris šiuo metu nepasiekiamas", + "Share type %s is not valid for %s" : "Bendrinimo tipas %s netinka %s", + "Cannot set expiration date. Expiration date is in the past" : "Nepavyko nustatyti galiojimo datos. Galiojimo data yra praėjęs laikas.", + "Sharing failed, because the user %s is the original sharer" : "Bendrinimas nepavyko, nes naudotojas %s yra bendrintojas.", + "Sharing %s failed, because resharing is not allowed" : "%s bendrinimas nepavyko, nes perskirstymas yra neleidžiamas.", + "Can’t increase permissions of %s" : "Negalima pridėti papildomų %s leidimų", + "Expiration date is in the past" : "Bendrinimo pabaigos data yra praėjęs laikas", + "Can’t set expiration date more than %s days in the future" : "Negalima nustatyti galiojimo laiko ilgesnio nei %s dienos.", + "%s shared »%s« with you" : "%s pasidalino »%s« su jumis", + "%s shared »%s« with you." : "%s pasidalino »%s« su Jumis.", + "Click the button below to open it." : "Norėdami atverti failą, spustelėkite mygtuką žemiau.", + "Open »%s«" : "Atidaryti \"%s\"", + "%s via %s" : "%s per %s", + "The requested share does not exist anymore" : "Pageidaujamas bendrinimas daugiau neegzistuoja.", + "Could not find category \"%s\"" : "Nepavyko rasti kategorijos „%s“", + "Sunday" : "Sekmadienis", + "Monday" : "Pirmadienis", + "Tuesday" : "Antradienis", + "Wednesday" : "Trečiadienis", + "Thursday" : "Ketvirtadienis", + "Friday" : "Penktadienis", + "Saturday" : "Šeštadienis", + "Sun." : "Sek.", + "Mon." : "Pir.", + "Tue." : "Ant.", + "Wed." : "Tre.", + "Thu." : "Ket.", + "Fri." : "Pen.", + "Sat." : "Šeš.", + "Su" : "Sk", + "Mo" : "Pr", + "Tu" : "An", + "We" : "Tr", + "Th" : "Kt", + "Fr" : "Pn", + "Sa" : "Št", + "January" : "Sausis", + "February" : "Vasaris", + "March" : "Kovas", + "April" : "Balandis", + "May" : "Gegužė", + "June" : "Birželis", + "July" : "Liepa", + "August" : "Rugpjūtis", + "September" : "Rugsėjis", + "October" : "Spalis", + "November" : "Lapkritis", + "December" : "Gruodis", + "Jan." : "Sau.", + "Feb." : "Vas.", + "Mar." : "Kov.", + "Apr." : "Bal.", + "May." : "Geg.", + "Jun." : "Bir.", + "Jul." : "Lie.", + "Aug." : "Rgp.", + "Sep." : "Rgs.", + "Oct." : "Spl.", + "Nov." : "Lap.", + "Dec." : "Grd.", + "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Naudotojo varde galima naudoti tik sekančius simbolius: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"", + "A valid username must be provided" : "Privalo būti pateiktas tinkamas naudotojo vardas", + "Username contains whitespace at the beginning or at the end" : "Naudotojo varde pradžioje ar pabaigoje yra tarpas", + "Username must not consist of dots only" : "Naudotojo vardas negali būti sudarytas tik iš taškų.", + "A valid password must be provided" : "Slaptažodis turi būti tinkamas", + "The username is already being used" : "Naudotojo vardas jau yra naudojamas", + "Could not create user" : "Nepavyko sukurti naudotojo", + "User disabled" : "Naudotojas išjungtas", + "Login canceled by app" : "Programėlė nutraukė prisijungimo procesą", + "No app name specified" : "Nenurodytas programėlės pavadinimas", + "App '%s' could not be installed!" : "Nepavyko įdiegti '%s' programėlės!", + "a safe home for all your data" : "saugūs namai visiems jūsų duomenims", + "File is currently busy, please try again later" : "Failas šiuo metu yra užimtas, prašome vėliau pabandyti dar kartą", + "Can't read file" : "Nepavyksta perskaityti failo", + "Application is not enabled" : "Programa neįjungta", + "Authentication error" : "Autentikacijos klaida", + "Token expired. Please reload page." : "Pasibaigė prieigos rakto galiojimas. Prašome įkelti puslapį iš naujo.", + "Unknown user" : "Nežinomas naudotojas", + "No database drivers (sqlite, mysql, or postgresql) installed." : "Nėra įdiegtos duomenų bazių tvarkyklės (sqlite, mysql, or postgresql)", + "Cannot write into \"config\" directory" : "Nepavyksta rašyti į \"config\" katalogą!", + "Cannot write into \"apps\" directory" : "Nepavyksta įrašyti į \"apps\" katalogą", + "Cannot create \"data\" directory" : "Nepavyksta sukurti katalogo \"data\"", + "Please install one of these locales on your system and restart your webserver." : "Prašome įdiekite vieną šių lokalių savo sistemoje ir perkraukite žiniatinklio serverį.", + "Please ask your server administrator to install the module." : "Kreipkitės į savo sistemos administratorių, kad jis įdiegtų modulį.", + "PHP module %s not installed." : "PHP modulis %s neįdiegtas.", + "PHP setting \"%s\" is not set to \"%s\"." : "PHP nustatymas \"%s\" nenustatytas į \"%s\".", + "To fix this issue update your libxml2 version and restart your web server." : "Atnaujinkite libxml2 versiją ir perkraukite žiniatinklio serverį, kad sutvarkytumėte šią problemą.", + "PHP modules have been installed, but they are still listed as missing?" : "PHP moduliai yra įdiegti, bet jų vis tiek trūksta?", + "Please ask your server administrator to restart the web server." : "Kreipkitės į savo sistemos administratorių, kad jis perkrautų žiniatinklio serverį.", + "Please upgrade your database version" : "Atnaujinkite duomenų bazės versiją.", + "Your data directory is invalid" : "Neteisingas duomenų katalogas", + "Storage unauthorized. %s" : "Saugykla nesankcionuota. %s", + "Storage incomplete configuration. %s" : "Nepilna saugyklos konfigūracija. %s", + "Storage connection error. %s" : "Saugyklos sujungimo ryšio klaida. %s", + "Storage is temporarily not available" : "Saugykla yra laikinai neprieinama", + "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulio, kurio id: %s, nėra. Prašome jį įjungti savo programėlių nustatymuose arba susisiekti su savo administratoriumi.", + "Server settings" : "Serverio nustatymai", + "DB Error: \"%s\"" : "DB klaida: \"%s\"", + "Offending command was: \"%s\"" : "Vykdyta komanda buvo: \"%s\"", + "You need to enter either an existing account or the administrator." : "Turite prisijungti su egzistuojančia paskyra arba su administratoriumi.", + "Offending command was: \"%s\", name: %s, password: %s" : "Vykdyta komanda buvo: \"%s\", name: %s, password: %s", + "Cannot increase permissions of %s" : "Negalima pridėti papildomų %s leidimų", + "Files can't be shared with delete permissions" : "Failai negali būti bendrinami su trynimo leidimu.", + "Files can't be shared with create permissions" : "Failai negali būti bendrinami su sukūrimo leidimu.", + "Personal" : "Asmeniniai", + "Admin" : "Administravimas", + "Cannot create \"data\" directory (%s)" : "Nepavyksta sukurti katalogo \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Duomenų katalogą (%s) skaito kiti naudotojai", + "Data directory (%s) is invalid" : "Duomenų katalogas (%s) netinkamas." +}, +"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/lib/l10n/lt_LT.json b/lib/l10n/lt_LT.json new file mode 100644 index 00000000000..665d0c641c4 --- /dev/null +++ b/lib/l10n/lt_LT.json @@ -0,0 +1,199 @@ +{ "translations": { + "Cannot write into \"config\" directory!" : "Nepavyksta rašyti į \"config\" katalogą!", + "This can usually be fixed by giving the webserver write access to the config directory" : "Tai, dažniausiai, gali būti ištaisyta suteikiant saityno serveriui rašymo prieigą prie konfigūracijos katalogo", + "See %s" : "Žiūrėkite %s", + "This can usually be fixed by giving the webserver write access to the config directory. See %s" : "Tai, dažniausiai, gali būti ištaisoma suteikiant žiniatinklio serveriui rašymo prieigą prie konfigūracijos katalogo. Daugiau informacijos %s", + "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Programėlės %$1s failai pakeisti neteisingai. Įsitikinkite, kad versija suderinama su serveriu.", + "Sample configuration detected" : "Aptiktas konfigūracijos pavyzdys", + "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" : "Pastebėta, kad nukopijuota pavyzdinė konfigūracija. Tai gali pažeisti diegimą ir yra nepalaikoma. Prašome perskaitykite dokumentaciją prieš atlikdami pakeitimus config.php faile.", + "%1$s and %2$s" : "%1$s ir %2$s", + "%1$s, %2$s and %3$s" : "%1$s, %2$s ir %3$s", + "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s ir %4$s", + "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s ir %5$s", + "PHP %s or higher is required." : "Reikalinga PHP %s arba aukštesnė.", + "PHP with a version lower than %s is required." : "Reikalinga žemesnė nei %s PHP versija. ", + "Following databases are supported: %s" : "Yra palaikomos šios duomenų bazės: %s", + "The command line tool %s could not be found" : "Nepavyko rasti komandų eilutės įrankio %s", + "The library %s is not available." : "Biblioteka %s nėra prieinama.", + "Library %s with a version higher than %s is required - available version %s." : "Bibliotekos %s versija turi būti aukštesnė nei %s - turima versija %s.", + "Library %s with a version lower than %s is required - available version %s." : "Bibliotekos %s versija turi būti žemesnė nei %s - turima versija %s.", + "Following platforms are supported: %s" : "Yra palaikomos šios platformos: %s", + "Server version %s or higher is required." : "Reikalinga %s arba aukštesnė serverio versija ", + "Server version %s or lower is required." : "Reikalinga %s arba žemesnė serverio versija. ", + "Unknown filetype" : "Nežinomas failo tipas", + "Invalid image" : "Neteisingas paveikslas", + "today" : "šiandien", + "yesterday" : "vakar", + "_%n day ago_::_%n days ago_" : ["prieš %n dieną","prieš %n dienas","prieš %n dienų"], + "last month" : "praeitą mėnesį", + "_%n month ago_::_%n months ago_" : ["prieš %n mėnesį","prieš %n mėnesius","prieš %n mėnesių"], + "last year" : "praeitais metais", + "_%n year ago_::_%n years ago_" : ["prieš %n metus","prieš %n metus","prieš %n metų"], + "_%n hour ago_::_%n hours ago_" : ["prieš %n valandą","prieš %n valandas","prieš %n valandų"], + "_%n minute ago_::_%n minutes ago_" : ["prieš %n minutę","prieš % minutes","prieš %n minučių"], + "seconds ago" : "prieš keletą sekundžių", + "Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulio, kurio id: %s, nėra. Prašome jį įjungti savo programėlių nustatymuose arba susisiekti su savo administratoriumi.", + "File name is a reserved word" : "Failo pavadinimas negalimas, žodis rezervuotas", + "File name contains at least one invalid character" : "Failo vardas sudarytas iš neleistinų simbolių", + "File name is too long" : "Failo pavadinimas per ilgas", + "Empty filename is not allowed" : "Tuščias failo pavadinimas nėra leidžiamas", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "Programėlė \"%s\" negali būti įdiegta, kadangi negalima perskaityti appinfo failo.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Programėlė \"%s\" negali būti įdiegta, kadangi ji nėra suderinama su serverio versija.", + "This is an automatically sent email, please do not reply." : "Tai yra automatinis pranešimas, prašome neatsakyti.", + "Help" : "Pagalba", + "Apps" : "Programėlės", + "Settings" : "Nustatymai", + "Log out" : "Atsijungti", + "Users" : "Naudotojai", + "APCu" : "APCu", + "Redis" : "Redis", + "Basic settings" : "Pagrindiniai nustatymai", + "Sharing" : "Dalijimasis", + "Security" : "Saugumas", + "Encryption" : "Šifravimas", + "Additional settings" : "Papildomi nustatymai", + "Tips & tricks" : "Patarimai ir gudrybės", + "Personal info" : "Asmeninė informacija", + "Sync clients" : "Sinchronizavimo klientas", + "Unlimited" : "Neribota", + "__language_name__" : "Lietuvių", + "Verifying" : "Tikrinimas", + "Verifying …" : "Tikrinama...", + "Verify" : "Patikrinti", + "%s enter the database username and name." : "%s įrašykite duomenų bazės naudotojo vardą ir pavadinimą.", + "%s enter the database username." : "%s įrašykite duomenų bazės naudotojo vardą.", + "%s enter the database name." : "%s įrašykite duomenų bazės pavadinimą.", + "%s you may not use dots in the database name" : "%s negalite naudoti taškų duombazės pavadinime", + "Oracle connection could not be established" : "Nepavyko užmegzti Oracle ryšio", + "Oracle username and/or password not valid" : "Neteisingas Oracle naudotojo vardas ir/arba slaptažodis", + "PostgreSQL username and/or password not valid" : "Neteisingas PostgreSQL naudotojo vardas ir/arba slaptažodis", + "You need to enter details of an existing account." : "Jūs turite suvesti egzistuojančios paskyros duomenis.", + "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X nėra palaikomas, %s neveiks tinkamai šioje platformoje. Naudodami prisiimate visą riziką !", + "Set an admin username." : "Nustatyti administratoriaus naudotojo vardą.", + "Set an admin password." : "Nustatyti administratoriaus slaptažodį.", + "Can't create or write into the data directory %s" : "Negalima nuskaityti arba rašyti į duomenų katalogą. %s", + "Invalid Federated Cloud ID" : "Netinkamas Centralizuoto Serverio ID", + "Sharing %s failed, because the backend does not allow shares from type %i" : "%s dalinimasis nepavyko, nes sistema nepalaiko šio duomenų tipo %i", + "Sharing %s failed, because the file does not exist" : "%s dalinimasis nepavyko, nes failas neegzistuoja.", + "You are not allowed to share %s" : "Jums neleidžiama bendrinti %s", + "Sharing %s failed, because you can not share with yourself" : "%s bendrinimas nepavyko, jūs negalite bendrinti su savimi pačiu.", + "Sharing %s failed, because the user %s does not exist" : "%s bendrinimas nepavyko, nes naudotojas %s neegzistuoja", + "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "%s bendrinimas nepavyko, nes naudotojas %s nėra tos pačios grupės, kaip %s, narys.", + "Sharing %s failed, because this item is already shared with %s" : "%s bendrinimas nepavyko, kadangi šis elementas jau yra bendrinamas su %s", + "Sharing %s failed, because this item is already shared with user %s" : "%s bendrinimas nepavyko, kadangi šis elementas jau yra bendrinamas su naudotoju %s", + "Sharing %s failed, because the group %s does not exist" : "%s bendrinimas nepavyko, nes grupė %s neegzistuoja", + "Sharing %s failed, because %s is not a member of the group %s" : " %s bendrinimas nepavyko, nes %s nėra %s grupės narys.", + "You need to provide a password to create a public link, only protected links are allowed" : "Viešoms nuorodoms būtinas slaptažodis, leidžiamos tik apsaugotos nuorodos.", + "Sharing %s failed, because sharing with links is not allowed" : "Bendrinimas %s nepavyko, kadangi bendrinimas su nuorodomis yra neleidžiamas.", + "Not allowed to create a federated share with the same user" : "Negalima dalintis su identišku naudotoju kitame serveryje", + "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s pasidalinimas nepavyko, neįmanoma rasti %s, tikėtina, kad serveris šiuo metu nepasiekiamas", + "Share type %s is not valid for %s" : "Bendrinimo tipas %s netinka %s", + "Cannot set expiration date. Expiration date is in the past" : "Nepavyko nustatyti galiojimo datos. Galiojimo data yra praėjęs laikas.", + "Sharing failed, because the user %s is the original sharer" : "Bendrinimas nepavyko, nes naudotojas %s yra bendrintojas.", + "Sharing %s failed, because resharing is not allowed" : "%s bendrinimas nepavyko, nes perskirstymas yra neleidžiamas.", + "Can’t increase permissions of %s" : "Negalima pridėti papildomų %s leidimų", + "Expiration date is in the past" : "Bendrinimo pabaigos data yra praėjęs laikas", + "Can’t set expiration date more than %s days in the future" : "Negalima nustatyti galiojimo laiko ilgesnio nei %s dienos.", + "%s shared »%s« with you" : "%s pasidalino »%s« su jumis", + "%s shared »%s« with you." : "%s pasidalino »%s« su Jumis.", + "Click the button below to open it." : "Norėdami atverti failą, spustelėkite mygtuką žemiau.", + "Open »%s«" : "Atidaryti \"%s\"", + "%s via %s" : "%s per %s", + "The requested share does not exist anymore" : "Pageidaujamas bendrinimas daugiau neegzistuoja.", + "Could not find category \"%s\"" : "Nepavyko rasti kategorijos „%s“", + "Sunday" : "Sekmadienis", + "Monday" : "Pirmadienis", + "Tuesday" : "Antradienis", + "Wednesday" : "Trečiadienis", + "Thursday" : "Ketvirtadienis", + "Friday" : "Penktadienis", + "Saturday" : "Šeštadienis", + "Sun." : "Sek.", + "Mon." : "Pir.", + "Tue." : "Ant.", + "Wed." : "Tre.", + "Thu." : "Ket.", + "Fri." : "Pen.", + "Sat." : "Šeš.", + "Su" : "Sk", + "Mo" : "Pr", + "Tu" : "An", + "We" : "Tr", + "Th" : "Kt", + "Fr" : "Pn", + "Sa" : "Št", + "January" : "Sausis", + "February" : "Vasaris", + "March" : "Kovas", + "April" : "Balandis", + "May" : "Gegužė", + "June" : "Birželis", + "July" : "Liepa", + "August" : "Rugpjūtis", + "September" : "Rugsėjis", + "October" : "Spalis", + "November" : "Lapkritis", + "December" : "Gruodis", + "Jan." : "Sau.", + "Feb." : "Vas.", + "Mar." : "Kov.", + "Apr." : "Bal.", + "May." : "Geg.", + "Jun." : "Bir.", + "Jul." : "Lie.", + "Aug." : "Rgp.", + "Sep." : "Rgs.", + "Oct." : "Spl.", + "Nov." : "Lap.", + "Dec." : "Grd.", + "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Naudotojo varde galima naudoti tik sekančius simbolius: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"", + "A valid username must be provided" : "Privalo būti pateiktas tinkamas naudotojo vardas", + "Username contains whitespace at the beginning or at the end" : "Naudotojo varde pradžioje ar pabaigoje yra tarpas", + "Username must not consist of dots only" : "Naudotojo vardas negali būti sudarytas tik iš taškų.", + "A valid password must be provided" : "Slaptažodis turi būti tinkamas", + "The username is already being used" : "Naudotojo vardas jau yra naudojamas", + "Could not create user" : "Nepavyko sukurti naudotojo", + "User disabled" : "Naudotojas išjungtas", + "Login canceled by app" : "Programėlė nutraukė prisijungimo procesą", + "No app name specified" : "Nenurodytas programėlės pavadinimas", + "App '%s' could not be installed!" : "Nepavyko įdiegti '%s' programėlės!", + "a safe home for all your data" : "saugūs namai visiems jūsų duomenims", + "File is currently busy, please try again later" : "Failas šiuo metu yra užimtas, prašome vėliau pabandyti dar kartą", + "Can't read file" : "Nepavyksta perskaityti failo", + "Application is not enabled" : "Programa neįjungta", + "Authentication error" : "Autentikacijos klaida", + "Token expired. Please reload page." : "Pasibaigė prieigos rakto galiojimas. Prašome įkelti puslapį iš naujo.", + "Unknown user" : "Nežinomas naudotojas", + "No database drivers (sqlite, mysql, or postgresql) installed." : "Nėra įdiegtos duomenų bazių tvarkyklės (sqlite, mysql, or postgresql)", + "Cannot write into \"config\" directory" : "Nepavyksta rašyti į \"config\" katalogą!", + "Cannot write into \"apps\" directory" : "Nepavyksta įrašyti į \"apps\" katalogą", + "Cannot create \"data\" directory" : "Nepavyksta sukurti katalogo \"data\"", + "Please install one of these locales on your system and restart your webserver." : "Prašome įdiekite vieną šių lokalių savo sistemoje ir perkraukite žiniatinklio serverį.", + "Please ask your server administrator to install the module." : "Kreipkitės į savo sistemos administratorių, kad jis įdiegtų modulį.", + "PHP module %s not installed." : "PHP modulis %s neįdiegtas.", + "PHP setting \"%s\" is not set to \"%s\"." : "PHP nustatymas \"%s\" nenustatytas į \"%s\".", + "To fix this issue update your libxml2 version and restart your web server." : "Atnaujinkite libxml2 versiją ir perkraukite žiniatinklio serverį, kad sutvarkytumėte šią problemą.", + "PHP modules have been installed, but they are still listed as missing?" : "PHP moduliai yra įdiegti, bet jų vis tiek trūksta?", + "Please ask your server administrator to restart the web server." : "Kreipkitės į savo sistemos administratorių, kad jis perkrautų žiniatinklio serverį.", + "Please upgrade your database version" : "Atnaujinkite duomenų bazės versiją.", + "Your data directory is invalid" : "Neteisingas duomenų katalogas", + "Storage unauthorized. %s" : "Saugykla nesankcionuota. %s", + "Storage incomplete configuration. %s" : "Nepilna saugyklos konfigūracija. %s", + "Storage connection error. %s" : "Saugyklos sujungimo ryšio klaida. %s", + "Storage is temporarily not available" : "Saugykla yra laikinai neprieinama", + "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Modulio, kurio id: %s, nėra. Prašome jį įjungti savo programėlių nustatymuose arba susisiekti su savo administratoriumi.", + "Server settings" : "Serverio nustatymai", + "DB Error: \"%s\"" : "DB klaida: \"%s\"", + "Offending command was: \"%s\"" : "Vykdyta komanda buvo: \"%s\"", + "You need to enter either an existing account or the administrator." : "Turite prisijungti su egzistuojančia paskyra arba su administratoriumi.", + "Offending command was: \"%s\", name: %s, password: %s" : "Vykdyta komanda buvo: \"%s\", name: %s, password: %s", + "Cannot increase permissions of %s" : "Negalima pridėti papildomų %s leidimų", + "Files can't be shared with delete permissions" : "Failai negali būti bendrinami su trynimo leidimu.", + "Files can't be shared with create permissions" : "Failai negali būti bendrinami su sukūrimo leidimu.", + "Personal" : "Asmeniniai", + "Admin" : "Administravimas", + "Cannot create \"data\" directory (%s)" : "Nepavyksta sukurti katalogo \"data\" (%s)", + "Data directory (%s) is readable by other users" : "Duomenų katalogą (%s) skaito kiti naudotojai", + "Data directory (%s) is invalid" : "Duomenų katalogas (%s) netinkamas." +},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);" +}
\ No newline at end of file diff --git a/lib/private/Authentication/TwoFactorAuth/Manager.php b/lib/private/Authentication/TwoFactorAuth/Manager.php index fd0d5914d02..b825f45f739 100644 --- a/lib/private/Authentication/TwoFactorAuth/Manager.php +++ b/lib/private/Authentication/TwoFactorAuth/Manager.php @@ -269,6 +269,11 @@ class Manager { return false; } + // If we are authenticated using an app password skip all this + if ($this->session->exists('app_password')) { + return false; + } + // First check if the session tells us we should do 2FA (99% case) if (!$this->session->exists(self::SESSION_UID_KEY)) { @@ -296,7 +301,6 @@ class Manager { } } - if (!$this->isTwoFactorAuthenticated($user)) { // There is no second factor any more -> let the user pass // This prevents infinite redirect loops when a user is about diff --git a/lib/private/Files/ObjectStore/Swift.php b/lib/private/Files/ObjectStore/Swift.php index 8b64fd66de0..36a1a4a873f 100644 --- a/lib/private/Files/ObjectStore/Swift.php +++ b/lib/private/Files/ObjectStore/Swift.php @@ -73,10 +73,10 @@ class Swift implements IObjectStore { if (isset($params['apiKey'])) { $this->client = new Rackspace($params['url'], $params); - $cacheKey = $this->params['username'] . '@' . $this->params['url'] . '/' . $this->params['bucket']; + $cacheKey = $params['username'] . '@' . $params['url'] . '/' . $params['bucket']; } else { $this->client = new OpenStack($params['url'], $params); - $cacheKey = $this->params['username'] . '@' . $this->params['url'] . '/' . $this->params['bucket']; + $cacheKey = $params['username'] . '@' . $params['url'] . '/' . $params['bucket']; } $cacheFactory = \OC::$server->getMemCacheFactory(); diff --git a/lib/private/Server.php b/lib/private/Server.php index fb0aa76cd17..a20d9ccfc01 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -892,7 +892,8 @@ class Server extends ServerContainer implements IServerContainer { $c->getURLGenerator(), $c->getAppDataDir('theming'), $c->getMemCacheFactory(), - new Util($c->getConfig(), $this->getAppManager(), $this->getAppDataDir('theming')) + new Util($c->getConfig(), $this->getAppManager(), $this->getAppDataDir('theming')), + $this->getAppManager() ); } return new \OC_Defaults(); diff --git a/lib/private/Template/CSSResourceLocator.php b/lib/private/Template/CSSResourceLocator.php index 1b4050e4ae0..e4b6890529e 100644 --- a/lib/private/Template/CSSResourceLocator.php +++ b/lib/private/Template/CSSResourceLocator.php @@ -128,14 +128,14 @@ class CSSResourceLocator extends ResourceLocator { 'webRoot' => $webRoot, 'throw' => $throw ? 'true' : 'false' ]); - } - } - if ($throw && $tmpRoot === '/') { - throw new ResourceNotFoundException($file, $webRoot); + if ($throw) { + throw new ResourceNotFoundException($file, $webRoot); + } + } } - $this->resources[] = array($tmpRoot, $webRoot, $file); + $this->resources[] = array($webRoot? : '/', $webRoot, $file); } } } diff --git a/lib/private/URLGenerator.php b/lib/private/URLGenerator.php index 9c73ba4cbc7..ee75f8b21bb 100644 --- a/lib/private/URLGenerator.php +++ b/lib/private/URLGenerator.php @@ -166,6 +166,11 @@ class URLGenerator implements IURLGenerator { // Check if the app is in the app folder $path = ''; $themingEnabled = $this->config->getSystemValue('installed', false) && \OCP\App::isEnabled('theming') && \OC_App::isAppLoaded('theming'); + $themingImagePath = false; + if($themingEnabled) { + $themingImagePath = \OC::$server->getThemingDefaults()->replaceImagePath($app, $image); + } + if (file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$image")) { $path = \OC::$WEBROOT . "/themes/$theme/apps/$app/img/$image"; } elseif (!file_exists(\OC::$SERVERROOT . "/themes/$theme/apps/$app/img/$basename.svg") @@ -181,14 +186,8 @@ class URLGenerator implements IURLGenerator { } elseif (!file_exists(\OC::$SERVERROOT . "/themes/$theme/core/img/$basename.svg") && file_exists(\OC::$SERVERROOT . "/themes/$theme/core/img/$basename.png")) { $path = \OC::$WEBROOT . "/themes/$theme/core/img/$basename.png"; - } elseif($themingEnabled && $image === "favicon.ico" && \OC::$server->getThemingDefaults()->shouldReplaceIcons()) { - $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); - if($app==="") { $app = "core"; } - $path = $this->linkToRoute('theming.Icon.getFavicon', [ 'app' => $app ]) . '?v='. $cacheBusterValue; - } elseif($themingEnabled && $image === "favicon-touch.png" && \OC::$server->getThemingDefaults()->shouldReplaceIcons()) { - $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); - if($app==="") { $app = "core"; } - $path = $this->linkToRoute('theming.Icon.getTouchIcon', [ 'app' => $app ]) . '?v='. $cacheBusterValue; + } elseif($themingEnabled && $themingImagePath) { + $path = $themingImagePath; } elseif ($appPath && file_exists($appPath . "/img/$image")) { $path = \OC_App::getAppWebPath($app) . "/img/$image"; } elseif ($appPath && !file_exists($appPath . "/img/$basename.svg") diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php index 31f04803066..764e36b5d7e 100644 --- a/lib/public/Share/IManager.php +++ b/lib/public/Share/IManager.php @@ -40,6 +40,7 @@ interface IManager { * * @param IShare $share * @return IShare The share object + * @throws \Exception * @since 9.0.0 */ public function createShare(IShare $share); @@ -51,6 +52,7 @@ interface IManager { * * @param IShare $share * @return IShare The share object + * @throws \InvalidArgumentException * @since 9.0.0 */ public function updateShare(IShare $share); @@ -60,6 +62,7 @@ interface IManager { * * @param IShare $share * @throws ShareNotFound + * @throws \InvalidArgumentException * @since 9.0.0 */ public function deleteShare(IShare $share); diff --git a/settings/js/apps.js b/settings/js/apps.js index 278c307b1f3..258b0f4adcc 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -114,11 +114,7 @@ OC.Settings.Apps = OC.Settings.Apps || { if (a.active !== b.active) { return (a.active ? -1 : 1) } else { - var levelDiff = b.level - a.level; - if (levelDiff === 0) { - return OC.Util.naturalSortCompare(a.name, b.name); - } - return levelDiff; + return OC.Util.naturalSortCompare(a.name, b.name); } }); } diff --git a/settings/l10n/hu.js b/settings/l10n/hu.js index 10775224c1f..d63b76dae8a 100644 --- a/settings/l10n/hu.js +++ b/settings/l10n/hu.js @@ -116,6 +116,7 @@ OC.L10N.register( "Visible to local users and to trusted servers" : "Helyi felhasználók és megbízható szereverek láthatják", "Public" : "Nyilvános", "Will be synced to a global and public address book" : "Globális és nyilvános névjegyek számára lesz szinkronizálva", + "Verifying …" : "Ellenőrzés...", "Select a profile picture" : "Válasszon profilképet!", "Very weak password" : "Nagyon gyenge jelszó", "Weak password" : "Gyenge jelszó", @@ -128,6 +129,7 @@ OC.L10N.register( "A valid group name must be provided" : "Érvényes csoportnevet kell megadni", "deleted {groupName}" : "törölve: {groupName}", "undo" : "visszavonás", + "{size} used" : "{size} felhasználva", "never" : "soha", "deleted {userName}" : "törölve: {userName}", "No user found for <strong>{pattern}</strong>" : "Nem található erre felhasználó: <strong>{pattern}</strong>", diff --git a/settings/l10n/hu.json b/settings/l10n/hu.json index dd09c990883..52afe2aca66 100644 --- a/settings/l10n/hu.json +++ b/settings/l10n/hu.json @@ -114,6 +114,7 @@ "Visible to local users and to trusted servers" : "Helyi felhasználók és megbízható szereverek láthatják", "Public" : "Nyilvános", "Will be synced to a global and public address book" : "Globális és nyilvános névjegyek számára lesz szinkronizálva", + "Verifying …" : "Ellenőrzés...", "Select a profile picture" : "Válasszon profilképet!", "Very weak password" : "Nagyon gyenge jelszó", "Weak password" : "Gyenge jelszó", @@ -126,6 +127,7 @@ "A valid group name must be provided" : "Érvényes csoportnevet kell megadni", "deleted {groupName}" : "törölve: {groupName}", "undo" : "visszavonás", + "{size} used" : "{size} felhasználva", "never" : "soha", "deleted {userName}" : "törölve: {userName}", "No user found for <strong>{pattern}</strong>" : "Nem található erre felhasználó: <strong>{pattern}</strong>", diff --git a/settings/l10n/nb.js b/settings/l10n/nb.js index 8ae0cb58899..abd2d207463 100644 --- a/settings/l10n/nb.js +++ b/settings/l10n/nb.js @@ -70,6 +70,7 @@ OC.L10N.register( "Email address for %1$s changed on %2$s" : "E-postadresse for %1$s endret på %2$s", "Welcome aboard" : "Velkommen ombord", "Welcome aboard %s" : "Velkommen ombord i %s", + "You now have an %s account, you can add, protect, and share your data." : "Du har nå en %s-konto, og kan legge til, beskytte og dele din data.", "Your username is: %s" : "Ditt brukernavn er: %s", "Set your password" : "Sett passordet ditt", "Go to %s" : "Gå til %s", @@ -307,6 +308,8 @@ OC.L10N.register( "Theming" : "Drakter", "Check the security of your Nextcloud over our security scan" : "Sjekk sikkerheten på din Nextcloud over vår sikkerhetsskanning", "Hardening and security guidance" : "Herding og sikkerhetsveiledning", + "Personal" : "Personlig", + "Administration" : "Administrasjon", "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>", "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruker <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)", "Profile picture" : "Profilbilde", diff --git a/settings/l10n/nb.json b/settings/l10n/nb.json index e1c5e6e828e..0823a89922b 100644 --- a/settings/l10n/nb.json +++ b/settings/l10n/nb.json @@ -68,6 +68,7 @@ "Email address for %1$s changed on %2$s" : "E-postadresse for %1$s endret på %2$s", "Welcome aboard" : "Velkommen ombord", "Welcome aboard %s" : "Velkommen ombord i %s", + "You now have an %s account, you can add, protect, and share your data." : "Du har nå en %s-konto, og kan legge til, beskytte og dele din data.", "Your username is: %s" : "Ditt brukernavn er: %s", "Set your password" : "Sett passordet ditt", "Go to %s" : "Gå til %s", @@ -305,6 +306,8 @@ "Theming" : "Drakter", "Check the security of your Nextcloud over our security scan" : "Sjekk sikkerheten på din Nextcloud over vår sikkerhetsskanning", "Hardening and security guidance" : "Herding og sikkerhetsveiledning", + "Personal" : "Personlig", + "Administration" : "Administrasjon", "You are using <strong>%s</strong> of <strong>%s</strong>" : "Du bruker <strong>%s</strong> av <strong>%s</strong>", "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Du bruker <strong>%s</strong> av <strong>%s</strong> (<strong>%s %%</strong>)", "Profile picture" : "Profilbilde", diff --git a/settings/tests/js/appsSpec.js b/settings/tests/js/appsSpec.js index 4b917b425c1..bc4681e2b8d 100644 --- a/settings/tests/js/appsSpec.js +++ b/settings/tests/js/appsSpec.js @@ -172,7 +172,7 @@ describe('OC.Settings.Apps tests', function() { return results; } - it('sorts all applications using the level', function() { + it('does not sort applications using the level', function() { Apps.loadCategory('TestId'); suite.server.requests[0].respond( @@ -223,7 +223,7 @@ describe('OC.Settings.Apps tests', function() { var results = getResultsFromDom(); expect(results.length).toEqual(5); - expect(results).toEqual(['alpha', 'delta', 'zork', 'foo', 'nolevel']); + expect(results).toEqual(['alpha', 'foo', 'delta', 'nolevel', 'zork']); expect(OC.Settings.Apps.State.apps).toEqual({ 'foo': { id: 'foo', diff --git a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php index 4fa3b3d7e14..9db27edd70c 100644 --- a/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php +++ b/tests/lib/Authentication/TwoFactorAuth/ManagerTest.php @@ -388,9 +388,13 @@ class ManagerTest extends TestCase { $user = $this->createMock(IUser::class); $this->session->expects($this->at(0)) ->method('exists') + ->with('app_password') + ->willReturn(false); + $this->session->expects($this->at(1)) + ->method('exists') ->with('two_factor_auth_uid') ->will($this->returnValue(false)); - $this->session->expects($this->at(1)) + $this->session->expects($this->at(2)) ->method('exists') ->with(Manager::SESSION_UID_DONE) ->willReturn(false); @@ -523,6 +527,8 @@ class ManagerTest extends TestCase { ->will($this->returnCallback(function($var) { if ($var === Manager::SESSION_UID_KEY) { return false; + } else if ($var === 'app_password') { + return false; } return true; })); @@ -585,4 +591,13 @@ class ManagerTest extends TestCase { $this->assertFalse($this->manager->needsSecondFactor($user)); } + + public function testNeedsSecondFactorAppPassword() { + $user = $this->createMock(IUser::class); + $this->session->method('exists') + ->with('app_password') + ->willReturn(true); + + $this->assertFalse($this->manager->needsSecondFactor($user)); + } } |