diff options
682 files changed, 11853 insertions, 3054 deletions
diff --git a/.gitignore b/.gitignore index f60dda513e4..63a34beb978 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ !/apps/admin_audit !/apps/updatenotification !/apps/theming +!/apps/workflowengine /apps/files_external/3rdparty/irodsphp/PHPUnitTest /apps/files_external/3rdparty/irodsphp/web /apps/files_external/3rdparty/irodsphp/prods/test diff --git a/.htaccess b/.htaccess index bd9f5af3f70..5b864643565 100644 --- a/.htaccess +++ b/.htaccess @@ -20,8 +20,8 @@ SetEnv modHeadersAvailable true </IfModule> - # Add cache control for CSS and JS files - <FilesMatch "\.(css|js)$"> + # Add cache control for static resources + <FilesMatch "\.(css|js|woff|svg|gif)$"> Header set Cache-Control "max-age=7200, public" </FilesMatch> </IfModule> diff --git a/.travis.yml b/.travis.yml index 15413d3413e..fbbff9fc16e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ install: script: - sh -c "if [ '$TC' = 'syntax' ]; then composer install && lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .; fi" - - sh -c "if [ '$TC' = 'app:check-code' ]; then ./occ app:check-code admin_audit; ./occ app:check-code comments; ./occ app:check-code federation; fi" + - sh -c "if [ '$TC' = 'app:check-code' ]; then ./occ app:check-code admin_audit; ./occ app:check-code comments; ./occ app:check-code federation; ./occ app:check-code workflowengine; fi" - sh -c "if [ '$TEST_DAV' != '1' ]; then echo \"Not testing DAV\"; fi" - sh -c "if [ '$TEST_DAV' = '1' ]; then echo \"Testing DAV\"; fi" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 64cad6ba647..5e02664c919 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ If you have questions about how to install or use Nextcloud, please direct these - Go to one of the repositories, click "issues" and type any word in the top search/command bar. - You can also filter by appending e. g. "state:open" to the search string. - More info on [search syntax within github](https://help.github.com/articles/searching-issues) -* This repository ([core](https://github.com/nextcloud/core/issues)) is *only* for issues within the Nextcloud Server code. This also includes the apps: files, encryption, external storage, sharing, deleted files, versions, LDAP, and WebDAV Auth +* This repository ([server](https://github.com/nextcloud/server/issues)) is *only* for issues within the Nextcloud Server code. This also includes the apps: files, encryption, external storage, sharing, deleted files, versions, LDAP, and WebDAV Auth * __SECURITY__: Report any potential security bug to us via [our HackerOne page](https://hackerone.com/nextcloud) or security@nextcloud.com following our [security policy](https://nextcloud.com/security/) instead of filing an issue in our bug tracker. * The issues in other components should be reported in their respective repositories: You will find them in our [GitHub Organization](https://github.com/nextcloud/) diff --git a/README.md b/README.md index 7a540a6e45e..40b18f88457 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,11 @@ changed it substantially: More information how to contribute: https://nextcloud.com/contribute/ +## Nextcloud VM +If you're not familiar with Linux, or simply just want to get up and running on a pre-configured system in no time - we have developed a VM that you can download. Just extract it and mount it in VMware or VirtualBox and your're all set. + +Download the latest version of the [Nextcloud VM](https://github.com/nextcloud/vm/releases/) + ## Support Learn about the different ways you can get support for Nextcloud: https://nextcloud.com/support/ diff --git a/apps/admin_audit/appinfo/info.xml b/apps/admin_audit/appinfo/info.xml index d651fd037d3..0da8b115dc8 100644 --- a/apps/admin_audit/appinfo/info.xml +++ b/apps/admin_audit/appinfo/info.xml @@ -14,5 +14,4 @@ <types> <logging/> </types> - <default_enable/> </info> diff --git a/apps/comments/appinfo/info.xml b/apps/comments/appinfo/info.xml index 2bd28dd8954..39584694e23 100644 --- a/apps/comments/appinfo/info.xml +++ b/apps/comments/appinfo/info.xml @@ -6,7 +6,7 @@ <licence>AGPL</licence> <author>Arthur Schiwon, Vincent Petry</author> <default_enable/> - <version>1.0.0</version> + <version>1.1.0</version> <dependencies> <owncloud min-version="9.2" max-version="9.2" /> </dependencies> diff --git a/apps/comments/img/comments.svg b/apps/comments/img/comments.svg new file mode 100644 index 00000000000..5cdc84a25d7 --- /dev/null +++ b/apps/comments/img/comments.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1"> + <path fill="#fff" d="m16 3c-8.8366 0-16 4.9248-16 11s7.1634 11 16 11c0.49926 0 0.98116-0.03174 1.4688-0.0625l8.5312 7.062v-9.406c3.658-2.016 6-5.1198 6-8.594 0-6.0752-7.164-11-16-11z"/> +</svg> diff --git a/apps/comments/l10n/de.js b/apps/comments/l10n/de.js index 27d5154d150..34a839ab484 100644 --- a/apps/comments/l10n/de.js +++ b/apps/comments/l10n/de.js @@ -1,7 +1,7 @@ OC.L10N.register( "comments", { - "Type in a new comment..." : "Bitte gib einen neuen Kommentar ein...", + "Type in a new comment..." : "Neuen Kommentar eingeben...", "Delete comment" : "Kommentar löschen", "Post" : "Speichern", "Cancel" : "Abbrechen", diff --git a/apps/comments/l10n/de.json b/apps/comments/l10n/de.json index 36e557bcb6d..d9c5309196c 100644 --- a/apps/comments/l10n/de.json +++ b/apps/comments/l10n/de.json @@ -1,5 +1,5 @@ { "translations": { - "Type in a new comment..." : "Bitte gib einen neuen Kommentar ein...", + "Type in a new comment..." : "Neuen Kommentar eingeben...", "Delete comment" : "Kommentar löschen", "Post" : "Speichern", "Cancel" : "Abbrechen", diff --git a/apps/comments/l10n/de_DE.js b/apps/comments/l10n/de_DE.js index eae9e8afd9f..bbddac44a10 100644 --- a/apps/comments/l10n/de_DE.js +++ b/apps/comments/l10n/de_DE.js @@ -19,7 +19,7 @@ OC.L10N.register( "Comment" : "Kommentar", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>", "You commented" : "Sie haben kommentiert", - "%1$s commented" : "%1$s kommentiert", + "%1$s commented" : "%1$s kommentierte", "You commented on %2$s" : "Sie haben %2$s kommentiert", "%1$s commented on %2$s" : "%1$s kommentierte %2$s" }, diff --git a/apps/comments/l10n/de_DE.json b/apps/comments/l10n/de_DE.json index ab4231e4155..a8ff860a17f 100644 --- a/apps/comments/l10n/de_DE.json +++ b/apps/comments/l10n/de_DE.json @@ -17,7 +17,7 @@ "Comment" : "Kommentar", "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>", "You commented" : "Sie haben kommentiert", - "%1$s commented" : "%1$s kommentiert", + "%1$s commented" : "%1$s kommentierte", "You commented on %2$s" : "Sie haben %2$s kommentiert", "%1$s commented on %2$s" : "%1$s kommentierte %2$s" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/comments/l10n/id.js b/apps/comments/l10n/id.js index cecae13fb6f..c8124c24c63 100644 --- a/apps/comments/l10n/id.js +++ b/apps/comments/l10n/id.js @@ -12,9 +12,15 @@ OC.L10N.register( "More comments..." : "Komentar lainya...", "Save" : "Simpan", "Allowed characters {count} of {max}" : "Karakter yang diizinkan {count} dari {max}", + "Error occurred while retrieving comment with id {id}" : "Terjadi kesalahan saat mendapatkan komentar dengan id {id}", + "Error occurred while updating comment with id {id}" : "Terjadi kesalahan saat memperbarui komentar dengan id {id}", + "Error occurred while posting comment" : "Terjadi kesalahan saat memosting komentar", "{count} unread comments" : "{count} komentar belum dibaca", "Comment" : "Komentar", + "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentar</strong> untuk berkas <em>(selalu dicantumkan dalam stream)</em>", + "You commented" : "Anda berkomentar", "%1$s commented" : "%1$s dikomentari", + "You commented on %2$s" : "Anda berkomentar di %2$s", "%1$s commented on %2$s" : "%1$s dikomentari pada %2$s" }, "nplurals=1; plural=0;"); diff --git a/apps/comments/l10n/id.json b/apps/comments/l10n/id.json index 7836eeb40b5..94bad1d4027 100644 --- a/apps/comments/l10n/id.json +++ b/apps/comments/l10n/id.json @@ -10,9 +10,15 @@ "More comments..." : "Komentar lainya...", "Save" : "Simpan", "Allowed characters {count} of {max}" : "Karakter yang diizinkan {count} dari {max}", + "Error occurred while retrieving comment with id {id}" : "Terjadi kesalahan saat mendapatkan komentar dengan id {id}", + "Error occurred while updating comment with id {id}" : "Terjadi kesalahan saat memperbarui komentar dengan id {id}", + "Error occurred while posting comment" : "Terjadi kesalahan saat memosting komentar", "{count} unread comments" : "{count} komentar belum dibaca", "Comment" : "Komentar", + "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentar</strong> untuk berkas <em>(selalu dicantumkan dalam stream)</em>", + "You commented" : "Anda berkomentar", "%1$s commented" : "%1$s dikomentari", + "You commented on %2$s" : "Anda berkomentar di %2$s", "%1$s commented on %2$s" : "%1$s dikomentari pada %2$s" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/comments/l10n/is.js b/apps/comments/l10n/is.js index 6e1faa9b251..f32e49d37c5 100644 --- a/apps/comments/l10n/is.js +++ b/apps/comments/l10n/is.js @@ -12,8 +12,12 @@ OC.L10N.register( "More comments..." : "Fleiri athugasemdir...", "Save" : "Vista", "Allowed characters {count} of {max}" : "Leyfður stafafjöldi {count} af {max}", + "Error occurred while retrieving comment with id {id}" : "Villa kom upp við að reyna að ná í athugasemd með auðkenninu {id}", + "Error occurred while updating comment with id {id}" : "Villa kom upp við að reyna að uppfæra athugasemd með auðkenninu {id}", + "Error occurred while posting comment" : "Villa kom upp við að senda inn athugasemd", "{count} unread comments" : "{count} ólesnar athugasemdir", "Comment" : "Athugasemd", + "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Athugasemdir</strong> við skrár <em>(alltaf á lista í streymi)</em>", "You commented" : "Þú settir inn athugasemd", "%1$s commented" : "%1$s setti inn athugasemd", "You commented on %2$s" : "Þú settir inn athugasemd við %2$s", diff --git a/apps/comments/l10n/is.json b/apps/comments/l10n/is.json index e36776a32f1..c70a192f529 100644 --- a/apps/comments/l10n/is.json +++ b/apps/comments/l10n/is.json @@ -10,8 +10,12 @@ "More comments..." : "Fleiri athugasemdir...", "Save" : "Vista", "Allowed characters {count} of {max}" : "Leyfður stafafjöldi {count} af {max}", + "Error occurred while retrieving comment with id {id}" : "Villa kom upp við að reyna að ná í athugasemd með auðkenninu {id}", + "Error occurred while updating comment with id {id}" : "Villa kom upp við að reyna að uppfæra athugasemd með auðkenninu {id}", + "Error occurred while posting comment" : "Villa kom upp við að senda inn athugasemd", "{count} unread comments" : "{count} ólesnar athugasemdir", "Comment" : "Athugasemd", + "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Athugasemdir</strong> við skrár <em>(alltaf á lista í streymi)</em>", "You commented" : "Þú settir inn athugasemd", "%1$s commented" : "%1$s setti inn athugasemd", "You commented on %2$s" : "Þú settir inn athugasemd við %2$s", diff --git a/apps/comments/l10n/tr.js b/apps/comments/l10n/tr.js index 2204320b2a7..e23ecaee1e9 100644 --- a/apps/comments/l10n/tr.js +++ b/apps/comments/l10n/tr.js @@ -13,9 +13,11 @@ OC.L10N.register( "Save" : "Kaydet", "Allowed characters {count} of {max}" : "İzin verilen karakterler {count}/{max}", "Error occurred while retrieving comment with id {id}" : "{id} numaralı yorumu geri alırken bir hata oluştu", + "Error occurred while updating comment with id {id}" : "{id} numaralı yorum güncellenirken hata oluştu", "Error occurred while posting comment" : "Yorum yollanırken bir hata oluştu", "{count} unread comments" : "{count} okunmamış yorum", "Comment" : "Yorum", + "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "Dosyalar için <strong>Yorumlar</strong> <em>(her zaman akış olarak listelenir)</em>", "You commented" : "Yorum yaptınız", "%1$s commented" : "%1$s yorumlanmış", "You commented on %2$s" : "%2$s için yorum yaptınız", diff --git a/apps/comments/l10n/tr.json b/apps/comments/l10n/tr.json index c332868396a..be74c1bcac4 100644 --- a/apps/comments/l10n/tr.json +++ b/apps/comments/l10n/tr.json @@ -11,9 +11,11 @@ "Save" : "Kaydet", "Allowed characters {count} of {max}" : "İzin verilen karakterler {count}/{max}", "Error occurred while retrieving comment with id {id}" : "{id} numaralı yorumu geri alırken bir hata oluştu", + "Error occurred while updating comment with id {id}" : "{id} numaralı yorum güncellenirken hata oluştu", "Error occurred while posting comment" : "Yorum yollanırken bir hata oluştu", "{count} unread comments" : "{count} okunmamış yorum", "Comment" : "Yorum", + "<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "Dosyalar için <strong>Yorumlar</strong> <em>(her zaman akış olarak listelenir)</em>", "You commented" : "Yorum yaptınız", "%1$s commented" : "%1$s yorumlanmış", "You commented on %2$s" : "%2$s için yorum yaptınız", diff --git a/apps/dav/appinfo/info.xml b/apps/dav/appinfo/info.xml index 805027c516b..19b65d84327 100644 --- a/apps/dav/appinfo/info.xml +++ b/apps/dav/appinfo/info.xml @@ -5,7 +5,7 @@ <description>WebDAV endpoint</description> <licence>AGPL</licence> <author>owncloud.org</author> - <version>1.0.0</version> + <version>1.1.0</version> <default_enable/> <types> <filesystem/> @@ -22,10 +22,10 @@ </background-jobs> <repair-steps> <post-migration> - <job>OCA\DAV\Migration\Classification</job> + <step>OCA\DAV\Migration\Classification</step> </post-migration> <live-migration> - <job>OCA\DAV\Migration\GenerateBirthdays</job> + <step>OCA\DAV\Migration\GenerateBirthdays</step> </live-migration> </repair-steps> </info> diff --git a/apps/dav/appinfo/v1/publicwebdav.php b/apps/dav/appinfo/v1/publicwebdav.php index 286629b20f9..b88c5847ab5 100644 --- a/apps/dav/appinfo/v1/publicwebdav.php +++ b/apps/dav/appinfo/v1/publicwebdav.php @@ -50,7 +50,8 @@ $serverFactory = new OCA\DAV\Connector\Sabre\ServerFactory( \OC::$server->getUserSession(), \OC::$server->getMountManager(), \OC::$server->getTagManager(), - \OC::$server->getRequest() + \OC::$server->getRequest(), + \OC::$server->getPreviewManager() ); $requestUri = \OC::$server->getRequest()->getRequestUri(); diff --git a/apps/dav/appinfo/v1/webdav.php b/apps/dav/appinfo/v1/webdav.php index 59d4f05bdc5..f04bf406334 100644 --- a/apps/dav/appinfo/v1/webdav.php +++ b/apps/dav/appinfo/v1/webdav.php @@ -36,7 +36,8 @@ $serverFactory = new \OCA\DAV\Connector\Sabre\ServerFactory( \OC::$server->getUserSession(), \OC::$server->getMountManager(), \OC::$server->getTagManager(), - \OC::$server->getRequest() + \OC::$server->getRequest(), + \OC::$server->getPreviewManager() ); // Backends diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 203c0a4683f..c472f75b6bf 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -33,6 +33,7 @@ namespace OCA\DAV\Connector\Sabre; use OC\Files\View; use OCA\DAV\Upload\FutureFile; use OCP\Files\ForbiddenException; +use OCP\IPreview; use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\NotFound; use Sabre\DAV\IFile; @@ -50,6 +51,7 @@ class FilesPlugin extends ServerPlugin { // namespace const NS_OWNCLOUD = 'http://owncloud.org/ns'; + const NS_NEXTCLOUD = 'http://nextcloud.org/ns'; const FILEID_PROPERTYNAME = '{http://owncloud.org/ns}id'; const INTERNAL_FILEID_PROPERTYNAME = '{http://owncloud.org/ns}fileid'; const PERMISSIONS_PROPERTYNAME = '{http://owncloud.org/ns}permissions'; @@ -62,6 +64,7 @@ class FilesPlugin extends ServerPlugin { const OWNER_DISPLAY_NAME_PROPERTYNAME = '{http://owncloud.org/ns}owner-display-name'; const CHECKSUMS_PROPERTYNAME = '{http://owncloud.org/ns}checksums'; const DATA_FINGERPRINT_PROPERTYNAME = '{http://owncloud.org/ns}data-fingerprint'; + const HAS_PREVIEW_PROPERTYNAME = '{http://nextcloud.org/ns}has-preview'; /** * Reference to main server object @@ -104,10 +107,16 @@ class FilesPlugin extends ServerPlugin { private $request; /** + * @var IPreview + */ + private $previewManager; + + /** * @param Tree $tree * @param View $view * @param IConfig $config * @param IRequest $request + * @param IPreview $previewManager * @param bool $isPublic * @param bool $downloadAttachment */ @@ -115,6 +124,7 @@ class FilesPlugin extends ServerPlugin { View $view, IConfig $config, IRequest $request, + IPreview $previewManager, $isPublic = false, $downloadAttachment = true) { $this->tree = $tree; @@ -123,6 +133,7 @@ class FilesPlugin extends ServerPlugin { $this->request = $request; $this->isPublic = $isPublic; $this->downloadAttachment = $downloadAttachment; + $this->previewManager = $previewManager; } /** @@ -139,6 +150,7 @@ class FilesPlugin extends ServerPlugin { public function initialize(\Sabre\DAV\Server $server) { $server->xml->namespaceMap[self::NS_OWNCLOUD] = 'oc'; + $server->xml->namespaceMap[self::NS_NEXTCLOUD] = 'nc'; $server->protectedProperties[] = self::FILEID_PROPERTYNAME; $server->protectedProperties[] = self::INTERNAL_FILEID_PROPERTYNAME; $server->protectedProperties[] = self::PERMISSIONS_PROPERTYNAME; @@ -149,6 +161,7 @@ class FilesPlugin extends ServerPlugin { $server->protectedProperties[] = self::OWNER_DISPLAY_NAME_PROPERTYNAME; $server->protectedProperties[] = self::CHECKSUMS_PROPERTYNAME; $server->protectedProperties[] = self::DATA_FINGERPRINT_PROPERTYNAME; + $server->protectedProperties[] = self::HAS_PREVIEW_PROPERTYNAME; // normally these cannot be changed (RFC4918), but we want them modifiable through PROPPATCH $allowedProperties = ['{DAV:}getetag']; @@ -316,6 +329,10 @@ class FilesPlugin extends ServerPlugin { return $this->config->getSystemValue('data-fingerprint', ''); } }); + + $propFind->handle(self::HAS_PREVIEW_PROPERTYNAME, function () use ($node) { + return json_encode($this->previewManager->isAvailable($node->getFileInfo())); + }); } if ($node instanceof \OCA\DAV\Files\FilesHome) { diff --git a/apps/dav/lib/Connector/Sabre/ServerFactory.php b/apps/dav/lib/Connector/Sabre/ServerFactory.php index 9f142b996ee..55b967619d6 100644 --- a/apps/dav/lib/Connector/Sabre/ServerFactory.php +++ b/apps/dav/lib/Connector/Sabre/ServerFactory.php @@ -34,6 +34,7 @@ use OCP\Files\Mount\IMountManager; use OCP\IConfig; use OCP\IDBConnection; use OCP\ILogger; +use OCP\IPreview; use OCP\IRequest; use OCP\ITagManager; use OCP\IUserSession; @@ -54,6 +55,8 @@ class ServerFactory { private $tagManager; /** @var IRequest */ private $request; + /** @var IPreview */ + private $previewManager; /** * @param IConfig $config @@ -63,6 +66,7 @@ class ServerFactory { * @param IMountManager $mountManager * @param ITagManager $tagManager * @param IRequest $request + * @param IPreview $previewManager */ public function __construct( IConfig $config, @@ -71,7 +75,8 @@ class ServerFactory { IUserSession $userSession, IMountManager $mountManager, ITagManager $tagManager, - IRequest $request + IRequest $request, + IPreview $previewManager ) { $this->config = $config; $this->logger = $logger; @@ -80,6 +85,7 @@ class ServerFactory { $this->mountManager = $mountManager; $this->tagManager = $tagManager; $this->request = $request; + $this->previewManager = $previewManager; } /** @@ -145,6 +151,7 @@ class ServerFactory { $view, $this->config, $this->request, + $this->previewManager, false, !$this->config->getSystemValue('debug', false) ) diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php index c488feeb800..9058548489c 100644 --- a/apps/dav/lib/Server.php +++ b/apps/dav/lib/Server.php @@ -158,6 +158,7 @@ class Server { $view, \OC::$server->getConfig(), $this->request, + \OC::$server->getPreviewManager(), false, !\OC::$server->getConfig()->getSystemValue('debug', false) ) @@ -172,6 +173,9 @@ class Server { ) ) ); + $this->server->addPlugin( + new \OCA\DAV\Connector\Sabre\QuotaPlugin($view)); + } }); } diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php index 74f1d844b24..6630c027541 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php @@ -48,6 +48,7 @@ class FilesPluginTest extends TestCase { const OWNER_ID_PROPERTYNAME = FilesPlugin::OWNER_ID_PROPERTYNAME; const OWNER_DISPLAY_NAME_PROPERTYNAME = FilesPlugin::OWNER_DISPLAY_NAME_PROPERTYNAME; const DATA_FINGERPRINT_PROPERTYNAME = FilesPlugin::DATA_FINGERPRINT_PROPERTYNAME; + const HAS_PREVIEW_PROPERTYNAME = FilesPlugin::HAS_PREVIEW_PROPERTYNAME; /** * @var \Sabre\DAV\Server | \PHPUnit_Framework_MockObject_MockObject @@ -79,6 +80,11 @@ class FilesPluginTest extends TestCase { */ private $request; + /** + * @var \OCP\IPreview | \PHPUnit_Framework_MockObject_MockObject + */ + private $previewManager; + public function setUp() { parent::setUp(); $this->server = $this->getMockBuilder('\Sabre\DAV\Server') @@ -99,12 +105,16 @@ class FilesPluginTest extends TestCase { $this->request = $this->getMockBuilder('\OCP\IRequest') ->disableOriginalConstructor() ->getMock(); + $this->previewManager = $this->getMockBuilder('\OCP\IPreview') + ->disableOriginalConstructor() + ->getMock(); $this->plugin = new FilesPlugin( $this->tree, $this->view, $this->config, - $this->request + $this->request, + $this->previewManager ); $this->plugin->initialize($this->server); } @@ -139,6 +149,13 @@ class FilesPluginTest extends TestCase { $node->expects($this->any()) ->method('getDavPermissions') ->will($this->returnValue('DWCKMSR')); + $node->expects($this->any()) + ->method('getFileInfo') + ->will($this->returnValue( + $this->getMockBuilder('\OCP\Files\FileInfo') + ->disableOriginalConstructor() + ->getMock() + )); return $node; } @@ -283,6 +300,7 @@ class FilesPluginTest extends TestCase { $this->getMockBuilder('\OCP\IRequest') ->disableOriginalConstructor() ->getMock(), + $this->previewManager, true); $this->plugin->initialize($this->server); @@ -555,4 +573,28 @@ class FilesPluginTest extends TestCase { $this->plugin->httpGet($request, $response); } + + public function testHasPreview() { + /** @var \OCA\DAV\Connector\Sabre\Directory | \PHPUnit_Framework_MockObject_MockObject $node */ + $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\Directory'); + + $propFind = new PropFind( + '/dummyPath', + array( + self::HAS_PREVIEW_PROPERTYNAME + ), + 0 + ); + + $this->previewManager->expects($this->once()) + ->method('isAvailable') + ->will($this->returnValue(false)); + + $this->plugin->handleGetProperties( + $propFind, + $node + ); + + $this->assertEquals("false", $propFind->get(self::HAS_PREVIEW_PROPERTYNAME)); + } } diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php index 3302c23c3c6..336a33058bf 100644 --- a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php @@ -25,6 +25,7 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre; use OCA\DAV\Connector\Sabre\FilesReportPlugin as FilesReportPluginImplementation; +use OCP\IPreview; use Sabre\DAV\Exception\NotFound; use OCP\SystemTag\ISystemTagObjectMapper; use OC\Files\View; @@ -60,6 +61,9 @@ class FilesReportPluginTest extends \Test\TestCase { /** @var Folder|\PHPUnit_Framework_MockObject_MockObject **/ private $userFolder; + /** @var IPreview|\PHPUnit_Framework_MockObject_MockObject * */ + private $previewManager; + public function setUp() { parent::setUp(); $this->tree = $this->getMockBuilder('\Sabre\DAV\Tree') @@ -93,6 +97,10 @@ class FilesReportPluginTest extends \Test\TestCase { ->disableOriginalConstructor() ->getMock(); + $this->previewManager = $this->getMockBuilder('\OCP\IPreview') + ->disableOriginalConstructor() + ->getMock(); + $user = $this->getMockBuilder('\OCP\IUser') ->disableOriginalConstructor() ->getMock(); @@ -365,7 +373,8 @@ class FilesReportPluginTest extends \Test\TestCase { $config, $this->getMockBuilder('\OCP\IRequest') ->disableOriginalConstructor() - ->getMock() + ->getMock(), + $this->previewManager ) ); $this->plugin->initialize($this->server); diff --git a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php index a254aca7723..8b06678407b 100644 --- a/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/RequestTest/RequestTest.php @@ -66,7 +66,8 @@ abstract class RequestTest extends TestCase { \OC::$server->getTagManager(), $this->getMockBuilder('\OCP\IRequest') ->disableOriginalConstructor() - ->getMock() + ->getMock(), + \OC::$server->getPreviewManager() ); } diff --git a/apps/encryption/l10n/cs_CZ.js b/apps/encryption/l10n/cs_CZ.js index c792d621b9b..4d73777d6da 100644 --- a/apps/encryption/l10n/cs_CZ.js +++ b/apps/encryption/l10n/cs_CZ.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Současné přihlašovací heslo nebylo zadáno správně, zkuste to prosím znovu.", "Private key password successfully updated." : "Heslo soukromého klíče úspěšně aktualizováno.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", - "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena", "Bad Signature" : "Špatný podpis", "Missing Signature" : "Chybějící podpis", "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Nové heslo záchranného klíče", "Repeat new recovery key password" : "Zopakujte nové heslo záchranného klíče", "Change Password" : "Změnit heslo", - "basic encryption module" : "základní šifrovací modul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", "Your private key password no longer matches your log-in password." : "Heslo vašeho soukromého klíče se již neshoduje s vaším přihlašovacím heslem.", "Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:", " If you don't remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete své původní heslo, můžete požádat správce o obnovu vašich souborů.", diff --git a/apps/encryption/l10n/cs_CZ.json b/apps/encryption/l10n/cs_CZ.json index 8399fd0f379..f911f993af5 100644 --- a/apps/encryption/l10n/cs_CZ.json +++ b/apps/encryption/l10n/cs_CZ.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Současné přihlašovací heslo nebylo zadáno správně, zkuste to prosím znovu.", "Private key password successfully updated." : "Heslo soukromého klíče úspěšně aktualizováno.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (ownCloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", - "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena", "Bad Signature" : "Špatný podpis", "Missing Signature" : "Chybějící podpis", "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru", @@ -44,7 +41,7 @@ "New recovery key password" : "Nové heslo záchranného klíče", "Repeat new recovery key password" : "Zopakujte nové heslo záchranného klíče", "Change Password" : "Změnit heslo", - "basic encryption module" : "základní šifrovací modul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", "Your private key password no longer matches your log-in password." : "Heslo vašeho soukromého klíče se již neshoduje s vaším přihlašovacím heslem.", "Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:", " If you don't remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete své původní heslo, můžete požádat správce o obnovu vašich souborů.", diff --git a/apps/encryption/l10n/da.js b/apps/encryption/l10n/da.js index d7169f0572e..c3c846409ee 100644 --- a/apps/encryption/l10n/da.js +++ b/apps/encryption/l10n/da.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Det nuværende kodeord til log-in var ikke korrekt, prøv venligst igen.", "Private key password successfully updated." : "Privat nøgle kodeord succesfuldt opdateret.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du skal overflytte dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen. Kør venligst \"occ encryption:migrate\" eller kontakt din administrator.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgler er ikke igangsat. Log venligst ud og ind igen.", - "Encryption App is enabled and ready" : "App til kryptering er slået til og er klar", "Bad Signature" : "Ugyldig signatur", "Missing Signature" : "Signatur mangler", "one-time password for server-side-encryption" : "Engangs password for kryptering på serverdelen", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Ny adgangskode for gendannelsesnøgle", "Repeat new recovery key password" : "Gentag ny adgangskode for gendannelsesnøgle", "Change Password" : "Skift Kodeord", - "basic encryption module" : "basis krypteringsmodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgler er ikke igangsat. Log venligst ud og ind igen.", "Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.", "Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ", " If you don't remember your old password you can ask your administrator to recover your files." : "Hvis du ikke kan huske dit gamle kodeord kan du bede din administrator om at gendanne dine filer.", diff --git a/apps/encryption/l10n/da.json b/apps/encryption/l10n/da.json index 7ae948a611f..9d20bb8e80a 100644 --- a/apps/encryption/l10n/da.json +++ b/apps/encryption/l10n/da.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Det nuværende kodeord til log-in var ikke korrekt, prøv venligst igen.", "Private key password successfully updated." : "Privat nøgle kodeord succesfuldt opdateret.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du skal overflytte dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen. Kør venligst \"occ encryption:migrate\" eller kontakt din administrator.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøgle for krypteringsprogrammet. Opdater venligst dit kodeord for den private nøgle i dine personlige indstillinger. Det kræves for at få adgang til dine krypterede filer.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgler er ikke igangsat. Log venligst ud og ind igen.", - "Encryption App is enabled and ready" : "App til kryptering er slået til og er klar", "Bad Signature" : "Ugyldig signatur", "Missing Signature" : "Signatur mangler", "one-time password for server-side-encryption" : "Engangs password for kryptering på serverdelen", @@ -44,7 +41,7 @@ "New recovery key password" : "Ny adgangskode for gendannelsesnøgle", "Repeat new recovery key password" : "Gentag ny adgangskode for gendannelsesnøgle", "Change Password" : "Skift Kodeord", - "basic encryption module" : "basis krypteringsmodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret, men din nøgler er ikke igangsat. Log venligst ud og ind igen.", "Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.", "Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ", " If you don't remember your old password you can ask your administrator to recover your files." : "Hvis du ikke kan huske dit gamle kodeord kan du bede din administrator om at gendanne dine filer.", diff --git a/apps/encryption/l10n/de.js b/apps/encryption/l10n/de.js index b90c3d7e2a9..eef2d32be1d 100644 --- a/apps/encryption/l10n/de.js +++ b/apps/encryption/l10n/de.js @@ -10,7 +10,7 @@ OC.L10N.register( "Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Überprüfe Dein Wiederherstellungspasswort!", "Missing parameters" : "Fehlende Parameter", "Please provide the old recovery password" : "Bitte das alte Passwort zur Wiederherstellung eingeben", - "Please provide a new recovery password" : "Bitte das alte Passwort zur Wiederherstellung eingeben", + "Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben", "Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen", "Password successfully changed." : "Dein Passwort wurde geändert.", "Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.", @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuche es noch einmal.", "Private key password successfully updated." : "Passwort des privaten Schlüssels erfolgreich aktualisiert", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Verschlüsselungsschlüssel müssen von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migriert werden. Bitte 'occ encryption:migrate' ausführen oder Ihren Administrator kontaktieren.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte Ihr privates Schlüssel-Passwort aktualisieren, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber deine Schlüssel sind nicht initialisiert. Bitte erneut ab- und wieder anmelden.", - "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", "Bad Signature" : "Ungültige Signatur", "Missing Signature" : "Fehlende Signatur", "one-time password for server-side-encryption" : "Einmal-Passwort für serverseitige Verschlüsselung", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel", "Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen", "Change Password" : "Passwort ändern", - "basic encryption module" : "Basisverschlüsselungsmodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber deine Schlüssel sind nicht initialisiert. Bitte erneut ab- und wieder anmelden.", "Your private key password no longer matches your log-in password." : "Dein Passwort für Deinen privaten Schlüssel stimmt nicht mehr mit Deinem Loginpasswort überein.", "Set your old private key password to your current log-in password:" : "Dein altes Passwort für Deinen privaten Schlüssel auf Dein aktuelles Anmeldepasswort einstellen:", " If you don't remember your old password you can ask your administrator to recover your files." : "Wenn Du Dein altes Passwort vergessen hast, könntest Du Deinen Administrator bitten, Deine Daten wiederherzustellen.", diff --git a/apps/encryption/l10n/de.json b/apps/encryption/l10n/de.json index face6ca6a30..278e899aa5e 100644 --- a/apps/encryption/l10n/de.json +++ b/apps/encryption/l10n/de.json @@ -8,7 +8,7 @@ "Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Überprüfe Dein Wiederherstellungspasswort!", "Missing parameters" : "Fehlende Parameter", "Please provide the old recovery password" : "Bitte das alte Passwort zur Wiederherstellung eingeben", - "Please provide a new recovery password" : "Bitte das alte Passwort zur Wiederherstellung eingeben", + "Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben", "Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen", "Password successfully changed." : "Dein Passwort wurde geändert.", "Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort falsch.", @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuche es noch einmal.", "Private key password successfully updated." : "Passwort des privaten Schlüssels erfolgreich aktualisiert", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Verschlüsselungsschlüssel müssen von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migriert werden. Bitte 'occ encryption:migrate' ausführen oder Ihren Administrator kontaktieren.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte Ihr privates Schlüssel-Passwort aktualisieren, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber deine Schlüssel sind nicht initialisiert. Bitte erneut ab- und wieder anmelden.", - "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", "Bad Signature" : "Ungültige Signatur", "Missing Signature" : "Fehlende Signatur", "one-time password for server-side-encryption" : "Einmal-Passwort für serverseitige Verschlüsselung", @@ -44,7 +41,7 @@ "New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel", "Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen", "Change Password" : "Passwort ändern", - "basic encryption module" : "Basisverschlüsselungsmodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Die Verschlüsselung-App ist aktiviert, aber deine Schlüssel sind nicht initialisiert. Bitte erneut ab- und wieder anmelden.", "Your private key password no longer matches your log-in password." : "Dein Passwort für Deinen privaten Schlüssel stimmt nicht mehr mit Deinem Loginpasswort überein.", "Set your old private key password to your current log-in password:" : "Dein altes Passwort für Deinen privaten Schlüssel auf Dein aktuelles Anmeldepasswort einstellen:", " If you don't remember your old password you can ask your administrator to recover your files." : "Wenn Du Dein altes Passwort vergessen hast, könntest Du Deinen Administrator bitten, Deine Daten wiederherzustellen.", diff --git a/apps/encryption/l10n/de_DE.js b/apps/encryption/l10n/de_DE.js index e56cccf24fa..e2f71ae861d 100644 --- a/apps/encryption/l10n/de_DE.js +++ b/apps/encryption/l10n/de_DE.js @@ -9,8 +9,8 @@ OC.L10N.register( "Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde erfolgreich deaktiviert.", "Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!", "Missing parameters" : "Fehlende Parameter", - "Please provide the old recovery password" : "Bitte das alte Passwort zur Wiederherstellung eingeben", - "Please provide a new recovery password" : "Bitte das neue Passwort zur Wiederherstellung eingeben", + "Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben", + "Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben", "Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen", "Password successfully changed." : "Das Passwort wurde erfolgreich geändert.", "Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.", @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuchen Sie es noch einmal.", "Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.", - "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", "Bad Signature" : "Falsche Signatur", "Missing Signature" : "Fehlende Signatur", "one-time password for server-side-encryption" : "Einmalpasswort für Serverseitige Verschlüsselung", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel", "Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen", "Change Password" : "Passwort ändern", - "basic encryption module" : "Basisverschlüsselungsmodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.", "Your private key password no longer matches your log-in password." : "Das Privatschlüsselpasswort stimmt nicht länger mit dem Anmeldepasswort überein.", "Set your old private key password to your current log-in password:" : "Ihr altes Privatschlüsselpasswort auf Ihr aktuelles Anmeldepasswort stellen:", " If you don't remember your old password you can ask your administrator to recover your files." : "Falls Sie sich nicht an Ihr altes Passwort erinnern können, fragen Sie bitte Ihren Administrator, um Ihre Dateien wiederherzustellen.", diff --git a/apps/encryption/l10n/de_DE.json b/apps/encryption/l10n/de_DE.json index 350ad2e702b..3c5a50dfadb 100644 --- a/apps/encryption/l10n/de_DE.json +++ b/apps/encryption/l10n/de_DE.json @@ -7,8 +7,8 @@ "Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde erfolgreich deaktiviert.", "Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!", "Missing parameters" : "Fehlende Parameter", - "Please provide the old recovery password" : "Bitte das alte Passwort zur Wiederherstellung eingeben", - "Please provide a new recovery password" : "Bitte das neue Passwort zur Wiederherstellung eingeben", + "Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben", + "Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben", "Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen", "Password successfully changed." : "Das Passwort wurde erfolgreich geändert.", "Could not change the password. Maybe the old password was not correct." : "Das Passwort konnte nicht geändert werden. Vielleicht war das alte Passwort nicht richtig.", @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Das aktuelle Anmeldepasswort war nicht korrekt, bitte versuchen Sie es noch einmal.", "Private key password successfully updated." : "Das Passwort des privaten Schlüssels wurde erfolgreich aktualisiert.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.", - "Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit", "Bad Signature" : "Falsche Signatur", "Missing Signature" : "Fehlende Signatur", "one-time password for server-side-encryption" : "Einmalpasswort für Serverseitige Verschlüsselung", @@ -44,7 +41,7 @@ "New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel", "Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen", "Change Password" : "Passwort ändern", - "basic encryption module" : "Basisverschlüsselungsmodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselung-App ist aktiviert, aber Ihre Schlüssel sind nicht initialisiert. Bitte nochmals ab- und wieder anmelden.", "Your private key password no longer matches your log-in password." : "Das Privatschlüsselpasswort stimmt nicht länger mit dem Anmeldepasswort überein.", "Set your old private key password to your current log-in password:" : "Ihr altes Privatschlüsselpasswort auf Ihr aktuelles Anmeldepasswort stellen:", " If you don't remember your old password you can ask your administrator to recover your files." : "Falls Sie sich nicht an Ihr altes Passwort erinnern können, fragen Sie bitte Ihren Administrator, um Ihre Dateien wiederherzustellen.", diff --git a/apps/encryption/l10n/el.js b/apps/encryption/l10n/el.js index 6ad03dcef7c..bc34e1a8653 100644 --- a/apps/encryption/l10n/el.js +++ b/apps/encryption/l10n/el.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.", "Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε εκτελέστε την εντολή 'occ encryption:migrate' ή επικοινωνήστε με το διαχειριστή σας.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", - "Encryption App is enabled and ready" : "Η Εφαρμογή Κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη.", "one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.", @@ -44,6 +41,7 @@ OC.L10N.register( "New recovery key password" : "Νέος κωδικός κλειδιού ανάκτησης", "Repeat new recovery key password" : "Επαναλάβετε το νέο κωδικό κλειδιού ανάκτησης", "Change Password" : "Αλλαγή Κωδικού Πρόσβασης", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", "Your private key password no longer matches your log-in password." : "Ο κωδικός του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.", "Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας κωδικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης.", " If you don't remember your old password you can ask your administrator to recover your files." : "Εάν δεν θυμάστε τον παλιό σας κωδικό μπορείτε να ζητήσετε από τον διαχειριστή σας να επανακτήσει τα αρχεία σας.", diff --git a/apps/encryption/l10n/el.json b/apps/encryption/l10n/el.json index 58749b1fa16..91c496356ae 100644 --- a/apps/encryption/l10n/el.json +++ b/apps/encryption/l10n/el.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.", "Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε εκτελέστε την εντολή 'occ encryption:migrate' ή επικοινωνήστε με το διαχειριστή σας.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδίου σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", - "Encryption App is enabled and ready" : "Η Εφαρμογή Κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη.", "one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.", @@ -42,6 +39,7 @@ "New recovery key password" : "Νέος κωδικός κλειδιού ανάκτησης", "Repeat new recovery key password" : "Επαναλάβετε το νέο κωδικό κλειδιού ανάκτησης", "Change Password" : "Αλλαγή Κωδικού Πρόσβασης", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.", "Your private key password no longer matches your log-in password." : "Ο κωδικός του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.", "Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας κωδικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης.", " If you don't remember your old password you can ask your administrator to recover your files." : "Εάν δεν θυμάστε τον παλιό σας κωδικό μπορείτε να ζητήσετε από τον διαχειριστή σας να επανακτήσει τα αρχεία σας.", diff --git a/apps/encryption/l10n/en_GB.js b/apps/encryption/l10n/en_GB.js index 35cccc171c1..e864cd2ded2 100644 --- a/apps/encryption/l10n/en_GB.js +++ b/apps/encryption/l10n/en_GB.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "The current log-in password was not correct, please try again.", "Private key password successfully updated." : "Private key password updated successfully.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption App is enabled but your keys are not initialised, please log-out and log-in again", - "Encryption App is enabled and ready" : "Encryption App is enabled and ready", "Bad Signature" : "Bad Signature", "Missing Signature" : "Missing Signature", "one-time password for server-side-encryption" : "one-time password for server-side-encryption", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "New recovery key password", "Repeat new recovery key password" : "Repeat new recovery key password", "Change Password" : "Change Password", - "basic encryption module" : "basic encryption module", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption App is enabled but your keys are not initialised, please log-out and log-in again", "Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.", "Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:", " If you don't remember your old password you can ask your administrator to recover your files." : " If you don't remember your old password you can ask your administrator to recover your files.", diff --git a/apps/encryption/l10n/en_GB.json b/apps/encryption/l10n/en_GB.json index e4f2d2dd5bb..21ad8b2831f 100644 --- a/apps/encryption/l10n/en_GB.json +++ b/apps/encryption/l10n/en_GB.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "The current log-in password was not correct, please try again.", "Private key password successfully updated." : "Private key password updated successfully.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption App is enabled but your keys are not initialised, please log-out and log-in again", - "Encryption App is enabled and ready" : "Encryption App is enabled and ready", "Bad Signature" : "Bad Signature", "Missing Signature" : "Missing Signature", "one-time password for server-side-encryption" : "one-time password for server-side-encryption", @@ -44,7 +41,7 @@ "New recovery key password" : "New recovery key password", "Repeat new recovery key password" : "Repeat new recovery key password", "Change Password" : "Change Password", - "basic encryption module" : "basic encryption module", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption App is enabled but your keys are not initialised, please log-out and log-in again", "Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.", "Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:", " If you don't remember your old password you can ask your administrator to recover your files." : " If you don't remember your old password you can ask your administrator to recover your files.", diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js index 43ee920ee08..ec62739d193 100644 --- a/apps/encryption/l10n/es.js +++ b/apps/encryption/l10n/es.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "La contraseña de inicio de sesión actual no es correcta, por favor inténtelo de nuevo.", "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesita migrar sus claves de cifrado desde el antiguo modelo de cifrado (ownCloud <= 8.0) al nuevo. Por favor ejecute 'occ encryption:migrate' o contáctese con su administrador.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", - "Encryption App is enabled and ready" : "Cifrado App está habilitada y lista", "Bad Signature" : "Firma errónea", "Missing Signature" : "No se encuentra la firma", "one-time password for server-side-encryption" : "Contraseña de un solo uso para el cifrado en el lado servidor", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Nueva contraseña de recuperación", "Repeat new recovery key password" : "Repita la nueva contraseña de recuperación", "Change Password" : "Cambiar contraseña", - "basic encryption module" : "Módulo básico de cifrado", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", "Your private key password no longer matches your log-in password." : "Su contraseña de clave privada ya no coincide con su contraseña de acceso.", "Set your old private key password to your current log-in password:" : "Establezca la contraseña de clave privada antigua para su contraseña de inicio de sesión actual:", " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus ficheros.", diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json index b5367d89675..23fd0149c37 100644 --- a/apps/encryption/l10n/es.json +++ b/apps/encryption/l10n/es.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "La contraseña de inicio de sesión actual no es correcta, por favor inténtelo de nuevo.", "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesita migrar sus claves de cifrado desde el antiguo modelo de cifrado (ownCloud <= 8.0) al nuevo. Por favor ejecute 'occ encryption:migrate' o contáctese con su administrador.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", - "Encryption App is enabled and ready" : "Cifrado App está habilitada y lista", "Bad Signature" : "Firma errónea", "Missing Signature" : "No se encuentra la firma", "one-time password for server-side-encryption" : "Contraseña de un solo uso para el cifrado en el lado servidor", @@ -44,7 +41,7 @@ "New recovery key password" : "Nueva contraseña de recuperación", "Repeat new recovery key password" : "Repita la nueva contraseña de recuperación", "Change Password" : "Cambiar contraseña", - "basic encryption module" : "Módulo básico de cifrado", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", "Your private key password no longer matches your log-in password." : "Su contraseña de clave privada ya no coincide con su contraseña de acceso.", "Set your old private key password to your current log-in password:" : "Establezca la contraseña de clave privada antigua para su contraseña de inicio de sesión actual:", " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su antigua contraseña puede pedir a su administrador que le recupere sus ficheros.", diff --git a/apps/encryption/l10n/et_EE.js b/apps/encryption/l10n/et_EE.js index e3993fe0fff..f06eb5bf29c 100644 --- a/apps/encryption/l10n/et_EE.js +++ b/apps/encryption/l10n/et_EE.js @@ -20,8 +20,6 @@ OC.L10N.register( "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.", "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.", "Private key password successfully updated." : "Privaatse võtme parool edukalt uuendatud.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.", "Bad Signature" : "Vigane allkiri", "Missing Signature" : "Allkiri puudub", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.", @@ -36,7 +34,7 @@ OC.L10N.register( "New recovery key password" : "Uus taastevõtme parool", "Repeat new recovery key password" : "Korda uut taastevõtme parooli", "Change Password" : "Muuda parooli", - "basic encryption module" : "peamine küpteerimismoodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.", "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", " If you don't remember your old password you can ask your administrator to recover your files." : "Kui sa ei mäleta oma vana parooli, siis palu oma süsteemihalduril taastada ligipääs failidele.", diff --git a/apps/encryption/l10n/et_EE.json b/apps/encryption/l10n/et_EE.json index 5b2cb8e6cd0..6e642b8d359 100644 --- a/apps/encryption/l10n/et_EE.json +++ b/apps/encryption/l10n/et_EE.json @@ -18,8 +18,6 @@ "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.", "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.", "Private key password successfully updated." : "Privaatse võtme parool edukalt uuendatud.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vigane Krüpteerimisrakendi privaatvõti . Palun uuenda oma privaatse võtme parool oma personaasete seadete all taastamaks ligipääsu oma krüpteeritud failidele.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.", "Bad Signature" : "Vigane allkiri", "Missing Signature" : "Allkiri puudub", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.", @@ -34,7 +32,7 @@ "New recovery key password" : "Uus taastevõtme parool", "Repeat new recovery key password" : "Korda uut taastevõtme parooli", "Change Password" : "Muuda parooli", - "basic encryption module" : "peamine küpteerimismoodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krüpteerimisrakend on lubatud, kuid võtmeid pole lähtestatud. Palun logi välja ning uuesti sisse.", "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", " If you don't remember your old password you can ask your administrator to recover your files." : "Kui sa ei mäleta oma vana parooli, siis palu oma süsteemihalduril taastada ligipääs failidele.", diff --git a/apps/encryption/l10n/fi_FI.js b/apps/encryption/l10n/fi_FI.js index 7532f10a765..79a0d9fae7e 100644 --- a/apps/encryption/l10n/fi_FI.js +++ b/apps/encryption/l10n/fi_FI.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Nykyinen kirjautumiseen käytettävä salasana oli väärin, yritä uudelleen.", "Private key password successfully updated." : "Yksityisen avaimen salasana päivitettiin onnistuneesti.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Salausavaimet tulee siirtää vanhasta salaustavasta (ownCloud <= 8.0) uuteen salaustapaan. Suorita 'occ encryption:migrate' tai ota yhteys ylläpitoon", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.", - "Encryption App is enabled and ready" : "Salaussovellus on käytössä ja valmis", "Bad Signature" : "Virheellinen allekirjoitus", "Missing Signature" : "Puuttuva allekirjoitus", "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten", @@ -43,7 +40,7 @@ OC.L10N.register( "New recovery key password" : "Uusi salausavaimen salasana", "Repeat new recovery key password" : "Toista uusi salausavaimen salasana", "Change Password" : "Vaihda salasana", - "basic encryption module" : "in perussalausmoduuli", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.", "Your private key password no longer matches your log-in password." : "Salaisen avaimesi salasana ei enää vastaa kirjautumissalasanaasi.", "Set your old private key password to your current log-in password:" : "Aseta yksityisen avaimen vanha salasana vastaamaan nykyistä kirjautumissalasanaasi:", " If you don't remember your old password you can ask your administrator to recover your files." : "Jos et muista vanhaa salasanaasi, voit pyytää ylläpitäjää palauttamaan tiedostosi.", diff --git a/apps/encryption/l10n/fi_FI.json b/apps/encryption/l10n/fi_FI.json index d0165a11d33..1d21b414aa0 100644 --- a/apps/encryption/l10n/fi_FI.json +++ b/apps/encryption/l10n/fi_FI.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Nykyinen kirjautumiseen käytettävä salasana oli väärin, yritä uudelleen.", "Private key password successfully updated." : "Yksityisen avaimen salasana päivitettiin onnistuneesti.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Salausavaimet tulee siirtää vanhasta salaustavasta (ownCloud <= 8.0) uuteen salaustapaan. Suorita 'occ encryption:migrate' tai ota yhteys ylläpitoon", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Salaussovelluksen salausavain on virheellinen. Ole hyvä ja päivitä salausavain henkilökohtaisissa asetuksissasi jotta voit taas avata salatuskirjoitetut tiedostosi.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.", - "Encryption App is enabled and ready" : "Salaussovellus on käytössä ja valmis", "Bad Signature" : "Virheellinen allekirjoitus", "Missing Signature" : "Puuttuva allekirjoitus", "one-time password for server-side-encryption" : "kertakäyttöinen salasana palvelinpään salausta varten", @@ -41,7 +38,7 @@ "New recovery key password" : "Uusi salausavaimen salasana", "Repeat new recovery key password" : "Toista uusi salausavaimen salasana", "Change Password" : "Vaihda salasana", - "basic encryption module" : "in perussalausmoduuli", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on käytössä, mutta salausavaimia ei ole alustettu. Ole hyvä ja kirjaudu sisään uudelleen.", "Your private key password no longer matches your log-in password." : "Salaisen avaimesi salasana ei enää vastaa kirjautumissalasanaasi.", "Set your old private key password to your current log-in password:" : "Aseta yksityisen avaimen vanha salasana vastaamaan nykyistä kirjautumissalasanaasi:", " If you don't remember your old password you can ask your administrator to recover your files." : "Jos et muista vanhaa salasanaasi, voit pyytää ylläpitäjää palauttamaan tiedostosi.", diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js index 1922440248f..68fc6196d6f 100644 --- a/apps/encryption/l10n/fr.js +++ b/apps/encryption/l10n/fr.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Le mot de passe de connexion actuel n'est pas correct, veuillez réessayer.", "Private key password successfully updated." : "Mot de passe de la clef privée mis à jour avec succès.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez exécuter 'occ encryption:migrate' ou contacter votre administrateur", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée de chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de la clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", - "Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête", "Bad Signature" : "Mauvaise signature", "Missing Signature" : "Signature manquante", "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Nouveau mot de passe de la clé de récupération", "Repeat new recovery key password" : "Répétez le nouveau mot de passe de la clé de récupération", "Change Password" : "Changer de mot de passe", - "basic encryption module" : "Module de chiffrement de base d'", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", "Your private key password no longer matches your log-in password." : "Le mot de passe de votre clef privée ne correspond plus à votre mot de passe de connexion.", "Set your old private key password to your current log-in password:" : "Remplacez l'ancien mot de passe de votre clé privée par votre mot de passe de connexion actuel :", " If you don't remember your old password you can ask your administrator to recover your files." : "Si vous ne vous souvenez plus de votre ancien mot de passe, vous pouvez demander à votre administrateur de récupérer vos fichiers.", diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json index be16bfbba4d..71367d3beaf 100644 --- a/apps/encryption/l10n/fr.json +++ b/apps/encryption/l10n/fr.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Le mot de passe de connexion actuel n'est pas correct, veuillez réessayer.", "Private key password successfully updated." : "Mot de passe de la clef privée mis à jour avec succès.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (ownCloud <= 8.0) vers la nouvelle. Veuillez exécuter 'occ encryption:migrate' ou contacter votre administrateur", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée de chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de la clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", - "Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête", "Bad Signature" : "Mauvaise signature", "Missing Signature" : "Signature manquante", "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur", @@ -44,7 +41,7 @@ "New recovery key password" : "Nouveau mot de passe de la clé de récupération", "Repeat new recovery key password" : "Répétez le nouveau mot de passe de la clé de récupération", "Change Password" : "Changer de mot de passe", - "basic encryption module" : "Module de chiffrement de base d'", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", "Your private key password no longer matches your log-in password." : "Le mot de passe de votre clef privée ne correspond plus à votre mot de passe de connexion.", "Set your old private key password to your current log-in password:" : "Remplacez l'ancien mot de passe de votre clé privée par votre mot de passe de connexion actuel :", " If you don't remember your old password you can ask your administrator to recover your files." : "Si vous ne vous souvenez plus de votre ancien mot de passe, vous pouvez demander à votre administrateur de récupérer vos fichiers.", diff --git a/apps/encryption/l10n/gl.js b/apps/encryption/l10n/gl.js index 9a1c7161d7f..93785194166 100644 --- a/apps/encryption/l10n/gl.js +++ b/apps/encryption/l10n/gl.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "O actual contrasinal de acceso non é correcto, ténteo de novo.", "Private key password successfully updated." : "A chave privada foi actualizada correctamente.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "É necesario migrar as súas chaves de cifrado do antigo cifrado (ownCloud <= 8,0) cara ao novo. Execute «occ encryption:migrate» ou contacte co administrador", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo", - "Encryption App is enabled and ready" : " A aplicación de cifrado está activada e lista", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", "The share will expire on %s." : "Esta compartición caduca o %s.", @@ -39,7 +36,7 @@ OC.L10N.register( "New recovery key password" : "Novo contrasinal da chave de recuperación", "Repeat new recovery key password" : "Repita o novo contrasinal da chave de recuperación", "Change Password" : "Cambiar o contrasinal", - "basic encryption module" : "Módulo básico de cifrado de", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo", "Your private key password no longer matches your log-in password." : "O seu contrasinal da chave privada non coincide co seu contrasinal de acceso.", "Set your old private key password to your current log-in password:" : "Estabeleza o seu contrasinal antigo da chave de recuperación ao seu contrasinal de acceso actual:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se non lembra o seu antigo contrasinal pode pedírllelo ao seu administrador para recuperar os seus ficheiros.", diff --git a/apps/encryption/l10n/gl.json b/apps/encryption/l10n/gl.json index 3cd91149732..4b0eb0b2dd7 100644 --- a/apps/encryption/l10n/gl.json +++ b/apps/encryption/l10n/gl.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "O actual contrasinal de acceso non é correcto, ténteo de novo.", "Private key password successfully updated." : "A chave privada foi actualizada correctamente.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "É necesario migrar as súas chaves de cifrado do antigo cifrado (ownCloud <= 8,0) cara ao novo. Execute «occ encryption:migrate» ou contacte co administrador", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "A chave privada para a aplicación de cifrado non é correcta. Actualice o contrasinal da súa chave privada nos seus axustes persoais para recuperar o acceso aos seus ficheiros cifrados.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo", - "Encryption App is enabled and ready" : " A aplicación de cifrado está activada e lista", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel descifrar o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Non foi posíbel ler o ficheiro, probabelmente tratase dun ficheiro compartido. Pídalle ao propietario do ficheiro que volva compartir o ficheiro con vostede.", "The share will expire on %s." : "Esta compartición caduca o %s.", @@ -37,7 +34,7 @@ "New recovery key password" : "Novo contrasinal da chave de recuperación", "Repeat new recovery key password" : "Repita o novo contrasinal da chave de recuperación", "Change Password" : "Cambiar o contrasinal", - "basic encryption module" : "Módulo básico de cifrado de", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A aplicación de cifrado está activada, mais as chaves non foron preparadas, saia da sesión e volva a acceder de novo", "Your private key password no longer matches your log-in password." : "O seu contrasinal da chave privada non coincide co seu contrasinal de acceso.", "Set your old private key password to your current log-in password:" : "Estabeleza o seu contrasinal antigo da chave de recuperación ao seu contrasinal de acceso actual:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se non lembra o seu antigo contrasinal pode pedírllelo ao seu administrador para recuperar os seus ficheiros.", diff --git a/apps/encryption/l10n/he.js b/apps/encryption/l10n/he.js index eb2d1316da0..f3299d46e55 100644 --- a/apps/encryption/l10n/he.js +++ b/apps/encryption/l10n/he.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "סיסמת ההתחברות הנוכחית אינה נכונה, יש לנסות שנית.", "Private key password successfully updated." : "סיסמת מפתח אישי עודכנה בהצלחה.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "יש צורך להמיר את מפתחות ההצפנה מהצופן הישן (ownCloud <= 8.0) לצופן החדש. יש להריץ 'occ encryption:migrate' או לפנות למנהל שלך", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "המפתח האישי של יישום ההצפנה אינו תקין. יש לעדכן אתצהמפתח האישי בהגדרות האישיות לצורך שחזור הגישה לקבצים המוצפנים.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "יישום הצפנה מאופשר אבל המפתחות שלך לא אותחלו, יש להתנתק ולהתחבר מחדש", - "Encryption App is enabled and ready" : "יישום ההצפנה מאופשר ומוכן", "Bad Signature" : "חתימה שגויה", "Missing Signature" : "חתימה חסרה", "one-time password for server-side-encryption" : "סיסמא חד פעמית עבור הצפנת צד השרת", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "סיסמת מפתח שחזור חדשה", "Repeat new recovery key password" : "יש לחזור על סיסמת מפתח השחזור החדשה", "Change Password" : "שינוי סיסמא", - "basic encryption module" : "מודול הצפנה בסיסי של", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "יישום הצפנה מאופשר אבל המפתחות שלך לא אותחלו, יש להתנתק ולהתחבר מחדש", "Your private key password no longer matches your log-in password." : "סיסמת המפתח האישי שלך כבר אינה מתאימה לסיסמת ההתחברות שלך.", "Set your old private key password to your current log-in password:" : "יש להחליף את סיסמת המפתח האישי הישנה בסיסמת ההתחברות הנוכחית:", " If you don't remember your old password you can ask your administrator to recover your files." : "אם הסיסמא הישנה נשכחה ניתן לפנות למנהל על מנת שישחזר את הקבצים שלך.", diff --git a/apps/encryption/l10n/he.json b/apps/encryption/l10n/he.json index 853f0804bcd..a0cf0800bb2 100644 --- a/apps/encryption/l10n/he.json +++ b/apps/encryption/l10n/he.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "סיסמת ההתחברות הנוכחית אינה נכונה, יש לנסות שנית.", "Private key password successfully updated." : "סיסמת מפתח אישי עודכנה בהצלחה.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "יש צורך להמיר את מפתחות ההצפנה מהצופן הישן (ownCloud <= 8.0) לצופן החדש. יש להריץ 'occ encryption:migrate' או לפנות למנהל שלך", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "המפתח האישי של יישום ההצפנה אינו תקין. יש לעדכן אתצהמפתח האישי בהגדרות האישיות לצורך שחזור הגישה לקבצים המוצפנים.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "יישום הצפנה מאופשר אבל המפתחות שלך לא אותחלו, יש להתנתק ולהתחבר מחדש", - "Encryption App is enabled and ready" : "יישום ההצפנה מאופשר ומוכן", "Bad Signature" : "חתימה שגויה", "Missing Signature" : "חתימה חסרה", "one-time password for server-side-encryption" : "סיסמא חד פעמית עבור הצפנת צד השרת", @@ -44,7 +41,7 @@ "New recovery key password" : "סיסמת מפתח שחזור חדשה", "Repeat new recovery key password" : "יש לחזור על סיסמת מפתח השחזור החדשה", "Change Password" : "שינוי סיסמא", - "basic encryption module" : "מודול הצפנה בסיסי של", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "יישום הצפנה מאופשר אבל המפתחות שלך לא אותחלו, יש להתנתק ולהתחבר מחדש", "Your private key password no longer matches your log-in password." : "סיסמת המפתח האישי שלך כבר אינה מתאימה לסיסמת ההתחברות שלך.", "Set your old private key password to your current log-in password:" : "יש להחליף את סיסמת המפתח האישי הישנה בסיסמת ההתחברות הנוכחית:", " If you don't remember your old password you can ask your administrator to recover your files." : "אם הסיסמא הישנה נשכחה ניתן לפנות למנהל על מנת שישחזר את הקבצים שלך.", diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js index d538dda0b06..da4bd12078f 100644 --- a/apps/encryption/l10n/id.js +++ b/apps/encryption/l10n/id.js @@ -22,9 +22,8 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Sandi masuk saat ini salah, mohon coba lagi.", "Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Anda perlu mengganti kunci enkripsi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon jalankan 'occ encryption:migrate' atau hubungi administrator Anda", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", - "Encryption App is enabled and ready" : "Apl Enkripsi telah diaktifkan dan siap", + "Bad Signature" : "Tanda salah", + "Missing Signature" : "Tanda hilang", "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca berkas ini, kemungkinan merupakan berkas berbagi. Silakan minta pemilik berkas untuk membagikan ulang kepada Anda.", @@ -44,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Sandi kunci pemulihan baru", "Repeat new recovery key password" : "Ulangi sandi kunci pemulihan baru", "Change Password" : "Ubah Sandi", - "basic encryption module" : "Modul enkripsi dasar", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", "Your private key password no longer matches your log-in password." : "Sandi kunci private Anda tidak lagi cocok dengan sandi masuk Anda.", "Set your old private key password to your current log-in password:" : "Setel sandi kunci private Anda untuk sandi masuk Anda saat ini:", " If you don't remember your old password you can ask your administrator to recover your files." : "Jika Anda tidak ingat sandi lama, Anda dapat meminta administrator Anda untuk memulihkan berkas.", diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json index 5760bfb5543..c1a2f35670f 100644 --- a/apps/encryption/l10n/id.json +++ b/apps/encryption/l10n/id.json @@ -20,9 +20,8 @@ "The current log-in password was not correct, please try again." : "Sandi masuk saat ini salah, mohon coba lagi.", "Private key password successfully updated." : "Sandi kunci privat berhasil diperbarui.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Anda perlu mengganti kunci enkripsi Anda dari enkripsi lama (ownCloud <= 8.0) ke yang baru. Mohon jalankan 'occ encryption:migrate' atau hubungi administrator Anda", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", - "Encryption App is enabled and ready" : "Apl Enkripsi telah diaktifkan dan siap", + "Bad Signature" : "Tanda salah", + "Missing Signature" : "Tanda hilang", "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca berkas ini, kemungkinan merupakan berkas berbagi. Silakan minta pemilik berkas untuk membagikan ulang kepada Anda.", @@ -42,7 +41,7 @@ "New recovery key password" : "Sandi kunci pemulihan baru", "Repeat new recovery key password" : "Ulangi sandi kunci pemulihan baru", "Change Password" : "Ubah Sandi", - "basic encryption module" : "Modul enkripsi dasar", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", "Your private key password no longer matches your log-in password." : "Sandi kunci private Anda tidak lagi cocok dengan sandi masuk Anda.", "Set your old private key password to your current log-in password:" : "Setel sandi kunci private Anda untuk sandi masuk Anda saat ini:", " If you don't remember your old password you can ask your administrator to recover your files." : "Jika Anda tidak ingat sandi lama, Anda dapat meminta administrator Anda untuk memulihkan berkas.", diff --git a/apps/encryption/l10n/it.js b/apps/encryption/l10n/it.js index 2caf16e6096..e13e4e333d0 100644 --- a/apps/encryption/l10n/it.js +++ b/apps/encryption/l10n/it.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "La password di accesso attuale non era corretta, prova ancora.", "Private key password successfully updated." : "Password della chiave privata aggiornata correttamente.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Esegui 'occ encryption:migrate' o contatta il tuo amministratore", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", - "Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta", "Bad Signature" : "Firma non valida", "Missing Signature" : "Firma mancante", "one-time password for server-side-encryption" : "password monouso per la cifratura lato server", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Nuova password della chiave di ripristino", "Repeat new recovery key password" : "Ripeti la nuova password della chiave di ripristino", "Change Password" : "Modifica password", - "basic encryption module" : "Modulo di cifratura base di", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", "Your private key password no longer matches your log-in password." : "La password della chiave privata non corrisponde più alla password di accesso.", "Set your old private key password to your current log-in password:" : "Imposta la vecchia password della chiave privata sull'attuale password di accesso:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se non ricordi la vecchia password puoi chiedere al tuo amministratore di recuperare i file.", diff --git a/apps/encryption/l10n/it.json b/apps/encryption/l10n/it.json index 5736cdc2e74..f4f9ab423c9 100644 --- a/apps/encryption/l10n/it.json +++ b/apps/encryption/l10n/it.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "La password di accesso attuale non era corretta, prova ancora.", "Private key password successfully updated." : "Password della chiave privata aggiornata correttamente.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Devi migrare le tue chiavi di cifratura dalla vecchia cifratura (ownCloud <= 8.0) alla nuova. Esegui 'occ encryption:migrate' o contatta il tuo amministratore", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chiave privata non valida per l'applicazione di cifratura. Aggiorna la password della chiave privata nelle impostazioni personali per ripristinare l'accesso ai tuoi file cifrati.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", - "Encryption App is enabled and ready" : "L'applicazione Cifratura è abilitata e pronta", "Bad Signature" : "Firma non valida", "Missing Signature" : "Firma mancante", "one-time password for server-side-encryption" : "password monouso per la cifratura lato server", @@ -44,7 +41,7 @@ "New recovery key password" : "Nuova password della chiave di ripristino", "Repeat new recovery key password" : "Ripeti la nuova password della chiave di ripristino", "Change Password" : "Modifica password", - "basic encryption module" : "Modulo di cifratura base di", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'applicazione di cifratura è abilitata, ma le chiavi non sono state inizializzate, disconnettiti ed effettua nuovamente l'accesso", "Your private key password no longer matches your log-in password." : "La password della chiave privata non corrisponde più alla password di accesso.", "Set your old private key password to your current log-in password:" : "Imposta la vecchia password della chiave privata sull'attuale password di accesso:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se non ricordi la vecchia password puoi chiedere al tuo amministratore di recuperare i file.", diff --git a/apps/encryption/l10n/ja.js b/apps/encryption/l10n/ja.js index 865e3d08a44..567e68c211b 100644 --- a/apps/encryption/l10n/ja.js +++ b/apps/encryption/l10n/ja.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "ログインパスワードが一致しませんでした。もう一度入力してください。", "Private key password successfully updated." : "秘密鍵のパスワードが正常に更新されました。", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "古い暗号化(ownCloud 8.0以前)から新しい方へ、暗号化キーを移行する必要があります。'occ encryption:migrate'を実行するか、管理者に問い合わせてください。", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", - "Encryption App is enabled and ready" : "暗号化アプリは有効になっており、準備が整いました", "Bad Signature" : "不正な署名", "Missing Signature" : "署名が存在しません", "one-time password for server-side-encryption" : "サーバーサイド暗号化のワンタイムパスワード", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "新しい復旧キーのパスワード", "Repeat new recovery key password" : "新しい復旧キーのパスワードをもう一度入力", "Change Password" : "パスワードを変更", - "basic encryption module" : "基本暗号化モジュール", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", "Your private key password no longer matches your log-in password." : "もはや秘密鍵はログインパスワードと一致しません。", "Set your old private key password to your current log-in password:" : "古い秘密鍵のパスワードを現在のログインパスワードに設定:", " If you don't remember your old password you can ask your administrator to recover your files." : "古いパスワードを覚えていない場合、管理者に尋ねてファイルを回復することができます。", diff --git a/apps/encryption/l10n/ja.json b/apps/encryption/l10n/ja.json index c5d136f4f2d..98c435abbeb 100644 --- a/apps/encryption/l10n/ja.json +++ b/apps/encryption/l10n/ja.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "ログインパスワードが一致しませんでした。もう一度入力してください。", "Private key password successfully updated." : "秘密鍵のパスワードが正常に更新されました。", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "古い暗号化(ownCloud 8.0以前)から新しい方へ、暗号化キーを移行する必要があります。'occ encryption:migrate'を実行するか、管理者に問い合わせてください。", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "暗号化アプリの無効なプライベートキーです。あなたの暗号化されたファイルへアクセスするために、個人設定からプライベートキーのパスワードを更新してください。", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", - "Encryption App is enabled and ready" : "暗号化アプリは有効になっており、準備が整いました", "Bad Signature" : "不正な署名", "Missing Signature" : "署名が存在しません", "one-time password for server-side-encryption" : "サーバーサイド暗号化のワンタイムパスワード", @@ -44,7 +41,7 @@ "New recovery key password" : "新しい復旧キーのパスワード", "Repeat new recovery key password" : "新しい復旧キーのパスワードをもう一度入力", "Change Password" : "パスワードを変更", - "basic encryption module" : "基本暗号化モジュール", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください", "Your private key password no longer matches your log-in password." : "もはや秘密鍵はログインパスワードと一致しません。", "Set your old private key password to your current log-in password:" : "古い秘密鍵のパスワードを現在のログインパスワードに設定:", " If you don't remember your old password you can ask your administrator to recover your files." : "古いパスワードを覚えていない場合、管理者に尋ねてファイルを回復することができます。", diff --git a/apps/encryption/l10n/ko.js b/apps/encryption/l10n/ko.js index 75a9cf07353..6f2ccc3ca52 100644 --- a/apps/encryption/l10n/ko.js +++ b/apps/encryption/l10n/ko.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "현재 로그인 암호가 잘못되었습니다. 다시 시도하십시오.", "Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 되었습니다.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. 'occ encryption:migrate'를 실행하거나 시스템 관리자에게 연락하십시오", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", - "Encryption App is enabled and ready" : "암호화 앱이 활성화되었고 준비됨", "Bad Signature" : "잘못된 서명", "Missing Signature" : "서명 없음", "one-time password for server-side-encryption" : "서버 측 암호화용 일회용 암호", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "새 복구 키 암호", "Repeat new recovery key password" : "새 복구 키 암호 확인", "Change Password" : "암호 변경", - "basic encryption module" : "기본 암호화 모듈", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", "Your private key password no longer matches your log-in password." : "개인 키 암호와 로그인 암호가 일치하지 않습니다.", "Set your old private key password to your current log-in password:" : "기존 개인 키 암호를 로그인 암호와 동일하게 설정하십시오:", " If you don't remember your old password you can ask your administrator to recover your files." : " 이전 암호가 기억나지 않으면 시스템 관리자에게 파일 복구를 요청하십시오.", diff --git a/apps/encryption/l10n/ko.json b/apps/encryption/l10n/ko.json index 872a9a31469..ee3ccce2869 100644 --- a/apps/encryption/l10n/ko.json +++ b/apps/encryption/l10n/ko.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "현재 로그인 암호가 잘못되었습니다. 다시 시도하십시오.", "Private key password successfully updated." : "개인 키 암호가 성공적으로 업데이트 되었습니다.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "과거에 사용하였던(ownCloud <= 8.0) 암호화된 데이터에서 키를 이전해야 합니다. 'occ encryption:migrate'를 실행하거나 시스템 관리자에게 연락하십시오", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "암호화 앱의 개인 키가 잘못되었습니다. 암호화된 파일에 다시 접근하려면 개인 설정에서 개인 키 암호를 업데이트해야 합니다.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", - "Encryption App is enabled and ready" : "암호화 앱이 활성화되었고 준비됨", "Bad Signature" : "잘못된 서명", "Missing Signature" : "서명 없음", "one-time password for server-side-encryption" : "서버 측 암호화용 일회용 암호", @@ -44,7 +41,7 @@ "New recovery key password" : "새 복구 키 암호", "Repeat new recovery key password" : "새 복구 키 암호 확인", "Change Password" : "암호 변경", - "basic encryption module" : "기본 암호화 모듈", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "암호화 앱이 활성화되어 있지만 키가 초기화되지 않았습니다. 로그아웃한 후 다시 로그인하십시오", "Your private key password no longer matches your log-in password." : "개인 키 암호와 로그인 암호가 일치하지 않습니다.", "Set your old private key password to your current log-in password:" : "기존 개인 키 암호를 로그인 암호와 동일하게 설정하십시오:", " If you don't remember your old password you can ask your administrator to recover your files." : " 이전 암호가 기억나지 않으면 시스템 관리자에게 파일 복구를 요청하십시오.", diff --git a/apps/encryption/l10n/lt_LT.js b/apps/encryption/l10n/lt_LT.js index fa830946a22..ea6154366fc 100644 --- a/apps/encryption/l10n/lt_LT.js +++ b/apps/encryption/l10n/lt_LT.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Esamas prisijungimo slaptažodis neteisingas, bandykite dar kartą.", "Private key password successfully updated." : "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Reikalinga šifravimo raktų migracija iš senos versijos ( ownCloud <= 8.0) į naują. Įvykdykite komanda 'occ encryption:migrate' arba susisiekite su adminstratoriumi", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", - "Encryption App is enabled and ready" : "Šifravimo programėlė įjungta ir veikia", "one-time password for server-side-encryption" : "Vienkartinis slaptažodis šifravimui serverio pusėje", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.", "The share will expire on %s." : "Bendrinimo laikas baigsis %s.", @@ -38,7 +35,7 @@ OC.L10N.register( "New recovery key password" : "Naujas atstatymo rakto slaptažodis", "Repeat new recovery key password" : "Pakartokite naują atstatymo rakto slaptažodį", "Change Password" : "Pakeisti slaptažodį", - "basic encryption module" : "bazinis šifravimo modulis", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", "Your private key password no longer matches your log-in password." : "Privataus rakto slaptažodis nebe sutampa su prisijungimo slaptažodžiu.", "Set your old private key password to your current log-in password:" : "Nustatyti Jūsų privataus rakto slaptažodį į Jūsų dabartinį slaptažodį.", " If you don't remember your old password you can ask your administrator to recover your files." : "Jei nepamenate savo seno slaptažodžio, galite paprašyti administratoriaus atkurti Jūsų failus.", diff --git a/apps/encryption/l10n/lt_LT.json b/apps/encryption/l10n/lt_LT.json index 9098ce75c47..e7e56b656aa 100644 --- a/apps/encryption/l10n/lt_LT.json +++ b/apps/encryption/l10n/lt_LT.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Esamas prisijungimo slaptažodis neteisingas, bandykite dar kartą.", "Private key password successfully updated." : "Privataus rakto slaptažodis buvo sėkmingai atnaujintas.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Reikalinga šifravimo raktų migracija iš senos versijos ( ownCloud <= 8.0) į naują. Įvykdykite komanda 'occ encryption:migrate' arba susisiekite su adminstratoriumi", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Netinkamas privatus raktas Šifravimo programai. Prašome atnaujinti savo privataus rakto slaptažodį asmeniniuose nustatymuose, kad atkurti prieigą prie šifruotų failų.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", - "Encryption App is enabled and ready" : "Šifravimo programėlė įjungta ir veikia", "one-time password for server-side-encryption" : "Vienkartinis slaptažodis šifravimui serverio pusėje", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Failo iššifruoti nepavyko, gali būti jog jis yra pasidalintas su jumis. Paprašykite failo savininko, kad jums iš naujo pateiktų šį failą.", "The share will expire on %s." : "Bendrinimo laikas baigsis %s.", @@ -36,7 +33,7 @@ "New recovery key password" : "Naujas atstatymo rakto slaptažodis", "Repeat new recovery key password" : "Pakartokite naują atstatymo rakto slaptažodį", "Change Password" : "Pakeisti slaptažodį", - "basic encryption module" : "bazinis šifravimo modulis", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Šifravimo programa įjungta, bet Jūsų raktai nėra pritaikyti. Prašome atsijungti ir vėl prisijungti", "Your private key password no longer matches your log-in password." : "Privataus rakto slaptažodis nebe sutampa su prisijungimo slaptažodžiu.", "Set your old private key password to your current log-in password:" : "Nustatyti Jūsų privataus rakto slaptažodį į Jūsų dabartinį slaptažodį.", " If you don't remember your old password you can ask your administrator to recover your files." : "Jei nepamenate savo seno slaptažodžio, galite paprašyti administratoriaus atkurti Jūsų failus.", diff --git a/apps/encryption/l10n/nb_NO.js b/apps/encryption/l10n/nb_NO.js index dae7650d6bc..0622a26e113 100644 --- a/apps/encryption/l10n/nb_NO.js +++ b/apps/encryption/l10n/nb_NO.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.", "Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst kjør 'occ encryption:migrate' eller kontakt en administrator", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.", - "Encryption App is enabled and ready" : "Krypterings-appen er aktivert og klar", "Bad Signature" : "Feil signatur", "Missing Signature" : "Manglende signatur", "one-time password for server-side-encryption" : "engangspassord for serverkryptering", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Nytt passord for gjenopprettingsnøkkel", "Repeat new recovery key password" : "Gjenta nytt passord for gjenopprettingsnøkkel", "Change Password" : "Endre passord", - "basic encryption module" : "grunnleggende krypteringsmodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.", "Your private key password no longer matches your log-in password." : "Passordet for din private nøkkel stemmer ikke lenger med påloggingspassordet ditt.", "Set your old private key password to your current log-in password:" : "Sett ditt gamle passord for privat nøkkel til ditt nåværende påloggingspassord:", " If you don't remember your old password you can ask your administrator to recover your files." : "Hvis du ikke husker det gamle passordet ditt kan du spørre administratoren om å gjenopprette filene dine.", diff --git a/apps/encryption/l10n/nb_NO.json b/apps/encryption/l10n/nb_NO.json index 420ce3dc055..88500afe64e 100644 --- a/apps/encryption/l10n/nb_NO.json +++ b/apps/encryption/l10n/nb_NO.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.", "Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst kjør 'occ encryption:migrate' eller kontakt en administrator", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ugyldig privat nøkkel for Krypterings-app. Oppdater passordet for din private nøkkel i dine personlige innstillinger for å gjenopprette tilgang til de krypterte filene dine.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.", - "Encryption App is enabled and ready" : "Krypterings-appen er aktivert og klar", "Bad Signature" : "Feil signatur", "Missing Signature" : "Manglende signatur", "one-time password for server-side-encryption" : "engangspassord for serverkryptering", @@ -44,7 +41,7 @@ "New recovery key password" : "Nytt passord for gjenopprettingsnøkkel", "Repeat new recovery key password" : "Gjenta nytt passord for gjenopprettingsnøkkel", "Change Password" : "Endre passord", - "basic encryption module" : "grunnleggende krypteringsmodul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App for kryptering er aktivert men nøklene dine er ikke satt opp. Logg ut og logg inn igjen.", "Your private key password no longer matches your log-in password." : "Passordet for din private nøkkel stemmer ikke lenger med påloggingspassordet ditt.", "Set your old private key password to your current log-in password:" : "Sett ditt gamle passord for privat nøkkel til ditt nåværende påloggingspassord:", " If you don't remember your old password you can ask your administrator to recover your files." : "Hvis du ikke husker det gamle passordet ditt kan du spørre administratoren om å gjenopprette filene dine.", diff --git a/apps/encryption/l10n/nl.js b/apps/encryption/l10n/nl.js index a9519b7c882..236d1aa3840 100644 --- a/apps/encryption/l10n/nl.js +++ b/apps/encryption/l10n/nl.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Het huidige inlogwachtwoord was niet juist, probeer het opnieuw.", "Private key password successfully updated." : "Privésleutel succesvol bijgewerkt.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Start 'occ encryption:migrate' of neem contact op met je beheerder", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor de crypto app. Werk het privésleutel wachtwoord bij in je persoonlijke instellingen om opnieuw toegang te krijgen tot je versleutelde bestanden.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar je sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", - "Encryption App is enabled and ready" : "Encryptie app is geactiveerd en gereed", "Bad Signature" : "Verkeerde handtekening", "Missing Signature" : "Missende ondertekening", "one-time password for server-side-encryption" : "eenmalig wachtwoord voor server-side versleuteling", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Nieuwe wachtwoord herstelsleutel", "Repeat new recovery key password" : "Herhaal nieuwe wachtwoord herstelsleutel", "Change Password" : "Wijzigen wachtwoord", - "basic encryption module" : "basis versleutelingsmodule", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar je sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", "Your private key password no longer matches your log-in password." : "Het wachtwoord van je privésleutel komt niet meer overeen met je inlogwachtwoord.", "Set your old private key password to your current log-in password:" : "Stel het wachtwoord van je oude privésleutel in op je huidige inlogwachtwoord.", " If you don't remember your old password you can ask your administrator to recover your files." : "Als je je oude wachtwoord niet meer weet, kun je de beheerder vragen je bestanden terug te halen.", diff --git a/apps/encryption/l10n/nl.json b/apps/encryption/l10n/nl.json index 9a2091fcca0..7cdce86a492 100644 --- a/apps/encryption/l10n/nl.json +++ b/apps/encryption/l10n/nl.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Het huidige inlogwachtwoord was niet juist, probeer het opnieuw.", "Private key password successfully updated." : "Privésleutel succesvol bijgewerkt.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Je moet je cryptosleutels van de oude versleuteling (ownCloud <= 8.0) migreren naar de nieuwe. Start 'occ encryption:migrate' of neem contact op met je beheerder", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ongeldige privésleutel voor de crypto app. Werk het privésleutel wachtwoord bij in je persoonlijke instellingen om opnieuw toegang te krijgen tot je versleutelde bestanden.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar je sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", - "Encryption App is enabled and ready" : "Encryptie app is geactiveerd en gereed", "Bad Signature" : "Verkeerde handtekening", "Missing Signature" : "Missende ondertekening", "one-time password for server-side-encryption" : "eenmalig wachtwoord voor server-side versleuteling", @@ -44,7 +41,7 @@ "New recovery key password" : "Nieuwe wachtwoord herstelsleutel", "Repeat new recovery key password" : "Herhaal nieuwe wachtwoord herstelsleutel", "Change Password" : "Wijzigen wachtwoord", - "basic encryption module" : "basis versleutelingsmodule", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Crypto app is geactiveerd, maar je sleutels werden niet geïnitialiseerd. Log uit en log daarna opnieuw in.", "Your private key password no longer matches your log-in password." : "Het wachtwoord van je privésleutel komt niet meer overeen met je inlogwachtwoord.", "Set your old private key password to your current log-in password:" : "Stel het wachtwoord van je oude privésleutel in op je huidige inlogwachtwoord.", " If you don't remember your old password you can ask your administrator to recover your files." : "Als je je oude wachtwoord niet meer weet, kun je de beheerder vragen je bestanden terug te halen.", diff --git a/apps/encryption/l10n/pl.js b/apps/encryption/l10n/pl.js index 17f73e4fdb7..c32027e9755 100644 --- a/apps/encryption/l10n/pl.js +++ b/apps/encryption/l10n/pl.js @@ -21,9 +21,6 @@ OC.L10N.register( "The old password was not correct, please try again." : "Stare hasło nie było poprawne. Spróbuj jeszcze raz.", "The current log-in password was not correct, please try again." : "Obecne hasło logowania nie było poprawne. Spróbuj ponownie.", "Private key password successfully updated." : "Pomyślnie zaktualizowano hasło klucza prywatnego.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", - "Encryption App is enabled and ready" : "Aplikacja szyfrowania jest włączona i gotowa do pracy", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.", "The share will expire on %s." : "Ten zasób wygaśnie %s", "Cheers!" : "Dzięki!", @@ -36,6 +33,7 @@ OC.L10N.register( "New recovery key password" : "Nowe hasło klucza odzyskiwania", "Repeat new recovery key password" : "Powtórz nowe hasło klucza odzyskiwania", "Change Password" : "Zmień hasło", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", "Your private key password no longer matches your log-in password." : "Hasło Twojego klucza prywatnego nie pasuje już do Twojego hasła logowania.", "Set your old private key password to your current log-in password:" : "Ustaw stare hasło klucza prywatnego na aktualne hasło logowania:", " If you don't remember your old password you can ask your administrator to recover your files." : "Jeśli nie pamiętasz swojego starego hasła, poproś swojego administratora, aby odzyskać pliki.", diff --git a/apps/encryption/l10n/pl.json b/apps/encryption/l10n/pl.json index f1ef3faf44d..ae1ab9b2a89 100644 --- a/apps/encryption/l10n/pl.json +++ b/apps/encryption/l10n/pl.json @@ -19,9 +19,6 @@ "The old password was not correct, please try again." : "Stare hasło nie było poprawne. Spróbuj jeszcze raz.", "The current log-in password was not correct, please try again." : "Obecne hasło logowania nie było poprawne. Spróbuj ponownie.", "Private key password successfully updated." : "Pomyślnie zaktualizowano hasło klucza prywatnego.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Klucz prywatny nie jest poprawny! Może Twoje hasło zostało zmienione z zewnątrz. Można zaktualizować hasło klucza prywatnego w ustawieniach osobistych w celu odzyskania dostępu do plików", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", - "Encryption App is enabled and ready" : "Aplikacja szyfrowania jest włączona i gotowa do pracy", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Nie można odszyfrować tego pliku, prawdopodobnie jest to plik udostępniony. Poproś właściciela pliku o ponowne udostępnianie pliku Tobie.", "The share will expire on %s." : "Ten zasób wygaśnie %s", "Cheers!" : "Dzięki!", @@ -34,6 +31,7 @@ "New recovery key password" : "Nowe hasło klucza odzyskiwania", "Repeat new recovery key password" : "Powtórz nowe hasło klucza odzyskiwania", "Change Password" : "Zmień hasło", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacja szyfrująca jest aktywna, ale twoje klucze nie zostały zainicjowane, prosze wyloguj się i zaloguj ponownie.", "Your private key password no longer matches your log-in password." : "Hasło Twojego klucza prywatnego nie pasuje już do Twojego hasła logowania.", "Set your old private key password to your current log-in password:" : "Ustaw stare hasło klucza prywatnego na aktualne hasło logowania:", " If you don't remember your old password you can ask your administrator to recover your files." : "Jeśli nie pamiętasz swojego starego hasła, poproś swojego administratora, aby odzyskać pliki.", diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js index 560e1daf043..205bd04489d 100644 --- a/apps/encryption/l10n/pt_BR.js +++ b/apps/encryption/l10n/pt_BR.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "A senha atual do log-in não estava correta, por favor, tente novamente.", "Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Por favor, execute 'occ encryption:migrate' ou contate o seu administrador", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", - "Encryption App is enabled and ready" : "Aplicativo de criptografia está ativado e pronto", "Bad Signature" : "Assinatura ruim", "Missing Signature" : "Faltando assinatura", "one-time password for server-side-encryption" : "senha de uso único para criptografia-lado-servidor", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Nova senha da chave de recuperação", "Repeat new recovery key password" : "Repita a nova senha da chave de recuperação", "Change Password" : "Trocar senha", - "basic encryption module" : "Modo de criptografia básico", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", "Your private key password no longer matches your log-in password." : "A sua senha de chave privada não corresponde a sua senha de login.", "Set your old private key password to your current log-in password:" : "Defina a sua antiga senha da chave privada para sua senha de login atual:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se você não se lembra de sua antiga senha você pode pedir ao administrador que recupere seus arquivos.", diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json index cc788cc4e70..a5bb9a9e0e4 100644 --- a/apps/encryption/l10n/pt_BR.json +++ b/apps/encryption/l10n/pt_BR.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "A senha atual do log-in não estava correta, por favor, tente novamente.", "Private key password successfully updated." : "Senha de chave privada atualizada com sucesso.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Você precisa migrar suas chaves de criptografia a partir da antiga criptografia (ownCloud <= 8,0) para a nova. Por favor, execute 'occ encryption:migrate' ou contate o seu administrador", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave do App de Criptografia é inválida. Por favor, atualize sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", - "Encryption App is enabled and ready" : "Aplicativo de criptografia está ativado e pronto", "Bad Signature" : "Assinatura ruim", "Missing Signature" : "Faltando assinatura", "one-time password for server-side-encryption" : "senha de uso único para criptografia-lado-servidor", @@ -44,7 +41,7 @@ "New recovery key password" : "Nova senha da chave de recuperação", "Repeat new recovery key password" : "Repita a nova senha da chave de recuperação", "Change Password" : "Trocar senha", - "basic encryption module" : "Modo de criptografia básico", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "App de criptografia está ativado, mas as chaves não estão inicializadas, por favor log-out e faça login novamente", "Your private key password no longer matches your log-in password." : "A sua senha de chave privada não corresponde a sua senha de login.", "Set your old private key password to your current log-in password:" : "Defina a sua antiga senha da chave privada para sua senha de login atual:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se você não se lembra de sua antiga senha você pode pedir ao administrador que recupere seus arquivos.", diff --git a/apps/encryption/l10n/pt_PT.js b/apps/encryption/l10n/pt_PT.js index 2ed6009ba96..1eb5983b4ba 100644 --- a/apps/encryption/l10n/pt_PT.js +++ b/apps/encryption/l10n/pt_PT.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "A palavra-passe de iniciar a sessão atual não estava correta, por favor, tente de novo.", "Private key password successfully updated." : "A palavra-passe da chave privada foi atualizada com sucesso. ", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova. Por favor, execute 'occ encryption:migrate' ou contacte o seu administrador", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida para a Aplicação de Encriptação. Por favor, atualize a sua palavra-passe da chave privada nas definições pessoais para recuperar o acesso aos seus ficheiros encriptados.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor, termine a sessão e inicie-a novamente", - "Encryption App is enabled and ready" : "A aplicação de Encriptação está ativada e pronta", "Bad Signature" : "Má Assinatura", "Missing Signature" : "Assinatura em Falta", "one-time password for server-side-encryption" : "palavra-passe de utilização única para a encriptação do lado do servidor", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Nova palavra-passe da chave de recuperação", "Repeat new recovery key password" : "Repetir palavra-passe da chave de recuperação", "Change Password" : "Alterar Palavra-passe", - "basic encryption module" : "módulo de encriptação básico da", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor, termine a sessão e inicie-a novamente", "Your private key password no longer matches your log-in password." : "A palavra-passe da sua chave privada já não coincide com a palavra-passe da sua sessão.", "Set your old private key password to your current log-in password:" : "Defina a sua palavra-passe antiga da chave privada para a sua palavra-passe atual da sessão:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se não se lembra da palavra-passe antiga pode pedir ao seu administrador para recuperar os seus ficheiros. ", diff --git a/apps/encryption/l10n/pt_PT.json b/apps/encryption/l10n/pt_PT.json index 181d6e151cd..c9fb002678c 100644 --- a/apps/encryption/l10n/pt_PT.json +++ b/apps/encryption/l10n/pt_PT.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "A palavra-passe de iniciar a sessão atual não estava correta, por favor, tente de novo.", "Private key password successfully updated." : "A palavra-passe da chave privada foi atualizada com sucesso. ", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Precisa de migrar as suas chaves de encriptação da encriptação antiga (ownCloud <= 8.0) para a nova. Por favor, execute 'occ encryption:migrate' ou contacte o seu administrador", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chave privada inválida para a Aplicação de Encriptação. Por favor, atualize a sua palavra-passe da chave privada nas definições pessoais para recuperar o acesso aos seus ficheiros encriptados.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor, termine a sessão e inicie-a novamente", - "Encryption App is enabled and ready" : "A aplicação de Encriptação está ativada e pronta", "Bad Signature" : "Má Assinatura", "Missing Signature" : "Assinatura em Falta", "one-time password for server-side-encryption" : "palavra-passe de utilização única para a encriptação do lado do servidor", @@ -44,7 +41,7 @@ "New recovery key password" : "Nova palavra-passe da chave de recuperação", "Repeat new recovery key password" : "Repetir palavra-passe da chave de recuperação", "Change Password" : "Alterar Palavra-passe", - "basic encryption module" : "módulo de encriptação básico da", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "A Aplicação de Encriptação está ativada, mas as suas chaves não inicializaram. Por favor, termine a sessão e inicie-a novamente", "Your private key password no longer matches your log-in password." : "A palavra-passe da sua chave privada já não coincide com a palavra-passe da sua sessão.", "Set your old private key password to your current log-in password:" : "Defina a sua palavra-passe antiga da chave privada para a sua palavra-passe atual da sessão:", " If you don't remember your old password you can ask your administrator to recover your files." : "Se não se lembra da palavra-passe antiga pode pedir ao seu administrador para recuperar os seus ficheiros. ", diff --git a/apps/encryption/l10n/ro.js b/apps/encryption/l10n/ro.js index f98294e967b..061fc0b6044 100644 --- a/apps/encryption/l10n/ro.js +++ b/apps/encryption/l10n/ro.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Parola curentă de autentificare nu este corectă, încearcă din nou.", "Private key password successfully updated." : "Parola cheii private a fost actualizată cu succes.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Este necesar să migrezi cheile de criptare de la vechiul algoritm (ownCloud <= 8.0) la cel nou. Rulează 'occ encryption:migrate' sau contactează-ți administratorul.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată invalidă pentru aplicația de criptare. Actualizează-ți parola cheii private folosind setările personale pentru a redobândi accesul la fișierele tale criptate.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicația de criptare este activată dar cheile nu sunt inițializate, te rugăm reautentifică-te", - "Encryption App is enabled and ready" : "Aplicația de criptare este activată", "Bad Signature" : "Semnătură greșită", "Missing Signature" : "Semnătură lipsă", "The share will expire on %s." : "Partajarea va expira în data de %s.", @@ -38,7 +35,7 @@ OC.L10N.register( "New recovery key password" : "Parola nouă a cheii de recuperare", "Repeat new recovery key password" : "Repetă parola nouă a cheii de recuperare", "Change Password" : "Schimbă parola", - "basic encryption module" : "modululde bază pentru criptare", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicația de criptare este activată dar cheile nu sunt inițializate, te rugăm reautentifică-te", "Your private key password no longer matches your log-in password." : "Parola cheii tale private nu se mai potrivește cu parola pentru autentificare.", "Old log-in password" : "Parola veche pentru autentificare", "Current log-in password" : "Parola curentă pentru autentificare", diff --git a/apps/encryption/l10n/ro.json b/apps/encryption/l10n/ro.json index eb6b2533a31..5c548ea34db 100644 --- a/apps/encryption/l10n/ro.json +++ b/apps/encryption/l10n/ro.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Parola curentă de autentificare nu este corectă, încearcă din nou.", "Private key password successfully updated." : "Parola cheii private a fost actualizată cu succes.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Este necesar să migrezi cheile de criptare de la vechiul algoritm (ownCloud <= 8.0) la cel nou. Rulează 'occ encryption:migrate' sau contactează-ți administratorul.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Cheie privată invalidă pentru aplicația de criptare. Actualizează-ți parola cheii private folosind setările personale pentru a redobândi accesul la fișierele tale criptate.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicația de criptare este activată dar cheile nu sunt inițializate, te rugăm reautentifică-te", - "Encryption App is enabled and ready" : "Aplicația de criptare este activată", "Bad Signature" : "Semnătură greșită", "Missing Signature" : "Semnătură lipsă", "The share will expire on %s." : "Partajarea va expira în data de %s.", @@ -36,7 +33,7 @@ "New recovery key password" : "Parola nouă a cheii de recuperare", "Repeat new recovery key password" : "Repetă parola nouă a cheii de recuperare", "Change Password" : "Schimbă parola", - "basic encryption module" : "modululde bază pentru criptare", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplicația de criptare este activată dar cheile nu sunt inițializate, te rugăm reautentifică-te", "Your private key password no longer matches your log-in password." : "Parola cheii tale private nu se mai potrivește cu parola pentru autentificare.", "Old log-in password" : "Parola veche pentru autentificare", "Current log-in password" : "Parola curentă pentru autentificare", diff --git a/apps/encryption/l10n/ru.js b/apps/encryption/l10n/ru.js index 132289a4975..cc511fbcb05 100644 --- a/apps/encryption/l10n/ru.js +++ b/apps/encryption/l10n/ru.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Текущий пароль для учётной записи введён неверно, пожалуйста повторите попытку.", "Private key password successfully updated." : "Пароль закрытого ключа успешно обновлён.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста запустите команду 'occ encryption:migrate' или обратитесь к администратору.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", - "Encryption App is enabled and ready" : "Приложение шифрования включено и готово", "Bad Signature" : "Некорректная подпись", "Missing Signature" : "Подпись отсутствует", "one-time password for server-side-encryption" : "одноразовый пароль для шифрования на стороне сервера", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Новый пароль ключа восстановления", "Repeat new recovery key password" : "Повторите новый пароль ключа восстановления", "Change Password" : "Изменить пароль", - "basic encryption module" : "Базовый модуль шифрования", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", "Your private key password no longer matches your log-in password." : "Пароль закрытого ключа больше не соответствует паролю вашей учетной записи.", "Set your old private key password to your current log-in password:" : "Замените старый пароль закрытого ключа на текущий пароль учётной записи.", " If you don't remember your old password you can ask your administrator to recover your files." : "Если вы не помните свой старый пароль, вы можете попросить своего администратора восстановить ваши файлы", diff --git a/apps/encryption/l10n/ru.json b/apps/encryption/l10n/ru.json index 0ff1a0ce0df..26bcfacd730 100644 --- a/apps/encryption/l10n/ru.json +++ b/apps/encryption/l10n/ru.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Текущий пароль для учётной записи введён неверно, пожалуйста повторите попытку.", "Private key password successfully updated." : "Пароль закрытого ключа успешно обновлён.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Вам необходимо произвести конвертацию ключей шифрования из старого формата (ownCloud <= 8.0) в новый. Пожалуйста запустите команду 'occ encryption:migrate' или обратитесь к администратору.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Закрытый ключ приложения шифрования недействителен. Обновите закрытый ключ в личных настройках, чтобы восстановить доступ к зашифрованным файлам.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", - "Encryption App is enabled and ready" : "Приложение шифрования включено и готово", "Bad Signature" : "Некорректная подпись", "Missing Signature" : "Подпись отсутствует", "one-time password for server-side-encryption" : "одноразовый пароль для шифрования на стороне сервера", @@ -44,7 +41,7 @@ "New recovery key password" : "Новый пароль ключа восстановления", "Repeat new recovery key password" : "Повторите новый пароль ключа восстановления", "Change Password" : "Изменить пароль", - "basic encryption module" : "Базовый модуль шифрования", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Приложение шифрования активно, но ваши ключи не инициализированы, выйдите из системы и войдите заново", "Your private key password no longer matches your log-in password." : "Пароль закрытого ключа больше не соответствует паролю вашей учетной записи.", "Set your old private key password to your current log-in password:" : "Замените старый пароль закрытого ключа на текущий пароль учётной записи.", " If you don't remember your old password you can ask your administrator to recover your files." : "Если вы не помните свой старый пароль, вы можете попросить своего администратора восстановить ваши файлы", diff --git a/apps/encryption/l10n/sk_SK.js b/apps/encryption/l10n/sk_SK.js index c3620c77d30..af66435d211 100644 --- a/apps/encryption/l10n/sk_SK.js +++ b/apps/encryption/l10n/sk_SK.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.", "Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte migrovať vaše šifrovacie kľúče zo starého šifrovania (ownCloud <= 8,0) na nové. Spustite „occ encryption:migrate“ alebo sa obráťte na správcu", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.", - "Encryption App is enabled and ready" : "Aplikácia Šifrovanie je zapnutá a pripravená", "one-time password for server-side-encryption" : "jednorazové heslo na šifrovanie na strane servera", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo prečítať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby vám ho znova zdieľal.", @@ -42,7 +39,7 @@ OC.L10N.register( "New recovery key password" : "Nové heslo obnovovacieho kľúča", "Repeat new recovery key password" : "Zopakujte nové heslo obnovovacieho kľúča", "Change Password" : "Zmeniť heslo", - "basic encryption module" : "základný šifrovací modul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.", "Your private key password no longer matches your log-in password." : "Heslo vášho súkromného kľúča sa nezhoduje v vašim prihlasovacím heslom.", "Set your old private key password to your current log-in password:" : "Zmeňte si vaše staré heslo súkromného kľúča na rovnaké, aké je vaše aktuálne prihlasovacie heslo:", " If you don't remember your old password you can ask your administrator to recover your files." : "Ak si nepamätáte svoje staré heslo, môžete požiadať administrátora o obnovenie svojich súborov.", diff --git a/apps/encryption/l10n/sk_SK.json b/apps/encryption/l10n/sk_SK.json index ffa2a620670..11462bf37d9 100644 --- a/apps/encryption/l10n/sk_SK.json +++ b/apps/encryption/l10n/sk_SK.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Toto heslo nebolo správne, prosím skúste to ešte raz.", "Private key password successfully updated." : "Heslo súkromného kľúča je úspešne aktualizované.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte migrovať vaše šifrovacie kľúče zo starého šifrovania (ownCloud <= 8,0) na nové. Spustite „occ encryption:migrate“ alebo sa obráťte na správcu", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný súkromný kľúč na šifrovanie aplikácií. Zaktualizujte si heslo súkromného kľúča v svojom osobnom nastavení, aby ste znovu získali prístup k svojim zašifrovaným súborom.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.", - "Encryption App is enabled and ready" : "Aplikácia Šifrovanie je zapnutá a pripravená", "one-time password for server-side-encryption" : "jednorazové heslo na šifrovanie na strane servera", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo dešifrovať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby ho s vami znovu vyzdieľal.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento súbor sa nepodarilo prečítať, pravdepodobne je zdieľaný. Požiadajte majiteľa súboru, aby vám ho znova zdieľal.", @@ -40,7 +37,7 @@ "New recovery key password" : "Nové heslo obnovovacieho kľúča", "Repeat new recovery key password" : "Zopakujte nové heslo obnovovacieho kľúča", "Change Password" : "Zmeniť heslo", - "basic encryption module" : "základný šifrovací modul", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikácia na šifrovanie je zapnutá, ale vaše kľúče nie sú inicializované. Odhláste sa a znovu sa prihláste.", "Your private key password no longer matches your log-in password." : "Heslo vášho súkromného kľúča sa nezhoduje v vašim prihlasovacím heslom.", "Set your old private key password to your current log-in password:" : "Zmeňte si vaše staré heslo súkromného kľúča na rovnaké, aké je vaše aktuálne prihlasovacie heslo:", " If you don't remember your old password you can ask your administrator to recover your files." : "Ak si nepamätáte svoje staré heslo, môžete požiadať administrátora o obnovenie svojich súborov.", diff --git a/apps/encryption/l10n/sl.js b/apps/encryption/l10n/sl.js index 4bbb8d0fc5d..1fe785a61d3 100644 --- a/apps/encryption/l10n/sl.js +++ b/apps/encryption/l10n/sl.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Trenutno geslo za prijavo ni vpisano pravilno. Poskusite znova.", "Private key password successfully updated." : "Zasebni ključ za geslo je uspešno posodobljen.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Preseliti je treba šifrirne ključe iz starega sistema (ownCloud <= 8.0) na novega. Zaženite ukaz 'occ encryption:migrate' ali pa stopite v stik s skrbnikom sistema.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.", - "Encryption App is enabled and ready" : "Program za šifriranje ne omogočen in pripravljen za delo", "Bad Signature" : "Neustrezen podpis", "Missing Signature" : "Manjkajoč podpis", "one-time password for server-side-encryption" : "enkratno geslo za šifriranje na strani strežnika", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Novi ključ za obnovitev gesla", "Repeat new recovery key password" : "Ponovi novi ključ za obnovitev gesla", "Change Password" : "Spremeni geslo", - "basic encryption module" : "Osnovno šifriranje z", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.", "Your private key password no longer matches your log-in password." : "Zasebno geslo ni več skladno s prijavnim geslom.", "Set your old private key password to your current log-in password:" : "Nastavite star zasebni ključ na trenutno prijavno geslo:", " If you don't remember your old password you can ask your administrator to recover your files." : "Če ste pozabili svoje geslo, lahko vaše datoteke obnovi le skrbnik sistema.", diff --git a/apps/encryption/l10n/sl.json b/apps/encryption/l10n/sl.json index 20736254d35..457305e8f1f 100644 --- a/apps/encryption/l10n/sl.json +++ b/apps/encryption/l10n/sl.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Trenutno geslo za prijavo ni vpisano pravilno. Poskusite znova.", "Private key password successfully updated." : "Zasebni ključ za geslo je uspešno posodobljen.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Preseliti je treba šifrirne ključe iz starega sistema (ownCloud <= 8.0) na novega. Zaženite ukaz 'occ encryption:migrate' ali pa stopite v stik s skrbnikom sistema.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ni ustreznega osebnega ključa za program za šifriranje. Posodobite osebni ključ za dostop do šifriranih datotek med nastavitvami.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.", - "Encryption App is enabled and ready" : "Program za šifriranje ne omogočen in pripravljen za delo", "Bad Signature" : "Neustrezen podpis", "Missing Signature" : "Manjkajoč podpis", "one-time password for server-side-encryption" : "enkratno geslo za šifriranje na strani strežnika", @@ -44,7 +41,7 @@ "New recovery key password" : "Novi ključ za obnovitev gesla", "Repeat new recovery key password" : "Ponovi novi ključ za obnovitev gesla", "Change Password" : "Spremeni geslo", - "basic encryption module" : "Osnovno šifriranje z", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Program za šifriranje je omogočen, vendar ni začet. Odjavite se in nato ponovno prijavite.", "Your private key password no longer matches your log-in password." : "Zasebno geslo ni več skladno s prijavnim geslom.", "Set your old private key password to your current log-in password:" : "Nastavite star zasebni ključ na trenutno prijavno geslo:", " If you don't remember your old password you can ask your administrator to recover your files." : "Če ste pozabili svoje geslo, lahko vaše datoteke obnovi le skrbnik sistema.", diff --git a/apps/encryption/l10n/sq.js b/apps/encryption/l10n/sq.js index 1a07e3982f1..814cf35f52f 100644 --- a/apps/encryption/l10n/sq.js +++ b/apps/encryption/l10n/sq.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Fjalëkalimi i tanishëm i hyrjeve s’qe i saktë, ju lutemi, riprovoni.", "Private key password successfully updated." : "Fjalëkalimi për kyçin privat u përditësua me sukses.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Lypset të kaloni kyçet tuaj të fshehtëzimeve nga versioni i vjetër i fshehtëzimeve (ownCloud <= 8.0) te i riu. Ju lutemi, ekzekutoni run 'occ encryption:migrate' ose lidhuni me përgjegjësin tuaj", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kyç privat i pavlefshëm për aplikacionin e fshehtëzimeve. Ju lutemi, përditësoni fjalëkalimin tuaj të kyçit privat te rregullimet tuaja personale që të rimerrni hyrje te kartelat tuaja të fshehtëzuara.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i fshehtëzimeve është i aktivizuar, por kyçet tuaj s’janë vënë në punë, ju lutemi, dilni dhe ribëni hyrjen", - "Encryption App is enabled and ready" : "Aplikacioni i Fshehtëzimeve u aktivizua dhe është gati", "Bad Signature" : "Nënshkrim i Keq", "Missing Signature" : "Mungon Nënshkrimi", "one-time password for server-side-encryption" : "fjalëkalim vetëm për një herë, për fshehtëzim-më-anë-shërbyesi", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Fjalëkalimi i ri kyçi rimarrjesh", "Repeat new recovery key password" : "Rijepni fjalëkalimin e ri kyçi rimarrjesh", "Change Password" : "Ndryshoni Fjalëkalimin", - "basic encryption module" : "modul i thjeshtëfshehtëzimesh", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i fshehtëzimeve është i aktivizuar, por kyçet tuaj s’janë vënë në punë, ju lutemi, dilni dhe ribëni hyrjen", "Your private key password no longer matches your log-in password." : "Fjalëkalimi juaj për kyçe privatë s’përputhet më me fjalëkalimin për hyrjet.", "Set your old private key password to your current log-in password:" : "Fjalëkalimit të vjetër të kyçit privat jepini vlerën e fjalëkalimit tuaj të tanishëm për hyrjet:", " If you don't remember your old password you can ask your administrator to recover your files." : " Nëse s’e mbani mend fjalëkalimin tuaj të vjetër, mund t’i kërkoni përgjegjësit tuaj të rimarrë kartelat tuaja.", diff --git a/apps/encryption/l10n/sq.json b/apps/encryption/l10n/sq.json index a4cc357f5ed..4a2ad0ce664 100644 --- a/apps/encryption/l10n/sq.json +++ b/apps/encryption/l10n/sq.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Fjalëkalimi i tanishëm i hyrjeve s’qe i saktë, ju lutemi, riprovoni.", "Private key password successfully updated." : "Fjalëkalimi për kyçin privat u përditësua me sukses.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Lypset të kaloni kyçet tuaj të fshehtëzimeve nga versioni i vjetër i fshehtëzimeve (ownCloud <= 8.0) te i riu. Ju lutemi, ekzekutoni run 'occ encryption:migrate' ose lidhuni me përgjegjësin tuaj", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kyç privat i pavlefshëm për aplikacionin e fshehtëzimeve. Ju lutemi, përditësoni fjalëkalimin tuaj të kyçit privat te rregullimet tuaja personale që të rimerrni hyrje te kartelat tuaja të fshehtëzuara.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i fshehtëzimeve është i aktivizuar, por kyçet tuaj s’janë vënë në punë, ju lutemi, dilni dhe ribëni hyrjen", - "Encryption App is enabled and ready" : "Aplikacioni i Fshehtëzimeve u aktivizua dhe është gati", "Bad Signature" : "Nënshkrim i Keq", "Missing Signature" : "Mungon Nënshkrimi", "one-time password for server-side-encryption" : "fjalëkalim vetëm për një herë, për fshehtëzim-më-anë-shërbyesi", @@ -44,7 +41,7 @@ "New recovery key password" : "Fjalëkalimi i ri kyçi rimarrjesh", "Repeat new recovery key password" : "Rijepni fjalëkalimin e ri kyçi rimarrjesh", "Change Password" : "Ndryshoni Fjalëkalimin", - "basic encryption module" : "modul i thjeshtëfshehtëzimesh", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikacioni i fshehtëzimeve është i aktivizuar, por kyçet tuaj s’janë vënë në punë, ju lutemi, dilni dhe ribëni hyrjen", "Your private key password no longer matches your log-in password." : "Fjalëkalimi juaj për kyçe privatë s’përputhet më me fjalëkalimin për hyrjet.", "Set your old private key password to your current log-in password:" : "Fjalëkalimit të vjetër të kyçit privat jepini vlerën e fjalëkalimit tuaj të tanishëm për hyrjet:", " If you don't remember your old password you can ask your administrator to recover your files." : " Nëse s’e mbani mend fjalëkalimin tuaj të vjetër, mund t’i kërkoni përgjegjësit tuaj të rimarrë kartelat tuaja.", diff --git a/apps/encryption/l10n/sr.js b/apps/encryption/l10n/sr.js index 950e6339916..1ce0be4ce2a 100644 --- a/apps/encryption/l10n/sr.js +++ b/apps/encryption/l10n/sr.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Тренутна лозинка за пријаву није исправна. Покушајте поново.", "Private key password successfully updated." : "Лозинка личног кључа је успешно ажурирана.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Морате да пребаците старе шифрарске кључеве (оунКлауд <= 8.0) у нови. Укључите „оунКлауд подразумевани шифрарски модул“ и покрените 'occ encryption:migrate'", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Неисправан лични кључ за апликацију шифровања. Ажурирајте лозинку личног кључа у личним поставкама да бисте опоравили приступ вашим шифрованим фајловима.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите.", - "Encryption App is enabled and ready" : "Апликација шифровања је укључена и спремна", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са вама.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели са вама.", "The share will expire on %s." : "Дељење истиче %s.", @@ -39,6 +36,7 @@ OC.L10N.register( "New recovery key password" : "Нова лозинка кључа за опоравак", "Repeat new recovery key password" : "Поновите нову лозинку кључа за опоравак", "Change Password" : "Измени лозинку", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите.", "Your private key password no longer matches your log-in password." : "Лозинка вашег личног кључа више није иста као ваша лозинка за пријаву.", "Set your old private key password to your current log-in password:" : "Поставите стару лозинку личног кључа као тренутну лозинку за пријаву:", " If you don't remember your old password you can ask your administrator to recover your files." : "Ако се не сећате старе лозинке, можете затражити од администратора да опорави ваше фајлове.", diff --git a/apps/encryption/l10n/sr.json b/apps/encryption/l10n/sr.json index d8ffd65f73c..419d64c1499 100644 --- a/apps/encryption/l10n/sr.json +++ b/apps/encryption/l10n/sr.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Тренутна лозинка за пријаву није исправна. Покушајте поново.", "Private key password successfully updated." : "Лозинка личног кључа је успешно ажурирана.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Морате да пребаците старе шифрарске кључеве (оунКлауд <= 8.0) у нови. Укључите „оунКлауд подразумевани шифрарски модул“ и покрените 'occ encryption:migrate'", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Неисправан лични кључ за апликацију шифровања. Ажурирајте лозинку личног кључа у личним поставкама да бисте опоравили приступ вашим шифрованим фајловима.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите.", - "Encryption App is enabled and ready" : "Апликација шифровања је укључена и спремна", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да дешифрујем фајл. Вероватно је то дељен фајл. Затражите од власника фајла да га поново подели са вама.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не могу да читам фајл. Вероватно је дељен. Питајте власника да га поново подели са вама.", "The share will expire on %s." : "Дељење истиче %s.", @@ -37,6 +34,7 @@ "New recovery key password" : "Нова лозинка кључа за опоравак", "Repeat new recovery key password" : "Поновите нову лозинку кључа за опоравак", "Change Password" : "Измени лозинку", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Апликација шифровања је укључена али ваши кључеви нису иницијализовани. Одјавите се и поново се пријавите.", "Your private key password no longer matches your log-in password." : "Лозинка вашег личног кључа више није иста као ваша лозинка за пријаву.", "Set your old private key password to your current log-in password:" : "Поставите стару лозинку личног кључа као тренутну лозинку за пријаву:", " If you don't remember your old password you can ask your administrator to recover your files." : "Ако се не сећате старе лозинке, можете затражити од администратора да опорави ваше фајлове.", diff --git a/apps/encryption/l10n/sv.js b/apps/encryption/l10n/sv.js index 982ab41fff4..689523abc04 100644 --- a/apps/encryption/l10n/sv.js +++ b/apps/encryption/l10n/sv.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Det nuvarande inloggningslösenordet var inte korrekt. Vänligen försök igen.", "Private key password successfully updated." : "Den privata nyckelns lösenord uppdaterades.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (ownCloud <= 8.0) till den nya. Kör 'occ encryption:migrate' eller kontakta din administratör", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", - "Encryption App is enabled and ready" : "Krypteringsappen är aktiverad och redo", "Bad Signature" : "Dålig signatur", "Missing Signature" : "Saknar signatur", "one-time password for server-side-encryption" : "engångslösenord för kryptering på serversidan", @@ -44,6 +41,7 @@ OC.L10N.register( "New recovery key password" : "Nytt lösenord för återställningsnyckeln", "Repeat new recovery key password" : "Upprepa nytt lösenord för återställningsnyckeln", "Change Password" : "Byt lösenord", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", "Your private key password no longer matches your log-in password." : "Ditt lösenord för din privata nyckel matchar inte längre ditt inloggningslösenord.", "Set your old private key password to your current log-in password:" : "Sätt ditt gamla privatnyckellösenord till ditt aktuella inloggningslösenord:", " If you don't remember your old password you can ask your administrator to recover your files." : "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer.", diff --git a/apps/encryption/l10n/sv.json b/apps/encryption/l10n/sv.json index f3f5c8ac142..c3a748c5d2d 100644 --- a/apps/encryption/l10n/sv.json +++ b/apps/encryption/l10n/sv.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Det nuvarande inloggningslösenordet var inte korrekt. Vänligen försök igen.", "Private key password successfully updated." : "Den privata nyckelns lösenord uppdaterades.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du behöver migrera dina krypteringsnycklar från den gamla krypteringen (ownCloud <= 8.0) till den nya. Kör 'occ encryption:migrate' eller kontakta din administratör", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ogiltig privat nyckel i krypteringsprogrammet. Vänligen uppdatera lösenordet till din privata nyckel under dina personliga inställningar för att återfå tillgång till dina krypterade filer.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", - "Encryption App is enabled and ready" : "Krypteringsappen är aktiverad och redo", "Bad Signature" : "Dålig signatur", "Missing Signature" : "Saknar signatur", "one-time password for server-side-encryption" : "engångslösenord för kryptering på serversidan", @@ -42,6 +39,7 @@ "New recovery key password" : "Nytt lösenord för återställningsnyckeln", "Repeat new recovery key password" : "Upprepa nytt lösenord för återställningsnyckeln", "Change Password" : "Byt lösenord", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet är aktiverat men dina nycklar är inte initierade. Vänligen logga ut och in igen", "Your private key password no longer matches your log-in password." : "Ditt lösenord för din privata nyckel matchar inte längre ditt inloggningslösenord.", "Set your old private key password to your current log-in password:" : "Sätt ditt gamla privatnyckellösenord till ditt aktuella inloggningslösenord:", " If you don't remember your old password you can ask your administrator to recover your files." : "Om du inte kommer ihåg ditt gamla lösenord kan du be din administratör att återställa dina filer.", diff --git a/apps/encryption/l10n/th_TH.js b/apps/encryption/l10n/th_TH.js index 29b05c1f731..e01072fde75 100644 --- a/apps/encryption/l10n/th_TH.js +++ b/apps/encryption/l10n/th_TH.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "รหัสผ่านเข้าสู่ระบบในปัจจุบันไม่ถูกต้องโปรดลองอีกครั้ง", "Private key password successfully updated." : "อัพเดทรหัส Private key เรียบร้อยแล้ว", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "คุณจำเป็นต้องย้ายรหัสการเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud ที่มีเวอร์ชันต่ำกว่าหรือเท่ากับ 8.0) ไปเวอร์ชันใหม่ โปรดเรียกใช้ 'occ encryption:migrate' หรือติดต่อผู้ดูแลระบบ", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "รหัสส่วนตัวไม่ถูกต้องสำหรับการเข้ารหัสแอพฯ กรุณาอัพเดทรหัสการเข้ารหัสผ่านส่วนตัวของคุณในการตั้งค่าส่วนบุคคลและในการกู้คืนการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณ", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง", - "Encryption App is enabled and ready" : "เข้ารหัสแอพถูกเปิดใช้งานและพร้อมทำงาน", "Bad Signature" : "ลายเซ็นไม่ดี", "Missing Signature" : "ลายเซ็นขาดหายไป", "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "รหัสการกู้คืนรหัสผ่านใหม่", "Repeat new recovery key password" : "รหัสการกู้คืนรหัสผ่านใหม่ อีกครั้ง", "Change Password" : "เปลี่ยนรหัสผ่าน", - "basic encryption module" : "โมดูลการเข้ารหัสขั้นพื้นฐาน", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง", "Your private key password no longer matches your log-in password." : "รหัสการเข้ารหัสผ่านส่วนตัวของคุณไม่ตรงกับรหัสผ่านในการเข้าสู่ระบบของคุณ", "Set your old private key password to your current log-in password:" : "ตั้งรหัสการเข้ารหัสผ่านส่วนตัวเก่าของคุณเพื่อเข้าสู่ระบบในปัจจุบันของคุณ:", " If you don't remember your old password you can ask your administrator to recover your files." : "ถ้าคุณลืมรหัสผ่านเก่าของคุณ คุณสามารถขอให้ผู้ดูแลระบบกู้คืนไฟล์ของคุณ", diff --git a/apps/encryption/l10n/th_TH.json b/apps/encryption/l10n/th_TH.json index e3d4a31c0a7..74db53fb951 100644 --- a/apps/encryption/l10n/th_TH.json +++ b/apps/encryption/l10n/th_TH.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "รหัสผ่านเข้าสู่ระบบในปัจจุบันไม่ถูกต้องโปรดลองอีกครั้ง", "Private key password successfully updated." : "อัพเดทรหัส Private key เรียบร้อยแล้ว", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "คุณจำเป็นต้องย้ายรหัสการเข้ารหัสลับของคุณจากการเข้ารหัสเก่า (ownCloud ที่มีเวอร์ชันต่ำกว่าหรือเท่ากับ 8.0) ไปเวอร์ชันใหม่ โปรดเรียกใช้ 'occ encryption:migrate' หรือติดต่อผู้ดูแลระบบ", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "รหัสส่วนตัวไม่ถูกต้องสำหรับการเข้ารหัสแอพฯ กรุณาอัพเดทรหัสการเข้ารหัสผ่านส่วนตัวของคุณในการตั้งค่าส่วนบุคคลและในการกู้คืนการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณ", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง", - "Encryption App is enabled and ready" : "เข้ารหัสแอพถูกเปิดใช้งานและพร้อมทำงาน", "Bad Signature" : "ลายเซ็นไม่ดี", "Missing Signature" : "ลายเซ็นขาดหายไป", "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์", @@ -44,7 +41,7 @@ "New recovery key password" : "รหัสการกู้คืนรหัสผ่านใหม่", "Repeat new recovery key password" : "รหัสการกู้คืนรหัสผ่านใหม่ อีกครั้ง", "Change Password" : "เปลี่ยนรหัสผ่าน", - "basic encryption module" : "โมดูลการเข้ารหัสขั้นพื้นฐาน", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง", "Your private key password no longer matches your log-in password." : "รหัสการเข้ารหัสผ่านส่วนตัวของคุณไม่ตรงกับรหัสผ่านในการเข้าสู่ระบบของคุณ", "Set your old private key password to your current log-in password:" : "ตั้งรหัสการเข้ารหัสผ่านส่วนตัวเก่าของคุณเพื่อเข้าสู่ระบบในปัจจุบันของคุณ:", " If you don't remember your old password you can ask your administrator to recover your files." : "ถ้าคุณลืมรหัสผ่านเก่าของคุณ คุณสามารถขอให้ผู้ดูแลระบบกู้คืนไฟล์ของคุณ", diff --git a/apps/encryption/l10n/tr.js b/apps/encryption/l10n/tr.js index f4af68997b8..030143a120a 100644 --- a/apps/encryption/l10n/tr.js +++ b/apps/encryption/l10n/tr.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "Geçerli oturum parolası doğru değil, lütfen yeniden deneyin.", "Private key password successfully updated." : "Özel anahtar parolası başarıyla güncellendi.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli. Lütfen 'occ encryption:migrate' çalıştırın veya yöneticinize danışın", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", - "Encryption App is enabled and ready" : "Şifreleme Uygulaması etkin ve hazır", "Bad Signature" : "Kötü İmza", "Missing Signature" : "Eksik İmza", "one-time password for server-side-encryption" : "sunucu tarafında şifleme için tek kullanımlık parola", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "Yeni kurtarma anahtarı parolası", "Repeat new recovery key password" : "Yeni kurtarma anahtarı parolasını yineleyin", "Change Password" : "Parola Değiştir", - "basic encryption module" : "basit şifreleme modülü", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", "Your private key password no longer matches your log-in password." : "Özel anahtar parolanız artık oturum açma parolanız ile eşleşmiyor.", "Set your old private key password to your current log-in password:" : "Eski özel anahtar parolanızı, geçerli oturum açma parolanız olarak ayarlayın:", " If you don't remember your old password you can ask your administrator to recover your files." : "Eğer eski parolanızı hatırlamıyorsanız, yöneticinizden dosyalarınızı kurtarmasını talep edebilirsiniz.", diff --git a/apps/encryption/l10n/tr.json b/apps/encryption/l10n/tr.json index 164091f8c97..4ebb12a94b7 100644 --- a/apps/encryption/l10n/tr.json +++ b/apps/encryption/l10n/tr.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "Geçerli oturum parolası doğru değil, lütfen yeniden deneyin.", "Private key password successfully updated." : "Özel anahtar parolası başarıyla güncellendi.", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Eski şifreleme anahtarlarınızı eski şifrelemeden (ownCloud <= 8.0) yenisine taşımanız gerekli. Lütfen 'occ encryption:migrate' çalıştırın veya yöneticinize danışın", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", - "Encryption App is enabled and ready" : "Şifreleme Uygulaması etkin ve hazır", "Bad Signature" : "Kötü İmza", "Missing Signature" : "Eksik İmza", "one-time password for server-side-encryption" : "sunucu tarafında şifleme için tek kullanımlık parola", @@ -44,7 +41,7 @@ "New recovery key password" : "Yeni kurtarma anahtarı parolası", "Repeat new recovery key password" : "Yeni kurtarma anahtarı parolasını yineleyin", "Change Password" : "Parola Değiştir", - "basic encryption module" : "basit şifreleme modülü", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", "Your private key password no longer matches your log-in password." : "Özel anahtar parolanız artık oturum açma parolanız ile eşleşmiyor.", "Set your old private key password to your current log-in password:" : "Eski özel anahtar parolanızı, geçerli oturum açma parolanız olarak ayarlayın:", " If you don't remember your old password you can ask your administrator to recover your files." : "Eğer eski parolanızı hatırlamıyorsanız, yöneticinizden dosyalarınızı kurtarmasını talep edebilirsiniz.", diff --git a/apps/encryption/l10n/uk.js b/apps/encryption/l10n/uk.js index 451386cf16e..b6023715cec 100644 --- a/apps/encryption/l10n/uk.js +++ b/apps/encryption/l10n/uk.js @@ -21,9 +21,6 @@ OC.L10N.register( "The old password was not correct, please try again." : "Старий пароль введено не вірно, спробуйте ще раз.", "The current log-in password was not correct, please try again." : "Невірний пароль входу, будь ласка, спробуйте ще раз.", "Private key password successfully updated." : "Пароль секретного ключа оновлено.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", - "Encryption App is enabled and ready" : "Додаток кодування дозволений і готовий", "one-time password for server-side-encryption" : "одноразовий пароль для шифрування на сервері", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.", "The share will expire on %s." : "Спільний доступ закінчиться %s.", @@ -37,7 +34,7 @@ OC.L10N.register( "New recovery key password" : "Новий пароль ключа відновлення", "Repeat new recovery key password" : "Повторіть новий пароль ключа відновлення", "Change Password" : "Змінити Пароль", - "basic encryption module" : "базовий модуль шифрування", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", "Your private key password no longer matches your log-in password." : "Пароль вашого закритого ключа більше не відповідає паролю від вашого облікового запису.", "Set your old private key password to your current log-in password:" : "Замініть старий пароль від закритого ключа на новий пароль входу:", " If you don't remember your old password you can ask your administrator to recover your files." : "Якщо ви не пам'ятаєте ваш старий пароль, ви можете звернутися до адміністратора щоб його відновити.", diff --git a/apps/encryption/l10n/uk.json b/apps/encryption/l10n/uk.json index daa2c8221d3..c19c3591a56 100644 --- a/apps/encryption/l10n/uk.json +++ b/apps/encryption/l10n/uk.json @@ -19,9 +19,6 @@ "The old password was not correct, please try again." : "Старий пароль введено не вірно, спробуйте ще раз.", "The current log-in password was not correct, please try again." : "Невірний пароль входу, будь ласка, спробуйте ще раз.", "Private key password successfully updated." : "Пароль секретного ключа оновлено.", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Невірний закритий ключ для доданку шифрування. Оновіть пароль до вашого закритого ключа в особистих налаштуваннях.", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", - "Encryption App is enabled and ready" : "Додаток кодування дозволений і готовий", "one-time password for server-side-encryption" : "одноразовий пароль для шифрування на сервері", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Не можу розшифрувати цей файл, можливо він опублікований. Будь ласка, попросіть власника опублікувати його заново.", "The share will expire on %s." : "Спільний доступ закінчиться %s.", @@ -35,7 +32,7 @@ "New recovery key password" : "Новий пароль ключа відновлення", "Repeat new recovery key password" : "Повторіть новий пароль ключа відновлення", "Change Password" : "Змінити Пароль", - "basic encryption module" : "базовий модуль шифрування", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Доданок шифрування ввімкнено, але ваші ключі не ініціалізовано, вийдіть та зайдіть знову", "Your private key password no longer matches your log-in password." : "Пароль вашого закритого ключа більше не відповідає паролю від вашого облікового запису.", "Set your old private key password to your current log-in password:" : "Замініть старий пароль від закритого ключа на новий пароль входу:", " If you don't remember your old password you can ask your administrator to recover your files." : "Якщо ви не пам'ятаєте ваш старий пароль, ви можете звернутися до адміністратора щоб його відновити.", diff --git a/apps/encryption/l10n/zh_TW.js b/apps/encryption/l10n/zh_TW.js index 35458bb308c..70321430ab6 100644 --- a/apps/encryption/l10n/zh_TW.js +++ b/apps/encryption/l10n/zh_TW.js @@ -22,9 +22,6 @@ OC.L10N.register( "The current log-in password was not correct, please try again." : "目前登入的密碼不正確,請再試一次", "Private key password successfully updated." : "私人金鑰密碼已成功更新。", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "您需要搬移您的加密鑰匙從舊版的加密 (ownCloud <= 8.0) 到新版,請執行 'occ encryption:migrate' 或是聯絡系統管理員", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", - "Encryption App is enabled and ready" : "加密應用程式已經被啟用", "Bad Signature" : "壞的簽章", "Missing Signature" : "遺失簽章", "one-time password for server-side-encryption" : "一次性密碼用於伺服器端的加密", @@ -46,7 +43,7 @@ OC.L10N.register( "New recovery key password" : "新的還原金鑰密碼", "Repeat new recovery key password" : "再輸入新的還原金鑰密碼一次", "Change Password" : "變更密碼", - "basic encryption module" : "基本加密模組", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", "Your private key password no longer matches your log-in password." : "您的私人金鑰密碼不符合您的登入密碼", "Set your old private key password to your current log-in password:" : "設定您的舊私人金鑰密碼到您現在的登入密碼:", " If you don't remember your old password you can ask your administrator to recover your files." : "如果您忘記舊密碼,可以請求管理員協助取回檔案。", diff --git a/apps/encryption/l10n/zh_TW.json b/apps/encryption/l10n/zh_TW.json index fd2dcce1ee8..a3a53c29dad 100644 --- a/apps/encryption/l10n/zh_TW.json +++ b/apps/encryption/l10n/zh_TW.json @@ -20,9 +20,6 @@ "The current log-in password was not correct, please try again." : "目前登入的密碼不正確,請再試一次", "Private key password successfully updated." : "私人金鑰密碼已成功更新。", "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "您需要搬移您的加密鑰匙從舊版的加密 (ownCloud <= 8.0) 到新版,請執行 'occ encryption:migrate' 或是聯絡系統管理員", - "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "無效的檔案加密私鑰,請在個人設定中更新您的私鑰密語以存取加密的檔案。", - "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", - "Encryption App is enabled and ready" : "加密應用程式已經被啟用", "Bad Signature" : "壞的簽章", "Missing Signature" : "遺失簽章", "one-time password for server-side-encryption" : "一次性密碼用於伺服器端的加密", @@ -44,7 +41,7 @@ "New recovery key password" : "新的還原金鑰密碼", "Repeat new recovery key password" : "再輸入新的還原金鑰密碼一次", "Change Password" : "變更密碼", - "basic encryption module" : "基本加密模組", + "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "檔案加密已啓用,但是您的金鑰尚未初始化,請重新登入一次", "Your private key password no longer matches your log-in password." : "您的私人金鑰密碼不符合您的登入密碼", "Set your old private key password to your current log-in password:" : "設定您的舊私人金鑰密碼到您現在的登入密碼:", " If you don't remember your old password you can ask your administrator to recover your files." : "如果您忘記舊密碼,可以請求管理員協助取回檔案。", diff --git a/apps/encryption/lib/Controller/StatusController.php b/apps/encryption/lib/Controller/StatusController.php index a508c3c6b72..6882475e972 100644 --- a/apps/encryption/lib/Controller/StatusController.php +++ b/apps/encryption/lib/Controller/StatusController.php @@ -73,18 +73,18 @@ class StatusController extends Controller { case Session::INIT_EXECUTED: $status = 'interactionNeeded'; $message = (string)$this->l->t( - 'Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files.' + 'Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files.' ); break; case Session::NOT_INITIALIZED: $status = 'interactionNeeded'; $message = (string)$this->l->t( - 'Encryption App is enabled but your keys are not initialized, please log-out and log-in again' + 'Encryption app is enabled but your keys are not initialized, please log-out and log-in again' ); break; case Session::INIT_SUCCESSFUL: $status = 'success'; - $message = (string)$this->l->t('Encryption App is enabled and ready'); + $message = (string)$this->l->t('Encryption app is enabled and ready'); } return new DataResponse( diff --git a/apps/encryption/templates/settings-admin.php b/apps/encryption/templates/settings-admin.php index 9804db045cd..5c551267ff5 100644 --- a/apps/encryption/templates/settings-admin.php +++ b/apps/encryption/templates/settings-admin.php @@ -7,7 +7,7 @@ style('encryption', 'settings-admin'); ?> <form id="ocDefaultEncryptionModule" class="sub-section"> <?php if(!$_["initStatus"]): ?> - <?php p($l->t("Encryption App is enabled but your keys are not initialized, please log-out and log-in again")); ?> + <?php p($l->t("Encryption app is enabled but your keys are not initialized, please log-out and log-in again")); ?> <?php else: ?> <p id="encryptHomeStorageSetting"> <input type="checkbox" class="checkbox" name="encrypt_home_storage" id="encryptHomeStorage" diff --git a/apps/encryption/templates/settings-personal.php b/apps/encryption/templates/settings-personal.php index aba350ea4b6..b92a9a19723 100644 --- a/apps/encryption/templates/settings-personal.php +++ b/apps/encryption/templates/settings-personal.php @@ -5,7 +5,7 @@ script('encryption', 'settings-personal'); script('core', 'multiselect'); ?> <form id="ocDefaultEncryptionModule" class="section"> - <h2><?php p($l->t('basic encryption module')); ?></h2> + <h2><?php p($l->t('Basic encryption module')); ?></h2> <?php if ($_["initialized"] === \OCA\Encryption\Session::NOT_INITIALIZED ): ?> diff --git a/apps/federatedfilesharing/appinfo/info.xml b/apps/federatedfilesharing/appinfo/info.xml index 711ee091d8f..2a80bd54da3 100644 --- a/apps/federatedfilesharing/appinfo/info.xml +++ b/apps/federatedfilesharing/appinfo/info.xml @@ -1,11 +1,11 @@ <?xml version="1.0"?> <info> <id>federatedfilesharing</id> - <name>Federated File Sharing</name> + <name>Federated file sharing</name> <description>Provide federated file sharing across servers</description> <licence>AGPL</licence> <author>Bjoern Schiessle, Roeland Jago Douma</author> - <version>1.0.0</version> + <version>1.1.0</version> <namespace>FederatedFileSharing</namespace> <category>other</category> <dependencies> diff --git a/apps/federatedfilesharing/css/settings-personal.css b/apps/federatedfilesharing/css/settings-personal.css index f53365c9371..6cb69f83cb6 100644 --- a/apps/federatedfilesharing/css/settings-personal.css +++ b/apps/federatedfilesharing/css/settings-personal.css @@ -7,6 +7,14 @@ white-space: pre-wrap; } +#fileSharingSettings .icon { + background-size: 16px 16px; + display: inline-block; + position: relative; + top: 3px; + margin-left: 5px; +} + [class^="social-"], [class*=" social-"] { background-repeat: no-repeat; background-position: 2px; diff --git a/apps/federatedfilesharing/js/settings-personal.js b/apps/federatedfilesharing/js/settings-personal.js index 14a9b7bbfa7..f89022dc8a0 100644 --- a/apps/federatedfilesharing/js/settings-personal.js +++ b/apps/federatedfilesharing/js/settings-personal.js @@ -13,7 +13,42 @@ $(document).ready(function() { }); $('#oca-files-sharing-add-to-your-website').click(function() { - $('#oca-files-sharing-add-to-your-website-expanded').slideDown(); + if ($('#oca-files-sharing-add-to-your-website-expanded').is(':visible')) { + $('#oca-files-sharing-add-to-your-website-expanded').slideUp(); + } else { + $('#oca-files-sharing-add-to-your-website-expanded').slideDown(); + } }); + // Clipboard! + var clipboard = new Clipboard('.clipboardButton'); + clipboard.on('success', function(e) { + $input = $(e.trigger); + $input.tooltip({placement: 'bottom', trigger: 'manual', title: t('core', 'Copied!')}); + $input.tooltip('show'); + _.delay(function() { + $input.tooltip('hide'); + }, 3000); + }); + clipboard.on('error', function (e) { + $input = $(e.trigger); + var actionMsg = ''; + if (/iPhone|iPad/i.test(navigator.userAgent)) { + actionMsg = t('core', 'Not supported!'); + } else if (/Mac/i.test(navigator.userAgent)) { + actionMsg = t('core', 'Press ⌘-C to copy.'); + } else { + actionMsg = t('core', 'Press Ctrl-C to copy.'); + } + + $input.tooltip({ + placement: 'bottom', + trigger: 'manual', + title: actionMsg + }); + $input.tooltip('show'); + _.delay(function () { + $input.tooltip('hide'); + }, 3000); + }); }); diff --git a/apps/federatedfilesharing/l10n/cs_CZ.js b/apps/federatedfilesharing/l10n/cs_CZ.js index 351fed8ad3d..0a6ba02eeac 100644 --- a/apps/federatedfilesharing/l10n/cs_CZ.js +++ b/apps/federatedfilesharing/l10n/cs_CZ.js @@ -2,11 +2,28 @@ OC.L10N.register( "federatedfilesharing", { "Federated sharing" : "Propojené sdílení", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené sdílení {name} od {owner}@{remote}?", + "Remote share" : "Vzdálené sdílení", + "Remote share password" : "Heslo vzdáleného sdílení", + "Cancel" : "Zrušit", + "Add remote share" : "Přidat propojené sdílení", "Invalid Federated Cloud ID" : "Neplatné sdružené cloud ID", + "Server to server sharing is not enabled on this server" : "Sdílení ze serveru na server není na tomto serveru povoleno", + "Couldn't establish a federated share." : "Nepodařilo se ustavit spojené sdílení.", + "Couldn't establish a federated share, maybe the password was wrong." : "Nepodařilo se ustavit propojené sdílení, heslo může být nesprávné.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Požadavek na spojené sdílení uspěl, obdržíte pozvánku. Zkontrolujte vaše upozornění.", + "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje neplatné znaky.", + "Not allowed to create a federated share with the owner." : "ONení povoleno s autorem vytvořit propojené sdílení.", + "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát", + "Could not authenticate to remote share, password might be wrong" : "Autentizace ke vzdálenému sdílení selhala, heslo může být nesprávné", + "Storage not valid" : "Úložiště není platné", + "Federated Share successfully added" : "Propojené sdílení úspěšně přidáno", + "Couldn't add remote share" : "Nepodařilo se přidat propojené sdílení", "Sharing %s failed, because this item is already shared with %s" : "Sdílení položky %s selhalo, protože položka již je s uživatelem %s sdílena", "Not allowed to create a federated share with the same user" : "Není povoleno vytvořit propojené sdílení s tím samým uživatelem", "File is already shared with %s" : "Soubor je již sdílen s %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sdílení %s selhalo, %s se nepodařilo nalézt, server pravděpodobně právě není dostupný.", + "Could not find share" : "Nelze nalézt sdílení", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Obdrželi jste \"/%3$s\" jako vzdálené sdílení od %1$s (zastupuje %2$s)", "You received \"/%3$s\" as a remote share from %1$s" : "Obdrželi jste \"/%3$s\" jako vzdálené sdílení od %1$s", "Accept" : "Přijmout", diff --git a/apps/federatedfilesharing/l10n/cs_CZ.json b/apps/federatedfilesharing/l10n/cs_CZ.json index 379ab76a5a3..26c8dd38be7 100644 --- a/apps/federatedfilesharing/l10n/cs_CZ.json +++ b/apps/federatedfilesharing/l10n/cs_CZ.json @@ -1,10 +1,27 @@ { "translations": { "Federated sharing" : "Propojené sdílení", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Chcete přidat vzdálené sdílení {name} od {owner}@{remote}?", + "Remote share" : "Vzdálené sdílení", + "Remote share password" : "Heslo vzdáleného sdílení", + "Cancel" : "Zrušit", + "Add remote share" : "Přidat propojené sdílení", "Invalid Federated Cloud ID" : "Neplatné sdružené cloud ID", + "Server to server sharing is not enabled on this server" : "Sdílení ze serveru na server není na tomto serveru povoleno", + "Couldn't establish a federated share." : "Nepodařilo se ustavit spojené sdílení.", + "Couldn't establish a federated share, maybe the password was wrong." : "Nepodařilo se ustavit propojené sdílení, heslo může být nesprávné.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Požadavek na spojené sdílení uspěl, obdržíte pozvánku. Zkontrolujte vaše upozornění.", + "The mountpoint name contains invalid characters." : "Jméno přípojného bodu obsahuje neplatné znaky.", + "Not allowed to create a federated share with the owner." : "ONení povoleno s autorem vytvořit propojené sdílení.", + "Invalid or untrusted SSL certificate" : "Neplatný nebo nedůvěryhodný SSL certifikát", + "Could not authenticate to remote share, password might be wrong" : "Autentizace ke vzdálenému sdílení selhala, heslo může být nesprávné", + "Storage not valid" : "Úložiště není platné", + "Federated Share successfully added" : "Propojené sdílení úspěšně přidáno", + "Couldn't add remote share" : "Nepodařilo se přidat propojené sdílení", "Sharing %s failed, because this item is already shared with %s" : "Sdílení položky %s selhalo, protože položka již je s uživatelem %s sdílena", "Not allowed to create a federated share with the same user" : "Není povoleno vytvořit propojené sdílení s tím samým uživatelem", "File is already shared with %s" : "Soubor je již sdílen s %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Sdílení %s selhalo, %s se nepodařilo nalézt, server pravděpodobně právě není dostupný.", + "Could not find share" : "Nelze nalézt sdílení", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Obdrželi jste \"/%3$s\" jako vzdálené sdílení od %1$s (zastupuje %2$s)", "You received \"/%3$s\" as a remote share from %1$s" : "Obdrželi jste \"/%3$s\" jako vzdálené sdílení od %1$s", "Accept" : "Přijmout", diff --git a/apps/federatedfilesharing/l10n/es.js b/apps/federatedfilesharing/l10n/es.js index ed66839e2fd..b3e7ffbef6e 100644 --- a/apps/federatedfilesharing/l10n/es.js +++ b/apps/federatedfilesharing/l10n/es.js @@ -2,11 +2,28 @@ OC.L10N.register( "federatedfilesharing", { "Federated sharing" : "Compartido federado", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea añadir el recurso compartido remoto {name} de {owner}@{remote}?", + "Remote share" : "Recurso compartido remoto", + "Remote share password" : "Contraseña del compartido remoto", + "Cancel" : "Cancelar", + "Add remote share" : "Añadir recurso compartido remoto", "Invalid Federated Cloud ID" : "ID Nube federada inválida", + "Server to server sharing is not enabled on this server" : "Compartir entre servidores no está habilitado en este servidor", + "Couldn't establish a federated share." : "No se puede añadir un compartido remoto", + "Couldn't establish a federated share, maybe the password was wrong." : "No se pudo establecer un compartido remoto, puede que la contraseña fuera incorrecta.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "La petición de crear un compartido remoto fue aceptada, usted recibirá una notificación. Comprueba sus notificaciones.", + "The mountpoint name contains invalid characters." : "El punto de montaje contiene caracteres inválidos.", + "Not allowed to create a federated share with the owner." : "No se permite crear un recurso compartido federado con el propietario", + "Invalid or untrusted SSL certificate" : "Certificado SSL inválido o no confiable", + "Could not authenticate to remote share, password might be wrong" : "No se ha podido autenticar para compartir remotamente, quizás esté mal la contraseña", + "Storage not valid" : "Almacenamiento inválido", + "Federated Share successfully added" : "Compartido remoto federado añadido con éxito", + "Couldn't add remote share" : "No se puede añadir un compartido remoto", "Sharing %s failed, because this item is already shared with %s" : "Se falló al compartir %s, ya que este elemento ya está compartido con %s", "Not allowed to create a federated share with the same user" : "No se permite crear un recurso compartido federado con el mismo usuario", "File is already shared with %s" : "El Archivo ya está siendo compartido con %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se falló al compartir %s. No se pudo hallar %s, quizás haya un problema de conexión con el servidor.", + "Could not find share" : "No se ha podido encontrar el compartido", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Has recibido \"/%3$s\" como un recurso compartido remoto de %1$s (en nombre de %2$s)", "You received \"/%3$s\" as a remote share from %1$s" : "Has recibido \"/%3$s\" como un recurso compartido remoto de %1$s", "Accept" : "Aceptar", diff --git a/apps/federatedfilesharing/l10n/es.json b/apps/federatedfilesharing/l10n/es.json index e8da3eb2928..bbe2c4e8237 100644 --- a/apps/federatedfilesharing/l10n/es.json +++ b/apps/federatedfilesharing/l10n/es.json @@ -1,10 +1,27 @@ { "translations": { "Federated sharing" : "Compartido federado", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea añadir el recurso compartido remoto {name} de {owner}@{remote}?", + "Remote share" : "Recurso compartido remoto", + "Remote share password" : "Contraseña del compartido remoto", + "Cancel" : "Cancelar", + "Add remote share" : "Añadir recurso compartido remoto", "Invalid Federated Cloud ID" : "ID Nube federada inválida", + "Server to server sharing is not enabled on this server" : "Compartir entre servidores no está habilitado en este servidor", + "Couldn't establish a federated share." : "No se puede añadir un compartido remoto", + "Couldn't establish a federated share, maybe the password was wrong." : "No se pudo establecer un compartido remoto, puede que la contraseña fuera incorrecta.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "La petición de crear un compartido remoto fue aceptada, usted recibirá una notificación. Comprueba sus notificaciones.", + "The mountpoint name contains invalid characters." : "El punto de montaje contiene caracteres inválidos.", + "Not allowed to create a federated share with the owner." : "No se permite crear un recurso compartido federado con el propietario", + "Invalid or untrusted SSL certificate" : "Certificado SSL inválido o no confiable", + "Could not authenticate to remote share, password might be wrong" : "No se ha podido autenticar para compartir remotamente, quizás esté mal la contraseña", + "Storage not valid" : "Almacenamiento inválido", + "Federated Share successfully added" : "Compartido remoto federado añadido con éxito", + "Couldn't add remote share" : "No se puede añadir un compartido remoto", "Sharing %s failed, because this item is already shared with %s" : "Se falló al compartir %s, ya que este elemento ya está compartido con %s", "Not allowed to create a federated share with the same user" : "No se permite crear un recurso compartido federado con el mismo usuario", "File is already shared with %s" : "El Archivo ya está siendo compartido con %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Se falló al compartir %s. No se pudo hallar %s, quizás haya un problema de conexión con el servidor.", + "Could not find share" : "No se ha podido encontrar el compartido", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Has recibido \"/%3$s\" como un recurso compartido remoto de %1$s (en nombre de %2$s)", "You received \"/%3$s\" as a remote share from %1$s" : "Has recibido \"/%3$s\" como un recurso compartido remoto de %1$s", "Accept" : "Aceptar", diff --git a/apps/federatedfilesharing/l10n/fr.js b/apps/federatedfilesharing/l10n/fr.js index cc2dc5e9327..6847bdc823c 100644 --- a/apps/federatedfilesharing/l10n/fr.js +++ b/apps/federatedfilesharing/l10n/fr.js @@ -11,6 +11,7 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur", "Couldn't establish a federated share." : "Impossible d'établir un partage fédéré.", "Couldn't establish a federated share, maybe the password was wrong." : "Impossible d'établir un partage fédéré, peut-être que le mot de passe est incorrect.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "La demande de partage fédéré est réussie, vous allez recevoir une invitation. Vérifiez vos notifications.", "The mountpoint name contains invalid characters." : "Le nom du point de montage contient des caractères invalides.", "Not allowed to create a federated share with the owner." : "Vous n'êtes pas autorisé à créer un partage fédéré avec le propriétaire.", "Invalid or untrusted SSL certificate" : "Certificat SSL invalide ou non approuvé", diff --git a/apps/federatedfilesharing/l10n/fr.json b/apps/federatedfilesharing/l10n/fr.json index 715f81e8088..6b62f31b3aa 100644 --- a/apps/federatedfilesharing/l10n/fr.json +++ b/apps/federatedfilesharing/l10n/fr.json @@ -9,6 +9,7 @@ "Server to server sharing is not enabled on this server" : "Le partage de serveur à serveur n'est pas activé sur ce serveur", "Couldn't establish a federated share." : "Impossible d'établir un partage fédéré.", "Couldn't establish a federated share, maybe the password was wrong." : "Impossible d'établir un partage fédéré, peut-être que le mot de passe est incorrect.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "La demande de partage fédéré est réussie, vous allez recevoir une invitation. Vérifiez vos notifications.", "The mountpoint name contains invalid characters." : "Le nom du point de montage contient des caractères invalides.", "Not allowed to create a federated share with the owner." : "Vous n'êtes pas autorisé à créer un partage fédéré avec le propriétaire.", "Invalid or untrusted SSL certificate" : "Certificat SSL invalide ou non approuvé", diff --git a/apps/federatedfilesharing/l10n/id.js b/apps/federatedfilesharing/l10n/id.js index 061e90fb422..d9d882c5fa9 100644 --- a/apps/federatedfilesharing/l10n/id.js +++ b/apps/federatedfilesharing/l10n/id.js @@ -1,9 +1,31 @@ OC.L10N.register( "federatedfilesharing", { + "Federated sharing" : "Pembagian terfederasi", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Apakah Anda ingin menambahkan pembagian remote {name} dari {owner}@{remote}?", + "Remote share" : "Berbagi remote", + "Remote share password" : "Sandi berbagi remote", + "Cancel" : "Batalkan", + "Add remote share" : "Tambah berbagi remote", "Invalid Federated Cloud ID" : "Federated Cloud ID tidak sah", + "Server to server sharing is not enabled on this server" : "Berbagi server ke server tidak diaktifkan pada server ini", + "Couldn't establish a federated share." : "Tidak dapat mendirikan pembagian terfederasi", + "Couldn't establish a federated share, maybe the password was wrong." : "Tidak dapat mendirikan pembagian terfederasi, mungkin sandi salah.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Permintaan pembagian terfederasi sukses, Anda akan mendapatkan undangan. Cek pemberitahuan Anda.", + "The mountpoint name contains invalid characters." : "Nama mount point berisi karakter yang tidak sah.", + "Not allowed to create a federated share with the owner." : "Tidak diizinkan membuat pembagian terfederasi dengan pemilik.", + "Invalid or untrusted SSL certificate" : "Sertifikat SSL tidak sah atau tidak terpercaya", + "Could not authenticate to remote share, password might be wrong" : "Tidak dapat mengautentikasi berbagi remote, kata sandi mungkin salah", + "Storage not valid" : "Penyimpanan tidak sah", + "Federated Share successfully added" : "Pembagian terfederasi sukses ditambahkan", + "Couldn't add remote share" : "Tidak dapat menambahkan berbagi remote", "Sharing %s failed, because this item is already shared with %s" : "Gagal membagkan %s, karena item ini sudah dibagikan dengan %s", + "Not allowed to create a federated share with the same user" : "Tidak diizinkan membuat pembagian terfederasi dengan pengguna yang sama", + "File is already shared with %s" : "Berkas sudah dibagikan dengan %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Berbagi %s gagal, tidak menemukan %s, kemungkinan saat ini server tidak dapat dijangkau.", + "Could not find share" : "Tidak dapat mencari pembagian", + "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Anda menerima \"/%3$s\" sebagai berbagi remote dari %1$s (mewakili %2$s)", + "You received \"/%3$s\" as a remote share from %1$s" : "Anda menerima \"/%3$s\" sebagai berbagi remote dari %1$s", "Accept" : "Terima", "Decline" : "Tolak", "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Dibagikan pada saya melalui #Nextcloud Federated Cloud ID saya, lihat %s", diff --git a/apps/federatedfilesharing/l10n/id.json b/apps/federatedfilesharing/l10n/id.json index fcb4c7ef434..cd46275e9a2 100644 --- a/apps/federatedfilesharing/l10n/id.json +++ b/apps/federatedfilesharing/l10n/id.json @@ -1,7 +1,29 @@ { "translations": { + "Federated sharing" : "Pembagian terfederasi", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Apakah Anda ingin menambahkan pembagian remote {name} dari {owner}@{remote}?", + "Remote share" : "Berbagi remote", + "Remote share password" : "Sandi berbagi remote", + "Cancel" : "Batalkan", + "Add remote share" : "Tambah berbagi remote", "Invalid Federated Cloud ID" : "Federated Cloud ID tidak sah", + "Server to server sharing is not enabled on this server" : "Berbagi server ke server tidak diaktifkan pada server ini", + "Couldn't establish a federated share." : "Tidak dapat mendirikan pembagian terfederasi", + "Couldn't establish a federated share, maybe the password was wrong." : "Tidak dapat mendirikan pembagian terfederasi, mungkin sandi salah.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Permintaan pembagian terfederasi sukses, Anda akan mendapatkan undangan. Cek pemberitahuan Anda.", + "The mountpoint name contains invalid characters." : "Nama mount point berisi karakter yang tidak sah.", + "Not allowed to create a federated share with the owner." : "Tidak diizinkan membuat pembagian terfederasi dengan pemilik.", + "Invalid or untrusted SSL certificate" : "Sertifikat SSL tidak sah atau tidak terpercaya", + "Could not authenticate to remote share, password might be wrong" : "Tidak dapat mengautentikasi berbagi remote, kata sandi mungkin salah", + "Storage not valid" : "Penyimpanan tidak sah", + "Federated Share successfully added" : "Pembagian terfederasi sukses ditambahkan", + "Couldn't add remote share" : "Tidak dapat menambahkan berbagi remote", "Sharing %s failed, because this item is already shared with %s" : "Gagal membagkan %s, karena item ini sudah dibagikan dengan %s", + "Not allowed to create a federated share with the same user" : "Tidak diizinkan membuat pembagian terfederasi dengan pengguna yang sama", + "File is already shared with %s" : "Berkas sudah dibagikan dengan %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Berbagi %s gagal, tidak menemukan %s, kemungkinan saat ini server tidak dapat dijangkau.", + "Could not find share" : "Tidak dapat mencari pembagian", + "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Anda menerima \"/%3$s\" sebagai berbagi remote dari %1$s (mewakili %2$s)", + "You received \"/%3$s\" as a remote share from %1$s" : "Anda menerima \"/%3$s\" sebagai berbagi remote dari %1$s", "Accept" : "Terima", "Decline" : "Tolak", "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Dibagikan pada saya melalui #Nextcloud Federated Cloud ID saya, lihat %s", diff --git a/apps/federatedfilesharing/l10n/nl.js b/apps/federatedfilesharing/l10n/nl.js index 1012ddf3d13..9c32f1a4d32 100644 --- a/apps/federatedfilesharing/l10n/nl.js +++ b/apps/federatedfilesharing/l10n/nl.js @@ -25,7 +25,7 @@ OC.L10N.register( "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar.", "Could not find share" : "Kon share niet vinden", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Je ontving \"/%3$s\" als een externe share van %1$s (namens %2$s)", - "You received \"/%3$s\" as a remote share from %1$s" : "U ontving \"/%3$s\" as een externe share van %1$s", + "You received \"/%3$s\" as a remote share from %1$s" : "Je ontving \"/%3$s\" als een externe share van %1$s", "Accept" : "Accepteren", "Decline" : "Afwijzen", "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Deel met mij via mijn #Nextcloud federated Cloud ID, zie %s", diff --git a/apps/federatedfilesharing/l10n/nl.json b/apps/federatedfilesharing/l10n/nl.json index 9e427051e8d..9b18287db44 100644 --- a/apps/federatedfilesharing/l10n/nl.json +++ b/apps/federatedfilesharing/l10n/nl.json @@ -23,7 +23,7 @@ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Delen van %s mislukt, kon %s niet vinden, misschien is de server niet bereikbaar.", "Could not find share" : "Kon share niet vinden", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Je ontving \"/%3$s\" als een externe share van %1$s (namens %2$s)", - "You received \"/%3$s\" as a remote share from %1$s" : "U ontving \"/%3$s\" as een externe share van %1$s", + "You received \"/%3$s\" as a remote share from %1$s" : "Je ontving \"/%3$s\" als een externe share van %1$s", "Accept" : "Accepteren", "Decline" : "Afwijzen", "Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Deel met mij via mijn #Nextcloud federated Cloud ID, zie %s", diff --git a/apps/federatedfilesharing/l10n/ru.js b/apps/federatedfilesharing/l10n/ru.js index 504865bef9b..a0ab14e1e71 100644 --- a/apps/federatedfilesharing/l10n/ru.js +++ b/apps/federatedfilesharing/l10n/ru.js @@ -2,11 +2,28 @@ OC.L10N.register( "federatedfilesharing", { "Federated sharing" : "Общий доступ из объединенного общего хранилища", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Вы хотите добавить удалённую общую папку {name} из {owner}@{remote}?", + "Remote share" : "Удаленный общий ресурс", + "Remote share password" : "Пароль для удаленного общего ресурса", + "Cancel" : "Отмена", + "Add remote share" : "Добавить удалённый общий ресурс", "Invalid Federated Cloud ID" : "Неверный ID в объединении облачных хранилищ.", + "Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общего доступа", + "Couldn't establish a federated share." : "Не удаётся установить распределённый общий ресурс.", + "Couldn't establish a federated share, maybe the password was wrong." : "Не удаётся установить распределённый общий ресурс, может быть пароль был не верен.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Запрос на распределённый удалённый ресурс прошёл успешно, вы получите приглашение. Проверьте ваши уведомления.", + "The mountpoint name contains invalid characters." : "Имя точки монтирования содержит недопустимые символы.", + "Not allowed to create a federated share with the owner." : "Не допускается создание распределённого общего ресурса с собственником.", + "Invalid or untrusted SSL certificate" : "Недействительный или недоверенный сертификат SSL", + "Could not authenticate to remote share, password might be wrong" : "Не удалось произвести аутентификацию для доступа к удалённому хранилищу, возможно неправильно указан пароль", + "Storage not valid" : "Хранилище недоступно", + "Federated Share successfully added" : "Распределённый общий ресурс успешно добавлен", + "Couldn't add remote share" : "Невозможно добавить удалённый общий ресурс", "Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться %s, пользователь %s уже имеет доступ к этому элементу", "Not allowed to create a federated share with the same user" : "Не допускается создание федеративного общего ресурса с тем же пользователем", "File is already shared with %s" : "Доступ к файлу уже предоставлен %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Не удалось поделиться %s, не удалось найти %s, возможно, сервер не доступен.", + "Could not find share" : "Не удалось найти общий ресурс", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Вы получили \"/%3$s\" в качестве удалённого ресурса из %1$s (от имени %2$s)", "You received \"/%3$s\" as a remote share from %1$s" : "Вы получили \"/%3$s\" в качестве удалённого ресурса из %1$s", "Accept" : "Принять", diff --git a/apps/federatedfilesharing/l10n/ru.json b/apps/federatedfilesharing/l10n/ru.json index 7753cb2ce30..a7ba23145bb 100644 --- a/apps/federatedfilesharing/l10n/ru.json +++ b/apps/federatedfilesharing/l10n/ru.json @@ -1,10 +1,27 @@ { "translations": { "Federated sharing" : "Общий доступ из объединенного общего хранилища", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "Вы хотите добавить удалённую общую папку {name} из {owner}@{remote}?", + "Remote share" : "Удаленный общий ресурс", + "Remote share password" : "Пароль для удаленного общего ресурса", + "Cancel" : "Отмена", + "Add remote share" : "Добавить удалённый общий ресурс", "Invalid Federated Cloud ID" : "Неверный ID в объединении облачных хранилищ.", + "Server to server sharing is not enabled on this server" : "На данном сервере выключено межсерверное предоставление общего доступа", + "Couldn't establish a federated share." : "Не удаётся установить распределённый общий ресурс.", + "Couldn't establish a federated share, maybe the password was wrong." : "Не удаётся установить распределённый общий ресурс, может быть пароль был не верен.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Запрос на распределённый удалённый ресурс прошёл успешно, вы получите приглашение. Проверьте ваши уведомления.", + "The mountpoint name contains invalid characters." : "Имя точки монтирования содержит недопустимые символы.", + "Not allowed to create a federated share with the owner." : "Не допускается создание распределённого общего ресурса с собственником.", + "Invalid or untrusted SSL certificate" : "Недействительный или недоверенный сертификат SSL", + "Could not authenticate to remote share, password might be wrong" : "Не удалось произвести аутентификацию для доступа к удалённому хранилищу, возможно неправильно указан пароль", + "Storage not valid" : "Хранилище недоступно", + "Federated Share successfully added" : "Распределённый общий ресурс успешно добавлен", + "Couldn't add remote share" : "Невозможно добавить удалённый общий ресурс", "Sharing %s failed, because this item is already shared with %s" : "Не удалось поделиться %s, пользователь %s уже имеет доступ к этому элементу", "Not allowed to create a federated share with the same user" : "Не допускается создание федеративного общего ресурса с тем же пользователем", "File is already shared with %s" : "Доступ к файлу уже предоставлен %s", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Не удалось поделиться %s, не удалось найти %s, возможно, сервер не доступен.", + "Could not find share" : "Не удалось найти общий ресурс", "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Вы получили \"/%3$s\" в качестве удалённого ресурса из %1$s (от имени %2$s)", "You received \"/%3$s\" as a remote share from %1$s" : "Вы получили \"/%3$s\" в качестве удалённого ресурса из %1$s", "Accept" : "Принять", diff --git a/apps/federatedfilesharing/l10n/tr.js b/apps/federatedfilesharing/l10n/tr.js index a818950e646..073b4441cbd 100644 --- a/apps/federatedfilesharing/l10n/tr.js +++ b/apps/federatedfilesharing/l10n/tr.js @@ -2,11 +2,29 @@ OC.L10N.register( "federatedfilesharing", { "Federated sharing" : "Birleşmiş paylaşım", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "{owner}@{remote} konumundan {name} uzak paylaşımını eklemek istiyor musunuz?", + "Remote share" : "Uzak paylaşım", + "Remote share password" : "Uzak paylaşım parolası", + "Cancel" : "İptal", + "Add remote share" : "Uzak paylaşım ekle", "Invalid Federated Cloud ID" : "Geçersiz Birleşmiş Bulut Kimliği", + "Server to server sharing is not enabled on this server" : "Sunucudan sunucuya paylaşım bu sunucuda etkin değil", + "Couldn't establish a federated share." : "Bir federatif paylaşım kurulamadı.", + "Couldn't establish a federated share, maybe the password was wrong." : "Bir federatif paylaşım kurulamadı, parola hatalı olabilir.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Federatif Paylaşım isteği başarılı, bir davet alacaksınız. Bildirimlerinizi kontrol edin.", + "The mountpoint name contains invalid characters." : "Bağlama noktası geçersiz karakterler içeriyor.", + "Not allowed to create a federated share with the owner." : "Sahiple federatif bir paylaşım oluşturmanıza izin verilmiyor.", + "Invalid or untrusted SSL certificate" : "Geçersiz veya güvenilmez SSL sertifikası", + "Could not authenticate to remote share, password might be wrong" : "Uzak paylaşım kimliği doğrulanamadı, parola hatalı olabilir", + "Storage not valid" : "Depolama geçerli değil", + "Federated Share successfully added" : "Federatif Paylaşım başarıyla eklendi", + "Couldn't add remote share" : "Uzak paylaşım eklenemedi", "Sharing %s failed, because this item is already shared with %s" : "%s paylaşımı, %s ile zaten paylaşıldığından dolayı başarısız oldu", "Not allowed to create a federated share with the same user" : "Aynı kullanıcı ile bir birleşmiş paylaşım oluşturulamaz", "File is already shared with %s" : "Dosya zaten %s ile paylaşılmış", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s paylaşımı başarısız. %s bulunamadı veya sunucu şu anda ulaşılamıyor olabilir.", + "Could not find share" : "Paylaşım bulunamadı", + "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "%1$s kişisinden \"/%3$s\" uzak paylaşımını aldınız (%2$s aracılığıyla)", "You received \"/%3$s\" as a remote share from %1$s" : "%1$s kişisinden \"/%3$s\" uzak paylaşımını aldınız", "Accept" : "Kabul et", "Decline" : "Reddet", diff --git a/apps/federatedfilesharing/l10n/tr.json b/apps/federatedfilesharing/l10n/tr.json index c300a6049cf..f9e157f916b 100644 --- a/apps/federatedfilesharing/l10n/tr.json +++ b/apps/federatedfilesharing/l10n/tr.json @@ -1,10 +1,28 @@ { "translations": { "Federated sharing" : "Birleşmiş paylaşım", + "Do you want to add the remote share {name} from {owner}@{remote}?" : "{owner}@{remote} konumundan {name} uzak paylaşımını eklemek istiyor musunuz?", + "Remote share" : "Uzak paylaşım", + "Remote share password" : "Uzak paylaşım parolası", + "Cancel" : "İptal", + "Add remote share" : "Uzak paylaşım ekle", "Invalid Federated Cloud ID" : "Geçersiz Birleşmiş Bulut Kimliği", + "Server to server sharing is not enabled on this server" : "Sunucudan sunucuya paylaşım bu sunucuda etkin değil", + "Couldn't establish a federated share." : "Bir federatif paylaşım kurulamadı.", + "Couldn't establish a federated share, maybe the password was wrong." : "Bir federatif paylaşım kurulamadı, parola hatalı olabilir.", + "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Federatif Paylaşım isteği başarılı, bir davet alacaksınız. Bildirimlerinizi kontrol edin.", + "The mountpoint name contains invalid characters." : "Bağlama noktası geçersiz karakterler içeriyor.", + "Not allowed to create a federated share with the owner." : "Sahiple federatif bir paylaşım oluşturmanıza izin verilmiyor.", + "Invalid or untrusted SSL certificate" : "Geçersiz veya güvenilmez SSL sertifikası", + "Could not authenticate to remote share, password might be wrong" : "Uzak paylaşım kimliği doğrulanamadı, parola hatalı olabilir", + "Storage not valid" : "Depolama geçerli değil", + "Federated Share successfully added" : "Federatif Paylaşım başarıyla eklendi", + "Couldn't add remote share" : "Uzak paylaşım eklenemedi", "Sharing %s failed, because this item is already shared with %s" : "%s paylaşımı, %s ile zaten paylaşıldığından dolayı başarısız oldu", "Not allowed to create a federated share with the same user" : "Aynı kullanıcı ile bir birleşmiş paylaşım oluşturulamaz", "File is already shared with %s" : "Dosya zaten %s ile paylaşılmış", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s paylaşımı başarısız. %s bulunamadı veya sunucu şu anda ulaşılamıyor olabilir.", + "Could not find share" : "Paylaşım bulunamadı", + "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "%1$s kişisinden \"/%3$s\" uzak paylaşımını aldınız (%2$s aracılığıyla)", "You received \"/%3$s\" as a remote share from %1$s" : "%1$s kişisinden \"/%3$s\" uzak paylaşımını aldınız", "Accept" : "Kabul et", "Decline" : "Reddet", diff --git a/apps/federatedfilesharing/templates/settings-personal.php b/apps/federatedfilesharing/templates/settings-personal.php index 9699591b84d..aad1e385982 100644 --- a/apps/federatedfilesharing/templates/settings-personal.php +++ b/apps/federatedfilesharing/templates/settings-personal.php @@ -15,7 +15,8 @@ if ($_['showShareIT']) { <p> <?php p($l->t('Your Federated Cloud ID:')); ?> - <strong><?php p($_['cloudId']); ?></strong> + <strong id="cloudid"><?php p($_['cloudId']); ?></strong> + <a class="clipboardButton icon icon-clippy" data-clipboard-target="#cloudid"></a> </p> <br> diff --git a/apps/federation/appinfo/info.xml b/apps/federation/appinfo/info.xml index 55491f38b55..b8d697a4db2 100644 --- a/apps/federation/appinfo/info.xml +++ b/apps/federation/appinfo/info.xml @@ -5,7 +5,7 @@ <description>Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing.</description> <licence>AGPL</licence> <author>Bjoern Schiessle</author> - <version>1.0.0</version> + <version>1.1.0</version> <namespace>Federation</namespace> <category>other</category> <dependencies> diff --git a/apps/federation/css/settings-admin.css b/apps/federation/css/settings-admin.css index 150412c156f..97a50785f82 100644 --- a/apps/federation/css/settings-admin.css +++ b/apps/federation/css/settings-admin.css @@ -4,7 +4,6 @@ #listOfTrustedServers li { padding-top: 10px; - padding-left: 20px; } .removeTrustedServer { diff --git a/apps/federation/l10n/cs_CZ.js b/apps/federation/l10n/cs_CZ.js index f59d0987dc2..1aa8b18aea7 100644 --- a/apps/federation/l10n/cs_CZ.js +++ b/apps/federation/l10n/cs_CZ.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Sdružování", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.", "Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení", - "Trusted Servers" : "Důvěryhodné servery" + "Trusted Servers" : "Důvěryhodné servery", + "+ Add Nextcloud server" : "+ Přidat Nextcloud server", + "Nextcloud Server" : "Server Nextcloud" }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/federation/l10n/cs_CZ.json b/apps/federation/l10n/cs_CZ.json index 21f4243824d..36d7726e0e6 100644 --- a/apps/federation/l10n/cs_CZ.json +++ b/apps/federation/l10n/cs_CZ.json @@ -6,6 +6,8 @@ "Federation" : "Sdružování", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Sdružování vám umožňuje se připojit k dalším důvěryhodným serverům za účelem výměny uživatelských adresářů. Používá se to např. pro automatické doplňování uživatelů při sdruženém sdílení.", "Add server automatically once a federated share was created successfully" : "Přidat server automaticky jakmile je úspěšně vytvořeno sdružené sdílení", - "Trusted Servers" : "Důvěryhodné servery" + "Trusted Servers" : "Důvěryhodné servery", + "+ Add Nextcloud server" : "+ Přidat Nextcloud server", + "Nextcloud Server" : "Server Nextcloud" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/federation/l10n/de.js b/apps/federation/l10n/de.js index 17671706e18..f53f4ebd1bd 100644 --- a/apps/federation/l10n/de.js +++ b/apps/federation/l10n/de.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Dir, dich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").", "Add server automatically once a federated share was created successfully" : "Einen mit ownCloud Federation verbundenen Server automatisch hinzufügen, sobald die Verbindung einmal erfolgreich erstellt wurde", - "Trusted Servers" : "Vertrauenswürdige Server" + "Trusted Servers" : "Vertrauenswürdige Server", + "+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen", + "Nextcloud Server" : "Nextcloud Server" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/de.json b/apps/federation/l10n/de.json index 6601ebea5e1..3b925240fc0 100644 --- a/apps/federation/l10n/de.json +++ b/apps/federation/l10n/de.json @@ -6,6 +6,8 @@ "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Dir, dich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").", "Add server automatically once a federated share was created successfully" : "Einen mit ownCloud Federation verbundenen Server automatisch hinzufügen, sobald die Verbindung einmal erfolgreich erstellt wurde", - "Trusted Servers" : "Vertrauenswürdige Server" + "Trusted Servers" : "Vertrauenswürdige Server", + "+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen", + "Nextcloud Server" : "Nextcloud Server" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/de_DE.js b/apps/federation/l10n/de_DE.js index aadbd731975..9d175ae2768 100644 --- a/apps/federation/l10n/de_DE.js +++ b/apps/federation/l10n/de_DE.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Ihnen sich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").", "Add server automatically once a federated share was created successfully" : "Server automatisch hinzufügen sobale eine federated Freigabe erstellt wurde", - "Trusted Servers" : "Vertrauenswürdige Server" + "Trusted Servers" : "Vertrauenswürdige Server", + "+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen", + "Nextcloud Server" : "Nextcloud Server" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/de_DE.json b/apps/federation/l10n/de_DE.json index c4da4d404f8..b18b46c70fb 100644 --- a/apps/federation/l10n/de_DE.json +++ b/apps/federation/l10n/de_DE.json @@ -6,6 +6,8 @@ "Federation" : "Federation", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federation erlaubt es Ihnen sich mit anderen vertrauenswürdigen Servern zu verbinden um das Benutzerverzeichnis auszutauschen. Diese Funktion wird beispielsweise für die Autovervollständigung externer Benutzer genutzt und ermöglicht das Teilen von Inhalten mit ihnen (\"federated sharing\").", "Add server automatically once a federated share was created successfully" : "Server automatisch hinzufügen sobale eine federated Freigabe erstellt wurde", - "Trusted Servers" : "Vertrauenswürdige Server" + "Trusted Servers" : "Vertrauenswürdige Server", + "+ Add Nextcloud server" : "+ Nextcloud Server hinzufügen", + "Nextcloud Server" : "Nextcloud Server" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/es.js b/apps/federation/l10n/es.js index c537c230732..d2b98ba657d 100644 --- a/apps/federation/l10n/es.js +++ b/apps/federation/l10n/es.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Federación", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar directorios. Por ejemplo, ésto se usará para autocompletar la selección usuarios externos al compartir en federación. ", "Add server automatically once a federated share was created successfully" : "Añadir el servidor automáticamente una vez que un compartido federado se haya creado exitosamente", - "Trusted Servers" : "Servidores de confianza" + "Trusted Servers" : "Servidores de confianza", + "+ Add Nextcloud server" : "+ Añadir servidor Nextcloud", + "Nextcloud Server" : "Servidor Nexcloud" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/es.json b/apps/federation/l10n/es.json index 7f0ee3120d2..b3ddc86e439 100644 --- a/apps/federation/l10n/es.json +++ b/apps/federation/l10n/es.json @@ -6,6 +6,8 @@ "Federation" : "Federación", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federación te permite conectarte con otros servidores de confianza para intercambiar directorios. Por ejemplo, ésto se usará para autocompletar la selección usuarios externos al compartir en federación. ", "Add server automatically once a federated share was created successfully" : "Añadir el servidor automáticamente una vez que un compartido federado se haya creado exitosamente", - "Trusted Servers" : "Servidores de confianza" + "Trusted Servers" : "Servidores de confianza", + "+ Add Nextcloud server" : "+ Añadir servidor Nextcloud", + "Nextcloud Server" : "Servidor Nexcloud" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/fr.js b/apps/federation/l10n/fr.js index 95029368394..9113e44017b 100644 --- a/apps/federation/l10n/fr.js +++ b/apps/federation/l10n/fr.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Fédération", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération » vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.", "Add server automatically once a federated share was created successfully" : "Ajouter un serveur automatiquement une fois que le partage a été créé avec succès .", - "Trusted Servers" : "Serveurs de confiance" + "Trusted Servers" : "Serveurs de confiance", + "+ Add Nextcloud server" : "+ Ajouter un serveur Nextcloud", + "Nextcloud Server" : "Serveur Nextcloud" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/fr.json b/apps/federation/l10n/fr.json index 57487dec6d8..88667336936 100644 --- a/apps/federation/l10n/fr.json +++ b/apps/federation/l10n/fr.json @@ -6,6 +6,8 @@ "Federation" : "Fédération", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La « fédération » vous permet de vous connecter avec d'autres serveurs de confiance pour échanger la liste des utilisateurs. Par exemple, ce sera utilisé pour auto-compléter les utilisateurs externes lors du partage fédéré.", "Add server automatically once a federated share was created successfully" : "Ajouter un serveur automatiquement une fois que le partage a été créé avec succès .", - "Trusted Servers" : "Serveurs de confiance" + "Trusted Servers" : "Serveurs de confiance", + "+ Add Nextcloud server" : "+ Ajouter un serveur Nextcloud", + "Nextcloud Server" : "Serveur Nextcloud" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/id.js b/apps/federation/l10n/id.js index 91582e5c773..99c1caa7df6 100644 --- a/apps/federation/l10n/id.js +++ b/apps/federation/l10n/id.js @@ -1,10 +1,15 @@ OC.L10N.register( "federation", { - "Server added to the list of trusted ownClouds" : "Server ditambahkan ke daftar ownCloud yang dipercaya", + "Added to the list of trusted servers" : "Server telah ditambahkan pada daftar server terpercaya", "Server is already in the list of trusted servers." : "Server sudah ada pada daftar server terpercaya", - "No ownCloud server found" : "Tidak ada server ownCloud yang ditemukan", + "No server to federate found" : "Tidak ada server yang bisa difederasikan", "Could not add server" : "Tidak dapat menambahkan server", - "Federation" : "Federasi" + "Federation" : "Federasi", + "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi memungkinkan Anda untuk terhubung dengan server lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.", + "Add server automatically once a federated share was created successfully" : "Tambah server secara otomatis saat pembagian terfederasi dibuat", + "Trusted Servers" : "Server Terpercaya", + "+ Add Nextcloud server" : "+ Tambahkan server Nextcloud", + "Nextcloud Server" : "Server Nextcloud" }, "nplurals=1; plural=0;"); diff --git a/apps/federation/l10n/id.json b/apps/federation/l10n/id.json index 6762b50821a..466396e1901 100644 --- a/apps/federation/l10n/id.json +++ b/apps/federation/l10n/id.json @@ -1,8 +1,13 @@ { "translations": { - "Server added to the list of trusted ownClouds" : "Server ditambahkan ke daftar ownCloud yang dipercaya", + "Added to the list of trusted servers" : "Server telah ditambahkan pada daftar server terpercaya", "Server is already in the list of trusted servers." : "Server sudah ada pada daftar server terpercaya", - "No ownCloud server found" : "Tidak ada server ownCloud yang ditemukan", + "No server to federate found" : "Tidak ada server yang bisa difederasikan", "Could not add server" : "Tidak dapat menambahkan server", - "Federation" : "Federasi" + "Federation" : "Federasi", + "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federasi memungkinkan Anda untuk terhubung dengan server lainnya yang terpercaya untuk menukar direktori pengguna. Contohnya, ini akan digunakan untuk pengisian-otomatis untuk pengguna eksternal untuk pembagian terfederasi.", + "Add server automatically once a federated share was created successfully" : "Tambah server secara otomatis saat pembagian terfederasi dibuat", + "Trusted Servers" : "Server Terpercaya", + "+ Add Nextcloud server" : "+ Tambahkan server Nextcloud", + "Nextcloud Server" : "Server Nextcloud" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/federation/l10n/is.js b/apps/federation/l10n/is.js index 970656835fd..e7016e9b154 100644 --- a/apps/federation/l10n/is.js +++ b/apps/federation/l10n/is.js @@ -1,15 +1,15 @@ OC.L10N.register( "federation", { - "Server added to the list of trusted ownClouds" : "Þjóninum bætt við listann yfir treyst ownCloud-ský", + "Added to the list of trusted servers" : "Bætt á lista yfir treysta þjóna", "Server is already in the list of trusted servers." : "Þjónninn er nú þegar á listanum yfir treysta þjóna.", - "No ownCloud server found" : "Enginn ownCloud-þjónn fannst", + "No server to federate found" : "Enginn sambandsþjónn fannst", "Could not add server" : "Gat ekki bætt við þjóni", "Federation" : "Samband", - "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud-samband (federation) gerir þér kleift að tengjast öðrumtreystum ownCloud-skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna.", + "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrumtreystum skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna.", "Add server automatically once a federated share was created successfully" : "Bæta þjóni við sjálfkrafa, hafi tekist að búa til sambandssameign", - "Trusted ownCloud Servers" : "Treystir ownCloud-þjónar", - "+ Add ownCloud server" : "+ Bæta við ownCloud-þjóni", - "ownCloud Server" : "ownCloud-þjónn" + "Trusted Servers" : "Treystir þjónar", + "+ Add Nextcloud server" : "+ Bæta við Nextcloud þjóni", + "Nextcloud Server" : "Nextcloud þjónn" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/federation/l10n/is.json b/apps/federation/l10n/is.json index 3754dc12ed7..4f61cb1258b 100644 --- a/apps/federation/l10n/is.json +++ b/apps/federation/l10n/is.json @@ -1,13 +1,13 @@ { "translations": { - "Server added to the list of trusted ownClouds" : "Þjóninum bætt við listann yfir treyst ownCloud-ský", + "Added to the list of trusted servers" : "Bætt á lista yfir treysta þjóna", "Server is already in the list of trusted servers." : "Þjónninn er nú þegar á listanum yfir treysta þjóna.", - "No ownCloud server found" : "Enginn ownCloud-þjónn fannst", + "No server to federate found" : "Enginn sambandsþjónn fannst", "Could not add server" : "Gat ekki bætt við þjóni", "Federation" : "Samband", - "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud-samband (federation) gerir þér kleift að tengjast öðrumtreystum ownCloud-skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna.", + "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Þjónasamband (federation) gerir þér kleift að tengjast öðrumtreystum skýjum til að skiptast á notendaskrám. Þetta er til dæmis notað til að sjálfklára nöfn ytri notenda við deilingu sambandssameigna.", "Add server automatically once a federated share was created successfully" : "Bæta þjóni við sjálfkrafa, hafi tekist að búa til sambandssameign", - "Trusted ownCloud Servers" : "Treystir ownCloud-þjónar", - "+ Add ownCloud server" : "+ Bæta við ownCloud-þjóni", - "ownCloud Server" : "ownCloud-þjónn" + "Trusted Servers" : "Treystir þjónar", + "+ Add Nextcloud server" : "+ Bæta við Nextcloud þjóni", + "Nextcloud Server" : "Nextcloud þjónn" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/federation/l10n/it.js b/apps/federation/l10n/it.js index ec1de7eedf9..25b63e62ce3 100644 --- a/apps/federation/l10n/it.js +++ b/apps/federation/l10n/it.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Federazione", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federazione consente di connettersi ad altri server affidabili per accedere alla cartella utente. Ad esempio, può essere utilizzata per il completamento automatico di utenti esterni per la condivisione federata.", "Add server automatically once a federated share was created successfully" : "Aggiungi automaticamente il server dopo che una condivisione federata è stata creata con successo", - "Trusted Servers" : "Server affidabili" + "Trusted Servers" : "Server affidabili", + "+ Add Nextcloud server" : "+ Aggiungi server Nextcloud", + "Nextcloud Server" : "Server Nextcloud" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/it.json b/apps/federation/l10n/it.json index 76d3b585f8b..46f6aaaf3ba 100644 --- a/apps/federation/l10n/it.json +++ b/apps/federation/l10n/it.json @@ -6,6 +6,8 @@ "Federation" : "Federazione", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "La federazione consente di connettersi ad altri server affidabili per accedere alla cartella utente. Ad esempio, può essere utilizzata per il completamento automatico di utenti esterni per la condivisione federata.", "Add server automatically once a federated share was created successfully" : "Aggiungi automaticamente il server dopo che una condivisione federata è stata creata con successo", - "Trusted Servers" : "Server affidabili" + "Trusted Servers" : "Server affidabili", + "+ Add Nextcloud server" : "+ Aggiungi server Nextcloud", + "Nextcloud Server" : "Server Nextcloud" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/nl.js b/apps/federation/l10n/nl.js index 7d4487c71fb..1f54a86af01 100644 --- a/apps/federation/l10n/nl.js +++ b/apps/federation/l10n/nl.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Federatie", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federatie maakt het mogelijk om te verbinden met vertrouwde servers en de gebuikersadministratie te delen. Zo kun je automatisch externe gebruikers toevoegen voor federatief delen.", "Add server automatically once a federated share was created successfully" : "Voeg server automatisch toe zodra een gefedereerde share succesvol gecreëerd is", - "Trusted Servers" : "Vertrouwde servers" + "Trusted Servers" : "Vertrouwde servers", + "+ Add Nextcloud server" : "+ Toevoegen Nextcloud server", + "Nextcloud Server" : "Nextcloud Server" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/federation/l10n/nl.json b/apps/federation/l10n/nl.json index 2a9a7bf38a1..a413e8dac04 100644 --- a/apps/federation/l10n/nl.json +++ b/apps/federation/l10n/nl.json @@ -6,6 +6,8 @@ "Federation" : "Federatie", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federatie maakt het mogelijk om te verbinden met vertrouwde servers en de gebuikersadministratie te delen. Zo kun je automatisch externe gebruikers toevoegen voor federatief delen.", "Add server automatically once a federated share was created successfully" : "Voeg server automatisch toe zodra een gefedereerde share succesvol gecreëerd is", - "Trusted Servers" : "Vertrouwde servers" + "Trusted Servers" : "Vertrouwde servers", + "+ Add Nextcloud server" : "+ Toevoegen Nextcloud server", + "Nextcloud Server" : "Nextcloud Server" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/pt_BR.js b/apps/federation/l10n/pt_BR.js index 7b4f2560850..3ed5852cd79 100644 --- a/apps/federation/l10n/pt_BR.js +++ b/apps/federation/l10n/pt_BR.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Associação", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federação permite que você conecte com outros servidores confiáveis para trocar o diretório do usuário. Por exemplo, este atributo será usado para completar automaticamente usuários externos para compartilhamento federado.", "Add server automatically once a federated share was created successfully" : "Adicionar servidor automaticamente uma vez que um compartilhamento associado foi criado com êxito", - "Trusted Servers" : "Servidores confiáveis" + "Trusted Servers" : "Servidores confiáveis", + "+ Add Nextcloud server" : "+ Adicionar servidor Nextcloud", + "Nextcloud Server" : "Servidor Nextcloud" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/pt_BR.json b/apps/federation/l10n/pt_BR.json index 55a48479267..1568c942408 100644 --- a/apps/federation/l10n/pt_BR.json +++ b/apps/federation/l10n/pt_BR.json @@ -6,6 +6,8 @@ "Federation" : "Associação", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Federação permite que você conecte com outros servidores confiáveis para trocar o diretório do usuário. Por exemplo, este atributo será usado para completar automaticamente usuários externos para compartilhamento federado.", "Add server automatically once a federated share was created successfully" : "Adicionar servidor automaticamente uma vez que um compartilhamento associado foi criado com êxito", - "Trusted Servers" : "Servidores confiáveis" + "Trusted Servers" : "Servidores confiáveis", + "+ Add Nextcloud server" : "+ Adicionar servidor Nextcloud", + "Nextcloud Server" : "Servidor Nextcloud" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federation/l10n/ru.js b/apps/federation/l10n/ru.js index 9b7d3b5beae..e585cd3c39e 100644 --- a/apps/federation/l10n/ru.js +++ b/apps/federation/l10n/ru.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Объединение", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Объединение серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автоматического завершения внешних пользователей при объединенном общем доступе.", "Add server automatically once a federated share was created successfully" : "Добавить сервер автоматически, как только федеративный общий доступ будет успешно создан", - "Trusted Servers" : "Доверенные сервера" + "Trusted Servers" : "Доверенные сервера", + "+ Add Nextcloud server" : "+ Добавить Nextcloud сервер", + "Nextcloud Server" : "Nextcloud сервер" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/federation/l10n/ru.json b/apps/federation/l10n/ru.json index 520b9f48d48..bdc9958b44b 100644 --- a/apps/federation/l10n/ru.json +++ b/apps/federation/l10n/ru.json @@ -6,6 +6,8 @@ "Federation" : "Объединение", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Объединение серверов позволит Вам подключиться к другим доверенным серверам для обмена каталогами пользователей. Это будет использовано, например, для автоматического завершения внешних пользователей при объединенном общем доступе.", "Add server automatically once a federated share was created successfully" : "Добавить сервер автоматически, как только федеративный общий доступ будет успешно создан", - "Trusted Servers" : "Доверенные сервера" + "Trusted Servers" : "Доверенные сервера", + "+ Add Nextcloud server" : "+ Добавить Nextcloud сервер", + "Nextcloud Server" : "Nextcloud сервер" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/federation/l10n/tr.js b/apps/federation/l10n/tr.js index f9fd5bcda42..93dbe723dd8 100644 --- a/apps/federation/l10n/tr.js +++ b/apps/federation/l10n/tr.js @@ -8,6 +8,8 @@ OC.L10N.register( "Federation" : "Birleşim", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Birleşim, diğer güvenilir sunucularla dosya/klasör paylaşımı yapmanıza izin verir. \nÖrneğin, harici kullanıcıların klasörleri, otomatik tamamlama için kullanılacaktır.", "Add server automatically once a federated share was created successfully" : "Birleşmiş bir paylaşım başarıyla eklenildiğinde sunucuyu otomatik olarak ekle", - "Trusted Servers" : "Güvenilir sunucular" + "Trusted Servers" : "Güvenilir sunucular", + "+ Add Nextcloud server" : "+Nextcloud sunucusu ekle", + "Nextcloud Server" : "Nextcloud Sunucusu" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/federation/l10n/tr.json b/apps/federation/l10n/tr.json index 3a283f067ec..45072b5c9ed 100644 --- a/apps/federation/l10n/tr.json +++ b/apps/federation/l10n/tr.json @@ -6,6 +6,8 @@ "Federation" : "Birleşim", "Federation allows you to connect with other trusted servers to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "Birleşim, diğer güvenilir sunucularla dosya/klasör paylaşımı yapmanıza izin verir. \nÖrneğin, harici kullanıcıların klasörleri, otomatik tamamlama için kullanılacaktır.", "Add server automatically once a federated share was created successfully" : "Birleşmiş bir paylaşım başarıyla eklenildiğinde sunucuyu otomatik olarak ekle", - "Trusted Servers" : "Güvenilir sunucular" + "Trusted Servers" : "Güvenilir sunucular", + "+ Add Nextcloud server" : "+Nextcloud sunucusu ekle", + "Nextcloud Server" : "Nextcloud Sunucusu" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/federation/lib/Controller/SettingsController.php b/apps/federation/lib/Controller/SettingsController.php index 79eb06e0fda..40cc4c084a0 100644 --- a/apps/federation/lib/Controller/SettingsController.php +++ b/apps/federation/lib/Controller/SettingsController.php @@ -113,8 +113,8 @@ class SettingsController extends Controller { } if ($this->trustedServers->isOwnCloudServer($url) === false) { - $message = 'No server to federate found'; - $hint = $this->l->t('No server to federate found'); + $message = 'No server to federate with found'; + $hint = $this->l->t('No server to federate with found'); throw new HintException($message, $hint); } diff --git a/apps/federation/lib/DbHandler.php b/apps/federation/lib/DbHandler.php index b30ce740092..c938cfb1583 100644 --- a/apps/federation/lib/DbHandler.php +++ b/apps/federation/lib/DbHandler.php @@ -89,7 +89,7 @@ class DbHandler { if ($result) { return (int)$this->connection->lastInsertId('*PREFIX*'.$this->dbTable); } else { - $message = 'Internal failure, Could not add ownCloud as trusted server: ' . $url; + $message = 'Internal failure, Could not add trusted server: ' . $url; $message_t = $this->IL10N->t('Could not add server'); throw new HintException($message, $message_t); } diff --git a/apps/federation/lib/TrustedServers.php b/apps/federation/lib/TrustedServers.php index fff19e414d5..f802af594dc 100644 --- a/apps/federation/lib/TrustedServers.php +++ b/apps/federation/lib/TrustedServers.php @@ -211,7 +211,7 @@ class TrustedServers { } /** - * check if URL point to a ownCloud server + * check if URL point to a ownCloud/Nextcloud server * * @param string $url * @return bool @@ -219,15 +219,21 @@ class TrustedServers { public function isOwnCloudServer($url) { $isValidOwnCloud = false; $client = $this->httpClientService->newClient(); - $result = $client->get( - $url . '/status.php', - [ - 'timeout' => 3, - 'connect_timeout' => 3, - ] - ); - if ($result->getStatusCode() === Http::STATUS_OK) { - $isValidOwnCloud = $this->checkOwnCloudVersion($result->getBody()); + try { + $result = $client->get( + $url . '/status.php', + [ + 'timeout' => 3, + 'connect_timeout' => 3, + ] + ); + if ($result->getStatusCode() === Http::STATUS_OK) { + $isValidOwnCloud = $this->checkOwnCloudVersion($result->getBody()); + + } + } catch (\Exception $e) { + $this->logger->debug('No Nextcloud server: ' . $e->getMessage()); + return false; } return $isValidOwnCloud; diff --git a/apps/federation/tests/TrustedServersTest.php b/apps/federation/tests/TrustedServersTest.php index 63086c76002..1bf1475aef2 100644 --- a/apps/federation/tests/TrustedServersTest.php +++ b/apps/federation/tests/TrustedServersTest.php @@ -309,7 +309,6 @@ class TrustedServersTest extends TestCase { } /** - * @expectedException \Exception * @expectedExceptionMessage simulated exception */ public function testIsOwnCloudServerFail() { @@ -323,7 +322,7 @@ class TrustedServersTest extends TestCase { throw new \Exception('simulated exception'); }); - $this->trustedServers->isOwnCloudServer($server); + $this->assertFalse($this->trustedServers->isOwnCloudServer($server)); } /** diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php index cc86e9bf270..850c335c27d 100644 --- a/apps/files/appinfo/app.php +++ b/apps/files/appinfo/app.php @@ -28,6 +28,7 @@ */ \OCP\App::registerAdmin('files', 'admin'); +$l = \OC::$server->getL10N('files'); \OC::$server->getNavigationManager()->add(function () { $urlGenerator = \OC::$server->getURLGenerator(); @@ -49,8 +50,7 @@ $templateManager->registerTemplate('application/vnd.oasis.opendocument.presentat $templateManager->registerTemplate('application/vnd.oasis.opendocument.text', 'core/templates/filetemplates/template.odt'); $templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadsheet', 'core/templates/filetemplates/template.ods'); -\OCA\Files\App::getNavigationManager()->add(function () { - $l = \OC::$server->getL10N('files'); +\OCA\Files\App::getNavigationManager()->add(function () use ($l) { return [ 'id' => 'files', 'appname' => 'files', @@ -60,6 +60,16 @@ $templateManager->registerTemplate('application/vnd.oasis.opendocument.spreadshe ]; }); +\OCA\Files\App::getNavigationManager()->add(function () use ($l) { + return [ + 'id' => 'recent', + 'appname' => 'files', + 'script' => 'recentlist.php', + 'order' => 2, + 'name' => $l->t('Recent'), + ]; +}); + \OC::$server->getActivityManager()->registerExtension(function() { return new \OCA\Files\Activity( \OC::$server->query('L10NFactory'), diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php index 34bb1011773..7b5ac63a160 100644 --- a/apps/files/appinfo/routes.php +++ b/apps/files/appinfo/routes.php @@ -51,6 +51,11 @@ $application->registerRoutes( 'requirements' => array('tagName' => '.+'), ), array( + 'name' => 'API#getRecentFiles', + 'url' => '/api/v1/recent/', + 'verb' => 'GET' + ), + array( 'name' => 'API#updateFileSorting', 'url' => '/api/v1/sorting', 'verb' => 'POST' diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 1f8aa10bdb3..004a0b9ff50 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -608,13 +608,6 @@ html.ie8 .column-mtime .selectedActions { padding-right: 14px; } -#fileList .filesize { - padding-top: 0; - padding-bottom: 0; - padding-left: 60px; - padding-right: 15px; -} - #fileList .popovermenu { margin-right: 6px; } diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index f0b16a57886..f50322953d2 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -175,6 +175,11 @@ _clientSideSort: true, /** + * Whether or not users can change the sort attribute or direction + */ + _allowSorting: true, + + /** * Current directory * @type String */ @@ -718,7 +723,7 @@ $target = $target.closest('a'); } sort = $target.attr('data-sort'); - if (sort) { + if (sort && this._allowSorting) { if (this._sort === sort) { this.setSort(sort, (this._sortDirection === 'desc')?'asc':'desc', true, true); } @@ -852,7 +857,8 @@ type: $el.attr('data-type'), size: parseInt($el.attr('data-size'), 10), etag: $el.attr('data-etag'), - permissions: parseInt($el.attr('data-permissions'), 10) + permissions: parseInt($el.attr('data-permissions'), 10), + hasPreview: $el.attr('data-has-preview') === 'true' }; var icon = $el.attr('data-icon'); if (icon) { @@ -1068,7 +1074,8 @@ "data-mime": mime, "data-mtime": mtime, "data-etag": fileData.etag, - "data-permissions": fileData.permissions || this.getDirectoryPermissions() + "data-permissions": fileData.permissions || this.getDirectoryPermissions(), + "data-has-preview": fileData.hasPreview !== false }); if (dataIcon) { @@ -1330,7 +1337,7 @@ // display actions this.fileActions.display(filenameTd, !options.silent, this); - if (mime !== 'httpd/unix-directory') { + if (mime !== 'httpd/unix-directory' && fileData.hasPreview !== false) { var iconDiv = filenameTd.find('.thumbnail'); // lazy load / newly inserted td ? // the typeof check ensures that the default value of animate is true diff --git a/apps/files/js/recentfilelist.js b/apps/files/js/recentfilelist.js new file mode 100644 index 00000000000..e8c61cbfe2d --- /dev/null +++ b/apps/files/js/recentfilelist.js @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +// HACK: this piece needs to be loaded AFTER the files app (for unit tests) +$(document).ready(function () { + (function (OCA) { + /** + * @class OCA.Files.RecentFileList + * @augments OCA.Files.RecentFileList + * + * @classdesc Recent file list. + * Displays the list of recently modified files + * + * @param $el container element with existing markup for the #controls + * and a table + * @param [options] map of options, see other parameters + */ + var RecentFileList = function ($el, options) { + options.sorting = { + mode: 'mtime', + direction: 'desc' + }; + this.initialize($el, options); + this._allowSorting = false; + }; + RecentFileList.prototype = _.extend({}, OCA.Files.FileList.prototype, + /** @lends OCA.Files.RecentFileList.prototype */ { + id: 'recent', + appName: t('files', 'Recent'), + + _clientSideSort: true, + _allowSelection: false, + + /** + * @private + */ + initialize: function () { + OCA.Files.FileList.prototype.initialize.apply(this, arguments); + if (this.initialized) { + return; + } + OC.Plugins.attach('OCA.Files.RecentFileList', this); + }, + + updateEmptyContent: function () { + var dir = this.getCurrentDirectory(); + if (dir === '/') { + // root has special permissions + this.$el.find('#emptycontent').toggleClass('hidden', !this.isEmpty); + this.$el.find('#filestable thead th').toggleClass('hidden', this.isEmpty); + } + else { + OCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments); + } + }, + + getDirectoryPermissions: function () { + return OC.PERMISSION_READ | OC.PERMISSION_DELETE; + }, + + updateStorageStatistics: function () { + // no op because it doesn't have + // storage info like free space / used space + }, + + reload: function () { + this.showMask(); + if (this._reloadCall) { + this._reloadCall.abort(); + } + + // there is only root + this._setCurrentDir('/', false); + + this._reloadCall = $.ajax({ + url: OC.generateUrl('/apps/files/api/v1/recent'), + type: 'GET', + dataType: 'json' + }); + var callBack = this.reloadCallback.bind(this); + return this._reloadCall.then(callBack, callBack); + }, + + reloadCallback: function (result) { + delete this._reloadCall; + this.hideMask(); + + if (result.files) { + this.setFiles(result.files.sort(this._sortComparator)); + return true; + } + return false; + } + }); + + OCA.Files.RecentFileList = RecentFileList; + })(OCA); +}); + diff --git a/apps/files/js/recentplugin.js b/apps/files/js/recentplugin.js new file mode 100644 index 00000000000..fcd427b18a2 --- /dev/null +++ b/apps/files/js/recentplugin.js @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function (OCA) { + /** + * @namespace OCA.Files.RecentPlugin + * + * Registers the recent file list from the files app sidebar. + */ + OCA.Files.RecentPlugin = { + name: 'Recent', + + /** + * @type OCA.Files.RecentFileList + */ + recentFileList: null, + + attach: function () { + var self = this; + $('#app-content-recent').on('show.plugin-recent', function (e) { + self.showFileList($(e.target)); + }); + $('#app-content-recent').on('hide.plugin-recent', function () { + self.hideFileList(); + }); + }, + + detach: function () { + if (this.recentFileList) { + this.recentFileList.destroy(); + OCA.Files.fileActions.off('setDefault.plugin-recent', this._onActionsUpdated); + OCA.Files.fileActions.off('registerAction.plugin-recent', this._onActionsUpdated); + $('#app-content-recent').off('.plugin-recent'); + this.recentFileList = null; + } + }, + + showFileList: function ($el) { + if (!this.recentFileList) { + this.recentFileList = this._createRecentFileList($el); + } + return this.recentFileList; + }, + + hideFileList: function () { + if (this.recentFileList) { + this.recentFileList.$fileList.empty(); + } + }, + + /** + * Creates the recent file list. + * + * @param $el container for the file list + * @return {OCA.Files.RecentFileList} file list + */ + _createRecentFileList: function ($el) { + var fileActions = this._createFileActions(); + // register recent list for sidebar section + return new OCA.Files.RecentFileList( + $el, { + fileActions: fileActions, + scrollContainer: $('#app-content') + } + ); + }, + + _createFileActions: function () { + // inherit file actions from the files app + var fileActions = new OCA.Files.FileActions(); + // note: not merging the legacy actions because legacy apps are not + // compatible with the sharing overview and need to be adapted first + fileActions.registerDefaultActions(); + fileActions.merge(OCA.Files.fileActions); + + if (!this._globalActionsInitialized) { + // in case actions are registered later + this._onActionsUpdated = _.bind(this._onActionsUpdated, this); + OCA.Files.fileActions.on('setDefault.plugin-recent', this._onActionsUpdated); + OCA.Files.fileActions.on('registerAction.plugin-recent', this._onActionsUpdated); + this._globalActionsInitialized = true; + } + + // when the user clicks on a folder, redirect to the corresponding + // folder in the files app instead of opening it directly + fileActions.register('dir', 'Open', OC.PERMISSION_READ, '', function (filename, context) { + OCA.Files.App.setActiveView('files', {silent: true}); + var path = OC.joinPaths(context.$file.attr('data-path'), filename); + OCA.Files.App.fileList.changeDirectory(path, true, true); + }); + fileActions.setDefault('dir', 'Open'); + return fileActions; + }, + + _onActionsUpdated: function (ev) { + if (ev.action) { + this.recentFileList.fileActions.registerAction(ev.action); + } else if (ev.defaultAction) { + this.recentFileList.fileActions.setDefault( + ev.defaultAction.mime, + ev.defaultAction.name + ); + } + } + }; + +})(OCA); + +OC.Plugins.register('OCA.Files.App', OCA.Files.RecentPlugin); + diff --git a/apps/files/js/sidebarpreviewmanager.js b/apps/files/js/sidebarpreviewmanager.js index cfd1fffae13..3d540119189 100644 --- a/apps/files/js/sidebarpreviewmanager.js +++ b/apps/files/js/sidebarpreviewmanager.js @@ -32,9 +32,18 @@ }, loadPreview: function (model, $thumbnailDiv, $thumbnailContainer) { - var handler = this.getPreviewHandler(model.get('mimetype')); - var fallback = this.fallbackPreview.bind(this, model, $thumbnailDiv, $thumbnailContainer); - handler(model, $thumbnailDiv, $thumbnailContainer, fallback); + if (model.get('hasPreview') === false) { + var mimeIcon = OC.MimeType.getIconUrl(model.get('mimetype')); + $thumbnailDiv.removeClass('icon-loading icon-32'); + $thumbnailContainer.removeClass('image'); //fall back to regular view + $thumbnailDiv.css({ + 'background-image': 'url("' + mimeIcon + '")' + }); + } else { + var handler = this.getPreviewHandler(model.get('mimetype')); + var fallback = this.fallbackPreview.bind(this, model, $thumbnailDiv, $thumbnailContainer); + handler(model, $thumbnailDiv, $thumbnailContainer, fallback); + } }, // previews for images and mimetype icons diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js index 54789e62b10..53123735bd7 100644 --- a/apps/files/l10n/cs_CZ.js +++ b/apps/files/l10n/cs_CZ.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Neplatný adresář", "Files" : "Soubory", "All files" : "Všechny soubory", + "Recent" : "Nedávné", "File could not be found" : "Soubor nelze nalézt", "Home" : "Domů", "Close" : "Zavřít", diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json index 7758fc3b539..cdee6637638 100644 --- a/apps/files/l10n/cs_CZ.json +++ b/apps/files/l10n/cs_CZ.json @@ -19,6 +19,7 @@ "Invalid directory." : "Neplatný adresář", "Files" : "Soubory", "All files" : "Všechny soubory", + "Recent" : "Nedávné", "File could not be found" : "Soubor nelze nalézt", "Home" : "Domů", "Close" : "Zavřít", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 8ef62cbc126..5e9c8cff6a7 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Ungültiges Verzeichnis.", "Files" : "Dateien", "All files" : "Alle Dateien", + "Recent" : "Akuelle", "File could not be found" : "Datei konnte nicht gefunden werden", "Home" : "Home", "Close" : "Schließen", @@ -33,7 +34,7 @@ OC.L10N.register( "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "Uploading..." : "Hochladen…", "..." : "...", - "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde{plural_s} übrig", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig", "{hours}:{minutes}h" : "{hours}:{minutes}h", "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute{plural_s} übrig", "{minutes}:{seconds}m" : "{minutes}:{seconds}m", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index 532aced68dc..12f845fabae 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -19,6 +19,7 @@ "Invalid directory." : "Ungültiges Verzeichnis.", "Files" : "Dateien", "All files" : "Alle Dateien", + "Recent" : "Akuelle", "File could not be found" : "Datei konnte nicht gefunden werden", "Home" : "Home", "Close" : "Schließen", @@ -31,7 +32,7 @@ "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "Uploading..." : "Hochladen…", "..." : "...", - "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde{plural_s} übrig", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig", "{hours}:{minutes}h" : "{hours}:{minutes}h", "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute{plural_s} übrig", "{minutes}:{seconds}m" : "{minutes}:{seconds}m", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 8be185156f8..90f3f9d1125 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Ungültiges Verzeichnis.", "Files" : "Dateien", "All files" : "Alle Dateien", + "Recent" : "Aktuelle", "File could not be found" : "Datei konnte nicht gefunden werden", "Home" : "Home", "Close" : "Schließen", @@ -33,7 +34,7 @@ OC.L10N.register( "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "Uploading..." : "Hochladen…", "..." : "...", - "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde{plural_s} übrig", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig", "{hours}:{minutes}h" : "{hours}:{minutes}h", "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute{plural_s} übrig", "{minutes}:{seconds}m" : "{minutes}:{seconds}m", @@ -58,14 +59,14 @@ OC.L10N.register( "Could not move \"{file}\", target exists" : "\"{file}\" konnte nicht verschoben werden, Ziel existiert bereits", "Could not move \"{file}\"" : "\"{file}\" konnte nicht verschoben werden", "{newName} already exists" : "{newName} existiert bereits", - "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei konnte nicht umbennant werden \"{fileName}\", da die Datei nicht mehr existiert", + "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei konnte nicht umbenannt werden \"{fileName}\", da die Datei nicht mehr existiert", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name „{targetName}“ wird bereits im Ordner „{dir}“ benutzt. Bitte wählen Sie einen anderen Namen.", "Could not rename \"{fileName}\"" : "Die Datei konnte nicht umbenannt werden \"{fileName}\"", "Could not create file \"{file}\"" : "Die Datei konnte nicht erstellt werden \"{file}\"", "Could not create file \"{file}\" because it already exists" : "Die Datei konnte nicht erstellt werden \"{file}\", da diese bereits existiert", "Could not create folder \"{dir}\"" : "Der Ordner konnte nicht erstellt werden \"{dir}\"", "Could not create folder \"{dir}\" because it already exists" : "Der Ordner konnte nicht erstellt werden \"{dir}\", da dieser bereits existiert", - "Error deleting file \"{fileName}\"." : "Fehler beim löschen der Datei \"{fileName}\".", + "Error deleting file \"{fileName}\"." : "Fehler beim Löschen der Datei \"{fileName}\".", "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein", "Name" : "Name", "Size" : "Größe", @@ -96,7 +97,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", - "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Ihre <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen zu Ihren <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", "A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>", "You created %1$s" : "Sie haben %1$s erstellt", @@ -109,19 +110,19 @@ OC.L10N.register( "You restored %1$s" : "Sie haben %1$s wiederhergestellt", "%2$s restored %1$s" : "%2$s wiederhergestellt %1$s", "Changed by %2$s" : "Geändert von %2$s", - "Deleted by %2$s" : "Gelöscht durch %2$s", - "Restored by %2$s" : "Wiederhergestellt durch %2$s", + "Deleted by %2$s" : "Gelöscht von %2$s", + "Restored by %2$s" : "Wiederhergestellt von %2$s", "Upload (max. %s)" : "Hochladen (max. %s)", "File handling" : "Dateibehandlung", "Maximum upload size" : "Maximale Upload-Größe", "max. possible: " : "maximal möglich:", "Save" : "Speichern", - "With PHP-FPM it might take 5 minutes for changes to be applied." : "Bei PHP-FPM kann es 5 Minuten dauern, bis Änderungen angewendet sind.", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Mit PHP-FPM kann es 5 Minuten dauern, bis Änderungen angewendet sind.", "Missing permissions to edit from here." : "Fehlende Berechtigungen um von hier aus zu bearbeiten.", "Settings" : "Einstellungen", "Show hidden files" : "Versteckte Dateien anzeigen", "WebDAV" : "WebDAV", - "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">über WebDAV auf Ihre Dateien zuzugreifen</a>", + "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">via WebDAV auf Ihre Dateien zuzugreifen</a>", "No files in here" : "Keine Dateien vorhanden", "Upload some content or sync with your devices!" : "Laden Sie Inhalte hoch oder synchronisieren Sie mit Ihren Geräten!", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index d96cbf265db..58652381a2a 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -19,6 +19,7 @@ "Invalid directory." : "Ungültiges Verzeichnis.", "Files" : "Dateien", "All files" : "Alle Dateien", + "Recent" : "Aktuelle", "File could not be found" : "Datei konnte nicht gefunden werden", "Home" : "Home", "Close" : "Schließen", @@ -31,7 +32,7 @@ "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "Uploading..." : "Hochladen…", "..." : "...", - "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde{plural_s} übrig", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} Stunde(n) übrig", "{hours}:{minutes}h" : "{hours}:{minutes}h", "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} Minute{plural_s} übrig", "{minutes}:{seconds}m" : "{minutes}:{seconds}m", @@ -56,14 +57,14 @@ "Could not move \"{file}\", target exists" : "\"{file}\" konnte nicht verschoben werden, Ziel existiert bereits", "Could not move \"{file}\"" : "\"{file}\" konnte nicht verschoben werden", "{newName} already exists" : "{newName} existiert bereits", - "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei konnte nicht umbennant werden \"{fileName}\", da die Datei nicht mehr existiert", + "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei konnte nicht umbenannt werden \"{fileName}\", da die Datei nicht mehr existiert", "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name „{targetName}“ wird bereits im Ordner „{dir}“ benutzt. Bitte wählen Sie einen anderen Namen.", "Could not rename \"{fileName}\"" : "Die Datei konnte nicht umbenannt werden \"{fileName}\"", "Could not create file \"{file}\"" : "Die Datei konnte nicht erstellt werden \"{file}\"", "Could not create file \"{file}\" because it already exists" : "Die Datei konnte nicht erstellt werden \"{file}\", da diese bereits existiert", "Could not create folder \"{dir}\"" : "Der Ordner konnte nicht erstellt werden \"{dir}\"", "Could not create folder \"{dir}\" because it already exists" : "Der Ordner konnte nicht erstellt werden \"{dir}\", da dieser bereits existiert", - "Error deleting file \"{fileName}\"." : "Fehler beim löschen der Datei \"{fileName}\".", + "Error deleting file \"{fileName}\"." : "Fehler beim Löschen der Datei \"{fileName}\".", "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein", "Name" : "Name", "Size" : "Größe", @@ -94,7 +95,7 @@ "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", - "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen auf Ihre <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Benachrichtigungen über Neues und Änderungen zu Ihren <strong>favorisierten Dateien</strong> beschränken <em>(nur im Stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", "A file or folder has been <strong>restored</strong>" : "Eine Datei oder ein Ordner wurde <strong>wiederhergestellt</strong>", "You created %1$s" : "Sie haben %1$s erstellt", @@ -107,19 +108,19 @@ "You restored %1$s" : "Sie haben %1$s wiederhergestellt", "%2$s restored %1$s" : "%2$s wiederhergestellt %1$s", "Changed by %2$s" : "Geändert von %2$s", - "Deleted by %2$s" : "Gelöscht durch %2$s", - "Restored by %2$s" : "Wiederhergestellt durch %2$s", + "Deleted by %2$s" : "Gelöscht von %2$s", + "Restored by %2$s" : "Wiederhergestellt von %2$s", "Upload (max. %s)" : "Hochladen (max. %s)", "File handling" : "Dateibehandlung", "Maximum upload size" : "Maximale Upload-Größe", "max. possible: " : "maximal möglich:", "Save" : "Speichern", - "With PHP-FPM it might take 5 minutes for changes to be applied." : "Bei PHP-FPM kann es 5 Minuten dauern, bis Änderungen angewendet sind.", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Mit PHP-FPM kann es 5 Minuten dauern, bis Änderungen angewendet sind.", "Missing permissions to edit from here." : "Fehlende Berechtigungen um von hier aus zu bearbeiten.", "Settings" : "Einstellungen", "Show hidden files" : "Versteckte Dateien anzeigen", "WebDAV" : "WebDAV", - "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">über WebDAV auf Ihre Dateien zuzugreifen</a>", + "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">via WebDAV auf Ihre Dateien zuzugreifen</a>", "No files in here" : "Keine Dateien vorhanden", "Upload some content or sync with your devices!" : "Laden Sie Inhalte hoch oder synchronisieren Sie mit Ihren Geräten!", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index 7889f274a6e..6133adf35b7 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -21,6 +21,8 @@ OC.L10N.register( "Invalid directory." : "Μη έγκυρος φάκελος.", "Files" : "Αρχεία", "All files" : "Όλα τα αρχεία", + "Recent" : "Τελευταία", + "File could not be found" : "Δεν μπορεί να βρεθεί το αρχείο", "Home" : "Σπίτι", "Close" : "Κλείσιμο", "Favorites" : "Αγαπημένα", diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index 1bbec743a75..002bf7ee9d3 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -19,6 +19,8 @@ "Invalid directory." : "Μη έγκυρος φάκελος.", "Files" : "Αρχεία", "All files" : "Όλα τα αρχεία", + "Recent" : "Τελευταία", + "File could not be found" : "Δεν μπορεί να βρεθεί το αρχείο", "Home" : "Σπίτι", "Close" : "Κλείσιμο", "Favorites" : "Αγαπημένα", diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 8298218481c..d2fd386dc1c 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Directorio inválido.", "Files" : "Archivos", "All files" : "Todos los archivos", + "Recent" : "Reciente", "File could not be found" : "El archivo no se ha encontrado", "Home" : "Particular", "Close" : "Cerrar", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index d6b1e78079e..fec818805a9 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -19,6 +19,7 @@ "Invalid directory." : "Directorio inválido.", "Files" : "Archivos", "All files" : "Todos los archivos", + "Recent" : "Reciente", "File could not be found" : "El archivo no se ha encontrado", "Home" : "Particular", "Close" : "Cerrar", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 49f5204c977..cd725b01164 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Dossier non valide.", "Files" : "Fichiers", "All files" : "Tous les fichiers", + "Recent" : "Récent", "File could not be found" : "Ce fichier n'a pu être trouvé.", "Home" : "Mes fichiers", "Close" : "Fermer", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index e0b5dba2186..60c7a374bd8 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -19,6 +19,7 @@ "Invalid directory." : "Dossier non valide.", "Files" : "Fichiers", "All files" : "Tous les fichiers", + "Recent" : "Récent", "File could not be found" : "Ce fichier n'a pu être trouvé.", "Home" : "Mes fichiers", "Close" : "Fermer", diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index a036c546c07..368367bc51e 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -21,6 +21,8 @@ OC.L10N.register( "Invalid directory." : "Direktori tidak valid.", "Files" : "Berkas", "All files" : "Semua berkas", + "Recent" : "Terbaru", + "File could not be found" : "Berkas tidak ditemukan", "Home" : "Rumah", "Close" : "Tutup", "Favorites" : "Favorit", @@ -28,8 +30,19 @@ OC.L10N.register( "Unable to upload {filename} as it is a directory or has 0 bytes" : "Tidak dapat mengunggah {filename} karena ini sebuah direktori atau memiliki ukuran 0 byte", "Total file size {size1} exceeds upload limit {size2}" : "Jumlah ukuran berkas {size1} melampaui batas unggah {size2}", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Ruang bebas tidak mencukupi, Anda mengunggah {size1} tetapi hanya {size2} yang tersisa", + "Error uploading file \"{fileName}\": {message}" : "Kesalahan saat mengunggah \"{filename}\": {message}", "Could not get result from server." : "Tidak mendapatkan hasil dari server.", "Uploading..." : "Mengunggah...", + "..." : "...", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Masih {hours}:{minutes}:{seconds} lagi", + "{hours}:{minutes}h" : "{hours}:{minutes}j", + "{minutes}:{seconds} minute{plural_s} left" : "Masih {minutes}:{seconds} lagi", + "{minutes}:{seconds}m" : "{minutes}:{seconds}m", + "{seconds} second{plural_s} left" : "Masih {seconds} detik lagi", + "{seconds}s" : "{seconds}d", + "Any moment now..." : "Sedikit lagi...", + "Soon..." : "Segera...", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} dari {totalSize} ({bitrate})", "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.", "Actions" : "Tindakan", "Download" : "Unduh", @@ -43,6 +56,17 @@ OC.L10N.register( "Unable to determine date" : "Tidak dapat menentukan tanggal", "This operation is forbidden" : "Operasi ini dilarang", "This directory is unavailable, please check the logs or contact the administrator" : "Direktori ini tidak tersedia, silakan periksa log atau hubungi kontak", + "Could not move \"{file}\", target exists" : "Tidak dapat memindahkan \"{file}\", sudah ada", + "Could not move \"{file}\"" : "Tidak dapat memindahkan \"{file}\"", + "{newName} already exists" : "{newName} sudah ada", + "Could not rename \"{fileName}\", it does not exist any more" : "Tidak dapat mengganti \"{fileName}\", tidak ada lagi", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nama \"{targetName}\" sudah digunakan di folder \"{dir}\". Gunakan nama yang lain.", + "Could not rename \"{fileName}\"" : "Tidak dapat mengganti \"{fileName}\"", + "Could not create file \"{file}\"" : "Tidak dapat membuat berkas \"{file}\"", + "Could not create file \"{file}\" because it already exists" : "Tidak dapat membuat berkas \"{file}\" karena sudah ada", + "Could not create folder \"{dir}\"" : "Tidak dapat membuat folder \"{dir}\"", + "Could not create folder \"{dir}\" because it already exists" : "Tidak dapat membuat folder \"{dir}\" karena sudah ada", + "Error deleting file \"{fileName}\"." : "Terjadi kesalahan saat menghapus berkas \"{fileName}\".", "No entries in this folder match '{filter}'" : "Tidak ada entri di folder ini yang cocok dengan '{filter}'", "Name" : "Nama", "Size" : "Ukuran", @@ -60,10 +84,12 @@ OC.L10N.register( "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Penyimpanan {owner} hampir penuh ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["cocok dengan '{filter}'"], + "View in folder" : "Lihat dalam folder", "Path" : "Jalur", "_%n byte_::_%n bytes_" : ["%n byte"], "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "Local link" : "Pranala lokal", "Folder" : "Folder", "New folder" : "Map baru", "{newname} already exists" : "{newname} sudah ada", @@ -91,8 +117,12 @@ OC.L10N.register( "Maximum upload size" : "Ukuran pengunggahan maksimum", "max. possible: " : "Kemungkinan maks.:", "Save" : "Simpan", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Dengan PHP-FPM, pengubahan dapat memakan waktu 5 menit.", + "Missing permissions to edit from here." : "Tidak ada izin untuk mengubah dari sini.", "Settings" : "Pengaturan", + "Show hidden files" : "Lihat berkas tersembunyi", "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">mengakses berkas Anda melalui WebDAV</a>", "No files in here" : "Tidak ada berkas disini", "Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index 8a0c3e825cb..6639be657e7 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -19,6 +19,8 @@ "Invalid directory." : "Direktori tidak valid.", "Files" : "Berkas", "All files" : "Semua berkas", + "Recent" : "Terbaru", + "File could not be found" : "Berkas tidak ditemukan", "Home" : "Rumah", "Close" : "Tutup", "Favorites" : "Favorit", @@ -26,8 +28,19 @@ "Unable to upload {filename} as it is a directory or has 0 bytes" : "Tidak dapat mengunggah {filename} karena ini sebuah direktori atau memiliki ukuran 0 byte", "Total file size {size1} exceeds upload limit {size2}" : "Jumlah ukuran berkas {size1} melampaui batas unggah {size2}", "Not enough free space, you are uploading {size1} but only {size2} is left" : "Ruang bebas tidak mencukupi, Anda mengunggah {size1} tetapi hanya {size2} yang tersisa", + "Error uploading file \"{fileName}\": {message}" : "Kesalahan saat mengunggah \"{filename}\": {message}", "Could not get result from server." : "Tidak mendapatkan hasil dari server.", "Uploading..." : "Mengunggah...", + "..." : "...", + "{hours}:{minutes}:{seconds} hour{plural_s} left" : "Masih {hours}:{minutes}:{seconds} lagi", + "{hours}:{minutes}h" : "{hours}:{minutes}j", + "{minutes}:{seconds} minute{plural_s} left" : "Masih {minutes}:{seconds} lagi", + "{minutes}:{seconds}m" : "{minutes}:{seconds}m", + "{seconds} second{plural_s} left" : "Masih {seconds} detik lagi", + "{seconds}s" : "{seconds}d", + "Any moment now..." : "Sedikit lagi...", + "Soon..." : "Segera...", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} dari {totalSize} ({bitrate})", "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.", "Actions" : "Tindakan", "Download" : "Unduh", @@ -41,6 +54,17 @@ "Unable to determine date" : "Tidak dapat menentukan tanggal", "This operation is forbidden" : "Operasi ini dilarang", "This directory is unavailable, please check the logs or contact the administrator" : "Direktori ini tidak tersedia, silakan periksa log atau hubungi kontak", + "Could not move \"{file}\", target exists" : "Tidak dapat memindahkan \"{file}\", sudah ada", + "Could not move \"{file}\"" : "Tidak dapat memindahkan \"{file}\"", + "{newName} already exists" : "{newName} sudah ada", + "Could not rename \"{fileName}\", it does not exist any more" : "Tidak dapat mengganti \"{fileName}\", tidak ada lagi", + "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Nama \"{targetName}\" sudah digunakan di folder \"{dir}\". Gunakan nama yang lain.", + "Could not rename \"{fileName}\"" : "Tidak dapat mengganti \"{fileName}\"", + "Could not create file \"{file}\"" : "Tidak dapat membuat berkas \"{file}\"", + "Could not create file \"{file}\" because it already exists" : "Tidak dapat membuat berkas \"{file}\" karena sudah ada", + "Could not create folder \"{dir}\"" : "Tidak dapat membuat folder \"{dir}\"", + "Could not create folder \"{dir}\" because it already exists" : "Tidak dapat membuat folder \"{dir}\" karena sudah ada", + "Error deleting file \"{fileName}\"." : "Terjadi kesalahan saat menghapus berkas \"{fileName}\".", "No entries in this folder match '{filter}'" : "Tidak ada entri di folder ini yang cocok dengan '{filter}'", "Name" : "Nama", "Size" : "Ukuran", @@ -58,10 +82,12 @@ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Penyimpanan {owner} hampir penuh ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Ruang penyimpanan hampir penuh ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["cocok dengan '{filter}'"], + "View in folder" : "Lihat dalam folder", "Path" : "Jalur", "_%n byte_::_%n bytes_" : ["%n byte"], "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "Local link" : "Pranala lokal", "Folder" : "Folder", "New folder" : "Map baru", "{newname} already exists" : "{newname} sudah ada", @@ -89,8 +115,12 @@ "Maximum upload size" : "Ukuran pengunggahan maksimum", "max. possible: " : "Kemungkinan maks.:", "Save" : "Simpan", + "With PHP-FPM it might take 5 minutes for changes to be applied." : "Dengan PHP-FPM, pengubahan dapat memakan waktu 5 menit.", + "Missing permissions to edit from here." : "Tidak ada izin untuk mengubah dari sini.", "Settings" : "Pengaturan", + "Show hidden files" : "Lihat berkas tersembunyi", "WebDAV" : "WebDAV", + "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">mengakses berkas Anda melalui WebDAV</a>", "No files in here" : "Tidak ada berkas disini", "Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index 579ac88f97f..989dc468f0c 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -21,6 +21,8 @@ OC.L10N.register( "Invalid directory." : "Ógild mappa.", "Files" : "Skrár", "All files" : "Allar skrár", + "Recent" : "Nýlegt", + "File could not be found" : "Skrá finnst ekki", "Home" : "Heim", "Close" : "Loka", "Favorites" : "Eftirlæti", @@ -82,6 +84,7 @@ OC.L10N.register( "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Geymslupláss {owner} er næstum fullt ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Geymsluplássið þitt er næstum fullt ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["samsvarar '{filter}'","samsvara '{filter}'"], + "View in folder" : "Skoða í möppu", "Path" : "Slóð", "_%n byte_::_%n bytes_" : ["%n bæti","%n bæti"], "Favorited" : "Sett í eftirlæti", diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index 2b4f980ca6d..65da27622f8 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -19,6 +19,8 @@ "Invalid directory." : "Ógild mappa.", "Files" : "Skrár", "All files" : "Allar skrár", + "Recent" : "Nýlegt", + "File could not be found" : "Skrá finnst ekki", "Home" : "Heim", "Close" : "Loka", "Favorites" : "Eftirlæti", @@ -80,6 +82,7 @@ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Geymslupláss {owner} er næstum fullt ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Geymsluplássið þitt er næstum fullt ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["samsvarar '{filter}'","samsvara '{filter}'"], + "View in folder" : "Skoða í möppu", "Path" : "Slóð", "_%n byte_::_%n bytes_" : ["%n bæti","%n bæti"], "Favorited" : "Sett í eftirlæti", diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index e5d5af78da8..363419c3643 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -6,12 +6,12 @@ OC.L10N.register( "Unknown error" : "Errore sconosciuto", "Unable to set upload directory." : "Impossibile impostare una cartella di caricamento.", "Invalid Token" : "Token non valido", - "No file was uploaded. Unknown error" : "Nessun file è stato caricato. Errore sconosciuto", + "No file was uploaded. Unknown error" : "Non è stato caricato alcun file. Errore sconosciuto", "There is no error, the file uploaded with success" : "Non ci sono errori, il file è stato caricato correttamente", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Il file caricato supera la direttiva upload_max_filesize in php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file caricato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML", "The uploaded file was only partially uploaded" : "Il file è stato caricato solo parzialmente", - "No file was uploaded" : "Nessun file è stato caricato", + "No file was uploaded" : "Non è stato caricato alcun file", "Missing a temporary folder" : "Manca una cartella temporanea", "Failed to write to disk" : "Scrittura su disco non riuscita", "Not enough storage available" : "Spazio di archiviazione insufficiente", @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Cartella non valida.", "Files" : "File", "All files" : "Tutti i file", + "Recent" : "Recenti", "File could not be found" : "Il file non può essere trovato", "Home" : "Home", "Close" : "Chiudi", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index ee54db3a21f..16571b6bd98 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -4,12 +4,12 @@ "Unknown error" : "Errore sconosciuto", "Unable to set upload directory." : "Impossibile impostare una cartella di caricamento.", "Invalid Token" : "Token non valido", - "No file was uploaded. Unknown error" : "Nessun file è stato caricato. Errore sconosciuto", + "No file was uploaded. Unknown error" : "Non è stato caricato alcun file. Errore sconosciuto", "There is no error, the file uploaded with success" : "Non ci sono errori, il file è stato caricato correttamente", "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Il file caricato supera la direttiva upload_max_filesize in php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Il file caricato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML", "The uploaded file was only partially uploaded" : "Il file è stato caricato solo parzialmente", - "No file was uploaded" : "Nessun file è stato caricato", + "No file was uploaded" : "Non è stato caricato alcun file", "Missing a temporary folder" : "Manca una cartella temporanea", "Failed to write to disk" : "Scrittura su disco non riuscita", "Not enough storage available" : "Spazio di archiviazione insufficiente", @@ -19,6 +19,7 @@ "Invalid directory." : "Cartella non valida.", "Files" : "File", "All files" : "Tutti i file", + "Recent" : "Recenti", "File could not be found" : "Il file non può essere trovato", "Home" : "Home", "Close" : "Chiudi", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index b74320ab7e5..afe80ac40ef 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -8,7 +8,7 @@ OC.L10N.register( "Invalid Token" : "Ongeldig Token", "No file was uploaded. Unknown error" : "Er was geen bestand geladen. Onbekende fout", "There is no error, the file uploaded with success" : "Het bestand is succesvol geüpload.", - "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:", + "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Het geüploade bestand overschrijdt de upload_max_filesize optie in php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Het bestand overschrijdt de MAX_FILE_SIZE instelling die is opgegeven in het HTML formulier", "The uploaded file was only partially uploaded" : "Het bestand is slechts gedeeltelijk geüpload", "No file was uploaded" : "Er is geen bestand geüpload", @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Ongeldige directory.", "Files" : "Bestanden", "All files" : "Alle bestanden", + "Recent" : "Recent", "File could not be found" : "Bestand kon niet worden gevonden", "Home" : "Thuis", "Close" : "Sluiten", @@ -73,7 +74,7 @@ OC.L10N.register( "_%n folder_::_%n folders_" : ["%n map","%n mappen"], "_%n file_::_%n files_" : ["%n bestand","%n bestanden"], "{dirs} and {files}" : "{dirs} en {files}", - "You don’t have permission to upload or create files here" : "U hebt geen toestemming om hier te uploaden of bestanden te maken", + "You don’t have permission to upload or create files here" : "Je hebt geen toestemming om hier te uploaden of bestanden te maken", "_Uploading %n file_::_Uploading %n files_" : ["%n bestand aan het uploaden","%n bestanden aan het uploaden"], "New" : "Nieuw", "\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.", @@ -96,7 +97,7 @@ OC.L10N.register( "An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de tags bij te werken", "A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>", "A file or folder has been <strong>changed</strong>" : "Een bestand of map is <strong>gewijzigd</strong>", - "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan uw <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan je <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Een bestand of map is <strong>verwijderd</strong>", "A file or folder has been <strong>restored</strong>" : "Een bestand of een map is <strong>hersteld</strong>", "You created %1$s" : "Gecreëerd: %1$s", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index 5084d601689..b66089f59d1 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -6,7 +6,7 @@ "Invalid Token" : "Ongeldig Token", "No file was uploaded. Unknown error" : "Er was geen bestand geladen. Onbekende fout", "There is no error, the file uploaded with success" : "Het bestand is succesvol geüpload.", - "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:", + "The uploaded file exceeds the upload_max_filesize directive in php.ini: " : "Het geüploade bestand overschrijdt de upload_max_filesize optie in php.ini:", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Het bestand overschrijdt de MAX_FILE_SIZE instelling die is opgegeven in het HTML formulier", "The uploaded file was only partially uploaded" : "Het bestand is slechts gedeeltelijk geüpload", "No file was uploaded" : "Er is geen bestand geüpload", @@ -19,6 +19,7 @@ "Invalid directory." : "Ongeldige directory.", "Files" : "Bestanden", "All files" : "Alle bestanden", + "Recent" : "Recent", "File could not be found" : "Bestand kon niet worden gevonden", "Home" : "Thuis", "Close" : "Sluiten", @@ -71,7 +72,7 @@ "_%n folder_::_%n folders_" : ["%n map","%n mappen"], "_%n file_::_%n files_" : ["%n bestand","%n bestanden"], "{dirs} and {files}" : "{dirs} en {files}", - "You don’t have permission to upload or create files here" : "U hebt geen toestemming om hier te uploaden of bestanden te maken", + "You don’t have permission to upload or create files here" : "Je hebt geen toestemming om hier te uploaden of bestanden te maken", "_Uploading %n file_::_Uploading %n files_" : ["%n bestand aan het uploaden","%n bestanden aan het uploaden"], "New" : "Nieuw", "\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.", @@ -94,7 +95,7 @@ "An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de tags bij te werken", "A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>", "A file or folder has been <strong>changed</strong>" : "Een bestand of map is <strong>gewijzigd</strong>", - "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan uw <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>", + "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Beperk meldingen over aanmaken en wijzigen aan je <strong>favoriete bestanden</strong> <em>(Alleen stream)</em>", "A file or folder has been <strong>deleted</strong>" : "Een bestand of map is <strong>verwijderd</strong>", "A file or folder has been <strong>restored</strong>" : "Een bestand of een map is <strong>hersteld</strong>", "You created %1$s" : "Gecreëerd: %1$s", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index ab1ad524f5e..13cee46110b 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Diretório inválido.", "Files" : "Arquivos", "All files" : "Todos os arquivos", + "Recent" : "Recente", "File could not be found" : "O arquivo não foi encontrado", "Home" : "Home", "Close" : "Fechar", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 14994bdd2fb..6d50bc793a1 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -19,6 +19,7 @@ "Invalid directory." : "Diretório inválido.", "Files" : "Arquivos", "All files" : "Todos os arquivos", + "Recent" : "Recente", "File could not be found" : "O arquivo não foi encontrado", "Home" : "Home", "Close" : "Fechar", diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index 178aff17bbe..bbeaa1ebe51 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Неверный каталог.", "Files" : "Файлы", "All files" : "Все файлы", + "Recent" : "Недавний", "File could not be found" : "Файл не может быть найден", "Home" : "Главная", "Close" : "Закрыть", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index d0e4617928d..bd4e555203e 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -19,6 +19,7 @@ "Invalid directory." : "Неверный каталог.", "Files" : "Файлы", "All files" : "Все файлы", + "Recent" : "Недавний", "File could not be found" : "Файл не может быть найден", "Home" : "Главная", "Close" : "Закрыть", diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index 3ce89c9b5a6..0e36dc0a164 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -21,6 +21,7 @@ OC.L10N.register( "Invalid directory." : "Geçersiz dizin.", "Files" : "Dosyalar", "All files" : "Tüm dosyalar", + "Recent" : "Son", "File could not be found" : "Dosya bulunamadı", "Home" : "Ev", "Close" : "Kapat", @@ -39,7 +40,9 @@ OC.L10N.register( "{minutes}:{seconds}m" : "{minutes}:{seconds} dk", "{seconds} second{plural_s} left" : "{seconds} saniye kaldı", "{seconds}s" : "{seconds} saniye", + "Any moment now..." : "Hemen şimdi...", "Soon..." : "Yakında...", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.", "Actions" : "Eylemler", "Download" : "İndir", @@ -81,6 +84,7 @@ OC.L10N.register( "Storage of {owner} is almost full ({usedSpacePercent}%)" : " {owner} depolama alanı neredeyse dolu ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' ile eşleşiyor","'{filter}' ile eşleşiyor"], + "View in folder" : "Klasörde göster", "Path" : "Yol", "_%n byte_::_%n bytes_" : ["%n bayt","%n bayt"], "Favorited" : "Sık kullanılanlara eklendi", diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index 4a005cfa525..feda086b524 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -19,6 +19,7 @@ "Invalid directory." : "Geçersiz dizin.", "Files" : "Dosyalar", "All files" : "Tüm dosyalar", + "Recent" : "Son", "File could not be found" : "Dosya bulunamadı", "Home" : "Ev", "Close" : "Kapat", @@ -37,7 +38,9 @@ "{minutes}:{seconds}m" : "{minutes}:{seconds} dk", "{seconds} second{plural_s} left" : "{seconds} saniye kaldı", "{seconds}s" : "{seconds} saniye", + "Any moment now..." : "Hemen şimdi...", "Soon..." : "Yakında...", + "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} / {totalSize} ({bitrate})", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.", "Actions" : "Eylemler", "Download" : "İndir", @@ -79,6 +82,7 @@ "Storage of {owner} is almost full ({usedSpacePercent}%)" : " {owner} depolama alanı neredeyse dolu ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' ile eşleşiyor","'{filter}' ile eşleşiyor"], + "View in folder" : "Klasörde göster", "Path" : "Yol", "_%n byte_::_%n bytes_" : ["%n bayt","%n bayt"], "Favorited" : "Sık kullanılanlara eklendi", diff --git a/apps/files/lib/AppInfo/Application.php b/apps/files/lib/AppInfo/Application.php index fac8e3a3a4b..fc91e05ba7e 100644 --- a/apps/files/lib/AppInfo/Application.php +++ b/apps/files/lib/AppInfo/Application.php @@ -47,7 +47,8 @@ class Application extends App { $c->query('TagService'), $server->getPreviewManager(), $server->getShareManager(), - $server->getConfig() + $server->getConfig(), + $server->getUserFolder() ); }); diff --git a/apps/files/lib/Controller/ApiController.php b/apps/files/lib/Controller/ApiController.php index 57eb43bbe9c..7ce83bfca15 100644 --- a/apps/files/lib/Controller/ApiController.php +++ b/apps/files/lib/Controller/ApiController.php @@ -31,6 +31,7 @@ namespace OCA\Files\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Controller; +use OCP\Files\Folder; use OCP\IConfig; use OCP\IRequest; use OCP\AppFramework\Http\DataResponse; @@ -39,7 +40,7 @@ use OCP\AppFramework\Http\Response; use OCA\Files\Service\TagService; use OCP\IPreview; use OCP\Share\IManager; -use OCP\Files\Node; +use OC\Files\Node\Node; use OCP\IUserSession; /** @@ -58,12 +59,18 @@ class ApiController extends Controller { private $userSession; /** IConfig */ private $config; + /** @var Folder */ + private $userFolder; /** * @param string $appName * @param IRequest $request + * @param IUserSession $userSession * @param TagService $tagService * @param IPreview $previewManager + * @param IManager $shareManager + * @param IConfig $config + * @param Folder $userFolder */ public function __construct($appName, IRequest $request, @@ -71,13 +78,15 @@ class ApiController extends Controller { TagService $tagService, IPreview $previewManager, IManager $shareManager, - IConfig $config) { + IConfig $config, + Folder $userFolder) { parent::__construct($appName, $request); $this->userSession = $userSession; $this->tagService = $tagService; $this->previewManager = $previewManager; $this->shareManager = $shareManager; $this->config = $config; + $this->userFolder = $userFolder; } /** @@ -143,6 +152,28 @@ class ApiController extends Controller { } /** + * @param \OCP\Files\Node[] $nodes + * @return array + */ + private function formatNodes(array $nodes) { + return array_values(array_map(function (Node $node) { + /** @var \OC\Files\Node\Node $shareTypes */ + $shareTypes = $this->getShareTypes($node); + $file = \OCA\Files\Helper::formatFileInfo($node->getFileInfo()); + $parts = explode('/', dirname($node->getPath()), 4); + if (isset($parts[3])) { + $file['path'] = '/' . $parts[3]; + } else { + $file['path'] = '/'; + } + if (!empty($shareTypes)) { + $file['shareTypes'] = $shareTypes; + } + return $file; + }, $nodes)); + } + + /** * Returns a list of all files tagged with the given tag. * * @NoAdminRequired @@ -151,28 +182,28 @@ class ApiController extends Controller { * @return DataResponse */ public function getFilesByTag($tagName) { - $files = array(); $nodes = $this->tagService->getFilesByTag($tagName); - foreach ($nodes as &$node) { - $shareTypes = $this->getShareTypes($node); - $fileInfo = $node->getFileInfo(); - $file = \OCA\Files\Helper::formatFileInfo($fileInfo); - $parts = explode('/', dirname($fileInfo->getPath()), 4); - if(isset($parts[3])) { - $file['path'] = '/' . $parts[3]; - } else { - $file['path'] = '/'; - } + $files = $this->formatNodes($nodes); + foreach ($files as &$file) { $file['tags'] = [$tagName]; - if (!empty($shareTypes)) { - $file['shareTypes'] = $shareTypes; - } - $files[] = $file; } return new DataResponse(['files' => $files]); } /** + * Returns a list of recently modifed files. + * + * @NoAdminRequired + * + * @return DataResponse + */ + public function getRecentFiles() { + $nodes = $this->userFolder->getRecent(100); + $files = $this->formatNodes($nodes); + return new DataResponse(['files' => $files]); + } + + /** * Return a list of share types for outgoing shares * * @param Node $node file node diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php index 5e342e6589b..9dbe06ff789 100644 --- a/apps/files/lib/Controller/ViewController.php +++ b/apps/files/lib/Controller/ViewController.php @@ -173,9 +173,11 @@ class ViewController extends Controller { \OCP\Util::addscript('files', 'search'); \OCP\Util::addScript('files', 'favoritesfilelist'); + \OCP\Util::addScript('files', 'recentfilelist'); \OCP\Util::addScript('files', 'tagsplugin'); \OCP\Util::addScript('files', 'gotoplugin'); \OCP\Util::addScript('files', 'favoritesplugin'); + \OCP\Util::addScript('files', 'recentplugin'); \OCP\Util::addScript('files', 'detailfileinfoview'); \OCP\Util::addScript('files', 'sidebarpreviewmanager'); diff --git a/apps/files/recentlist.php b/apps/files/recentlist.php new file mode 100644 index 00000000000..1976be4894a --- /dev/null +++ b/apps/files/recentlist.php @@ -0,0 +1,7 @@ +<?php +// Check if we are a user +OCP\User::checkLoggedIn(); + +$tmpl = new OCP\Template('files', 'recentlist', ''); + +$tmpl->printPage(); diff --git a/apps/files/templates/recentlist.php b/apps/files/templates/recentlist.php new file mode 100644 index 00000000000..1667eb4cc8d --- /dev/null +++ b/apps/files/templates/recentlist.php @@ -0,0 +1,42 @@ +<?php /** @var $l OC_L10N */ ?> +<div id='notification'></div> + +<div id="emptycontent" class="hidden"></div> + +<input type="hidden" name="dir" value="" id="dir"> + +<div class="nofilterresults hidden"> + <div class="icon-search"></div> + <h2><?php p($l->t('No entries found in this folder')); ?></h2> + <p></p> +</div> + +<table id="filestable"> + <thead> + <tr> + <th id='headerName' class="hidden column-name"> + <div id="headerName-container"> + <a class="name sort columntitle" + data-sort="name"><span><?php p($l->t('Name')); ?></span></a> + </div> + </th> + <th id="headerSize" class="hidden column-size"> + <a class="size sort columntitle" + data-sort="size"><span><?php p($l->t('Size')); ?></span></a> + </th> + <th id="headerDate" class="hidden column-mtime"> + <a id="modified" class="columntitle" + data-sort="mtime"><span><?php p($l->t('Modified')); ?></span><span + class="sort-indicator"></span></a> + <span class="selectedActions"><a href="" class="delete-selected"> + <span><?php p($l->t('Delete')) ?></span> + <span class="icon icon-delete"></span> + </a></span> + </th> + </tr> + </thead> + <tbody id="fileList"> + </tbody> + <tfoot> + </tfoot> +</table> diff --git a/apps/files/tests/Controller/ApiControllerTest.php b/apps/files/tests/Controller/ApiControllerTest.php index 1d39c88021b..348150e0e08 100644 --- a/apps/files/tests/Controller/ApiControllerTest.php +++ b/apps/files/tests/Controller/ApiControllerTest.php @@ -59,6 +59,8 @@ class ApiControllerTest extends TestCase { private $shareManager; /** @var \OCP\IConfig */ private $config; + /** @var \OC\Files\Node\Folder */ + private $userFolder; public function setUp() { $this->request = $this->getMockBuilder('\OCP\IRequest') @@ -82,6 +84,9 @@ class ApiControllerTest extends TestCase { ->disableOriginalConstructor() ->getMock(); $this->config = $this->getMock('\OCP\IConfig'); + $this->userFolder = $this->getMockBuilder('\OC\Files\Node\Folder') + ->disableOriginalConstructor() + ->getMock(); $this->apiController = new ApiController( $this->appName, @@ -90,7 +95,8 @@ class ApiControllerTest extends TestCase { $this->tagService, $this->preview, $this->shareManager, - $this->config + $this->config, + $this->userFolder ); } diff --git a/apps/files/tests/Controller/ViewControllerTest.php b/apps/files/tests/Controller/ViewControllerTest.php index ceb48a2241f..373f8c25152 100644 --- a/apps/files/tests/Controller/ViewControllerTest.php +++ b/apps/files/tests/Controller/ViewControllerTest.php @@ -191,7 +191,16 @@ class ViewControllerTest extends TestCase { 'appname' => 'files', 'script' => 'list.php', 'order' => 0, - 'name' => new \OC_L10N_String(new \OC_L10N('files'), 'All files', []), + 'name' => (string)new \OC_L10N_String(new \OC_L10N('files'), 'All files', []), + 'active' => false, + 'icon' => '', + ], + [ + 'id' => 'recent', + 'appname' => 'files', + 'script' => 'recentlist.php', + 'order' => 2, + 'name' => (string)new \OC_L10N_String(new \OC_L10N('files'), 'Recent', []), 'active' => false, 'icon' => '', ], @@ -209,7 +218,7 @@ class ViewControllerTest extends TestCase { 'appname' => 'files_sharing', 'script' => 'list.php', 'order' => 10, - 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with you', []), + 'name' => (string)new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with you', []), 'active' => false, 'icon' => '', ], @@ -218,7 +227,7 @@ class ViewControllerTest extends TestCase { 'appname' => 'files_sharing', 'script' => 'list.php', 'order' => 15, - 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with others', []), + 'name' => (string)new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with others', []), 'active' => false, 'icon' => '', ], @@ -227,7 +236,7 @@ class ViewControllerTest extends TestCase { 'appname' => 'files_sharing', 'script' => 'list.php', 'order' => 20, - 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared by link', []), + 'name' => (string)new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared by link', []), 'active' => false, 'icon' => '', ], @@ -236,7 +245,7 @@ class ViewControllerTest extends TestCase { 'appname' => 'systemtags', 'script' => 'list.php', 'order' => 25, - 'name' => new \OC_L10N_String(new \OC_L10N('systemtags'), 'Tags', []), + 'name' => (string)new \OC_L10N_String(new \OC_L10N('systemtags'), 'Tags', []), 'active' => false, 'icon' => '', ], @@ -245,7 +254,7 @@ class ViewControllerTest extends TestCase { 'appname' => 'files_trashbin', 'script' => 'list.php', 'order' => 50, - 'name' => new \OC_L10N_String(new \OC_L10N('files_trashbin'), 'Deleted files', []), + 'name' => (string)new \OC_L10N_String(new \OC_L10N('files_trashbin'), 'Deleted files', []), 'active' => false, 'icon' => '', ], @@ -273,6 +282,10 @@ class ViewControllerTest extends TestCase { 'content' => null, ], [ + 'id' => 'recent', + 'content' => null, + ], + [ 'id' => 'favorites', 'content' => null, ], diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index 98511fd3d64..651ba6eef1e 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -1792,7 +1792,8 @@ describe('OCA.Files.FileList tests', function() { type: 'file', size: 12, etag: 'abc', - permissions: OC.PERMISSION_ALL + permissions: OC.PERMISSION_ALL, + hasPreview: true }); expect(files[1]).toEqual({ id: 3, @@ -1802,7 +1803,8 @@ describe('OCA.Files.FileList tests', function() { mtime: 234560000, size: 58009, etag: '123', - permissions: OC.PERMISSION_ALL + permissions: OC.PERMISSION_ALL, + hasPreview: true }); expect(files[2]).toEqual({ id: 4, @@ -1812,7 +1814,8 @@ describe('OCA.Files.FileList tests', function() { mtime: 134560000, size: 250, etag: '456', - permissions: OC.PERMISSION_ALL + permissions: OC.PERMISSION_ALL, + hasPreview: true }); expect(files[0].id).toEqual(1); expect(files[0].name).toEqual('One.txt'); @@ -1833,7 +1836,8 @@ describe('OCA.Files.FileList tests', function() { type: 'file', size: 12, etag: 'abc', - permissions: OC.PERMISSION_ALL + permissions: OC.PERMISSION_ALL, + hasPreview: true }); expect(files[1]).toEqual({ id: 4, @@ -1843,7 +1847,8 @@ describe('OCA.Files.FileList tests', function() { mtime: 134560000, size: 250, etag: '456', - permissions: OC.PERMISSION_ALL + permissions: OC.PERMISSION_ALL, + hasPreview: true }); }); describe('Download', function() { @@ -2058,6 +2063,7 @@ describe('OCA.Files.FileList tests', function() { expect(fileList._detailsView.getFileInfo()).toEqual(null); }); it('closes sidebar whenever the currently highlighted file was removed from the list', function() { + jQuery.fx.off = true; var $tr = fileList.findFileEl('One.txt'); $tr.find('td.filename>a.name').click(); expect($tr.hasClass('highlighted')).toEqual(true); @@ -2067,6 +2073,7 @@ describe('OCA.Files.FileList tests', function() { expect($('#app-sidebar').hasClass('disappear')).toEqual(false); fileList.remove('One.txt'); expect($('#app-sidebar').hasClass('disappear')).toEqual(true); + jQuery.fx.off = false; }); it('returns the currently selected model instance when calling getModelForFile', function() { var $tr = fileList.findFileEl('One.txt'); @@ -2083,12 +2090,14 @@ describe('OCA.Files.FileList tests', function() { expect(model3).toEqual(model1); }); it('closes the sidebar when switching folders', function() { + jQuery.fx.off = true; var $tr = fileList.findFileEl('One.txt'); $tr.find('td.filename>a.name').click(); expect($('#app-sidebar').hasClass('disappear')).toEqual(false); fileList.changeDirectory('/another'); expect($('#app-sidebar').hasClass('disappear')).toEqual(true); + jQuery.fx.off = false; }); }); describe('File actions', function() { diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml index e8bf11498ae..43f06d60843 100644 --- a/apps/files_external/appinfo/info.xml +++ b/apps/files_external/appinfo/info.xml @@ -13,7 +13,7 @@ <admin>admin-external-storage</admin> </documentation> <rememberlogin>false</rememberlogin> - <version>1.0.0</version> + <version>1.1.0</version> <types> <filesystem/> </types> diff --git a/apps/files_external/css/settings.css b/apps/files_external/css/settings.css index 6dfb012b15e..4d5dc69a4e7 100644 --- a/apps/files_external/css/settings.css +++ b/apps/files_external/css/settings.css @@ -68,23 +68,23 @@ td.mountPoint, td.backend { width:160px; } padding-left: 25px; } -#body-settings .select2-results .select2-result-label { +.files-external-select2 .select2-results .select2-result-label { height: 32px; padding: 3px; } -.select2-results .select2-result-label > span { +.files-external-select2 .select2-results .select2-result-label > span { display: block; position: relative; } -.select2-results .select2-result-label .avatardiv { +.files-external-select2 .select2-results .select2-result-label .avatardiv { display:inline-block; } -.select2-results .select2-result-label .avatardiv + span { +.files-external-select2 .select2-results .select2-result-label .avatardiv + span { position: absolute; top: 5px; margin-left: 10px; } -.select2-results .select2-result-label .avatardiv[data-type="group"] + span { +.files-external-select2 .select2-results .select2-result-label .avatardiv[data-type="group"] + span { vertical-align: top; top: 6px; position: absolute; diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index 921bf92e775..fc6edefc648 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -93,6 +93,7 @@ function addSelect2 ($elements, userListLimit) { placeholder: t('files_external', 'All users. Type to select user or group.'), allowClear: true, multiple: true, + dropdownCssClass: 'files-external-select2', //minimumInputLength: 1, ajax: { url: OC.generateUrl('apps/files_external/applicable'), diff --git a/apps/files_external/l10n/de.js b/apps/files_external/l10n/de.js index fe270757b02..615cde01d3f 100644 --- a/apps/files_external/l10n/de.js +++ b/apps/files_external/l10n/de.js @@ -12,7 +12,7 @@ OC.L10N.register( "Personal" : "Persönlich", "System" : "System", "Grant access" : "Zugriff gestatten", - "Error configuring OAuth1" : "Fehler beim konfigurieren von OAuth1", + "Error configuring OAuth1" : "Fehler beim Konfigurieren von OAuth1", "Error configuring OAuth2" : "Fehler beim Einrichten von OAuth2", "Generate keys" : "Schlüssel erzeugen", "Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares", @@ -23,7 +23,7 @@ OC.L10N.register( "Saved" : "Gespeichert", "Saving..." : "Speichern…", "Save" : "Speichern", - "Empty response from the server" : "leere Antowrt vom Server", + "Empty response from the server" : "leere Antwort vom Server", "Couldn't access. Please logout and login to activate this mount point" : "Anmeldung nicht möglich. Bitte abmelden und erneut anmelden, damit von diesem Endpunkt zugegriffen werden kann.", "Couldn't get the information from the ownCloud server: {code} {type}" : "Es konnten keine Informationen aus dem ownCloud -Server gelesen werden: {code} {type}", "Couldn't get the list of external mount points: {type}" : "Die Liste der externen Endpunkte konnte nicht empfangen werden: {type}", diff --git a/apps/files_external/l10n/de.json b/apps/files_external/l10n/de.json index 761a2e39cea..19ae5d01301 100644 --- a/apps/files_external/l10n/de.json +++ b/apps/files_external/l10n/de.json @@ -10,7 +10,7 @@ "Personal" : "Persönlich", "System" : "System", "Grant access" : "Zugriff gestatten", - "Error configuring OAuth1" : "Fehler beim konfigurieren von OAuth1", + "Error configuring OAuth1" : "Fehler beim Konfigurieren von OAuth1", "Error configuring OAuth2" : "Fehler beim Einrichten von OAuth2", "Generate keys" : "Schlüssel erzeugen", "Error generating key pair" : "Fehler beim Erzeugen des Schlüsselpaares", @@ -21,7 +21,7 @@ "Saved" : "Gespeichert", "Saving..." : "Speichern…", "Save" : "Speichern", - "Empty response from the server" : "leere Antowrt vom Server", + "Empty response from the server" : "leere Antwort vom Server", "Couldn't access. Please logout and login to activate this mount point" : "Anmeldung nicht möglich. Bitte abmelden und erneut anmelden, damit von diesem Endpunkt zugegriffen werden kann.", "Couldn't get the information from the ownCloud server: {code} {type}" : "Es konnten keine Informationen aus dem ownCloud -Server gelesen werden: {code} {type}", "Couldn't get the list of external mount points: {type}" : "Die Liste der externen Endpunkte konnte nicht empfangen werden: {type}", diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js index 412cd459a9a..8687f7a8299 100644 --- a/apps/files_external/l10n/el.js +++ b/apps/files_external/l10n/el.js @@ -7,6 +7,8 @@ OC.L10N.register( "Step 1 failed. Exception: %s" : "Το βήμα 1 απέτυχε. Εξαίρεση: %s", "Step 2 failed. Exception: %s" : "Το βήμα 2 απέτυχε. Εξαίρεση: %s", "External storage" : "Εξωτερική αποθήκευση", + "Dropbox App Configuration" : "Ρυθμίσεις εφαρμογής Dropbox", + "Google Drive App Configuration" : "Ρυθμίσεις εφαρμογής Google Drive", "Personal" : "Προσωπικά", "System" : "Σύστημα", "Grant access" : "Παροχή πρόσβασης", @@ -17,9 +19,11 @@ OC.L10N.register( "All users. Type to select user or group." : "Όλοι οι χρήστες. Πληκτρολογήστε για να επιλέξετε χρήστη ή ομάδα.", "(group)" : "(ομάδα)", "Saved" : "Αποθηκεύτηκαν", + "Saving..." : "Γίνεται αποθήκευση...", "Save" : "Αποθήκευση", "There was an error with message: " : "Υπήρξε σφάλμα στο μήνυμα:", "External mount error" : "Σφάλμα εξωτερικής προσάρτησης", + "external-storage" : "εξωτερική-αποθήκευση", "Username" : "Όνομα χρήστη", "Password" : "Κωδικός πρόσβασης", "Credentials saved" : "Τα διαπιστευτήρια αποθηκεύτηκαν", diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json index 2a4785e3211..70373471999 100644 --- a/apps/files_external/l10n/el.json +++ b/apps/files_external/l10n/el.json @@ -5,6 +5,8 @@ "Step 1 failed. Exception: %s" : "Το βήμα 1 απέτυχε. Εξαίρεση: %s", "Step 2 failed. Exception: %s" : "Το βήμα 2 απέτυχε. Εξαίρεση: %s", "External storage" : "Εξωτερική αποθήκευση", + "Dropbox App Configuration" : "Ρυθμίσεις εφαρμογής Dropbox", + "Google Drive App Configuration" : "Ρυθμίσεις εφαρμογής Google Drive", "Personal" : "Προσωπικά", "System" : "Σύστημα", "Grant access" : "Παροχή πρόσβασης", @@ -15,9 +17,11 @@ "All users. Type to select user or group." : "Όλοι οι χρήστες. Πληκτρολογήστε για να επιλέξετε χρήστη ή ομάδα.", "(group)" : "(ομάδα)", "Saved" : "Αποθηκεύτηκαν", + "Saving..." : "Γίνεται αποθήκευση...", "Save" : "Αποθήκευση", "There was an error with message: " : "Υπήρξε σφάλμα στο μήνυμα:", "External mount error" : "Σφάλμα εξωτερικής προσάρτησης", + "external-storage" : "εξωτερική-αποθήκευση", "Username" : "Όνομα χρήστη", "Password" : "Κωδικός πρόσβασης", "Credentials saved" : "Τα διαπιστευτήρια αποθηκεύτηκαν", diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js index cf81575a51a..053d4dfe6a0 100644 --- a/apps/files_external/l10n/id.js +++ b/apps/files_external/l10n/id.js @@ -7,6 +7,8 @@ OC.L10N.register( "Step 1 failed. Exception: %s" : "Langkah 1 gagal. Kecuali: %s", "Step 2 failed. Exception: %s" : "Langkah 2 gagal. Kecuali: %s", "External storage" : "Penyimpanan eksternal", + "Dropbox App Configuration" : "Konfigurasi Aplikasi Dropbox", + "Google Drive App Configuration" : "Konfigurasi Aplikasi Google Drive", "Personal" : "Pribadi", "System" : "Sistem", "Grant access" : "Berikan hak akses", @@ -16,10 +18,26 @@ OC.L10N.register( "Error generating key pair" : "Kesalahan saat menghasilkan pasangan kunci", "All users. Type to select user or group." : "Semua pengguna. Ketik untuk memilih pengguna atau grup.", "(group)" : "(grup)", + "Compatibility with Mac NFD encoding (slow)" : "Kecocokan dengan pengkodean Mac NFD (lambat)", + "Admin defined" : "Terdefinisi Admin", "Saved" : "Disimpan", + "Saving..." : "Menyimpan...", "Save" : "Simpan", + "Empty response from the server" : "Tidak ada respon dari server", + "Couldn't access. Please logout and login to activate this mount point" : "Tidak dapat mengakses. Log keluar dan log masuk untuk mengaktifkan mount point ini", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Tidak bisa mendapatkan informasi dari server ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Tidak bisa mendapatkan informasi dari mount point eksternal: {type}", + "There was an error with message: " : "Terjadi kesalahan dengan pesan:", + "External mount error" : "Kesalahan mount eksternal", + "external-storage" : "penyimpanan-eksternal", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Tidak bisa mendapatkan daftar jaringan drive mount point Windows: Tidak ada respon dari server", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Beberapa mount point eksternal tidak terhubung. Klik barisan merah untuk informasi selanjutnya", + "Please enter the credentials for the {mount} mount" : "Masukkan kredensial untuk mount {mount}", "Username" : "Nama Pengguna", "Password" : "Sandi", + "Credentials saved" : "Kredensial tersimpan", + "Credentials saving failed" : "Penyimpanan kredensial gagal", + "Credentials required" : "Kredensial dibutuhkan", "Storage with id \"%i\" not found" : "Penyimpanan dengan id \"%i\" tidak ditemukan", "Invalid backend or authentication mechanism class" : "Beckend atau kelas mekanisme otentikasi salah.", "Invalid mount point" : "Mount point salah", @@ -29,6 +47,9 @@ OC.L10N.register( "Not permitted to use authentication mechanism \"%s\"" : "Tidak diizinkan menggunakan mekanisme otentikasi \"%s\"", "Unsatisfied backend parameters" : "Parameter backend tidak lengkap", "Unsatisfied authentication mechanism parameters" : "Parameter mekanisme otentikasi tidak lengkap", + "Insufficient data: %s" : "Data tidak cukup: %s", + "%s" : "%s", + "Storage with id \"%i\" is not user editable" : "Penyimpanan dengan id \"%i\" tidak bisa diubah pengguna", "Access key" : "Kunci akses", "Secret key" : "Kunci rahasia", "Builtin" : "Internal", @@ -44,7 +65,11 @@ OC.L10N.register( "Identity endpoint URL" : "Identitas URL akhir", "Rackspace" : "Rackspace", "API key" : "Kunci API", + "Global Credentials" : "Kredensial Global", + "Log-in credentials, save in database" : "Kredensial masuk, simpan di basis data", "Username and password" : "Nama pengguna dan sandi", + "Log-in credentials, save in session" : "Kredensial masuk, simpan dalam sesi", + "User entered, store in database" : "Dimasukkan pengguna, masukkan dalam basis data", "RSA public key" : "Kunci publik RSA", "Public key" : "Kunci Public", "Amazon S3" : "Amazon S3", @@ -88,6 +113,7 @@ OC.L10N.register( "Scope" : "Skop", "Enable encryption" : "Aktifkan enkripsi", "Enable previews" : "Aktifkan pratinjau", + "Enable sharing" : "Aktifkan pembagian", "Check for changes" : "Periksa perubahan", "Never" : "Jangan pernah", "Once every direct access" : "Setiap kali akses langsung", @@ -99,6 +125,7 @@ OC.L10N.register( "Add storage" : "Tambahkan penyimpanan", "Advanced settings" : "Pengaturan Lanjutan", "Delete" : "Hapus", + "Allow users to mount external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal", "Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut" }, "nplurals=1; plural=0;"); diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json index d4c96b1ce4b..4cbb4187cc1 100644 --- a/apps/files_external/l10n/id.json +++ b/apps/files_external/l10n/id.json @@ -5,6 +5,8 @@ "Step 1 failed. Exception: %s" : "Langkah 1 gagal. Kecuali: %s", "Step 2 failed. Exception: %s" : "Langkah 2 gagal. Kecuali: %s", "External storage" : "Penyimpanan eksternal", + "Dropbox App Configuration" : "Konfigurasi Aplikasi Dropbox", + "Google Drive App Configuration" : "Konfigurasi Aplikasi Google Drive", "Personal" : "Pribadi", "System" : "Sistem", "Grant access" : "Berikan hak akses", @@ -14,10 +16,26 @@ "Error generating key pair" : "Kesalahan saat menghasilkan pasangan kunci", "All users. Type to select user or group." : "Semua pengguna. Ketik untuk memilih pengguna atau grup.", "(group)" : "(grup)", + "Compatibility with Mac NFD encoding (slow)" : "Kecocokan dengan pengkodean Mac NFD (lambat)", + "Admin defined" : "Terdefinisi Admin", "Saved" : "Disimpan", + "Saving..." : "Menyimpan...", "Save" : "Simpan", + "Empty response from the server" : "Tidak ada respon dari server", + "Couldn't access. Please logout and login to activate this mount point" : "Tidak dapat mengakses. Log keluar dan log masuk untuk mengaktifkan mount point ini", + "Couldn't get the information from the ownCloud server: {code} {type}" : "Tidak bisa mendapatkan informasi dari server ownCloud: {code} {type}", + "Couldn't get the list of external mount points: {type}" : "Tidak bisa mendapatkan informasi dari mount point eksternal: {type}", + "There was an error with message: " : "Terjadi kesalahan dengan pesan:", + "External mount error" : "Kesalahan mount eksternal", + "external-storage" : "penyimpanan-eksternal", + "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Tidak bisa mendapatkan daftar jaringan drive mount point Windows: Tidak ada respon dari server", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Beberapa mount point eksternal tidak terhubung. Klik barisan merah untuk informasi selanjutnya", + "Please enter the credentials for the {mount} mount" : "Masukkan kredensial untuk mount {mount}", "Username" : "Nama Pengguna", "Password" : "Sandi", + "Credentials saved" : "Kredensial tersimpan", + "Credentials saving failed" : "Penyimpanan kredensial gagal", + "Credentials required" : "Kredensial dibutuhkan", "Storage with id \"%i\" not found" : "Penyimpanan dengan id \"%i\" tidak ditemukan", "Invalid backend or authentication mechanism class" : "Beckend atau kelas mekanisme otentikasi salah.", "Invalid mount point" : "Mount point salah", @@ -27,6 +45,9 @@ "Not permitted to use authentication mechanism \"%s\"" : "Tidak diizinkan menggunakan mekanisme otentikasi \"%s\"", "Unsatisfied backend parameters" : "Parameter backend tidak lengkap", "Unsatisfied authentication mechanism parameters" : "Parameter mekanisme otentikasi tidak lengkap", + "Insufficient data: %s" : "Data tidak cukup: %s", + "%s" : "%s", + "Storage with id \"%i\" is not user editable" : "Penyimpanan dengan id \"%i\" tidak bisa diubah pengguna", "Access key" : "Kunci akses", "Secret key" : "Kunci rahasia", "Builtin" : "Internal", @@ -42,7 +63,11 @@ "Identity endpoint URL" : "Identitas URL akhir", "Rackspace" : "Rackspace", "API key" : "Kunci API", + "Global Credentials" : "Kredensial Global", + "Log-in credentials, save in database" : "Kredensial masuk, simpan di basis data", "Username and password" : "Nama pengguna dan sandi", + "Log-in credentials, save in session" : "Kredensial masuk, simpan dalam sesi", + "User entered, store in database" : "Dimasukkan pengguna, masukkan dalam basis data", "RSA public key" : "Kunci publik RSA", "Public key" : "Kunci Public", "Amazon S3" : "Amazon S3", @@ -86,6 +111,7 @@ "Scope" : "Skop", "Enable encryption" : "Aktifkan enkripsi", "Enable previews" : "Aktifkan pratinjau", + "Enable sharing" : "Aktifkan pembagian", "Check for changes" : "Periksa perubahan", "Never" : "Jangan pernah", "Once every direct access" : "Setiap kali akses langsung", @@ -97,6 +123,7 @@ "Add storage" : "Tambahkan penyimpanan", "Advanced settings" : "Pengaturan Lanjutan", "Delete" : "Hapus", + "Allow users to mount external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal", "Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_external/l10n/is.js b/apps/files_external/l10n/is.js index 80d39a2ba9a..ab73dbece96 100644 --- a/apps/files_external/l10n/is.js +++ b/apps/files_external/l10n/is.js @@ -7,6 +7,8 @@ OC.L10N.register( "Step 1 failed. Exception: %s" : "Skref 1 mistókst. Undantekning: %s", "Step 2 failed. Exception: %s" : "Skref 2 mistókst. Undantekning: %s", "External storage" : "Ytri gagnageymsla", + "Dropbox App Configuration" : "Uppsetning Dropbox forrits", + "Google Drive App Configuration" : "Uppsetning Google Drive forrits", "Personal" : "Einka", "System" : "Kerfi", "Grant access" : "Veita aðgengi", @@ -16,8 +18,10 @@ OC.L10N.register( "Error generating key pair" : "Villa við að útbúa nýtt lyklapar", "All users. Type to select user or group." : "Allir notendur. Skrifaðu til að velja notanda eða hóp.", "(group)" : "(hópur)", + "Compatibility with Mac NFD encoding (slow)" : "Samhæfni við Mac NFD kóðun (hægvirkt)", "Admin defined" : "Skilgreindur kerfisstjóri", "Saved" : "Vistað", + "Saving..." : "Er að vista ...", "Save" : "Vista", "Empty response from the server" : "Tómt svar frá þjóni móttekið", "Couldn't access. Please logout and login to activate this mount point" : "Náði ekki aðgangi. Skráðu þig út og svo aftur inn til að virkja þennan tengipunkt", @@ -61,8 +65,11 @@ OC.L10N.register( "Identity endpoint URL" : "Endapunktur auðkennisslóðar (identity endpoint URL)", "Rackspace" : "Rackspace", "API key" : "API-lykill", + "Global Credentials" : "Víðvær innskráningarauðkenni", + "Log-in credentials, save in database" : "Innskráningarauðkenni, vista í gagnagrunni", "Username and password" : "Notandanafn og lykilorð", "Log-in credentials, save in session" : "Innskráningarauðkenni, vista í setu", + "User entered, store in database" : "Innskráður notandi, geyma í gagnagrunni", "RSA public key" : "RSA-dreifilykill", "Public key" : "Dreifilykill", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/is.json b/apps/files_external/l10n/is.json index f5b3a1b1d33..5738ff738fb 100644 --- a/apps/files_external/l10n/is.json +++ b/apps/files_external/l10n/is.json @@ -5,6 +5,8 @@ "Step 1 failed. Exception: %s" : "Skref 1 mistókst. Undantekning: %s", "Step 2 failed. Exception: %s" : "Skref 2 mistókst. Undantekning: %s", "External storage" : "Ytri gagnageymsla", + "Dropbox App Configuration" : "Uppsetning Dropbox forrits", + "Google Drive App Configuration" : "Uppsetning Google Drive forrits", "Personal" : "Einka", "System" : "Kerfi", "Grant access" : "Veita aðgengi", @@ -14,8 +16,10 @@ "Error generating key pair" : "Villa við að útbúa nýtt lyklapar", "All users. Type to select user or group." : "Allir notendur. Skrifaðu til að velja notanda eða hóp.", "(group)" : "(hópur)", + "Compatibility with Mac NFD encoding (slow)" : "Samhæfni við Mac NFD kóðun (hægvirkt)", "Admin defined" : "Skilgreindur kerfisstjóri", "Saved" : "Vistað", + "Saving..." : "Er að vista ...", "Save" : "Vista", "Empty response from the server" : "Tómt svar frá þjóni móttekið", "Couldn't access. Please logout and login to activate this mount point" : "Náði ekki aðgangi. Skráðu þig út og svo aftur inn til að virkja þennan tengipunkt", @@ -59,8 +63,11 @@ "Identity endpoint URL" : "Endapunktur auðkennisslóðar (identity endpoint URL)", "Rackspace" : "Rackspace", "API key" : "API-lykill", + "Global Credentials" : "Víðvær innskráningarauðkenni", + "Log-in credentials, save in database" : "Innskráningarauðkenni, vista í gagnagrunni", "Username and password" : "Notandanafn og lykilorð", "Log-in credentials, save in session" : "Innskráningarauðkenni, vista í setu", + "User entered, store in database" : "Innskráður notandi, geyma í gagnagrunni", "RSA public key" : "RSA-dreifilykill", "Public key" : "Dreifilykill", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js index 382f5fbd0b5..3896323ab35 100644 --- a/apps/files_external/l10n/nl.js +++ b/apps/files_external/l10n/nl.js @@ -32,7 +32,7 @@ OC.L10N.register( "external-storage" : "externe opslag", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Kon geen overzicht met Windows netwerk koppelpunten krijgen: lege reactie van de server", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Sommige van de geconfigureerde koppelpunten zijn niet verbonden. Klik op de rode rij(en) voor meer informatie", - "Please enter the credentials for the {mount} mount" : "Geef de inloggegeven sop voor de {mount} mount", + "Please enter the credentials for the {mount} mount" : "Geef de inloggegevens op voor de {mount} mount", "Username" : "Gebruikersnaam", "Password" : "Wachtwoord", "Credentials saved" : "Inloggegevens opgeslagen", diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json index 42a0393a8f6..b0a249b9680 100644 --- a/apps/files_external/l10n/nl.json +++ b/apps/files_external/l10n/nl.json @@ -30,7 +30,7 @@ "external-storage" : "externe opslag", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Kon geen overzicht met Windows netwerk koppelpunten krijgen: lege reactie van de server", "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Sommige van de geconfigureerde koppelpunten zijn niet verbonden. Klik op de rode rij(en) voor meer informatie", - "Please enter the credentials for the {mount} mount" : "Geef de inloggegeven sop voor de {mount} mount", + "Please enter the credentials for the {mount} mount" : "Geef de inloggegevens op voor de {mount} mount", "Username" : "Gebruikersnaam", "Password" : "Wachtwoord", "Credentials saved" : "Inloggegevens opgeslagen", diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index 39a6e766677..99aa844fb5b 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -31,7 +31,7 @@ OC.L10N.register( "External mount error" : "Erro de montagem externa", "external-storage" : "armazenamento-externo", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista unidades de pontos de montagem da rede do Windows: resposta vazia a partir do servidor", - "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Por favor clique na linha vermelha(s) para mais informações", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Clique na(s) linha(s) vermelha(s) para mais informações", "Please enter the credentials for the {mount} mount" : "Por favor, insira as credenciais para montar {mount}", "Username" : "Nome de Usuário", "Password" : "Senha", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index 7d6a3b5b10d..aee79057b4d 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -29,7 +29,7 @@ "External mount error" : "Erro de montagem externa", "external-storage" : "armazenamento-externo", "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista unidades de pontos de montagem da rede do Windows: resposta vazia a partir do servidor", - "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Por favor clique na linha vermelha(s) para mais informações", + "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Alguns dos pontos de montagem externos configurados não estão conectados. Clique na(s) linha(s) vermelha(s) para mais informações", "Please enter the credentials for the {mount} mount" : "Por favor, insira as credenciais para montar {mount}", "Username" : "Nome de Usuário", "Password" : "Senha", diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js index a87fb8371c4..a4cb1b6c04f 100644 --- a/apps/files_external/l10n/ru.js +++ b/apps/files_external/l10n/ru.js @@ -66,8 +66,10 @@ OC.L10N.register( "Rackspace" : "Rackspace", "API key" : "Ключ API", "Global Credentials" : "Глобальные Учетные данные", + "Log-in credentials, save in database" : "Учетные данные, хранить в базе данных", "Username and password" : "Имя пользователя и пароль", "Log-in credentials, save in session" : "Учетные данные, хранить в сессии", + "User entered, store in database" : "Пользователь авторизован, сохранить в базе данных", "RSA public key" : "Открытый ключ RSA", "Public key" : "Открытый ключ", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json index 931e4ea5f98..f4d1edb1f5a 100644 --- a/apps/files_external/l10n/ru.json +++ b/apps/files_external/l10n/ru.json @@ -64,8 +64,10 @@ "Rackspace" : "Rackspace", "API key" : "Ключ API", "Global Credentials" : "Глобальные Учетные данные", + "Log-in credentials, save in database" : "Учетные данные, хранить в базе данных", "Username and password" : "Имя пользователя и пароль", "Log-in credentials, save in session" : "Учетные данные, хранить в сессии", + "User entered, store in database" : "Пользователь авторизован, сохранить в базе данных", "RSA public key" : "Открытый ключ RSA", "Public key" : "Открытый ключ", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js index 4bd6b784bda..95d8c3923cd 100644 --- a/apps/files_external/l10n/tr.js +++ b/apps/files_external/l10n/tr.js @@ -7,6 +7,8 @@ OC.L10N.register( "Step 1 failed. Exception: %s" : "Adım 1 başarısız. Özel durum: %s", "Step 2 failed. Exception: %s" : "Adım 2 başarısız. Özel durum: %s", "External storage" : "Harici depolama", + "Dropbox App Configuration" : "Dropbox Uygulama Yapılandırması", + "Google Drive App Configuration" : "Google Drive Uygulama Yapılandırması", "Personal" : "Kişisel", "System" : "Sistem", "Grant access" : "Erişimi sağla", @@ -16,8 +18,10 @@ OC.L10N.register( "Error generating key pair" : "Anahtar çifti üretirken hata", "All users. Type to select user or group." : "Tüm kullanıcılar. Kullanıcı veya grup seçmek için yazın.", "(group)" : "(grup)", + "Compatibility with Mac NFD encoding (slow)" : "Mac NFD şifrelemesiyle uyumlu (yavaş)", "Admin defined" : "Yönetici tanımlandı", "Saved" : "Kaydedildi", + "Saving..." : "Kaydediliyor...", "Save" : "Kaydet", "Empty response from the server" : "Sunucudan boş yanıt", "Couldn't access. Please logout and login to activate this mount point" : "Erişilemedi. Lütfen bu bağlama noktasını etkinleştirmek için tekrar oturumu kapatıp açın.", @@ -61,8 +65,11 @@ OC.L10N.register( "Identity endpoint URL" : "Kimlik uç nokta URL'si", "Rackspace" : "Rackspace", "API key" : "API anahtarı", + "Global Credentials" : "Genel Kimlik Bilgileri", + "Log-in credentials, save in database" : "Oturum kimlik bilgileri, veritabanında kaydet", "Username and password" : "Kullanıcı adı ve parola", "Log-in credentials, save in session" : "Oturum kimlik bilgileri, oturumda kaydet", + "User entered, store in database" : "Kullanıcı giriş yaptı, veritabanında sakla", "RSA public key" : "RSA ortak anahtarı", "Public key" : "Ortak anahtar", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json index 55fb3df86f2..61796043b4b 100644 --- a/apps/files_external/l10n/tr.json +++ b/apps/files_external/l10n/tr.json @@ -5,6 +5,8 @@ "Step 1 failed. Exception: %s" : "Adım 1 başarısız. Özel durum: %s", "Step 2 failed. Exception: %s" : "Adım 2 başarısız. Özel durum: %s", "External storage" : "Harici depolama", + "Dropbox App Configuration" : "Dropbox Uygulama Yapılandırması", + "Google Drive App Configuration" : "Google Drive Uygulama Yapılandırması", "Personal" : "Kişisel", "System" : "Sistem", "Grant access" : "Erişimi sağla", @@ -14,8 +16,10 @@ "Error generating key pair" : "Anahtar çifti üretirken hata", "All users. Type to select user or group." : "Tüm kullanıcılar. Kullanıcı veya grup seçmek için yazın.", "(group)" : "(grup)", + "Compatibility with Mac NFD encoding (slow)" : "Mac NFD şifrelemesiyle uyumlu (yavaş)", "Admin defined" : "Yönetici tanımlandı", "Saved" : "Kaydedildi", + "Saving..." : "Kaydediliyor...", "Save" : "Kaydet", "Empty response from the server" : "Sunucudan boş yanıt", "Couldn't access. Please logout and login to activate this mount point" : "Erişilemedi. Lütfen bu bağlama noktasını etkinleştirmek için tekrar oturumu kapatıp açın.", @@ -59,8 +63,11 @@ "Identity endpoint URL" : "Kimlik uç nokta URL'si", "Rackspace" : "Rackspace", "API key" : "API anahtarı", + "Global Credentials" : "Genel Kimlik Bilgileri", + "Log-in credentials, save in database" : "Oturum kimlik bilgileri, veritabanında kaydet", "Username and password" : "Kullanıcı adı ve parola", "Log-in credentials, save in session" : "Oturum kimlik bilgileri, oturumda kaydet", + "User entered, store in database" : "Kullanıcı giriş yaptı, veritabanında sakla", "RSA public key" : "RSA ortak anahtarı", "Public key" : "Ortak anahtar", "Amazon S3" : "Amazon S3", diff --git a/apps/files_external/lib/Lib/Storage/SMB.php b/apps/files_external/lib/Lib/Storage/SMB.php index 50ea186060a..28445dd2f61 100644 --- a/apps/files_external/lib/Lib/Storage/SMB.php +++ b/apps/files_external/lib/Lib/Storage/SMB.php @@ -397,6 +397,19 @@ class SMB extends Common implements INotifyStorage { public function isUpdatable($path) { try { $info = $this->getFileInfo($path); + // following windows behaviour for read-only folders: they can be written into + // (https://support.microsoft.com/en-us/kb/326549 - "cause" section) + return !$info->isHidden() && (!$info->isReadOnly() || $this->is_dir($path)); + } catch (NotFoundException $e) { + return false; + } catch (ForbiddenException $e) { + return false; + } + } + + public function isDeletable($path) { + try { + $info = $this->getFileInfo($path); return !$info->isHidden() && !$info->isReadOnly(); } catch (NotFoundException $e) { return false; diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index 2df7f099838..11c4614d6c5 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -28,14 +28,12 @@ $l = \OC::$server->getL10N('files_sharing'); -\OC::$CLASSPATH['OC_Share_Backend_File'] = 'files_sharing/lib/share/file.php'; -\OC::$CLASSPATH['OC_Share_Backend_Folder'] = 'files_sharing/lib/share/folder.php'; \OC::$CLASSPATH['OC\Files\Storage\Shared'] = 'files_sharing/lib/sharedstorage.php'; \OCA\Files_Sharing\Helper::registerHooks(); -\OCP\Share::registerBackend('file', 'OC_Share_Backend_File'); -\OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file'); +\OCP\Share::registerBackend('file', 'OCA\Files_Sharing\ShareBackend\File'); +\OCP\Share::registerBackend('folder', 'OCA\Files_Sharing\ShareBackend\Folder', 'file'); $application = new \OCA\Files_Sharing\AppInfo\Application(); $application->registerMountProviders(); diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml index 240b5e61933..133119feabd 100644 --- a/apps/files_sharing/appinfo/info.xml +++ b/apps/files_sharing/appinfo/info.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <info> <id>files_sharing</id> - <name>Share Files</name> + <name>File sharing</name> <description> This application enables users to share files within ownCloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within ownCloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of ownCloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices. Turning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the ownCloud Documentation. @@ -10,7 +10,7 @@ Turning the feature off removes shared files and folders on the server for all s <licence>AGPL</licence> <author>Michael Gapczynski, Bjoern Schiessle</author> <default_enable/> - <version>1.0.0</version> + <version>1.1.0</version> <types> <filesystem/> </types> diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php index 92c2759ed14..ee7ea55d506 100644 --- a/apps/files_sharing/appinfo/routes.php +++ b/apps/files_sharing/appinfo/routes.php @@ -40,6 +40,36 @@ $application->registerRoutes($this, [ 'verb' => 'GET' ], ], + 'ocs' => [ + /* + * OCS Share API + */ + [ + 'name' => 'ShareAPI#getShares', + 'url' => '/api/v1/shares', + 'verb' => 'GET', + ], + [ + 'name' => 'ShareAPI#createShare', + 'url' => '/api/v1/shares', + 'verb' => 'POST', + ], + [ + 'name' => 'ShareAPI#getShare', + 'url' => '/api/v1/shares/{id}', + 'verb' => 'GET', + ], + [ + 'name' => 'ShareAPI#updateShare', + 'url' => '/api/v1/shares/{id}', + 'verb' => 'PUT', + ], + [ + 'name' => 'ShareAPI#deleteShare', + 'url' => '/api/v1/shares/{id}', + 'verb' => 'DELETE', + ], + ], ]); /** @var $this \OCP\Route\IRouter */ @@ -59,33 +89,6 @@ $this->create('sharing_external_shareinfo', '/shareinfo') //TODO: SET: mail notification, waiting for PR #4689 to be accepted -$OCSShare = new \OCA\Files_Sharing\API\OCSShareWrapper(); - -API::register('get', - '/apps/files_sharing/api/v1/shares', - [$OCSShare, 'getAllShares'], - 'files_sharing'); - -API::register('post', - '/apps/files_sharing/api/v1/shares', - [$OCSShare, 'createShare'], - 'files_sharing'); - -API::register('get', - '/apps/files_sharing/api/v1/shares/{id}', - [$OCSShare, 'getShare'], - 'files_sharing'); - -API::register('put', - '/apps/files_sharing/api/v1/shares/{id}', - [$OCSShare, 'updateShare'], - 'files_sharing'); - -API::register('delete', - '/apps/files_sharing/api/v1/shares/{id}', - [$OCSShare, 'deleteShare'], - 'files_sharing'); - API::register('get', '/apps/files_sharing/api/v1/remote_shares', array('\OCA\Files_Sharing\API\Remote', 'getShares'), diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css index c998501dad6..4c5f847f9ff 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.css @@ -30,10 +30,15 @@ margin:0 auto; } + #imgframe img, #imgframe video { - max-height:100%; - max-width:100%; + max-height: 100% !important; + max-width: 100% !important; +} +#imgframe video { + width: 854px; + height: 480px; } #imgframe .text-preview { diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js index 8d997e23182..569fb884159 100644 --- a/apps/files_sharing/l10n/cs_CZ.js +++ b/apps/files_sharing/l10n/cs_CZ.js @@ -17,7 +17,6 @@ OC.L10N.register( "No expiration date set" : "Není nastaveno datum vypršení platnosti", "Shared by" : "Sdílí", "Sharing" : "Sdílení", - "Share API is disabled" : "Sdílení API je zakázané", "Wrong share ID, share doesn't exist" : "Špatné ID sdílení, sdílení neexistuje", "Could not delete share" : "Nelze smazat sdílení", "Please specify a file or folder path" : "Prosím zadejte cestu adresáře nebo souboru", @@ -33,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Neznámý typ sdílení", "Not a directory" : "Žádný adresář", "Could not lock path" : "Nepodařilo se uzamknout cestu", - "Can't change permissions for public share links" : "Nelze změnit oprávnění pro veřejně sdílené odkazy", "Wrong or no update parameter given" : "Chyba nebo žádná aktualizace dle zadaných parametrů", + "Can't change permissions for public share links" : "Nelze změnit oprávnění pro veřejně sdílené odkazy", "Cannot increase permissions" : "Nelze navýšit oprávnění", "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>", "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>", @@ -79,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel", "Shared by %2$s" : "%2$s sdílel(a)", "Shares" : "Sdílení", + "Share API is disabled" : "Sdílení API je zakázané", "This share is password-protected" : "Toto sdílení je chráněno heslem", "The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.", "Password" : "Heslo", diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json index cd866523c8b..152b5170c8b 100644 --- a/apps/files_sharing/l10n/cs_CZ.json +++ b/apps/files_sharing/l10n/cs_CZ.json @@ -15,7 +15,6 @@ "No expiration date set" : "Není nastaveno datum vypršení platnosti", "Shared by" : "Sdílí", "Sharing" : "Sdílení", - "Share API is disabled" : "Sdílení API je zakázané", "Wrong share ID, share doesn't exist" : "Špatné ID sdílení, sdílení neexistuje", "Could not delete share" : "Nelze smazat sdílení", "Please specify a file or folder path" : "Prosím zadejte cestu adresáře nebo souboru", @@ -31,8 +30,8 @@ "Unknown share type" : "Neznámý typ sdílení", "Not a directory" : "Žádný adresář", "Could not lock path" : "Nepodařilo se uzamknout cestu", - "Can't change permissions for public share links" : "Nelze změnit oprávnění pro veřejně sdílené odkazy", "Wrong or no update parameter given" : "Chyba nebo žádná aktualizace dle zadaných parametrů", + "Can't change permissions for public share links" : "Nelze změnit oprávnění pro veřejně sdílené odkazy", "Cannot increase permissions" : "Nelze navýšit oprávnění", "A file or folder has been <strong>shared</strong>" : "Soubor nebo adresář byl <strong>nasdílen</strong>", "A file or folder was shared from <strong>another server</strong>" : "Soubor nebo adresář byl nasdílen z <strong>jiného serveru</strong>", @@ -77,6 +76,7 @@ "Public link of %2$s expired" : "Veřejný odkaz %2$s vypršel", "Shared by %2$s" : "%2$s sdílel(a)", "Shares" : "Sdílení", + "Share API is disabled" : "Sdílení API je zakázané", "This share is password-protected" : "Toto sdílení je chráněno heslem", "The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.", "Password" : "Heslo", diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 40de7b1ce1f..635bd45626a 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -1,13 +1,13 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Mit Dir geteilt", - "Shared with others" : "Von Dir geteilt", + "Shared with you" : "Mit dir geteilt", + "Shared with others" : "Von dir geteilt", "Shared by link" : "Geteilt über einen Link", - "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Dir geteilt", - "Files and folders others share with you will show up here" : "Mit Dir geteilte Dateien und Ordner anderer werden hier erscheinen", + "Nothing shared with you yet" : "Bis jetzt wurde nichts mit dir geteilt", + "Files and folders others share with you will show up here" : "Mit dir geteilte Dateien und Ordner anderer werden hier erscheinen", "Nothing shared yet" : "Noch nichts geteilt", - "Files and folders you share will show up here" : "Von Dir geteilte Dateien und Ordner werden hier erscheinen", + "Files and folders you share will show up here" : "Von dir geteilte Dateien und Ordner werden hier erscheinen", "No shared links" : "Keine geteilten Links", "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", "You can upload into this folder" : "In diesen Ordner kann hochgeladen werden", @@ -17,7 +17,6 @@ OC.L10N.register( "No expiration date set" : "Kein Ablaufdatum gesetzt", "Shared by" : "Geteilt von ", "Sharing" : "Teilen", - "Share API is disabled" : "Teilen-API ist deaktivert", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", "Please specify a file or folder path" : "Bitte eine Datei oder Verzeichnis definieren", @@ -33,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Unbekannter Freigabetyp", "Not a directory" : "Kein Verzeichnis", "Could not lock path" : "Pfad konnte nicht gesperrt werden", - "Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden", "Wrong or no update parameter given" : "Falscher oder kein Updateparameter wurde übergeben", + "Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden", "Cannot increase permissions" : "Berechtigungen können nicht erhöht werden", "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", @@ -60,7 +59,7 @@ OC.L10N.register( "%2$s removed the public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt", "Your public link for %1$s expired" : "Dein öffentlicher Link für %1$s ist abgelaufen", "The public link of %2$s for %1$s expired" : "Der öffentliche Link von %2$s für %1$s ist abgelaufen", - "%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt", + "%2$s shared %1$s with you" : "%2$s hat %1$s mit dir geteilt", "%2$s removed the share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt", "Downloaded via public link" : "Runtergeladen mittels öffentlichen Link", "Shared with %2$s" : "Geteilt mit %2$s", @@ -68,7 +67,7 @@ OC.L10N.register( "Removed share for %2$s" : "Freigabe für %2$s entfernt", "%2$s removed share for %3$s" : "%2$s hat die Freigabe für %3$s entfernt", "Shared with group %2$s" : "Geteilt mit Gruppe %2$s", - "Shared with group %3$s by %2$s" : "Freigabe für Gruppe %3$s von %2$s entfernt", + "Shared with group %3$s by %2$s" : "Von %2$s mit Gruppe %3$s geteilt", "Removed share of group %2$s" : "Freigabe für Gruppe %2$s entfernt", "%2$s removed share of group %3$s" : "%2$s hat die Freigabe für Gruppe %3$s entfernt", "Shared via link by %2$s" : "Geteilt mittels Link von %2$s", @@ -79,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Öffentlicher Link von %2$s ist abgelaufen", "Shared by %2$s" : "Geteilt von %2$s", "Shares" : "Freigaben", + "Share API is disabled" : "Teilen-API ist deaktivert", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", "The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.", "Password" : "Passwort", @@ -91,8 +91,8 @@ OC.L10N.register( "the item was removed" : "Das Element wurde entfernt", "the link expired" : "Der Link ist abgelaufen", "sharing is disabled" : "Teilen ist deaktiviert", - "For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende Dich bitte an die Person, die Dir diesen Link geschickt hat.", - "Add to your Nextcloud" : "Zu Deiner Nextcllud hinzufügen", + "For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende dich bitte an die Person, die dir diesen Link geschickt hat.", + "Add to your Nextcloud" : "Zu deiner Nextcloud hinzufügen", "Download" : "Herunterladen", "Download %s" : "Download %s", "Direct link" : "Direkter Link", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index b2f595d81c7..2fcb8699059 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -1,11 +1,11 @@ { "translations": { - "Shared with you" : "Mit Dir geteilt", - "Shared with others" : "Von Dir geteilt", + "Shared with you" : "Mit dir geteilt", + "Shared with others" : "Von dir geteilt", "Shared by link" : "Geteilt über einen Link", - "Nothing shared with you yet" : "Bis jetzt wurde nichts mit Dir geteilt", - "Files and folders others share with you will show up here" : "Mit Dir geteilte Dateien und Ordner anderer werden hier erscheinen", + "Nothing shared with you yet" : "Bis jetzt wurde nichts mit dir geteilt", + "Files and folders others share with you will show up here" : "Mit dir geteilte Dateien und Ordner anderer werden hier erscheinen", "Nothing shared yet" : "Noch nichts geteilt", - "Files and folders you share will show up here" : "Von Dir geteilte Dateien und Ordner werden hier erscheinen", + "Files and folders you share will show up here" : "Von dir geteilte Dateien und Ordner werden hier erscheinen", "No shared links" : "Keine geteilten Links", "Files and folders you share by link will show up here" : "Per Link freigegebene Dateien und Ordner werden hier erscheinen", "You can upload into this folder" : "In diesen Ordner kann hochgeladen werden", @@ -15,7 +15,6 @@ "No expiration date set" : "Kein Ablaufdatum gesetzt", "Shared by" : "Geteilt von ", "Sharing" : "Teilen", - "Share API is disabled" : "Teilen-API ist deaktivert", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", "Please specify a file or folder path" : "Bitte eine Datei oder Verzeichnis definieren", @@ -31,8 +30,8 @@ "Unknown share type" : "Unbekannter Freigabetyp", "Not a directory" : "Kein Verzeichnis", "Could not lock path" : "Pfad konnte nicht gesperrt werden", - "Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden", "Wrong or no update parameter given" : "Falscher oder kein Updateparameter wurde übergeben", + "Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden", "Cannot increase permissions" : "Berechtigungen können nicht erhöht werden", "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", @@ -58,7 +57,7 @@ "%2$s removed the public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt", "Your public link for %1$s expired" : "Dein öffentlicher Link für %1$s ist abgelaufen", "The public link of %2$s for %1$s expired" : "Der öffentliche Link von %2$s für %1$s ist abgelaufen", - "%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt", + "%2$s shared %1$s with you" : "%2$s hat %1$s mit dir geteilt", "%2$s removed the share for %1$s" : "%2$s hat die Freigabe für %1$s entfernt", "Downloaded via public link" : "Runtergeladen mittels öffentlichen Link", "Shared with %2$s" : "Geteilt mit %2$s", @@ -66,7 +65,7 @@ "Removed share for %2$s" : "Freigabe für %2$s entfernt", "%2$s removed share for %3$s" : "%2$s hat die Freigabe für %3$s entfernt", "Shared with group %2$s" : "Geteilt mit Gruppe %2$s", - "Shared with group %3$s by %2$s" : "Freigabe für Gruppe %3$s von %2$s entfernt", + "Shared with group %3$s by %2$s" : "Von %2$s mit Gruppe %3$s geteilt", "Removed share of group %2$s" : "Freigabe für Gruppe %2$s entfernt", "%2$s removed share of group %3$s" : "%2$s hat die Freigabe für Gruppe %3$s entfernt", "Shared via link by %2$s" : "Geteilt mittels Link von %2$s", @@ -77,6 +76,7 @@ "Public link of %2$s expired" : "Öffentlicher Link von %2$s ist abgelaufen", "Shared by %2$s" : "Geteilt von %2$s", "Shares" : "Freigaben", + "Share API is disabled" : "Teilen-API ist deaktivert", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", "The password is wrong. Try again." : "Bitte überprüfe Dein Passwort und versuche es erneut.", "Password" : "Passwort", @@ -89,8 +89,8 @@ "the item was removed" : "Das Element wurde entfernt", "the link expired" : "Der Link ist abgelaufen", "sharing is disabled" : "Teilen ist deaktiviert", - "For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende Dich bitte an die Person, die Dir diesen Link geschickt hat.", - "Add to your Nextcloud" : "Zu Deiner Nextcllud hinzufügen", + "For more info, please ask the person who sent this link." : "Um nähere Informationen zu erhalten, wende dich bitte an die Person, die dir diesen Link geschickt hat.", + "Add to your Nextcloud" : "Zu deiner Nextcloud hinzufügen", "Download" : "Herunterladen", "Download %s" : "Download %s", "Direct link" : "Direkter Link", diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index e71dbe62bac..69e6692b927 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -17,10 +17,9 @@ OC.L10N.register( "No expiration date set" : "Kein Ablaufdatum gesetzt", "Shared by" : "Geteilt von", "Sharing" : "Teilen", - "Share API is disabled" : "Teilen-API ist deaktivert", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", - "Please specify a file or folder path" : "Bitte eine Datei oder Verzeichnis definieren", + "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an", "Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht", "Please specify a valid user" : "Bitte geben Sie einen gültigen Nutzer an", "Group sharing is disabled by the administrator" : "Die Gruppenfreigabe ist durch den Administrator deaktiviert", @@ -33,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Unbekannter Freigabetyp", "Not a directory" : "Kein Verzeichnis", "Could not lock path" : "Pfad konnte nicht gesperrt werden", - "Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden", "Wrong or no update parameter given" : "Falscher oder kein Updateparameter wurde übergeben", + "Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden", "Cannot increase permissions" : "Berechtigungen können nicht erhöht werden", "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", @@ -57,7 +56,7 @@ OC.L10N.register( "%2$s shared %1$s via link" : "%2$s hat %1$s über einen Link geteilt", "You shared %1$s via link" : "Sie haben %1$s über einen Link geteilt", "You removed the public link for %1$s" : "Sie haben die Freigabe als Link für %1$s entfernt", - "%2$s removed the public link for %1$s" : "%2$s hat die Freigabe als Link für %1$s entfernt", + "%2$s removed the public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt", "Your public link for %1$s expired" : "Ihre Freigabe als Link für %1$s ist abgelaufen", "The public link of %2$s for %1$s expired" : "Die Freigabe als Link von %2$s für %1$s ist abgelaufen", "%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt", @@ -79,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Öffentlicher Link von %2$s ist abgelaufen", "Shared by %2$s" : "Geteilt von %2$s", "Shares" : "Geteiltes", + "Share API is disabled" : "Teilen-API ist deaktivert", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", "The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.", "Password" : "Passwort", @@ -95,7 +95,7 @@ OC.L10N.register( "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen", "Download" : "Herunterladen", "Download %s" : "Download %s", - "Direct link" : "Direkte Verlinkung", + "Direct link" : "Direkter Link", "Upload files to %s" : "Dateien auf %s hochladen", "Select or drop files" : "Dateien auswählen oder hierher ziehen", "Uploading files…" : "Dateien werden hochgeladen...", diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 133ee253cdd..b568c1e5f66 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -15,10 +15,9 @@ "No expiration date set" : "Kein Ablaufdatum gesetzt", "Shared by" : "Geteilt von", "Sharing" : "Teilen", - "Share API is disabled" : "Teilen-API ist deaktivert", "Wrong share ID, share doesn't exist" : "Fehlerhafte Freigabe-ID, Freigabe existiert nicht", "Could not delete share" : "Freigabe konnte nicht gelöscht werden", - "Please specify a file or folder path" : "Bitte eine Datei oder Verzeichnis definieren", + "Please specify a file or folder path" : "Bitte geben Sie eine Datei oder Ordner an", "Wrong path, file/folder doesn't exist" : "Falscher Pfad, Datei/Verzeichnis existiert nicht", "Please specify a valid user" : "Bitte geben Sie einen gültigen Nutzer an", "Group sharing is disabled by the administrator" : "Die Gruppenfreigabe ist durch den Administrator deaktiviert", @@ -31,8 +30,8 @@ "Unknown share type" : "Unbekannter Freigabetyp", "Not a directory" : "Kein Verzeichnis", "Could not lock path" : "Pfad konnte nicht gesperrt werden", - "Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden", "Wrong or no update parameter given" : "Falscher oder kein Updateparameter wurde übergeben", + "Can't change permissions for public share links" : "Berechtigungen für öffentlich freigegebene Links konnten nicht geändert werden", "Cannot increase permissions" : "Berechtigungen können nicht erhöht werden", "A file or folder has been <strong>shared</strong>" : "Eine Datei oder ein Ordner wurde <strong>geteilt</strong>", "A file or folder was shared from <strong>another server</strong>" : "Eine Datei oder ein Ordner wurde von <strong>einem anderen Server</strong> geteilt", @@ -55,7 +54,7 @@ "%2$s shared %1$s via link" : "%2$s hat %1$s über einen Link geteilt", "You shared %1$s via link" : "Sie haben %1$s über einen Link geteilt", "You removed the public link for %1$s" : "Sie haben die Freigabe als Link für %1$s entfernt", - "%2$s removed the public link for %1$s" : "%2$s hat die Freigabe als Link für %1$s entfernt", + "%2$s removed the public link for %1$s" : "%2$s hat den öffentlichen Link für %1$s entfernt", "Your public link for %1$s expired" : "Ihre Freigabe als Link für %1$s ist abgelaufen", "The public link of %2$s for %1$s expired" : "Die Freigabe als Link von %2$s für %1$s ist abgelaufen", "%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt", @@ -77,6 +76,7 @@ "Public link of %2$s expired" : "Öffentlicher Link von %2$s ist abgelaufen", "Shared by %2$s" : "Geteilt von %2$s", "Shares" : "Geteiltes", + "Share API is disabled" : "Teilen-API ist deaktivert", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", "The password is wrong. Try again." : "Das Passwort ist falsch. Bitte versuchen Sie es erneut.", "Password" : "Passwort", @@ -93,7 +93,7 @@ "Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen", "Download" : "Herunterladen", "Download %s" : "Download %s", - "Direct link" : "Direkte Verlinkung", + "Direct link" : "Direkter Link", "Upload files to %s" : "Dateien auf %s hochladen", "Select or drop files" : "Dateien auswählen oder hierher ziehen", "Uploading files…" : "Dateien werden hochgeladen...", diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index 6e0affe8a0b..f495a5d25f6 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -14,7 +14,6 @@ OC.L10N.register( "No expiration date set" : "No expiration date set", "Shared by" : "Shared by", "Sharing" : "Sharing", - "Share API is disabled" : "Share API is disabled", "Wrong share ID, share doesn't exist" : "Wrong share ID, share doesn't exist", "Could not delete share" : "Could not delete share", "Please specify a file or folder path" : "Please specify a file or folder path", @@ -30,8 +29,8 @@ OC.L10N.register( "Unknown share type" : "Unknown share type", "Not a directory" : "Not a directory", "Could not lock path" : "Could not lock path", - "Can't change permissions for public share links" : "Can't change permissions for public share links", "Wrong or no update parameter given" : "Wrong or no update parameter given", + "Can't change permissions for public share links" : "Can't change permissions for public share links", "Cannot increase permissions" : "Cannot increase permissions", "A file or folder has been <strong>shared</strong>" : "A file or folder has been <strong>shared</strong>", "A file or folder was shared from <strong>another server</strong>" : "A file or folder was shared from <strong>another server</strong>", @@ -76,6 +75,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Public link of %2$s expired", "Shared by %2$s" : "Shared by %2$s", "Shares" : "Shares", + "Share API is disabled" : "Share API is disabled", "This share is password-protected" : "This share is password-protected", "The password is wrong. Try again." : "The password is wrong. Try again.", "Password" : "Password", diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index 10fcf09c458..b4ec32c05d7 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -12,7 +12,6 @@ "No expiration date set" : "No expiration date set", "Shared by" : "Shared by", "Sharing" : "Sharing", - "Share API is disabled" : "Share API is disabled", "Wrong share ID, share doesn't exist" : "Wrong share ID, share doesn't exist", "Could not delete share" : "Could not delete share", "Please specify a file or folder path" : "Please specify a file or folder path", @@ -28,8 +27,8 @@ "Unknown share type" : "Unknown share type", "Not a directory" : "Not a directory", "Could not lock path" : "Could not lock path", - "Can't change permissions for public share links" : "Can't change permissions for public share links", "Wrong or no update parameter given" : "Wrong or no update parameter given", + "Can't change permissions for public share links" : "Can't change permissions for public share links", "Cannot increase permissions" : "Cannot increase permissions", "A file or folder has been <strong>shared</strong>" : "A file or folder has been <strong>shared</strong>", "A file or folder was shared from <strong>another server</strong>" : "A file or folder was shared from <strong>another server</strong>", @@ -74,6 +73,7 @@ "Public link of %2$s expired" : "Public link of %2$s expired", "Shared by %2$s" : "Shared by %2$s", "Shares" : "Shares", + "Share API is disabled" : "Share API is disabled", "This share is password-protected" : "This share is password-protected", "The password is wrong. Try again." : "The password is wrong. Try again.", "Password" : "Password", diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index 862b0b75ccb..df3816c1da9 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -17,7 +17,6 @@ OC.L10N.register( "No expiration date set" : "No se ha establecido fecha de caducidad", "Shared by" : "Compartido por", "Sharing" : "Compartiendo", - "Share API is disabled" : "El API de compartir está deshabilitado", "Wrong share ID, share doesn't exist" : "El ID del recurso compartido no es correcto, el recurso compartido no existe", "Could not delete share" : "No se ha podido eliminar el recurso compartido", "Please specify a file or folder path" : "Por favor, especifica la ubicación de un archivo o carpeta", @@ -33,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Tipo desconocido de recurso compartido", "Not a directory" : "No es un directorio", "Could not lock path" : "No se ha podido bloquear la ruta", - "Can't change permissions for public share links" : "No se pueden cambiar los permisos para los enlaces de recursos compartidos públicos", "Wrong or no update parameter given" : "No se ha suministrado un parametro correcto", + "Can't change permissions for public share links" : "No se pueden cambiar los permisos para los enlaces de recursos compartidos públicos", "Cannot increase permissions" : "No es posible aumentar permisos", "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta", "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>", @@ -79,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "El enlace público %2$s ha expirado", "Shared by %2$s" : "Compartido por %2$s", "Shares" : "Compartidos", + "Share API is disabled" : "El API de compartir está deshabilitado", "This share is password-protected" : "Este elemento compartido está protegido por contraseña", "The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.", "Password" : "Contraseña", diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 643f7c6c32a..f75cd061805 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -15,7 +15,6 @@ "No expiration date set" : "No se ha establecido fecha de caducidad", "Shared by" : "Compartido por", "Sharing" : "Compartiendo", - "Share API is disabled" : "El API de compartir está deshabilitado", "Wrong share ID, share doesn't exist" : "El ID del recurso compartido no es correcto, el recurso compartido no existe", "Could not delete share" : "No se ha podido eliminar el recurso compartido", "Please specify a file or folder path" : "Por favor, especifica la ubicación de un archivo o carpeta", @@ -31,8 +30,8 @@ "Unknown share type" : "Tipo desconocido de recurso compartido", "Not a directory" : "No es un directorio", "Could not lock path" : "No se ha podido bloquear la ruta", - "Can't change permissions for public share links" : "No se pueden cambiar los permisos para los enlaces de recursos compartidos públicos", "Wrong or no update parameter given" : "No se ha suministrado un parametro correcto", + "Can't change permissions for public share links" : "No se pueden cambiar los permisos para los enlaces de recursos compartidos públicos", "Cannot increase permissions" : "No es posible aumentar permisos", "A file or folder has been <strong>shared</strong>" : "Se ha <strong>compartido</strong> un archivo o carpeta", "A file or folder was shared from <strong>another server</strong>" : "Se ha compartido un archivo o carpeta desde <strong>otro servidor</strong>", @@ -77,6 +76,7 @@ "Public link of %2$s expired" : "El enlace público %2$s ha expirado", "Shared by %2$s" : "Compartido por %2$s", "Shares" : "Compartidos", + "Share API is disabled" : "El API de compartir está deshabilitado", "This share is password-protected" : "Este elemento compartido está protegido por contraseña", "The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.", "Password" : "Contraseña", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index 0177698c823..695c9b30525 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -17,7 +17,6 @@ OC.L10N.register( "No expiration date set" : "Aucune date d'expiration définie", "Shared by" : "Partagé par", "Sharing" : "Partage", - "Share API is disabled" : "l'API de partage est désactivée", "Wrong share ID, share doesn't exist" : "Mauvais ID de partage, le partage n'existe pas", "Could not delete share" : "Impossible de supprimer le partage", "Please specify a file or folder path" : "Veuillez spécifier un fichier ou dossier", @@ -33,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Type de partage inconnu", "Not a directory" : "N'est pas un répertoire", "Could not lock path" : "Impossible de verrouiller le chemin", - "Can't change permissions for public share links" : "Impossible de changer les permissions pour les liens de partage public", "Wrong or no update parameter given" : "Mauvais ou aucun paramètre donné ", + "Can't change permissions for public share links" : "Impossible de changer les permissions pour les liens de partage public", "Cannot increase permissions" : "Impossible d'augmenter les permissions", "A file or folder has been <strong>shared</strong>" : "Un fichier ou un répertoire a été <strong>partagé</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>", @@ -79,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Le lien public de %2$s a expiré", "Shared by %2$s" : "Partagé par %2$s", "Shares" : "Partages", + "Share API is disabled" : "l'API de partage est désactivée", "This share is password-protected" : "Ce partage est protégé par un mot de passe", "The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.", "Password" : "Mot de passe", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index cae52efe566..3a63c45100d 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -15,7 +15,6 @@ "No expiration date set" : "Aucune date d'expiration définie", "Shared by" : "Partagé par", "Sharing" : "Partage", - "Share API is disabled" : "l'API de partage est désactivée", "Wrong share ID, share doesn't exist" : "Mauvais ID de partage, le partage n'existe pas", "Could not delete share" : "Impossible de supprimer le partage", "Please specify a file or folder path" : "Veuillez spécifier un fichier ou dossier", @@ -31,8 +30,8 @@ "Unknown share type" : "Type de partage inconnu", "Not a directory" : "N'est pas un répertoire", "Could not lock path" : "Impossible de verrouiller le chemin", - "Can't change permissions for public share links" : "Impossible de changer les permissions pour les liens de partage public", "Wrong or no update parameter given" : "Mauvais ou aucun paramètre donné ", + "Can't change permissions for public share links" : "Impossible de changer les permissions pour les liens de partage public", "Cannot increase permissions" : "Impossible d'augmenter les permissions", "A file or folder has been <strong>shared</strong>" : "Un fichier ou un répertoire a été <strong>partagé</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un fichier ou un répertoire a été partagé depuis <strong>un autre serveur</strong>", @@ -77,6 +76,7 @@ "Public link of %2$s expired" : "Le lien public de %2$s a expiré", "Shared by %2$s" : "Partagé par %2$s", "Shares" : "Partages", + "Share API is disabled" : "l'API de partage est désactivée", "This share is password-protected" : "Ce partage est protégé par un mot de passe", "The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.", "Password" : "Mot de passe", diff --git a/apps/files_sharing/l10n/he.js b/apps/files_sharing/l10n/he.js index df3b066bb94..53ccb14cf9a 100644 --- a/apps/files_sharing/l10n/he.js +++ b/apps/files_sharing/l10n/he.js @@ -13,7 +13,6 @@ OC.L10N.register( "You can upload into this folder" : "ניתן להעלות לתיקייה זו", "Shared by" : "שותף על־ידי", "Sharing" : "שיתוף", - "Share API is disabled" : "שיתוף API מנוטרל", "Wrong share ID, share doesn't exist" : "מספר זיהוי שיתוף שגוי, שיתוף אינו קיים", "Could not delete share" : "לא ניתן היה למחוק את השיתוף", "Please specify a file or folder path" : "יש לספק נתיב לקובץ או תיקייה", @@ -29,8 +28,8 @@ OC.L10N.register( "Unknown share type" : "סוג שיתוף אינו מוכר", "Not a directory" : "אינה תיקייה", "Could not lock path" : "לא ניתן היה לנעול נתיב", - "Can't change permissions for public share links" : "לא ניתן לשנות הרשאות לקישורי שיתוף ציבוריים", "Wrong or no update parameter given" : "משתנה עדכון שניתן שגוי או לא קיים", + "Can't change permissions for public share links" : "לא ניתן לשנות הרשאות לקישורי שיתוף ציבוריים", "Cannot increase permissions" : "לא ניתן להעלות הרשאות", "A file or folder has been <strong>shared</strong>" : "קובץ או תיקייה <strong>שותפו<strong/>", "A file or folder was shared from <strong>another server</strong>" : "קובץ או תיקייה שותפו מ- <strong>שרת אחר</strong>", @@ -75,6 +74,7 @@ OC.L10N.register( "Public link of %2$s expired" : "קישור ציבורי של %2$s פג תוקף", "Shared by %2$s" : "שיתף/שיתפה על ידי %2$s", "Shares" : "שיתופים", + "Share API is disabled" : "שיתוף API מנוטרל", "This share is password-protected" : "שיתוף זה מוגן סיסמא", "The password is wrong. Try again." : "הסיסמא שגויה. יש לנסות שנית.", "Password" : "סיסמא", diff --git a/apps/files_sharing/l10n/he.json b/apps/files_sharing/l10n/he.json index 5cee40bc611..c0e1a860f40 100644 --- a/apps/files_sharing/l10n/he.json +++ b/apps/files_sharing/l10n/he.json @@ -11,7 +11,6 @@ "You can upload into this folder" : "ניתן להעלות לתיקייה זו", "Shared by" : "שותף על־ידי", "Sharing" : "שיתוף", - "Share API is disabled" : "שיתוף API מנוטרל", "Wrong share ID, share doesn't exist" : "מספר זיהוי שיתוף שגוי, שיתוף אינו קיים", "Could not delete share" : "לא ניתן היה למחוק את השיתוף", "Please specify a file or folder path" : "יש לספק נתיב לקובץ או תיקייה", @@ -27,8 +26,8 @@ "Unknown share type" : "סוג שיתוף אינו מוכר", "Not a directory" : "אינה תיקייה", "Could not lock path" : "לא ניתן היה לנעול נתיב", - "Can't change permissions for public share links" : "לא ניתן לשנות הרשאות לקישורי שיתוף ציבוריים", "Wrong or no update parameter given" : "משתנה עדכון שניתן שגוי או לא קיים", + "Can't change permissions for public share links" : "לא ניתן לשנות הרשאות לקישורי שיתוף ציבוריים", "Cannot increase permissions" : "לא ניתן להעלות הרשאות", "A file or folder has been <strong>shared</strong>" : "קובץ או תיקייה <strong>שותפו<strong/>", "A file or folder was shared from <strong>another server</strong>" : "קובץ או תיקייה שותפו מ- <strong>שרת אחר</strong>", @@ -73,6 +72,7 @@ "Public link of %2$s expired" : "קישור ציבורי של %2$s פג תוקף", "Shared by %2$s" : "שיתף/שיתפה על ידי %2$s", "Shares" : "שיתופים", + "Share API is disabled" : "שיתוף API מנוטרל", "This share is password-protected" : "שיתוף זה מוגן סיסמא", "The password is wrong. Try again." : "הסיסמא שגויה. יש לנסות שנית.", "Password" : "סיסמא", diff --git a/apps/files_sharing/l10n/id.js b/apps/files_sharing/l10n/id.js index 2a8271cfd69..99f58652505 100644 --- a/apps/files_sharing/l10n/id.js +++ b/apps/files_sharing/l10n/id.js @@ -1,12 +1,6 @@ OC.L10N.register( "files_sharing", { - "Server to server sharing is not enabled on this server" : "Berbagi server ke server tidak diaktifkan pada server ini", - "The mountpoint name contains invalid characters." : "Nama mount point berisi karakter yang tidak sah.", - "Invalid or untrusted SSL certificate" : "Sertifikast SSL tidak sah atau tidak terpercaya", - "Could not authenticate to remote share, password might be wrong" : "Tidak dapat mengautentikasi berbagi remote, kata sandi mungkin salah", - "Storage not valid" : "Penyimpanan tidak sah", - "Couldn't add remote share" : "Tidak dapat menambahkan berbagi remote", "Shared with you" : "Dibagikan dengan Anda", "Shared with others" : "Dibagikan dengan lainnya", "Shared by link" : "Dibagikan dengan tautan", @@ -16,16 +10,31 @@ OC.L10N.register( "Files and folders you share will show up here" : "Berkas dan folder yang Anda bagikan akan ditampilkan disini", "No shared links" : "Tidak ada tautan berbagi", "Files and folders you share by link will show up here" : "Berkas dan folder yang Anda bagikan menggunakan tautan akan ditampilkan disini", - "Do you want to add the remote share {name} from {owner}@{remote}?" : "Apakah Anda ingin menambahkan berbagi remote {name} dari {owner}@{remote}?", - "Remote share" : "Berbagi remote", - "Remote share password" : "Sandi berbagi remote", - "Cancel" : "Batal", - "Add remote share" : "Tambah berbagi remote", "You can upload into this folder" : "Anda dapat mengunggah kedalam folder ini", - "No ownCloud installation (7 or higher) found at {remote}" : "Tidak ditemukan instalasi ownCloud (7 atau lebih tinggi) pada {remote}", - "Invalid ownCloud url" : "URL ownCloud tidak sah", + "No compatible server found at {remote}" : "Tidak ditemukan server yang kompatibel pada {remote}", + "Invalid server URL" : "Server URL tidak valid", + "Failed to add the public link to your Nextcloud" : "Gagal menambah tautan publik ke Nextcloud Anda", + "No expiration date set" : "Tanggal kedaluwarsa tidak diatur", "Shared by" : "Dibagikan oleh", "Sharing" : "Berbagi", + "Wrong share ID, share doesn't exist" : "ID pembagian salah, tidak ada yang bisa dibagi", + "Could not delete share" : "Tidak dapat menghapus pembagian", + "Please specify a file or folder path" : "Tentukan berkas atau folder", + "Wrong path, file/folder doesn't exist" : "Salah path, berkas/folder tidak ada", + "Please specify a valid user" : "Tentukan pengguna yang valid", + "Group sharing is disabled by the administrator" : "Berbagi grup dinonaktifkan oleh administrator", + "Please specify a valid group" : "Tentukan grup yang valid", + "Public link sharing is disabled by the administrator" : "Pembagian tautan publik dinonaktifkan oleh administrator", + "Public upload disabled by the administrator" : "Pengunggahan publik dinonaktifkan oleh administrator", + "Public upload is only possible for publicly shared folders" : "Pengunggahan publik hanya bisa untuk folder yang dibagikan kepada publik", + "Invalid date, date format must be YYYY-MM-DD" : "Tanggal salah, format tanggal harus TTTT-BB-HH", + "Sharing %s failed because the back end does not allow shares from type %s" : "Gagal berbagi %s karena backend tidak mengizinkan berbagi dengan tipe %s", + "Unknown share type" : "Tipe berbagi tidak diketahui", + "Not a directory" : "Bukan direktori", + "Could not lock path" : "Tidak dapat mengunci path", + "Wrong or no update parameter given" : "Parameter salah atau tidak diperbarui", + "Can't change permissions for public share links" : "Tidak dapat mengubah izin untuk tautan berbagi publik", + "Cannot increase permissions" : "Tidak dapat menambah izin", "A file or folder has been <strong>shared</strong>" : "Sebuah berkas atau folder telah <strong>dibagikan</strong>", "A file or folder was shared from <strong>another server</strong>" : "Sebuah berkas atau folder telah dibagikan dari <strong>server lainnya</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Sebuah berkas atau folder berbagi publik telah <strong>diunduh</strong>", @@ -38,35 +47,58 @@ OC.L10N.register( "Public shared file %1$s was downloaded" : "Berkas berbagi publik %1$s telah diunduh", "You shared %1$s with %2$s" : "Anda membagikan %1$s dengan %2$s", "%2$s shared %1$s with %3$s" : "%2$s berbagi %1$s kepada %3$s", + "You removed the share of %2$s for %1$s" : "Anda menghapus pembagian %2$s untuk %1$s", + "%2$s removed the share of %3$s for %1$s" : "%2$s menghapus pembagian %3$s untuk %1$s", "You shared %1$s with group %2$s" : "Anda membagikan %1$s dengan grup %2$s", "%2$s shared %1$s with group %3$s" : "%2$s berbagi %1$s kepada grup %3$s", + "You removed the share of group %2$s for %1$s" : "Anda menghapus pembagian grup %2$s untuk %1$s", + "%2$s removed the share of group %3$s for %1$s" : "%2$s menghapus pembagian grup %3$s untuk %1$s", "%2$s shared %1$s via link" : "%2$s berbagi %1$s via tautan", "You shared %1$s via link" : "Anda membagikan %1$s via tautan", + "You removed the public link for %1$s" : "Anda menghapus tautan publik untuk %1$s", + "%2$s removed the public link for %1$s" : "%2$s menghapus tautan publik untuk %1$s", + "Your public link for %1$s expired" : "tautan publik Anda untuk %1$s kedaluwarsa", + "The public link of %2$s for %1$s expired" : "tautan publik %2$s untuk %1$s kedaluwarsa", "%2$s shared %1$s with you" : "%2$s membagikan %1$s dengan Anda", + "%2$s removed the share for %1$s" : "%2$s menghapus pembagian untuk %1$s", "Downloaded via public link" : "Diunduh via tautan publik", "Shared with %2$s" : "Dibagikan kepada %2$s", "Shared with %3$s by %2$s" : "Dibagikan kepada %3$s oleh %2$s", + "Removed share for %2$s" : "Menghapus pembagian untuk %2$s", + "%2$s removed share for %3$s" : "%2$s menghapus pembagian untuk %3$s", "Shared with group %2$s" : "Dibagikan kepada grup %2$s", "Shared with group %3$s by %2$s" : "Dibagikan kepada grup %3$s oleh %2$s", + "Removed share of group %2$s" : "Menghapus pembagian untuk grup %2$s", + "%2$s removed share of group %3$s" : "%2$s menghapus pembagian untuk grup %3$s", "Shared via link by %2$s" : "Dibagikan via tautan oleh %2$s", "Shared via public link" : "Dibagikan via tautan publik", + "Removed public link" : "tautan publik dihapus", + "%2$s removed public link" : "%2$s menghapus tautan publik", + "Public link expired" : "tautan publik kedaluwarsa", + "Public link of %2$s expired" : "tautan publik untuk %2$s kedaluwarsa", "Shared by %2$s" : "Dibagikan oleh %2$s", "Shares" : "Dibagikan", + "Share API is disabled" : "API pembagian dinonaktifkan", "This share is password-protected" : "Berbagi ini dilindungi sandi", "The password is wrong. Try again." : "Sandi salah. Coba lagi", "Password" : "Sandi", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", "Name" : "Nama", "Share time" : "Waktu berbagi", + "Expiration date" : "Tanggal kedaluwarsa", "Sorry, this link doesn’t seem to work anymore." : "Maaf, tautan ini tampaknya tidak berfungsi lagi.", "Reasons might be:" : "Alasan yang mungkin:", "the item was removed" : "item telah dihapus", - "the link expired" : "tautan telah kadaluarsa", + "the link expired" : "tautan telah kedaluwarsa", "sharing is disabled" : "berbagi dinonaktifkan", "For more info, please ask the person who sent this link." : "Untuk info lebih lanjut, silakan tanyakan orang yang mengirim tautan ini.", - "Add to your ownCloud" : "Tambahkan ke ownCloud Anda", + "Add to your Nextcloud" : "Tambahkan ke Nextcloud Anda", "Download" : "Unduh", "Download %s" : "Unduh %s", - "Direct link" : "Tautan langsung" + "Direct link" : "Tautan langsung", + "Upload files to %s" : "Unggah berkas ke %s", + "Select or drop files" : "Pilih atau drop berkas", + "Uploading files…" : "Mengunggah berkas...", + "Uploaded files:" : "Berkas terunggah:" }, "nplurals=1; plural=0;"); diff --git a/apps/files_sharing/l10n/id.json b/apps/files_sharing/l10n/id.json index ec1b2357f42..d51c0eb73bb 100644 --- a/apps/files_sharing/l10n/id.json +++ b/apps/files_sharing/l10n/id.json @@ -1,10 +1,4 @@ { "translations": { - "Server to server sharing is not enabled on this server" : "Berbagi server ke server tidak diaktifkan pada server ini", - "The mountpoint name contains invalid characters." : "Nama mount point berisi karakter yang tidak sah.", - "Invalid or untrusted SSL certificate" : "Sertifikast SSL tidak sah atau tidak terpercaya", - "Could not authenticate to remote share, password might be wrong" : "Tidak dapat mengautentikasi berbagi remote, kata sandi mungkin salah", - "Storage not valid" : "Penyimpanan tidak sah", - "Couldn't add remote share" : "Tidak dapat menambahkan berbagi remote", "Shared with you" : "Dibagikan dengan Anda", "Shared with others" : "Dibagikan dengan lainnya", "Shared by link" : "Dibagikan dengan tautan", @@ -14,16 +8,31 @@ "Files and folders you share will show up here" : "Berkas dan folder yang Anda bagikan akan ditampilkan disini", "No shared links" : "Tidak ada tautan berbagi", "Files and folders you share by link will show up here" : "Berkas dan folder yang Anda bagikan menggunakan tautan akan ditampilkan disini", - "Do you want to add the remote share {name} from {owner}@{remote}?" : "Apakah Anda ingin menambahkan berbagi remote {name} dari {owner}@{remote}?", - "Remote share" : "Berbagi remote", - "Remote share password" : "Sandi berbagi remote", - "Cancel" : "Batal", - "Add remote share" : "Tambah berbagi remote", "You can upload into this folder" : "Anda dapat mengunggah kedalam folder ini", - "No ownCloud installation (7 or higher) found at {remote}" : "Tidak ditemukan instalasi ownCloud (7 atau lebih tinggi) pada {remote}", - "Invalid ownCloud url" : "URL ownCloud tidak sah", + "No compatible server found at {remote}" : "Tidak ditemukan server yang kompatibel pada {remote}", + "Invalid server URL" : "Server URL tidak valid", + "Failed to add the public link to your Nextcloud" : "Gagal menambah tautan publik ke Nextcloud Anda", + "No expiration date set" : "Tanggal kedaluwarsa tidak diatur", "Shared by" : "Dibagikan oleh", "Sharing" : "Berbagi", + "Wrong share ID, share doesn't exist" : "ID pembagian salah, tidak ada yang bisa dibagi", + "Could not delete share" : "Tidak dapat menghapus pembagian", + "Please specify a file or folder path" : "Tentukan berkas atau folder", + "Wrong path, file/folder doesn't exist" : "Salah path, berkas/folder tidak ada", + "Please specify a valid user" : "Tentukan pengguna yang valid", + "Group sharing is disabled by the administrator" : "Berbagi grup dinonaktifkan oleh administrator", + "Please specify a valid group" : "Tentukan grup yang valid", + "Public link sharing is disabled by the administrator" : "Pembagian tautan publik dinonaktifkan oleh administrator", + "Public upload disabled by the administrator" : "Pengunggahan publik dinonaktifkan oleh administrator", + "Public upload is only possible for publicly shared folders" : "Pengunggahan publik hanya bisa untuk folder yang dibagikan kepada publik", + "Invalid date, date format must be YYYY-MM-DD" : "Tanggal salah, format tanggal harus TTTT-BB-HH", + "Sharing %s failed because the back end does not allow shares from type %s" : "Gagal berbagi %s karena backend tidak mengizinkan berbagi dengan tipe %s", + "Unknown share type" : "Tipe berbagi tidak diketahui", + "Not a directory" : "Bukan direktori", + "Could not lock path" : "Tidak dapat mengunci path", + "Wrong or no update parameter given" : "Parameter salah atau tidak diperbarui", + "Can't change permissions for public share links" : "Tidak dapat mengubah izin untuk tautan berbagi publik", + "Cannot increase permissions" : "Tidak dapat menambah izin", "A file or folder has been <strong>shared</strong>" : "Sebuah berkas atau folder telah <strong>dibagikan</strong>", "A file or folder was shared from <strong>another server</strong>" : "Sebuah berkas atau folder telah dibagikan dari <strong>server lainnya</strong>", "A public shared file or folder was <strong>downloaded</strong>" : "Sebuah berkas atau folder berbagi publik telah <strong>diunduh</strong>", @@ -36,35 +45,58 @@ "Public shared file %1$s was downloaded" : "Berkas berbagi publik %1$s telah diunduh", "You shared %1$s with %2$s" : "Anda membagikan %1$s dengan %2$s", "%2$s shared %1$s with %3$s" : "%2$s berbagi %1$s kepada %3$s", + "You removed the share of %2$s for %1$s" : "Anda menghapus pembagian %2$s untuk %1$s", + "%2$s removed the share of %3$s for %1$s" : "%2$s menghapus pembagian %3$s untuk %1$s", "You shared %1$s with group %2$s" : "Anda membagikan %1$s dengan grup %2$s", "%2$s shared %1$s with group %3$s" : "%2$s berbagi %1$s kepada grup %3$s", + "You removed the share of group %2$s for %1$s" : "Anda menghapus pembagian grup %2$s untuk %1$s", + "%2$s removed the share of group %3$s for %1$s" : "%2$s menghapus pembagian grup %3$s untuk %1$s", "%2$s shared %1$s via link" : "%2$s berbagi %1$s via tautan", "You shared %1$s via link" : "Anda membagikan %1$s via tautan", + "You removed the public link for %1$s" : "Anda menghapus tautan publik untuk %1$s", + "%2$s removed the public link for %1$s" : "%2$s menghapus tautan publik untuk %1$s", + "Your public link for %1$s expired" : "tautan publik Anda untuk %1$s kedaluwarsa", + "The public link of %2$s for %1$s expired" : "tautan publik %2$s untuk %1$s kedaluwarsa", "%2$s shared %1$s with you" : "%2$s membagikan %1$s dengan Anda", + "%2$s removed the share for %1$s" : "%2$s menghapus pembagian untuk %1$s", "Downloaded via public link" : "Diunduh via tautan publik", "Shared with %2$s" : "Dibagikan kepada %2$s", "Shared with %3$s by %2$s" : "Dibagikan kepada %3$s oleh %2$s", + "Removed share for %2$s" : "Menghapus pembagian untuk %2$s", + "%2$s removed share for %3$s" : "%2$s menghapus pembagian untuk %3$s", "Shared with group %2$s" : "Dibagikan kepada grup %2$s", "Shared with group %3$s by %2$s" : "Dibagikan kepada grup %3$s oleh %2$s", + "Removed share of group %2$s" : "Menghapus pembagian untuk grup %2$s", + "%2$s removed share of group %3$s" : "%2$s menghapus pembagian untuk grup %3$s", "Shared via link by %2$s" : "Dibagikan via tautan oleh %2$s", "Shared via public link" : "Dibagikan via tautan publik", + "Removed public link" : "tautan publik dihapus", + "%2$s removed public link" : "%2$s menghapus tautan publik", + "Public link expired" : "tautan publik kedaluwarsa", + "Public link of %2$s expired" : "tautan publik untuk %2$s kedaluwarsa", "Shared by %2$s" : "Dibagikan oleh %2$s", "Shares" : "Dibagikan", + "Share API is disabled" : "API pembagian dinonaktifkan", "This share is password-protected" : "Berbagi ini dilindungi sandi", "The password is wrong. Try again." : "Sandi salah. Coba lagi", "Password" : "Sandi", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", "Name" : "Nama", "Share time" : "Waktu berbagi", + "Expiration date" : "Tanggal kedaluwarsa", "Sorry, this link doesn’t seem to work anymore." : "Maaf, tautan ini tampaknya tidak berfungsi lagi.", "Reasons might be:" : "Alasan yang mungkin:", "the item was removed" : "item telah dihapus", - "the link expired" : "tautan telah kadaluarsa", + "the link expired" : "tautan telah kedaluwarsa", "sharing is disabled" : "berbagi dinonaktifkan", "For more info, please ask the person who sent this link." : "Untuk info lebih lanjut, silakan tanyakan orang yang mengirim tautan ini.", - "Add to your ownCloud" : "Tambahkan ke ownCloud Anda", + "Add to your Nextcloud" : "Tambahkan ke Nextcloud Anda", "Download" : "Unduh", "Download %s" : "Unduh %s", - "Direct link" : "Tautan langsung" + "Direct link" : "Tautan langsung", + "Upload files to %s" : "Unggah berkas ke %s", + "Select or drop files" : "Pilih atau drop berkas", + "Uploading files…" : "Mengunggah berkas...", + "Uploaded files:" : "Berkas terunggah:" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/is.js b/apps/files_sharing/l10n/is.js index c598282e23d..edd18ec47be 100644 --- a/apps/files_sharing/l10n/is.js +++ b/apps/files_sharing/l10n/is.js @@ -70,14 +70,20 @@ OC.L10N.register( "No entries found in this folder" : "Engar skrár fundust í þessari möppu", "Name" : "Nafn", "Share time" : "Deilingartími", + "Expiration date" : "Gildir til", "Sorry, this link doesn’t seem to work anymore." : "Því miður, þessi tengill virðist ekki virka lengur.", "Reasons might be:" : "Mögulegar ástæður gætu verið:", "the item was removed" : "atriðið var fjarlægt", "the link expired" : "tengillinn er útrunninn", "sharing is disabled" : "slökkt er á skráadeilingu", "For more info, please ask the person who sent this link." : "Til að vita meira skaltu hafa samband við þann sem sendi þér þennan tengil.", + "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud", "Download" : "Niðurhal", "Download %s" : "Sækja %s", - "Direct link" : "Beinn tengill" + "Direct link" : "Beinn tengill", + "Upload files to %s" : "Senda inn skrár á %s", + "Select or drop files" : "Veldu eða slepptu skrám", + "Uploading files…" : "Sendi inn skrár…", + "Uploaded files:" : "Innsendar skrár:" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/files_sharing/l10n/is.json b/apps/files_sharing/l10n/is.json index 24b446ec9e8..6a64dd5f292 100644 --- a/apps/files_sharing/l10n/is.json +++ b/apps/files_sharing/l10n/is.json @@ -68,14 +68,20 @@ "No entries found in this folder" : "Engar skrár fundust í þessari möppu", "Name" : "Nafn", "Share time" : "Deilingartími", + "Expiration date" : "Gildir til", "Sorry, this link doesn’t seem to work anymore." : "Því miður, þessi tengill virðist ekki virka lengur.", "Reasons might be:" : "Mögulegar ástæður gætu verið:", "the item was removed" : "atriðið var fjarlægt", "the link expired" : "tengillinn er útrunninn", "sharing is disabled" : "slökkt er á skráadeilingu", "For more info, please ask the person who sent this link." : "Til að vita meira skaltu hafa samband við þann sem sendi þér þennan tengil.", + "Add to your Nextcloud" : "Bæta í þitt eigið Nextcloud", "Download" : "Niðurhal", "Download %s" : "Sækja %s", - "Direct link" : "Beinn tengill" + "Direct link" : "Beinn tengill", + "Upload files to %s" : "Senda inn skrár á %s", + "Select or drop files" : "Veldu eða slepptu skrám", + "Uploading files…" : "Sendi inn skrár…", + "Uploaded files:" : "Innsendar skrár:" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index 020fb6926d9..866e9b86705 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -13,10 +13,10 @@ OC.L10N.register( "You can upload into this folder" : "Puoi caricare in questa cartella", "No compatible server found at {remote}" : "Nessun server compatibile trovato su {remote}", "Invalid server URL" : "URL del server non valido", + "Failed to add the public link to your Nextcloud" : "Aggiunta del collegamento pubblico al tuo Nextcloud non riuscita", "No expiration date set" : "Nessuna data di scandenza impostata", "Shared by" : "Condiviso da", "Sharing" : "Condivisione", - "Share API is disabled" : "API di condivisione disabilitate", "Wrong share ID, share doesn't exist" : "ID di condivisione errato, la condivisione non esiste", "Could not delete share" : "impossibile eliminare la condivisione", "Please specify a file or folder path" : "Specifica un percorso di un file o di una cartella", @@ -32,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Tipo di condivisione sconosciuto", "Not a directory" : "Non è una cartella", "Could not lock path" : "Impossibile bloccare il percorso", - "Can't change permissions for public share links" : "Impossibile cambiare i permessi per i collegamenti di condivisione pubblici", "Wrong or no update parameter given" : "Parametro fornito non valido o non di aggiornamento", + "Can't change permissions for public share links" : "Impossibile cambiare i permessi per i collegamenti di condivisione pubblici", "Cannot increase permissions" : "Impossibile aumentare i permessi", "A file or folder has been <strong>shared</strong>" : "Un file o una cartella è stato <strong>condiviso</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>", @@ -78,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "il collegamento pubblico di %2$s è scaduto", "Shared by %2$s" : "Condivisa da %2$s", "Shares" : "Condivisioni", + "Share API is disabled" : "API di condivisione disabilitate", "This share is password-protected" : "Questa condivisione è protetta da password", "The password is wrong. Try again." : "La password è errata. Prova ancora.", "Password" : "Password", @@ -91,6 +92,7 @@ OC.L10N.register( "the link expired" : "il collegamento è scaduto", "sharing is disabled" : "la condivisione è disabilitata", "For more info, please ask the person who sent this link." : "Per ulteriori informazioni, chiedi alla persona che ti ha inviato il collegamento.", + "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud", "Download" : "Scarica", "Download %s" : "Scarica %s", "Direct link" : "Collegamento diretto", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index 8b3076c3b3b..733c604bfc5 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -11,10 +11,10 @@ "You can upload into this folder" : "Puoi caricare in questa cartella", "No compatible server found at {remote}" : "Nessun server compatibile trovato su {remote}", "Invalid server URL" : "URL del server non valido", + "Failed to add the public link to your Nextcloud" : "Aggiunta del collegamento pubblico al tuo Nextcloud non riuscita", "No expiration date set" : "Nessuna data di scandenza impostata", "Shared by" : "Condiviso da", "Sharing" : "Condivisione", - "Share API is disabled" : "API di condivisione disabilitate", "Wrong share ID, share doesn't exist" : "ID di condivisione errato, la condivisione non esiste", "Could not delete share" : "impossibile eliminare la condivisione", "Please specify a file or folder path" : "Specifica un percorso di un file o di una cartella", @@ -30,8 +30,8 @@ "Unknown share type" : "Tipo di condivisione sconosciuto", "Not a directory" : "Non è una cartella", "Could not lock path" : "Impossibile bloccare il percorso", - "Can't change permissions for public share links" : "Impossibile cambiare i permessi per i collegamenti di condivisione pubblici", "Wrong or no update parameter given" : "Parametro fornito non valido o non di aggiornamento", + "Can't change permissions for public share links" : "Impossibile cambiare i permessi per i collegamenti di condivisione pubblici", "Cannot increase permissions" : "Impossibile aumentare i permessi", "A file or folder has been <strong>shared</strong>" : "Un file o una cartella è stato <strong>condiviso</strong>", "A file or folder was shared from <strong>another server</strong>" : "Un file o una cartella è stato condiviso da <strong>un altro server</strong>", @@ -76,6 +76,7 @@ "Public link of %2$s expired" : "il collegamento pubblico di %2$s è scaduto", "Shared by %2$s" : "Condivisa da %2$s", "Shares" : "Condivisioni", + "Share API is disabled" : "API di condivisione disabilitate", "This share is password-protected" : "Questa condivisione è protetta da password", "The password is wrong. Try again." : "La password è errata. Prova ancora.", "Password" : "Password", @@ -89,6 +90,7 @@ "the link expired" : "il collegamento è scaduto", "sharing is disabled" : "la condivisione è disabilitata", "For more info, please ask the person who sent this link." : "Per ulteriori informazioni, chiedi alla persona che ti ha inviato il collegamento.", + "Add to your Nextcloud" : "Aggiungi al tuo Nextcloud", "Download" : "Scarica", "Download %s" : "Scarica %s", "Direct link" : "Collegamento diretto", diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index 6ba05aedf9c..e1558b6e5db 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -16,7 +16,6 @@ OC.L10N.register( "No expiration date set" : "有効期限が未設定", "Shared by" : "共有者:", "Sharing" : "共有", - "Share API is disabled" : "共有APIが無効です。", "Wrong share ID, share doesn't exist" : "共有IDが間違っています。共有がありません。", "Could not delete share" : "共有を削除できませんでした", "Please specify a file or folder path" : "ファイルかフォルダーのパスを指定してください", @@ -32,8 +31,8 @@ OC.L10N.register( "Unknown share type" : "不明な共有タイプ", "Not a directory" : "ディレクトリではありません", "Could not lock path" : "パスをロックできませんでした", - "Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません", "Wrong or no update parameter given" : "間違っている、もしくはパラメータが更新されていません", + "Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません", "Cannot increase permissions" : "パーミッションを追加できません", "A file or folder has been <strong>shared</strong>" : "ファイルまたはフォルダーが<strong>共有</strong>されたとき", "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーが<strong>他のサーバー</strong>から共有されたとき", @@ -78,6 +77,7 @@ OC.L10N.register( "Public link of %2$s expired" : "公開リンク%2$sの期限が切れています", "Shared by %2$s" : "%2$s が共有", "Shares" : "共有", + "Share API is disabled" : "共有APIが無効です。", "This share is password-protected" : "この共有はパスワードで保護されています", "The password is wrong. Try again." : "パスワードが間違っています。再試行してください。", "Password" : "パスワード", diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index 838f2a63c8a..cd7351abc5f 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -14,7 +14,6 @@ "No expiration date set" : "有効期限が未設定", "Shared by" : "共有者:", "Sharing" : "共有", - "Share API is disabled" : "共有APIが無効です。", "Wrong share ID, share doesn't exist" : "共有IDが間違っています。共有がありません。", "Could not delete share" : "共有を削除できませんでした", "Please specify a file or folder path" : "ファイルかフォルダーのパスを指定してください", @@ -30,8 +29,8 @@ "Unknown share type" : "不明な共有タイプ", "Not a directory" : "ディレクトリではありません", "Could not lock path" : "パスをロックできませんでした", - "Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません", "Wrong or no update parameter given" : "間違っている、もしくはパラメータが更新されていません", + "Can't change permissions for public share links" : "URLリンク共有のパーミッションを変更できません", "Cannot increase permissions" : "パーミッションを追加できません", "A file or folder has been <strong>shared</strong>" : "ファイルまたはフォルダーが<strong>共有</strong>されたとき", "A file or folder was shared from <strong>another server</strong>" : "ファイルまたはフォルダーが<strong>他のサーバー</strong>から共有されたとき", @@ -76,6 +75,7 @@ "Public link of %2$s expired" : "公開リンク%2$sの期限が切れています", "Shared by %2$s" : "%2$s が共有", "Shares" : "共有", + "Share API is disabled" : "共有APIが無効です。", "This share is password-protected" : "この共有はパスワードで保護されています", "The password is wrong. Try again." : "パスワードが間違っています。再試行してください。", "Password" : "パスワード", diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index 4a07a78d70f..05322861217 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -1,8 +1,8 @@ OC.L10N.register( "files_sharing", { - "Shared with you" : "Deelde met je", - "Shared with others" : "Gedeeld door u", + "Shared with you" : "Gedeeld met je", + "Shared with others" : "Gedeeld met anderen", "Shared by link" : "Gedeeld via een link", "Nothing shared with you yet" : "Nog niets met u gedeeld", "Files and folders others share with you will show up here" : "Bestanden en mappen die anderen met je delen, worden hier getoond", @@ -17,7 +17,6 @@ OC.L10N.register( "No expiration date set" : "Geen vervaldatum ingesteld", "Shared by" : "Gedeeld door", "Sharing" : "Delen", - "Share API is disabled" : "Delen API is uitgeschakeld", "Wrong share ID, share doesn't exist" : "Onjuist deel-ID, de share bestaat niet", "Could not delete share" : "Kon share niet verwijderen", "Please specify a file or folder path" : "Geef een bestand of pad van een map op", @@ -33,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Onbekend type share", "Not a directory" : "Geen directory", "Could not lock path" : "Kon pad niet blokkeren", + "Wrong or no update parameter given" : "Verkeerde of geen update parameter opgegeven", "Can't change permissions for public share links" : "Kan permissies voor openbare share links niet wijzigen", - "Wrong or no update parameter given" : "Verkeerde of geen update parameter gegeven", "Cannot increase permissions" : "Kan de rechten niet verruimen", "A file or folder has been <strong>shared</strong>" : "Een bestand of map is <strong>gedeeld</strong>", "A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>", @@ -52,13 +51,13 @@ OC.L10N.register( "%2$s removed the share of %3$s for %1$s" : "%2$s heeft de share van %1$s met %3$s verwijderd", "You shared %1$s with group %2$s" : "Je deelde %1$s met groep %2$s", "%2$s shared %1$s with group %3$s" : "%2$s deelde %1$s met groep %3$s", - "You removed the share of group %2$s for %1$s" : "Je heeft de share van %1$s met de groep %2$s verwijderd", + "You removed the share of group %2$s for %1$s" : "Je hebt de share van %1$s met de groep %2$s verwijderd", "%2$s removed the share of group %3$s for %1$s" : "%2$s heeft de share van %1$s met de groep %3$s verwijderd", "%2$s shared %1$s via link" : "%2$s deelde %1$s via link", "You shared %1$s via link" : "Je deelde %1$s via link", - "You removed the public link for %1$s" : "U heeft de openbare link voor %1$s verwijderd", + "You removed the public link for %1$s" : "Je hebt de openbare link voor %1$s verwijderd", "%2$s removed the public link for %1$s" : "%2$s heeft de openbare link voor %1$s verwijderd", - "Your public link for %1$s expired" : "Uw openbare link voor %1$s is verlopen", + "Your public link for %1$s expired" : "Je openbare link voor %1$s is verlopen", "The public link of %2$s for %1$s expired" : "De openbare link van %2$s voor %1$s is verlopen", "%2$s shared %1$s with you" : "%2$s deelde %1$s met u", "%2$s removed the share for %1$s" : "%2$s heeft de share van %1$s verwijderd", @@ -79,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Openbare link van %2$s is verlopen", "Shared by %2$s" : "Gedeeld door %2$s", "Shares" : "Gedeeld", + "Share API is disabled" : "Delen API is uitgeschakeld", "This share is password-protected" : "Deze share is met een wachtwoord beveiligd", "The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.", "Password" : "Wachtwoord", diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 0bbbf05b81f..788feb3fd99 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -1,6 +1,6 @@ { "translations": { - "Shared with you" : "Deelde met je", - "Shared with others" : "Gedeeld door u", + "Shared with you" : "Gedeeld met je", + "Shared with others" : "Gedeeld met anderen", "Shared by link" : "Gedeeld via een link", "Nothing shared with you yet" : "Nog niets met u gedeeld", "Files and folders others share with you will show up here" : "Bestanden en mappen die anderen met je delen, worden hier getoond", @@ -15,7 +15,6 @@ "No expiration date set" : "Geen vervaldatum ingesteld", "Shared by" : "Gedeeld door", "Sharing" : "Delen", - "Share API is disabled" : "Delen API is uitgeschakeld", "Wrong share ID, share doesn't exist" : "Onjuist deel-ID, de share bestaat niet", "Could not delete share" : "Kon share niet verwijderen", "Please specify a file or folder path" : "Geef een bestand of pad van een map op", @@ -31,8 +30,8 @@ "Unknown share type" : "Onbekend type share", "Not a directory" : "Geen directory", "Could not lock path" : "Kon pad niet blokkeren", + "Wrong or no update parameter given" : "Verkeerde of geen update parameter opgegeven", "Can't change permissions for public share links" : "Kan permissies voor openbare share links niet wijzigen", - "Wrong or no update parameter given" : "Verkeerde of geen update parameter gegeven", "Cannot increase permissions" : "Kan de rechten niet verruimen", "A file or folder has been <strong>shared</strong>" : "Een bestand of map is <strong>gedeeld</strong>", "A file or folder was shared from <strong>another server</strong>" : "Een bestand of map werd gedeeld vanaf <strong>een andere server</strong>", @@ -50,13 +49,13 @@ "%2$s removed the share of %3$s for %1$s" : "%2$s heeft de share van %1$s met %3$s verwijderd", "You shared %1$s with group %2$s" : "Je deelde %1$s met groep %2$s", "%2$s shared %1$s with group %3$s" : "%2$s deelde %1$s met groep %3$s", - "You removed the share of group %2$s for %1$s" : "Je heeft de share van %1$s met de groep %2$s verwijderd", + "You removed the share of group %2$s for %1$s" : "Je hebt de share van %1$s met de groep %2$s verwijderd", "%2$s removed the share of group %3$s for %1$s" : "%2$s heeft de share van %1$s met de groep %3$s verwijderd", "%2$s shared %1$s via link" : "%2$s deelde %1$s via link", "You shared %1$s via link" : "Je deelde %1$s via link", - "You removed the public link for %1$s" : "U heeft de openbare link voor %1$s verwijderd", + "You removed the public link for %1$s" : "Je hebt de openbare link voor %1$s verwijderd", "%2$s removed the public link for %1$s" : "%2$s heeft de openbare link voor %1$s verwijderd", - "Your public link for %1$s expired" : "Uw openbare link voor %1$s is verlopen", + "Your public link for %1$s expired" : "Je openbare link voor %1$s is verlopen", "The public link of %2$s for %1$s expired" : "De openbare link van %2$s voor %1$s is verlopen", "%2$s shared %1$s with you" : "%2$s deelde %1$s met u", "%2$s removed the share for %1$s" : "%2$s heeft de share van %1$s verwijderd", @@ -77,6 +76,7 @@ "Public link of %2$s expired" : "Openbare link van %2$s is verlopen", "Shared by %2$s" : "Gedeeld door %2$s", "Shares" : "Gedeeld", + "Share API is disabled" : "Delen API is uitgeschakeld", "This share is password-protected" : "Deze share is met een wachtwoord beveiligd", "The password is wrong. Try again." : "Wachtwoord ongeldig. Probeer het nogmaals.", "Password" : "Wachtwoord", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index b203543bd8e..744595576e4 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -17,7 +17,6 @@ OC.L10N.register( "No expiration date set" : "Nenhuma data de expiração definida", "Shared by" : "Compartilhado por", "Sharing" : "Compartilhamento", - "Share API is disabled" : "O compartilhamento de API está desabilitado.", "Wrong share ID, share doesn't exist" : "ID de compartilhamento errado, o compartilhamento não existe", "Could not delete share" : "Não foi possível eliminar o compartilhamento", "Please specify a file or folder path" : "Por favor especifique um arquivo ou caminho", @@ -33,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Tipo de compartilhamento desconhecido", "Not a directory" : "Não é um diretório", "Could not lock path" : "Não foi possível bloquear o caminho", - "Can't change permissions for public share links" : "Não é possível alterar permissões para compartilhar links públicos", "Wrong or no update parameter given" : "Está errado ou nenhum parâmetro de atualização foi fornecido", + "Can't change permissions for public share links" : "Não é possível alterar permissões para compartilhar links públicos", "Cannot increase permissions" : "Não pode haver aumento de permissões", "A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ", "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhado a partir de <strong>outro servidor</strong>", @@ -79,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "O link público de %2$s expirou", "Shared by %2$s" : "Compartilhado por %2$s", "Shares" : "Compartilhamentos", + "Share API is disabled" : "O compartilhamento de API está desabilitado.", "This share is password-protected" : "Este compartilhamento esta protegido por senha", "The password is wrong. Try again." : "Senha incorreta. Tente novamente.", "Password" : "Senha", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index e2f2d6a125f..d45445a0adc 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -15,7 +15,6 @@ "No expiration date set" : "Nenhuma data de expiração definida", "Shared by" : "Compartilhado por", "Sharing" : "Compartilhamento", - "Share API is disabled" : "O compartilhamento de API está desabilitado.", "Wrong share ID, share doesn't exist" : "ID de compartilhamento errado, o compartilhamento não existe", "Could not delete share" : "Não foi possível eliminar o compartilhamento", "Please specify a file or folder path" : "Por favor especifique um arquivo ou caminho", @@ -31,8 +30,8 @@ "Unknown share type" : "Tipo de compartilhamento desconhecido", "Not a directory" : "Não é um diretório", "Could not lock path" : "Não foi possível bloquear o caminho", - "Can't change permissions for public share links" : "Não é possível alterar permissões para compartilhar links públicos", "Wrong or no update parameter given" : "Está errado ou nenhum parâmetro de atualização foi fornecido", + "Can't change permissions for public share links" : "Não é possível alterar permissões para compartilhar links públicos", "Cannot increase permissions" : "Não pode haver aumento de permissões", "A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ", "A file or folder was shared from <strong>another server</strong>" : "Um arquivo ou pasta foi compartilhado a partir de <strong>outro servidor</strong>", @@ -77,6 +76,7 @@ "Public link of %2$s expired" : "O link público de %2$s expirou", "Shared by %2$s" : "Compartilhado por %2$s", "Shares" : "Compartilhamentos", + "Share API is disabled" : "O compartilhamento de API está desabilitado.", "This share is password-protected" : "Este compartilhamento esta protegido por senha", "The password is wrong. Try again." : "Senha incorreta. Tente novamente.", "Password" : "Senha", diff --git a/apps/files_sharing/l10n/pt_PT.js b/apps/files_sharing/l10n/pt_PT.js index e1488dfd663..310587d4366 100644 --- a/apps/files_sharing/l10n/pt_PT.js +++ b/apps/files_sharing/l10n/pt_PT.js @@ -13,7 +13,6 @@ OC.L10N.register( "You can upload into this folder" : "Pode enviar para esta pasta", "Shared by" : "Partilhado por", "Sharing" : "Partilha", - "Share API is disabled" : "A partilha de API está desativada", "Wrong share ID, share doesn't exist" : "Id. de partilha errada, a partilha não existe", "Could not delete share" : "Não foi possível eliminar a partilha", "Please specify a file or folder path" : "Por favor, especifique um ficheiro ou caminho de pasta", @@ -29,8 +28,8 @@ OC.L10N.register( "Unknown share type" : "Tipo de partilha desconhecido", "Not a directory" : "Não é uma diretoria", "Could not lock path" : "Não foi possível bloquear o caminho", - "Can't change permissions for public share links" : "Não é possível alterar as permissões para as hiperligações de partilha pública", "Wrong or no update parameter given" : "Parâmetro indicado errado ou desatualizado", + "Can't change permissions for public share links" : "Não é possível alterar as permissões para as hiperligações de partilha pública", "Cannot increase permissions" : "Não é possível incrementar as permissões", "A file or folder has been <strong>shared</strong>" : "Foi <strong>partilhado</strong> um ficheiro ou uma pasta", "A file or folder was shared from <strong>another server</strong>" : "Um ficheiro ou pasta foi partilhado a partir de <strong>outro servidor</strong>", @@ -75,6 +74,7 @@ OC.L10N.register( "Public link of %2$s expired" : "A hiperligação pública de %2$s expirou", "Shared by %2$s" : "Partilhado por %2$s", "Shares" : "Partilhas", + "Share API is disabled" : "A partilha de API está desativada", "This share is password-protected" : "Esta partilha está protegida por palavra-passe", "The password is wrong. Try again." : "A palavra-passe está errada. Por favor, tente de novo.", "Password" : "Palavra-passe", diff --git a/apps/files_sharing/l10n/pt_PT.json b/apps/files_sharing/l10n/pt_PT.json index 986b623a320..1ad593da9ea 100644 --- a/apps/files_sharing/l10n/pt_PT.json +++ b/apps/files_sharing/l10n/pt_PT.json @@ -11,7 +11,6 @@ "You can upload into this folder" : "Pode enviar para esta pasta", "Shared by" : "Partilhado por", "Sharing" : "Partilha", - "Share API is disabled" : "A partilha de API está desativada", "Wrong share ID, share doesn't exist" : "Id. de partilha errada, a partilha não existe", "Could not delete share" : "Não foi possível eliminar a partilha", "Please specify a file or folder path" : "Por favor, especifique um ficheiro ou caminho de pasta", @@ -27,8 +26,8 @@ "Unknown share type" : "Tipo de partilha desconhecido", "Not a directory" : "Não é uma diretoria", "Could not lock path" : "Não foi possível bloquear o caminho", - "Can't change permissions for public share links" : "Não é possível alterar as permissões para as hiperligações de partilha pública", "Wrong or no update parameter given" : "Parâmetro indicado errado ou desatualizado", + "Can't change permissions for public share links" : "Não é possível alterar as permissões para as hiperligações de partilha pública", "Cannot increase permissions" : "Não é possível incrementar as permissões", "A file or folder has been <strong>shared</strong>" : "Foi <strong>partilhado</strong> um ficheiro ou uma pasta", "A file or folder was shared from <strong>another server</strong>" : "Um ficheiro ou pasta foi partilhado a partir de <strong>outro servidor</strong>", @@ -73,6 +72,7 @@ "Public link of %2$s expired" : "A hiperligação pública de %2$s expirou", "Shared by %2$s" : "Partilhado por %2$s", "Shares" : "Partilhas", + "Share API is disabled" : "A partilha de API está desativada", "This share is password-protected" : "Esta partilha está protegida por palavra-passe", "The password is wrong. Try again." : "A palavra-passe está errada. Por favor, tente de novo.", "Password" : "Palavra-passe", diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index 2c6e97ff777..14d55f598f0 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -13,10 +13,10 @@ OC.L10N.register( "You can upload into this folder" : "Вы можете загружать в эту папку", "No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}", "Invalid server URL" : "Неверный URL сервера", + "Failed to add the public link to your Nextcloud" : "Не получилось добавить публичную ссылку на ваш Nextcloud", "No expiration date set" : "Дата истечения не установлена", "Shared by" : "Поделился", "Sharing" : "Общий доступ", - "Share API is disabled" : "API общего доступа отключён", "Wrong share ID, share doesn't exist" : "Неверный идентификатор публикации, публикация не существует", "Could not delete share" : "Не удалось удалить публикацию", "Please specify a file or folder path" : "Пожалуйста, укажите путь к файлу или каталогу", @@ -32,8 +32,8 @@ OC.L10N.register( "Unknown share type" : "Предоставление доступа неизвестного типа", "Not a directory" : "Это не каталог", "Could not lock path" : "Не удалось заблокировать путь", - "Can't change permissions for public share links" : "Невозможно изменить права для публикации через ссылку", "Wrong or no update parameter given" : "Параметр для изменения неправилен или не задан", + "Can't change permissions for public share links" : "Невозможно изменить права для публикации через ссылку", "Cannot increase permissions" : "Нельзя увеличить права", "A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог", "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>", @@ -78,6 +78,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Срок действия публичной ссылки к %2$s закончился", "Shared by %2$s" : "Поделился %2$s", "Shares" : "События обмена файлами", + "Share API is disabled" : "API общего доступа отключён", "This share is password-protected" : "Общий ресурс защищен паролем", "The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.", "Password" : "Пароль", @@ -91,10 +92,12 @@ OC.L10N.register( "the link expired" : "срок действия ссылки истёк", "sharing is disabled" : "общий доступ отключён", "For more info, please ask the person who sent this link." : "Для получения дополнительной информации, свяжитесь с тем, кто отправил вам эту ссылку.", + "Add to your Nextcloud" : "Добавить к вашему Nextcloud", "Download" : "Скачать", "Download %s" : "Скачать %s", "Direct link" : "Прямая ссылка", "Upload files to %s" : "Загрузка файлов в %s", + "Select or drop files" : "Выбрать или сбросить файлы", "Uploading files…" : "Загрузка файлов...", "Uploaded files:" : "Загруженные файлы:" }, diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index fdd25e2c8bc..a9dd1314aa1 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -11,10 +11,10 @@ "You can upload into this folder" : "Вы можете загружать в эту папку", "No compatible server found at {remote}" : "Не найден совместимый сервер на {remote}", "Invalid server URL" : "Неверный URL сервера", + "Failed to add the public link to your Nextcloud" : "Не получилось добавить публичную ссылку на ваш Nextcloud", "No expiration date set" : "Дата истечения не установлена", "Shared by" : "Поделился", "Sharing" : "Общий доступ", - "Share API is disabled" : "API общего доступа отключён", "Wrong share ID, share doesn't exist" : "Неверный идентификатор публикации, публикация не существует", "Could not delete share" : "Не удалось удалить публикацию", "Please specify a file or folder path" : "Пожалуйста, укажите путь к файлу или каталогу", @@ -30,8 +30,8 @@ "Unknown share type" : "Предоставление доступа неизвестного типа", "Not a directory" : "Это не каталог", "Could not lock path" : "Не удалось заблокировать путь", - "Can't change permissions for public share links" : "Невозможно изменить права для публикации через ссылку", "Wrong or no update parameter given" : "Параметр для изменения неправилен или не задан", + "Can't change permissions for public share links" : "Невозможно изменить права для публикации через ссылку", "Cannot increase permissions" : "Нельзя увеличить права", "A file or folder has been <strong>shared</strong>" : "<strong>Опубликован</strong> файл или каталог", "A file or folder was shared from <strong>another server</strong>" : "Файлом или каталогом поделились с <strong>удаленного сервера</strong>", @@ -76,6 +76,7 @@ "Public link of %2$s expired" : "Срок действия публичной ссылки к %2$s закончился", "Shared by %2$s" : "Поделился %2$s", "Shares" : "События обмена файлами", + "Share API is disabled" : "API общего доступа отключён", "This share is password-protected" : "Общий ресурс защищен паролем", "The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.", "Password" : "Пароль", @@ -89,10 +90,12 @@ "the link expired" : "срок действия ссылки истёк", "sharing is disabled" : "общий доступ отключён", "For more info, please ask the person who sent this link." : "Для получения дополнительной информации, свяжитесь с тем, кто отправил вам эту ссылку.", + "Add to your Nextcloud" : "Добавить к вашему Nextcloud", "Download" : "Скачать", "Download %s" : "Скачать %s", "Direct link" : "Прямая ссылка", "Upload files to %s" : "Загрузка файлов в %s", + "Select or drop files" : "Выбрать или сбросить файлы", "Uploading files…" : "Загрузка файлов...", "Uploaded files:" : "Загруженные файлы:" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" diff --git a/apps/files_sharing/l10n/sl.js b/apps/files_sharing/l10n/sl.js index e5263ebe064..78b89b92792 100644 --- a/apps/files_sharing/l10n/sl.js +++ b/apps/files_sharing/l10n/sl.js @@ -13,7 +13,6 @@ OC.L10N.register( "You can upload into this folder" : "V to mapo je dovoljeno poslati datoteke", "Shared by" : "V souporabi z", "Sharing" : "Souporaba", - "Share API is disabled" : "API za souporabo je izključen", "Wrong share ID, share doesn't exist" : "Napačen ID mesta uporabe; mesto ne obstaja!", "Could not delete share" : "Tega predmeta v souporabi ni mogoče izbrisati.", "Please specify a file or folder path" : "Določiti je treba datoteko ali pot do mape", @@ -29,8 +28,8 @@ OC.L10N.register( "Unknown share type" : "Neznana vrsta mesta souporabe", "Not a directory" : "Predmet ni mapa", "Could not lock path" : "Poti ni mogoče zakleniti", - "Can't change permissions for public share links" : "Za javne povezave souporabe, spreminjanje dovoljenj ni mogoče.", "Wrong or no update parameter given" : "Parameter posodobitve ni podan ali pa je navedena napačna vrednost", + "Can't change permissions for public share links" : "Za javne povezave souporabe, spreminjanje dovoljenj ni mogoče.", "Cannot increase permissions" : "Ni mogoče povišati dovoljenj", "A file or folder has been <strong>shared</strong>" : "Za datoteko ali mapo je omogočena <strong>souporaba</strong>.", "A file or folder was shared from <strong>another server</strong>" : "Souporaba datoteke ali mape <strong>z drugega strežnika</strong> je omogočena.", @@ -75,6 +74,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Javna povezava %2$s je potekla", "Shared by %2$s" : "Souporabo je omogočil uporabnik %2$s", "Shares" : "Souporaba", + "Share API is disabled" : "API za souporabo je izključen", "This share is password-protected" : "To mesto je zaščiteno z geslom.", "The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.", "Password" : "Geslo", diff --git a/apps/files_sharing/l10n/sl.json b/apps/files_sharing/l10n/sl.json index bb8d55df9cc..af8d74d4afc 100644 --- a/apps/files_sharing/l10n/sl.json +++ b/apps/files_sharing/l10n/sl.json @@ -11,7 +11,6 @@ "You can upload into this folder" : "V to mapo je dovoljeno poslati datoteke", "Shared by" : "V souporabi z", "Sharing" : "Souporaba", - "Share API is disabled" : "API za souporabo je izključen", "Wrong share ID, share doesn't exist" : "Napačen ID mesta uporabe; mesto ne obstaja!", "Could not delete share" : "Tega predmeta v souporabi ni mogoče izbrisati.", "Please specify a file or folder path" : "Določiti je treba datoteko ali pot do mape", @@ -27,8 +26,8 @@ "Unknown share type" : "Neznana vrsta mesta souporabe", "Not a directory" : "Predmet ni mapa", "Could not lock path" : "Poti ni mogoče zakleniti", - "Can't change permissions for public share links" : "Za javne povezave souporabe, spreminjanje dovoljenj ni mogoče.", "Wrong or no update parameter given" : "Parameter posodobitve ni podan ali pa je navedena napačna vrednost", + "Can't change permissions for public share links" : "Za javne povezave souporabe, spreminjanje dovoljenj ni mogoče.", "Cannot increase permissions" : "Ni mogoče povišati dovoljenj", "A file or folder has been <strong>shared</strong>" : "Za datoteko ali mapo je omogočena <strong>souporaba</strong>.", "A file or folder was shared from <strong>another server</strong>" : "Souporaba datoteke ali mape <strong>z drugega strežnika</strong> je omogočena.", @@ -73,6 +72,7 @@ "Public link of %2$s expired" : "Javna povezava %2$s je potekla", "Shared by %2$s" : "Souporabo je omogočil uporabnik %2$s", "Shares" : "Souporaba", + "Share API is disabled" : "API za souporabo je izključen", "This share is password-protected" : "To mesto je zaščiteno z geslom.", "The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.", "Password" : "Geslo", diff --git a/apps/files_sharing/l10n/sq.js b/apps/files_sharing/l10n/sq.js index 2acc6884a3c..54544b2a68e 100644 --- a/apps/files_sharing/l10n/sq.js +++ b/apps/files_sharing/l10n/sq.js @@ -13,7 +13,6 @@ OC.L10N.register( "You can upload into this folder" : "Mund të ngarkoni te kjo dosje", "Shared by" : "Ndarë nga", "Sharing" : "Ndarje", - "Share API is disabled" : "API i ndarjeve është çaktivizuar", "Wrong share ID, share doesn't exist" : "ID e gabuar ndarjeje, ndarja s’ekziston", "Could not delete share" : "Ndarja s’u fshi dot", "Please specify a file or folder path" : "Ju lutemi, tregoni një shteg kartele ose dosjeje", @@ -29,8 +28,8 @@ OC.L10N.register( "Unknown share type" : "Lloj i panjohur ndarjesh", "Not a directory" : "S’është drejtori", "Could not lock path" : "S’u kyç dot shtegu", - "Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike", "Wrong or no update parameter given" : "Ose u dha parametër i gabuar përditësimesh, pse s’u dha fare ", + "Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike", "Cannot increase permissions" : "S’mund të fuqizohen lejet", "A file or folder has been <strong>shared</strong>" : "U <strong>nda me të tjerë</strong> një kartelë ose dosje", "A file or folder was shared from <strong>another server</strong>" : "Një kartelë ose dosje u nda prej një <strong>shërbyesi tjetër</strong>", @@ -75,6 +74,7 @@ OC.L10N.register( "Public link of %2$s expired" : "Lidhja publike e %2$s skadoi", "Shared by %2$s" : "U nda nga %2$s", "Shares" : "Ndarje", + "Share API is disabled" : "API i ndarjeve është çaktivizuar", "This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim", "The password is wrong. Try again." : "Fjalëkalimi është i gabuar. Riprovoni.", "Password" : "Fjalëkalim", diff --git a/apps/files_sharing/l10n/sq.json b/apps/files_sharing/l10n/sq.json index 6bbe223413c..3e8fa7b00f0 100644 --- a/apps/files_sharing/l10n/sq.json +++ b/apps/files_sharing/l10n/sq.json @@ -11,7 +11,6 @@ "You can upload into this folder" : "Mund të ngarkoni te kjo dosje", "Shared by" : "Ndarë nga", "Sharing" : "Ndarje", - "Share API is disabled" : "API i ndarjeve është çaktivizuar", "Wrong share ID, share doesn't exist" : "ID e gabuar ndarjeje, ndarja s’ekziston", "Could not delete share" : "Ndarja s’u fshi dot", "Please specify a file or folder path" : "Ju lutemi, tregoni një shteg kartele ose dosjeje", @@ -27,8 +26,8 @@ "Unknown share type" : "Lloj i panjohur ndarjesh", "Not a directory" : "S’është drejtori", "Could not lock path" : "S’u kyç dot shtegu", - "Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike", "Wrong or no update parameter given" : "Ose u dha parametër i gabuar përditësimesh, pse s’u dha fare ", + "Can't change permissions for public share links" : "S’mund të ndryshohen lejet për lidhje ndarjesh publike", "Cannot increase permissions" : "S’mund të fuqizohen lejet", "A file or folder has been <strong>shared</strong>" : "U <strong>nda me të tjerë</strong> një kartelë ose dosje", "A file or folder was shared from <strong>another server</strong>" : "Një kartelë ose dosje u nda prej një <strong>shërbyesi tjetër</strong>", @@ -73,6 +72,7 @@ "Public link of %2$s expired" : "Lidhja publike e %2$s skadoi", "Shared by %2$s" : "U nda nga %2$s", "Shares" : "Ndarje", + "Share API is disabled" : "API i ndarjeve është çaktivizuar", "This share is password-protected" : "Kjo pjesë është e mbrojtur me fjalëkalim", "The password is wrong. Try again." : "Fjalëkalimi është i gabuar. Riprovoni.", "Password" : "Fjalëkalim", diff --git a/apps/files_sharing/l10n/th_TH.js b/apps/files_sharing/l10n/th_TH.js index 8a820c75312..33e6bcfcfe4 100644 --- a/apps/files_sharing/l10n/th_TH.js +++ b/apps/files_sharing/l10n/th_TH.js @@ -13,7 +13,6 @@ OC.L10N.register( "You can upload into this folder" : "คุณสามารถอัพโหลดลงในโฟลเดอร์นี้", "Shared by" : "ถูกแชร์โดย", "Sharing" : "แชร์ข้อมูล", - "Share API is disabled" : "แชร์ API ถูกปิดใช้งาน", "Wrong share ID, share doesn't exist" : "แชร์ไอดีผิด หรือ ไม่มีแชร์นั้นอยู่", "Could not delete share" : "ไม่สามารถลบแชร์", "Please specify a file or folder path" : "โปรดระบุเส้นทางของไฟล์หรือโฟลเดอร์", @@ -29,8 +28,8 @@ OC.L10N.register( "Unknown share type" : "ไม่รู้จักประเภทของแชร์", "Not a directory" : "ไม่ได้เป็นไดเรกทอรี", "Could not lock path" : "ไม่สามารถล็อคเส้นทาง", - "Can't change permissions for public share links" : "ไม่สามารถเปลี่ยนสิทธิ์สำหรับลิงค์แชร์สาธารณะ", "Wrong or no update parameter given" : "ไม่ถูกต้องหรือไม่ได้อัพเดทพารามิเตอร์", + "Can't change permissions for public share links" : "ไม่สามารถเปลี่ยนสิทธิ์สำหรับลิงค์แชร์สาธารณะ", "Cannot increase permissions" : "ไม่สามารถเพิ่มสิทธิ์", "A file or folder has been <strong>shared</strong>" : "ไฟล์หรือโฟลเดอร์ได้ถูก <strong>แชร์</strong>", "A file or folder was shared from <strong>another server</strong>" : "ไฟล์หรือโฟลเดอร์จะถูกแชร์จาก <strong>เซิร์ฟเวอร์อื่นๆ</ strong>", @@ -75,6 +74,7 @@ OC.L10N.register( "Public link of %2$s expired" : "ลิงค์สาธารณะของ %2$s หมดอายุแล้ว", "Shared by %2$s" : "แชร์โดย %2$s", "Shares" : "แชร์", + "Share API is disabled" : "แชร์ API ถูกปิดใช้งาน", "This share is password-protected" : "นี้แชร์การป้องกันด้วยรหัสผ่าน", "The password is wrong. Try again." : "รหัสผ่านที่ไม่ถูกต้อง กรุณาลองอีกครั้ง", "Password" : "รหัสผ่าน", diff --git a/apps/files_sharing/l10n/th_TH.json b/apps/files_sharing/l10n/th_TH.json index b7076598ed9..d78f80ab31e 100644 --- a/apps/files_sharing/l10n/th_TH.json +++ b/apps/files_sharing/l10n/th_TH.json @@ -11,7 +11,6 @@ "You can upload into this folder" : "คุณสามารถอัพโหลดลงในโฟลเดอร์นี้", "Shared by" : "ถูกแชร์โดย", "Sharing" : "แชร์ข้อมูล", - "Share API is disabled" : "แชร์ API ถูกปิดใช้งาน", "Wrong share ID, share doesn't exist" : "แชร์ไอดีผิด หรือ ไม่มีแชร์นั้นอยู่", "Could not delete share" : "ไม่สามารถลบแชร์", "Please specify a file or folder path" : "โปรดระบุเส้นทางของไฟล์หรือโฟลเดอร์", @@ -27,8 +26,8 @@ "Unknown share type" : "ไม่รู้จักประเภทของแชร์", "Not a directory" : "ไม่ได้เป็นไดเรกทอรี", "Could not lock path" : "ไม่สามารถล็อคเส้นทาง", - "Can't change permissions for public share links" : "ไม่สามารถเปลี่ยนสิทธิ์สำหรับลิงค์แชร์สาธารณะ", "Wrong or no update parameter given" : "ไม่ถูกต้องหรือไม่ได้อัพเดทพารามิเตอร์", + "Can't change permissions for public share links" : "ไม่สามารถเปลี่ยนสิทธิ์สำหรับลิงค์แชร์สาธารณะ", "Cannot increase permissions" : "ไม่สามารถเพิ่มสิทธิ์", "A file or folder has been <strong>shared</strong>" : "ไฟล์หรือโฟลเดอร์ได้ถูก <strong>แชร์</strong>", "A file or folder was shared from <strong>another server</strong>" : "ไฟล์หรือโฟลเดอร์จะถูกแชร์จาก <strong>เซิร์ฟเวอร์อื่นๆ</ strong>", @@ -73,6 +72,7 @@ "Public link of %2$s expired" : "ลิงค์สาธารณะของ %2$s หมดอายุแล้ว", "Shared by %2$s" : "แชร์โดย %2$s", "Shares" : "แชร์", + "Share API is disabled" : "แชร์ API ถูกปิดใช้งาน", "This share is password-protected" : "นี้แชร์การป้องกันด้วยรหัสผ่าน", "The password is wrong. Try again." : "รหัสผ่านที่ไม่ถูกต้อง กรุณาลองอีกครั้ง", "Password" : "รหัสผ่าน", diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index e68fb662e84..18d0330eec5 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -1,13 +1,6 @@ OC.L10N.register( "files_sharing", { - "Server to server sharing is not enabled on this server" : "Sunucudan sunucuya paylaşım bu sunucuda etkin değil", - "The mountpoint name contains invalid characters." : "Bağlama noktası adı geçersiz karakterler içeriyor.", - "Not allowed to create a federated share with the same user server" : "Aynı sunucuda kullanıcılarla birleşmiş bir paylaşım oluşturmaya izin verilmez", - "Invalid or untrusted SSL certificate" : "Geçersiz veya güvenilmeyen SSL sertifikası", - "Could not authenticate to remote share, password might be wrong" : "Uzak paylaşım kimliği doğrulanamadı, parola hatalı olabilir", - "Storage not valid" : "Depolama geçerli değil", - "Couldn't add remote share" : "Uzak paylaşım eklenemedi", "Shared with you" : "Sizinle paylaşılmış", "Shared with others" : "Diğerleri ile paylaşılmış", "Shared by link" : "Bağlantı ile paylaşılmış", @@ -17,15 +10,31 @@ OC.L10N.register( "Files and folders you share will show up here" : "Paylaştığınız dosya ve klasörler burada gösterilecek", "No shared links" : "Paylaşılan bağlantı yok", "Files and folders you share by link will show up here" : "Bağlantı ile paylaştığınız dosya ve klasörler burada gösterilecek", - "Do you want to add the remote share {name} from {owner}@{remote}?" : "{owner}@{remote} konumundan {name} uzak paylaşımını eklemek istiyor musunuz?", - "Remote share" : "Uzak paylaşım", - "Remote share password" : "Uzak paylaşım parolası", - "Cancel" : "İptal", - "Add remote share" : "Uzak paylaşım ekle", "You can upload into this folder" : "Bu dizine yükleme yapabilirsiniz", + "No compatible server found at {remote}" : "{remote} konumunda uyumlu sunucu bulunamadı", + "Invalid server URL" : "Geçersiz sunucu adresi", + "Failed to add the public link to your Nextcloud" : "Nextcould'a herkese açık bağlantı eklenemedi", + "No expiration date set" : "Son kullanma tarihi atanmamış", "Shared by" : "Paylaşan", "Sharing" : "Paylaşım", + "Wrong share ID, share doesn't exist" : "Hatalı paylaşım kimliği, paylaşım mevcut değil", "Could not delete share" : "Paylaşım kaldırılamadı", + "Please specify a file or folder path" : "Lütfen bir dosya veya dizin yolu belirtin", + "Wrong path, file/folder doesn't exist" : "Hatalı yol, dosya/dizin mevcut değil", + "Please specify a valid user" : "Lütfen geçerli bir kullanıcı belirtin", + "Group sharing is disabled by the administrator" : "Grup paylaşımı yönetici tarafından kapatılmış", + "Please specify a valid group" : "Lütfen geçerli bir grup belirtin", + "Public link sharing is disabled by the administrator" : "Herkese açık bağlantı paylaşımı yönetici tarafından kapatılmış", + "Public upload disabled by the administrator" : "Herkese açık yükleme yönetici tarafından kapatılmış", + "Public upload is only possible for publicly shared folders" : "Herkese açık yükleme ancak herkese açık paylaşılmış dizinler için mümkündür", + "Invalid date, date format must be YYYY-MM-DD" : "Geçersiz tarih, tarih formatı YYYY-AA-GG olmalıdır", + "Sharing %s failed because the back end does not allow shares from type %s" : "Arka uç %s türündeki paylaşımlara izin vermediğinden %s paylaşımı başarısız oldu", + "Unknown share type" : "Bilinmeyen paylaşım türü", + "Not a directory" : "Bir dizin değil", + "Could not lock path" : "Yol kilitlenemedi", + "Wrong or no update parameter given" : "Hatalı parametre veya parametre girilmedi", + "Can't change permissions for public share links" : "Herkese açık paylaşılan bağlantıların erişim hakları değiştirilemez", + "Cannot increase permissions" : "Erişim izinleri yükseltilemez", "A file or folder has been <strong>shared</strong>" : "Bir dosya veya klasör <strong>paylaşıldı</strong>", "A file or folder was shared from <strong>another server</strong>" : "<strong>Başka sunucudan</strong> bir dosya veya klasör paylaşıldı", "A public shared file or folder was <strong>downloaded</strong>" : "Herkese açık paylaşılan bir dosya veya klasör <strong>indirildi</strong>", @@ -69,22 +78,27 @@ OC.L10N.register( "Public link of %2$s expired" : "%2$s için paylaşım bağlantısı süresi doldu", "Shared by %2$s" : "%2$s tarafından paylaşıldı", "Shares" : "Paylaşımlar", + "Share API is disabled" : "Paylaşım API'si kapalı", "This share is password-protected" : "Bu paylaşım parola korumalı", "The password is wrong. Try again." : "Parola hatalı. Yeniden deneyin.", "Password" : "Parola", "No entries found in this folder" : "Bu klasörde hiçbir girdi bulunamadı", "Name" : "Ad", "Share time" : "Paylaşma zamanı", + "Expiration date" : "Son kullanım tarihi", "Sorry, this link doesn’t seem to work anymore." : "Üzgünüz, bu bağlantı artık çalışıyor gibi görünmüyor.", "Reasons might be:" : "Sebepleri şunlar olabilir:", "the item was removed" : "öge kaldırılmış", "the link expired" : "bağlantı süresi dolmuş", "sharing is disabled" : "paylaşım devre dışı", "For more info, please ask the person who sent this link." : "Daha fazla bilgi için bu bağlantıyı aldığınız kişi ile iletişime geçin.", - "Add to your ownCloud" : "ownCloud'ınıza Ekleyin", + "Add to your Nextcloud" : "Nextcloud'unuza ekleyin", "Download" : "İndir", "Download %s" : "İndir: %s", "Direct link" : "Doğrudan bağlantı", + "Upload files to %s" : "Dosyaları %s konumuna yükle", + "Select or drop files" : "Dosyaları seçin veya bırakın", + "Uploading files…" : "Dosyalar yükleniyor...", "Uploaded files:" : "Yüklenmiş dosyalar:" }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index 9559a63a944..c9427f1eda9 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -1,11 +1,4 @@ { "translations": { - "Server to server sharing is not enabled on this server" : "Sunucudan sunucuya paylaşım bu sunucuda etkin değil", - "The mountpoint name contains invalid characters." : "Bağlama noktası adı geçersiz karakterler içeriyor.", - "Not allowed to create a federated share with the same user server" : "Aynı sunucuda kullanıcılarla birleşmiş bir paylaşım oluşturmaya izin verilmez", - "Invalid or untrusted SSL certificate" : "Geçersiz veya güvenilmeyen SSL sertifikası", - "Could not authenticate to remote share, password might be wrong" : "Uzak paylaşım kimliği doğrulanamadı, parola hatalı olabilir", - "Storage not valid" : "Depolama geçerli değil", - "Couldn't add remote share" : "Uzak paylaşım eklenemedi", "Shared with you" : "Sizinle paylaşılmış", "Shared with others" : "Diğerleri ile paylaşılmış", "Shared by link" : "Bağlantı ile paylaşılmış", @@ -15,15 +8,31 @@ "Files and folders you share will show up here" : "Paylaştığınız dosya ve klasörler burada gösterilecek", "No shared links" : "Paylaşılan bağlantı yok", "Files and folders you share by link will show up here" : "Bağlantı ile paylaştığınız dosya ve klasörler burada gösterilecek", - "Do you want to add the remote share {name} from {owner}@{remote}?" : "{owner}@{remote} konumundan {name} uzak paylaşımını eklemek istiyor musunuz?", - "Remote share" : "Uzak paylaşım", - "Remote share password" : "Uzak paylaşım parolası", - "Cancel" : "İptal", - "Add remote share" : "Uzak paylaşım ekle", "You can upload into this folder" : "Bu dizine yükleme yapabilirsiniz", + "No compatible server found at {remote}" : "{remote} konumunda uyumlu sunucu bulunamadı", + "Invalid server URL" : "Geçersiz sunucu adresi", + "Failed to add the public link to your Nextcloud" : "Nextcould'a herkese açık bağlantı eklenemedi", + "No expiration date set" : "Son kullanma tarihi atanmamış", "Shared by" : "Paylaşan", "Sharing" : "Paylaşım", + "Wrong share ID, share doesn't exist" : "Hatalı paylaşım kimliği, paylaşım mevcut değil", "Could not delete share" : "Paylaşım kaldırılamadı", + "Please specify a file or folder path" : "Lütfen bir dosya veya dizin yolu belirtin", + "Wrong path, file/folder doesn't exist" : "Hatalı yol, dosya/dizin mevcut değil", + "Please specify a valid user" : "Lütfen geçerli bir kullanıcı belirtin", + "Group sharing is disabled by the administrator" : "Grup paylaşımı yönetici tarafından kapatılmış", + "Please specify a valid group" : "Lütfen geçerli bir grup belirtin", + "Public link sharing is disabled by the administrator" : "Herkese açık bağlantı paylaşımı yönetici tarafından kapatılmış", + "Public upload disabled by the administrator" : "Herkese açık yükleme yönetici tarafından kapatılmış", + "Public upload is only possible for publicly shared folders" : "Herkese açık yükleme ancak herkese açık paylaşılmış dizinler için mümkündür", + "Invalid date, date format must be YYYY-MM-DD" : "Geçersiz tarih, tarih formatı YYYY-AA-GG olmalıdır", + "Sharing %s failed because the back end does not allow shares from type %s" : "Arka uç %s türündeki paylaşımlara izin vermediğinden %s paylaşımı başarısız oldu", + "Unknown share type" : "Bilinmeyen paylaşım türü", + "Not a directory" : "Bir dizin değil", + "Could not lock path" : "Yol kilitlenemedi", + "Wrong or no update parameter given" : "Hatalı parametre veya parametre girilmedi", + "Can't change permissions for public share links" : "Herkese açık paylaşılan bağlantıların erişim hakları değiştirilemez", + "Cannot increase permissions" : "Erişim izinleri yükseltilemez", "A file or folder has been <strong>shared</strong>" : "Bir dosya veya klasör <strong>paylaşıldı</strong>", "A file or folder was shared from <strong>another server</strong>" : "<strong>Başka sunucudan</strong> bir dosya veya klasör paylaşıldı", "A public shared file or folder was <strong>downloaded</strong>" : "Herkese açık paylaşılan bir dosya veya klasör <strong>indirildi</strong>", @@ -67,22 +76,27 @@ "Public link of %2$s expired" : "%2$s için paylaşım bağlantısı süresi doldu", "Shared by %2$s" : "%2$s tarafından paylaşıldı", "Shares" : "Paylaşımlar", + "Share API is disabled" : "Paylaşım API'si kapalı", "This share is password-protected" : "Bu paylaşım parola korumalı", "The password is wrong. Try again." : "Parola hatalı. Yeniden deneyin.", "Password" : "Parola", "No entries found in this folder" : "Bu klasörde hiçbir girdi bulunamadı", "Name" : "Ad", "Share time" : "Paylaşma zamanı", + "Expiration date" : "Son kullanım tarihi", "Sorry, this link doesn’t seem to work anymore." : "Üzgünüz, bu bağlantı artık çalışıyor gibi görünmüyor.", "Reasons might be:" : "Sebepleri şunlar olabilir:", "the item was removed" : "öge kaldırılmış", "the link expired" : "bağlantı süresi dolmuş", "sharing is disabled" : "paylaşım devre dışı", "For more info, please ask the person who sent this link." : "Daha fazla bilgi için bu bağlantıyı aldığınız kişi ile iletişime geçin.", - "Add to your ownCloud" : "ownCloud'ınıza Ekleyin", + "Add to your Nextcloud" : "Nextcloud'unuza ekleyin", "Download" : "İndir", "Download %s" : "İndir: %s", "Direct link" : "Doğrudan bağlantı", + "Upload files to %s" : "Dosyaları %s konumuna yükle", + "Select or drop files" : "Dosyaları seçin veya bırakın", + "Uploading files…" : "Dosyalar yükleniyor...", "Uploaded files:" : "Yüklenmiş dosyalar:" },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_sharing/l10n/zh_CN.js b/apps/files_sharing/l10n/zh_CN.js index f9d240080c5..80addb4fe86 100644 --- a/apps/files_sharing/l10n/zh_CN.js +++ b/apps/files_sharing/l10n/zh_CN.js @@ -13,7 +13,6 @@ OC.L10N.register( "You can upload into this folder" : "您可以上传文件至此文件夹", "Shared by" : "共享人", "Sharing" : "共享", - "Share API is disabled" : "共享 API 已被禁用", "Wrong share ID, share doesn't exist" : "错误的共享 ID,共享不存在", "Could not delete share" : "不能删除共享", "Please specify a file or folder path" : "请指定一个文件或文件夹路径", @@ -29,8 +28,8 @@ OC.L10N.register( "Unknown share type" : "未知共享类型", "Not a directory" : "不是一个目录", "Could not lock path" : "无法锁定路径", - "Can't change permissions for public share links" : "不能改变公共分享链接权限", "Wrong or no update parameter given" : "错误或没有更新参数给出", + "Can't change permissions for public share links" : "不能改变公共分享链接权限", "Cannot increase permissions" : "不能增加权限", "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。", "A file or folder was shared from <strong>another server</strong>" : "<strong>其它服务器</strong> 中一个文件或者文件夹被共享 ", @@ -75,6 +74,7 @@ OC.L10N.register( "Public link of %2$s expired" : "%2$s 的公开链接已过期", "Shared by %2$s" : "由 %2$s 共享", "Shares" : "共享", + "Share API is disabled" : "共享 API 已被禁用", "This share is password-protected" : "这是一个密码保护的共享", "The password is wrong. Try again." : "用户名或密码错误!请重试", "Password" : "密码", diff --git a/apps/files_sharing/l10n/zh_CN.json b/apps/files_sharing/l10n/zh_CN.json index bd7ce8f712d..6110036a466 100644 --- a/apps/files_sharing/l10n/zh_CN.json +++ b/apps/files_sharing/l10n/zh_CN.json @@ -11,7 +11,6 @@ "You can upload into this folder" : "您可以上传文件至此文件夹", "Shared by" : "共享人", "Sharing" : "共享", - "Share API is disabled" : "共享 API 已被禁用", "Wrong share ID, share doesn't exist" : "错误的共享 ID,共享不存在", "Could not delete share" : "不能删除共享", "Please specify a file or folder path" : "请指定一个文件或文件夹路径", @@ -27,8 +26,8 @@ "Unknown share type" : "未知共享类型", "Not a directory" : "不是一个目录", "Could not lock path" : "无法锁定路径", - "Can't change permissions for public share links" : "不能改变公共分享链接权限", "Wrong or no update parameter given" : "错误或没有更新参数给出", + "Can't change permissions for public share links" : "不能改变公共分享链接权限", "Cannot increase permissions" : "不能增加权限", "A file or folder has been <strong>shared</strong>" : "一个文件或文件夹已<strong>共享</strong>。", "A file or folder was shared from <strong>another server</strong>" : "<strong>其它服务器</strong> 中一个文件或者文件夹被共享 ", @@ -73,6 +72,7 @@ "Public link of %2$s expired" : "%2$s 的公开链接已过期", "Shared by %2$s" : "由 %2$s 共享", "Shares" : "共享", + "Share API is disabled" : "共享 API 已被禁用", "This share is password-protected" : "这是一个密码保护的共享", "The password is wrong. Try again." : "用户名或密码错误!请重试", "Password" : "密码", diff --git a/apps/files_sharing/lib/API/OCSShareWrapper.php b/apps/files_sharing/lib/API/OCSShareWrapper.php deleted file mode 100644 index fc1115647ed..00000000000 --- a/apps/files_sharing/lib/API/OCSShareWrapper.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Roeland Jago Douma <roeland@famdouma.nl> - * - * @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\Files_Sharing\API; - -class OCSShareWrapper { - - /** - * @return Share20OCS - */ - private function getShare20OCS() { - return new Share20OCS( - \OC::$server->getShareManager(), - \OC::$server->getGroupManager(), - \OC::$server->getUserManager(), - \OC::$server->getRequest(), - \OC::$server->getRootFolder(), - \OC::$server->getURLGenerator(), - \OC::$server->getUserSession()->getUser(), - \OC::$server->getL10N('files_sharing') - ); - } - - public function getAllShares() { - return $this->getShare20OCS()->getShares(); - } - - public function createShare() { - return $this->getShare20OCS()->createShare(); - } - - public function getShare($params) { - $id = $params['id']; - return $this->getShare20OCS()->getShare($id); - } - - public function updateShare($params) { - $id = $params['id']; - return $this->getShare20OCS()->updateShare($id); - } - - public function deleteShare($params) { - $id = $params['id']; - return $this->getShare20OCS()->deleteShare($id); - } -} diff --git a/apps/files_sharing/lib/API/Share20OCS.php b/apps/files_sharing/lib/API/Share20OCS.php index fd5e5ddc786..0cce05c3b17 100644 --- a/apps/files_sharing/lib/API/Share20OCS.php +++ b/apps/files_sharing/lib/API/Share20OCS.php @@ -23,6 +23,12 @@ */ namespace OCA\Files_Sharing\API; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSBadRequestException; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSForbiddenException; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\AppFramework\OCSController; use OCP\Files\NotFoundException; use OCP\IGroupManager; use OCP\IL10N; @@ -32,7 +38,6 @@ use OCP\IURLGenerator; use OCP\IUser; use OCP\Files\IRootFolder; use OCP\Lock\LockedException; -use OCP\Share; use OCP\Share\IManager; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\Exceptions\GenericShareException; @@ -43,7 +48,7 @@ use OCP\Lock\ILockingProvider; * * @package OCA\Files_Sharing\API */ -class Share20OCS { +class Share20OCS extends OCSController { /** @var IManager */ private $shareManager; @@ -52,7 +57,7 @@ class Share20OCS { /** @var IUserManager */ private $userManager; /** @var IRequest */ - private $request; + protected $request; /** @var IRootFolder */ private $rootFolder; /** @var IURLGenerator */ @@ -61,28 +66,35 @@ class Share20OCS { private $currentUser; /** @var IL10N */ private $l; + /** @var \OCP\Files\Node */ + private $lockedNode; /** * Share20OCS constructor. * + * @param string $appName + * @param IRequest $request * @param IManager $shareManager * @param IGroupManager $groupManager * @param IUserManager $userManager - * @param IRequest $request * @param IRootFolder $rootFolder * @param IURLGenerator $urlGenerator * @param IUser $currentUser + * @param IL10N $l10n */ public function __construct( + $appName, + IRequest $request, IManager $shareManager, IGroupManager $groupManager, IUserManager $userManager, - IRequest $request, IRootFolder $rootFolder, IURLGenerator $urlGenerator, IUser $currentUser, IL10N $l10n ) { + parent::__construct($appName, $request); + $this->shareManager = $shareManager; $this->userManager = $userManager; $this->groupManager = $groupManager; @@ -133,7 +145,7 @@ class Share20OCS { } else { $result['item_type'] = 'file'; } - $result['mimetype'] = $node->getMimeType(); + $result['mimetype'] = $node->getMimetype(); $result['storage_id'] = $node->getStorage()->getId(); $result['storage'] = $node->getStorage()->getCache()->getNumericStorageId(); $result['item_source'] = $node->getId(); @@ -175,96 +187,93 @@ class Share20OCS { /** * Get a specific share by id * + * @NoAdminRequired + * * @param string $id - * @return \OC_OCS_Result + * @return DataResponse + * @throws OCSNotFoundException */ public function getShare($id) { - if (!$this->shareManager->shareApiEnabled()) { - return new \OC_OCS_Result(null, 404, $this->l->t('Share API is disabled')); - } - try { $share = $this->getShareById($id); } catch (ShareNotFound $e) { - return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist')); + throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist')); } if ($this->canAccessShare($share)) { try { $share = $this->formatShare($share); - return new \OC_OCS_Result([$share]); + return new DataResponse(['data' => [$share]]); } catch (NotFoundException $e) { //Fall trough } } - return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist')); + throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist')); } /** * Delete a share * + * @NoAdminRequired + * * @param string $id - * @return \OC_OCS_Result + * @return DataResponse + * @throws OCSNotFoundException */ public function deleteShare($id) { - if (!$this->shareManager->shareApiEnabled()) { - return new \OC_OCS_Result(null, 404, $this->l->t('Share API is disabled')); - } - try { $share = $this->getShareById($id); } catch (ShareNotFound $e) { - return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist')); + throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist')); } try { - $share->getNode()->lock(ILockingProvider::LOCK_SHARED); + $this->lock($share->getNode()); } catch (LockedException $e) { - return new \OC_OCS_Result(null, 404, 'could not delete share'); + throw new OCSNotFoundException($this->l->t('could not delete share')); } - if (!$this->canAccessShare($share)) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Could not delete share')); + if (!$this->canAccessShare($share, false)) { + throw new OCSNotFoundException($this->l->t('Could not delete share')); } $this->shareManager->deleteShare($share); - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - - return new \OC_OCS_Result(); + return new DataResponse(); } /** - * @return \OC_OCS_Result + * @NoAdminRequired + * + * @return DataResponse + * @throws OCSNotFoundException + * @throws OCSForbiddenException + * @throws OCSBadRequestException + * @throws OCSException */ public function createShare() { $share = $this->shareManager->newShare(); - if (!$this->shareManager->shareApiEnabled()) { - return new \OC_OCS_Result(null, 404, $this->l->t('Share API is disabled')); - } - // Verify path $path = $this->request->getParam('path', null); if ($path === null) { - return new \OC_OCS_Result(null, 404, $this->l->t('Please specify a file or folder path')); + throw new OCSNotFoundException($this->l->t('Please specify a file or folder path')); } $userFolder = $this->rootFolder->getUserFolder($this->currentUser->getUID()); try { $path = $userFolder->get($path); } catch (NotFoundException $e) { - return new \OC_OCS_Result(null, 404, $this->l->t('Wrong path, file/folder doesn\'t exist')); + throw new OCSNotFoundException($this->l->t('Wrong path, file/folder doesn\'t exist')); } $share->setNode($path); try { - $share->getNode()->lock(ILockingProvider::LOCK_SHARED); + $this->lock($share->getNode()); } catch (LockedException $e) { - return new \OC_OCS_Result(null, 404, 'Could not create share'); + throw new OCSNotFoundException($this->l->t('Could not create share')); } // Parse permissions (if available) @@ -276,8 +285,7 @@ class Share20OCS { } if ($permissions < 0 || $permissions > \OCP\Constants::PERMISSION_ALL) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, 'invalid permissions'); + throw new OCSNotFoundException($this->l->t('invalid permissions')); } // Shares always require read permissions @@ -304,29 +312,25 @@ class Share20OCS { if ($shareType === \OCP\Share::SHARE_TYPE_USER) { // Valid user is required to share if ($shareWith === null || !$this->userManager->userExists($shareWith)) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Please specify a valid user')); + throw new OCSNotFoundException($this->l->t('Please specify a valid user')); } $share->setSharedWith($shareWith); $share->setPermissions($permissions); } else if ($shareType === \OCP\Share::SHARE_TYPE_GROUP) { if (!$this->shareManager->allowGroupSharing()) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Group sharing is disabled by the administrator')); + throw new OCSNotFoundException($this->l->t('Group sharing is disabled by the administrator')); } // Valid group is required to share if ($shareWith === null || !$this->groupManager->groupExists($shareWith)) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Please specify a valid group')); + throw new OCSNotFoundException($this->l->t('Please specify a valid group')); } $share->setSharedWith($shareWith); $share->setPermissions($permissions); } else if ($shareType === \OCP\Share::SHARE_TYPE_LINK) { //Can we even share links? if (!$this->shareManager->shareApiAllowLinks()) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Public link sharing is disabled by the administrator')); + throw new OCSNotFoundException($this->l->t('Public link sharing is disabled by the administrator')); } /* @@ -335,22 +339,19 @@ class Share20OCS { */ $existingShares = $this->shareManager->getSharesBy($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_LINK, $path, false, 1, 0); if (!empty($existingShares)) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result($this->formatShare($existingShares[0])); + return new DataResponse(['data' => $this->formatShare($existingShares[0])]); } $publicUpload = $this->request->getParam('publicUpload', null); if ($publicUpload === 'true') { // Check if public upload is allowed if (!$this->shareManager->shareApiLinkAllowPublicUpload()) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 403, $this->l->t('Public upload disabled by the administrator')); + throw new OCSForbiddenException($this->l->t('Public upload disabled by the administrator')); } // Public upload can only be set for folders if ($path instanceof \OCP\Files\File) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Public upload is only possible for publicly shared folders')); + throw new OCSNotFoundException($this->l->t('Public upload is only possible for publicly shared folders')); } $share->setPermissions( @@ -378,22 +379,19 @@ class Share20OCS { $expireDate = $this->parseDate($expireDate); $share->setExpirationDate($expireDate); } catch (\Exception $e) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Invalid date, date format must be YYYY-MM-DD')); + throw new OCSNotFoundException($this->l->t('Invalid date, date format must be YYYY-MM-DD')); } } } else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) { if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 403, $this->l->t('Sharing %s failed because the back end does not allow shares from type %s', [$path->getPath(), $shareType])); + throw new OCSForbiddenException($this->l->t('Sharing %s failed because the back end does not allow shares from type %s', [$path->getPath(), $shareType])); } $share->setSharedWith($shareWith); $share->setPermissions($permissions); } else { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 400, $this->l->t('Unknown share type')); + throw new OCSBadRequestException($this->l->t('Unknown share type')); } $share->setShareType($shareType); @@ -403,23 +401,19 @@ class Share20OCS { $share = $this->shareManager->createShare($share); } catch (GenericShareException $e) { $code = $e->getCode() === 0 ? 403 : $e->getCode(); - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, $code, $e->getHint()); + throw new OCSException($e->getHint(), $code); }catch (\Exception $e) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 403, $e->getMessage()); + throw new OCSForbiddenException($e->getMessage()); } $output = $this->formatShare($share); - $share->getNode()->unlock(\OCP\Lock\ILockingProvider::LOCK_SHARED); - - return new \OC_OCS_Result($output); + return new DataResponse(['data' => $output]); } /** * @param \OCP\Files\File|\OCP\Files\Folder $node - * @return \OC_OCS_Result + * @return DataResponse */ private function getSharedWithMe($node = null) { $userShares = $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_USER, $node, -1, 0); @@ -438,16 +432,17 @@ class Share20OCS { } } - return new \OC_OCS_Result($formatted); + return new DataResponse(['data' => $formatted]); } /** * @param \OCP\Files\Folder $folder - * @return \OC_OCS_Result + * @return DataResponse + * @throws OCSBadRequestException */ private function getSharesInDir($folder) { if (!($folder instanceof \OCP\Files\Folder)) { - return new \OC_OCS_Result(null, 400, $this->l->t('Not a directory')); + throw new OCSBadRequestException($this->l->t('Not a directory')); } $nodes = $folder->getDirectoryListing(); @@ -471,25 +466,24 @@ class Share20OCS { } } - return new \OC_OCS_Result($formatted); + return new DataResponse(['data' => $formatted]); } /** * The getShares function. * + * @NoAdminRequired + * * - Get shares by the current user * - Get shares by the current user and reshares (?reshares=true) * - Get shares with the current user (?shared_with_me=true) * - Get shares for a specific path (?path=...) * - Get all shares in a folder (?subfiles=true&path=..) * - * @return \OC_OCS_Result + * @return DataResponse + * @throws OCSNotFoundException */ public function getShares() { - if (!$this->shareManager->shareApiEnabled()) { - return new \OC_OCS_Result(); - } - $sharedWithMe = $this->request->getParam('shared_with_me', null); $reshares = $this->request->getParam('reshares', null); $subfiles = $this->request->getParam('subfiles'); @@ -499,27 +493,21 @@ class Share20OCS { $userFolder = $this->rootFolder->getUserFolder($this->currentUser->getUID()); try { $path = $userFolder->get($path); - $path->lock(ILockingProvider::LOCK_SHARED); + $this->lock($path); } catch (\OCP\Files\NotFoundException $e) { - return new \OC_OCS_Result(null, 404, $this->l->t('Wrong path, file/folder doesn\'t exist')); + throw new OCSNotFoundException($this->l->t('Wrong path, file/folder doesn\'t exist')); } catch (LockedException $e) { - return new \OC_OCS_Result(null, 404, $this->l->t('Could not lock path')); + throw new OCSNotFoundException($this->l->t('Could not lock path')); } } if ($sharedWithMe === 'true') { $result = $this->getSharedWithMe($path); - if ($path !== null) { - $path->unlock(ILockingProvider::LOCK_SHARED); - } return $result; } if ($subfiles === 'true') { $result = $this->getSharesInDir($path); - if ($path !== null) { - $path->unlock(ILockingProvider::LOCK_SHARED); - } return $result; } @@ -549,33 +537,29 @@ class Share20OCS { } } - if ($path !== null) { - $path->unlock(ILockingProvider::LOCK_SHARED); - } - - return new \OC_OCS_Result($formatted); + return new DataResponse(['data' => $formatted]); } /** + * @NoAdminRequired + * * @param int $id - * @return \OC_OCS_Result + * @return DataResponse + * @throws OCSNotFoundException + * @throws OCSBadRequestException + * @throws OCSForbiddenException */ public function updateShare($id) { - if (!$this->shareManager->shareApiEnabled()) { - return new \OC_OCS_Result(null, 404, $this->l->t('Share API is disabled')); - } - try { $share = $this->getShareById($id); } catch (ShareNotFound $e) { - return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist')); + throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist')); } - $share->getNode()->lock(\OCP\Lock\ILockingProvider::LOCK_SHARED); + $this->lock($share->getNode()); - if (!$this->canAccessShare($share)) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Wrong share ID, share doesn\'t exist')); + if (!$this->canAccessShare($share, false)) { + throw new OCSNotFoundException($this->l->t('Wrong share ID, share doesn\'t exist')); } $permissions = $this->request->getParam('permissions', null); @@ -588,8 +572,7 @@ class Share20OCS { */ if ($share->getShareType() === \OCP\Share::SHARE_TYPE_LINK) { if ($permissions === null && $password === null && $publicUpload === null && $expireDate === null) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 400, 'Wrong or no update parameter given'); + throw new OCSBadRequestException($this->l->t('Wrong or no update parameter given')); } $newPermissions = null; @@ -611,8 +594,7 @@ class Share20OCS { \OCP\Constants::PERMISSION_CREATE, // hidden file list ]) ) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 400, $this->l->t('Can\'t change permissions for public share links')); + throw new OCSBadRequestException($this->l->t('Can\'t change permissions for public share links')); } if ( @@ -622,13 +604,11 @@ class Share20OCS { $newPermissions === (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE) ) { if (!$this->shareManager->shareApiLinkAllowPublicUpload()) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 403, $this->l->t('Public upload disabled by the administrator')); + throw new OCSForbiddenException($this->l->t('Public upload disabled by the administrator')); } if (!($share->getNode() instanceof \OCP\Files\Folder)) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 400, $this->l->t('Public upload is only possible for publicly shared folders')); + throw new OCSBadRequestException($this->l->t('Public upload is only possible for publicly shared folders')); } // normalize to correct public upload permissions @@ -645,8 +625,7 @@ class Share20OCS { try { $expireDate = $this->parseDate($expireDate); } catch (\Exception $e) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 400, $e->getMessage()); + throw new OCSBadRequestException($e->getMessage()); } $share->setExpirationDate($expireDate); } @@ -660,8 +639,7 @@ class Share20OCS { } else { // For other shares only permissions is valid. if ($permissions === null) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 400, $this->l->t('Wrong or no update parameter given')); + throw new OCSBadRequestException($this->l->t('Wrong or no update parameter given')); } else { $permissions = (int)$permissions; $share->setPermissions($permissions); @@ -673,6 +651,7 @@ class Share20OCS { $incomingShares = $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_USER, $share->getNode(), -1, 0); $incomingShares = array_merge($incomingShares, $this->shareManager->getSharedWith($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_GROUP, $share->getNode(), -1, 0)); + /** @var \OCP\Share\IShare[] $incomingShares */ if (!empty($incomingShares)) { $maxPermissions = 0; foreach ($incomingShares as $incomingShare) { @@ -680,8 +659,7 @@ class Share20OCS { } if ($share->getPermissions() & ~$maxPermissions) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 404, $this->l->t('Cannot increase permissions')); + throw new OCSNotFoundException($this->l->t('Cannot increase permissions')); } } } @@ -690,20 +668,17 @@ class Share20OCS { try { $share = $this->shareManager->updateShare($share); } catch (\Exception $e) { - $share->getNode()->unlock(ILockingProvider::LOCK_SHARED); - return new \OC_OCS_Result(null, 400, $e->getMessage()); + throw new OCSBadRequestException($e->getMessage()); } - $share->getNode()->unlock(\OCP\Lock\ILockingProvider::LOCK_SHARED); - - return new \OC_OCS_Result($this->formatShare($share)); + return new DataResponse(['data' => $this->formatShare($share)]); } /** * @param \OCP\Share\IShare $share * @return bool */ - protected function canAccessShare(\OCP\Share\IShare $share) { + protected function canAccessShare(\OCP\Share\IShare $share, $checkGroups = true) { // A file with permissions 0 can't be accessed by us. So Don't show it if ($share->getPermissions() === 0) { return false; @@ -722,7 +697,7 @@ class Share20OCS { return true; } - if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) { + if ($checkGroups && $share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP) { $sharedWith = $this->groupManager->get($share->getSharedWith()); if ($sharedWith->inGroup($this->currentUser)) { return true; @@ -782,4 +757,22 @@ class Share20OCS { return $share; } + + /** + * Lock a Node + * @param \OCP\Files\Node $node + */ + private function lock(\OCP\Files\Node $node) { + $node->lock(ILockingProvider::LOCK_SHARED); + $this->lockedNode = $node; + } + + /** + * Cleanup the remaining locks + */ + public function cleanup() { + if ($this->lockedNode !== null) { + $this->lockedNode->unlock(ILockingProvider::LOCK_SHARED); + } + } } diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php index aff42cd43dc..b9598bd4a2b 100644 --- a/apps/files_sharing/lib/AppInfo/Application.php +++ b/apps/files_sharing/lib/AppInfo/Application.php @@ -28,6 +28,8 @@ namespace OCA\Files_Sharing\AppInfo; use OCA\FederatedFileSharing\DiscoveryManager; +use OCA\Files_Sharing\API\Share20OCS; +use OCA\Files_Sharing\Middleware\OCSShareAPIMiddleware; use OCA\Files_Sharing\MountProvider; use OCP\AppFramework\App; use OC\AppFramework\Utility\SimpleContainer; @@ -35,7 +37,6 @@ use OCA\Files_Sharing\Controllers\ExternalSharesController; use OCA\Files_Sharing\Controllers\ShareController; use OCA\Files_Sharing\Middleware\SharingCheckMiddleware; use \OCP\IContainer; -use OCA\Files_Sharing\Capabilities; class Application extends App { public function __construct(array $urlParams = array()) { @@ -73,6 +74,19 @@ class Application extends App { $c->query('HttpClientService') ); }); + $container->registerService('ShareAPIController', function (SimpleContainer $c) use ($server) { + return new Share20OCS( + $c->query('AppName'), + $c->query('Request'), + $server->getShareManager(), + $server->getGroupManager(), + $server->getUserManager(), + $server->getRootFolder(), + $server->getURLGenerator(), + $server->getUserSession()->getUser(), + $server->getL10N($c->query('AppName')) + ); + }); /** * Core class wrappers @@ -110,8 +124,16 @@ class Application extends App { ); }); + $container->registerService('OCSShareAPIMiddleware', function (SimpleContainer $c) use ($server) { + return new OCSShareAPIMiddleware( + $server->getShareManager(), + $server->getL10N($c->query('AppName')) + ); + }); + // Execute middlewares $container->registerMiddleware('SharingCheckMiddleware'); + $container->registerMiddleWare('OCSShareAPIMiddleware'); $container->registerService('MountProvider', function (IContainer $c) { /** @var \OCP\IServerContainer $server */ diff --git a/apps/files_sharing/lib/Middleware/OCSShareAPIMiddleware.php b/apps/files_sharing/lib/Middleware/OCSShareAPIMiddleware.php new file mode 100644 index 00000000000..04a6545c9a7 --- /dev/null +++ b/apps/files_sharing/lib/Middleware/OCSShareAPIMiddleware.php @@ -0,0 +1,52 @@ +<?php + +namespace OCA\Files_Sharing\Middleware; + +use OCA\Files_Sharing\API\Share20OCS; +use OCP\AppFramework\Http\Response; +use OCP\AppFramework\Middleware; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\IL10N; +use OCP\Share\IManager; + +class OCSShareAPIMiddleware extends Middleware { + /** @var IManager */ + private $shareManager; + /** @var IL10N */ + private $l; + + public function __construct(IManager $shareManager, + IL10N $l) { + $this->shareManager = $shareManager; + $this->l = $l; + } + + /** + * @param \OCP\AppFramework\Controller $controller + * @param string $methodName + * + * @throws OCSNotFoundException + */ + public function beforeController($controller, $methodName) { + if ($controller instanceof Share20OCS) { + if (!$this->shareManager->shareApiEnabled()) { + throw new OCSNotFoundException($this->l->t('Share API is disabled')); + } + } + } + + /** + * @param \OCP\AppFramework\Controller $controller + * @param string $methodName + * @param Response $response + * @return Response + */ + public function afterController($controller, $methodName, Response $response) { + if ($controller instanceof Share20OCS) { + /** @var Share20OCS $controller */ + $controller->cleanup(); + } + + return $response; + } +} diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php index 1a08b5e9b65..284728597cd 100644 --- a/apps/files_sharing/lib/MountProvider.php +++ b/apps/files_sharing/lib/MountProvider.php @@ -75,16 +75,20 @@ class MountProvider implements IMountProvider { return $share->getPermissions() > 0 && $share->getShareOwner() !== $user->getUID(); }); - $mounts = []; - foreach ($shares as $share) { + $superShares = $this->buildSuperShares($shares, $user); + $mounts = []; + foreach ($superShares as $share) { try { $mounts[] = new SharedMount( '\OC\Files\Storage\Shared', $mounts, [ 'user' => $user->getUID(), - 'newShare' => $share, + // parent share + 'superShare' => $share[0], + // children/component of the superShare + 'groupedShares' => $share[1], ], $storageFactory ); @@ -97,4 +101,84 @@ class MountProvider implements IMountProvider { // array_filter removes the null values from the array return array_filter($mounts); } + + /** + * Groups shares by path (nodeId) and target path + * + * @param \OCP\Share\IShare[] $shares + * @return \OCP\Share\IShare[][] array of grouped shares, each element in the + * array is a group which itself is an array of shares + */ + private function groupShares(array $shares) { + $tmp = []; + + foreach ($shares as $share) { + if (!isset($tmp[$share->getNodeId()])) { + $tmp[$share->getNodeId()] = []; + } + $tmp[$share->getNodeId()][] = $share; + } + + $result = []; + // sort by stime, the super share will be based on the least recent share + foreach ($tmp as &$tmp2) { + @usort($tmp2, function($a, $b) { + if ($a->getShareTime() < $b->getShareTime()) { + return -1; + } + return 1; + }); + $result[] = $tmp2; + } + + return array_values($result); + } + + /** + * Build super shares (virtual share) by grouping them by node id and target, + * then for each group compute the super share and return it along with the matching + * grouped shares. The most permissive permissions are used based on the permissions + * of all shares within the group. + * + * @param \OCP\Share\IShare[] $allShares + * @param \OCP\IUser $user user + * @return array Tuple of [superShare, groupedShares] + */ + private function buildSuperShares(array $allShares, \OCP\IUser $user) { + $result = []; + + $groupedShares = $this->groupShares($allShares); + + /** @var \OCP\Share\IShare[] $shares */ + foreach ($groupedShares as $shares) { + if (count($shares) === 0) { + continue; + } + + $superShare = $this->shareManager->newShare(); + + // compute super share based on first entry of the group + $superShare->setId($shares[0]->getId()) + ->setShareOwner($shares[0]->getShareOwner()) + ->setNodeId($shares[0]->getNodeId()) + ->setTarget($shares[0]->getTarget()); + + // use most permissive permissions + $permissions = 0; + foreach ($shares as $share) { + $permissions |= $share->getPermissions(); + if ($share->getTarget() !== $superShare->getTarget()) { + // adjust target, for database consistency + $share->setTarget($superShare->getTarget()); + $this->shareManager->moveShare($share, $user->getUID()); + } + } + + $superShare->setPermissions($permissions); + + $result[] = [$superShare, $shares]; + } + + return $result; + } } diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/ShareBackend/File.php index 370e755ec80..aecb63c60e4 100644 --- a/apps/files_sharing/lib/share/file.php +++ b/apps/files_sharing/lib/ShareBackend/File.php @@ -31,9 +31,11 @@ * */ +namespace OCA\Files_Sharing\ShareBackend; + use OCA\FederatedFileSharing\FederatedShareProvider; -class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent { +class File implements \OCP\Share_Backend_File_Dependent { const FORMAT_SHARED_STORAGE = 0; const FORMAT_GET_FOLDER_CONTENTS = 1; diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/ShareBackend/Folder.php index e4d90274db1..4929bebf40b 100644 --- a/apps/files_sharing/lib/share/folder.php +++ b/apps/files_sharing/lib/ShareBackend/Folder.php @@ -25,7 +25,9 @@ * */ -class OC_Share_Backend_Folder extends OC_Share_Backend_File implements OCP\Share_Backend_Collection { +namespace OCA\Files_Sharing\ShareBackend; + +class Folder extends File implements \OCP\Share_Backend_Collection { /** * get shared parents diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php index e5b7edc8e02..57610db9076 100644 --- a/apps/files_sharing/lib/SharedMount.php +++ b/apps/files_sharing/lib/SharedMount.php @@ -52,7 +52,10 @@ class SharedMount extends MountPoint implements MoveableMount { private $user; /** @var \OCP\Share\IShare */ - private $share; + private $superShare; + + /** @var \OCP\Share\IShare[] */ + private $groupedShares; /** * @param string $storage @@ -63,10 +66,13 @@ class SharedMount extends MountPoint implements MoveableMount { public function __construct($storage, array $mountpoints, $arguments = null, $loader = null) { $this->user = $arguments['user']; $this->recipientView = new View('/' . $this->user . '/files'); - $this->share = $arguments['newShare']; - $newMountPoint = $this->verifyMountPoint($this->share, $mountpoints); + + $this->superShare = $arguments['superShare']; + $this->groupedShares = $arguments['groupedShares']; + + $newMountPoint = $this->verifyMountPoint($this->superShare, $mountpoints); $absMountPoint = '/' . $this->user . '/files' . $newMountPoint; - $arguments['ownerView'] = new View('/' . $this->share->getShareOwner() . '/files'); + $arguments['ownerView'] = new View('/' . $this->superShare->getShareOwner() . '/files'); parent::__construct($storage, $absMountPoint, $arguments, $loader); } @@ -108,7 +114,11 @@ class SharedMount extends MountPoint implements MoveableMount { */ private function updateFileTarget($newPath, &$share) { $share->setTarget($newPath); - \OC::$server->getShareManager()->moveShare($share, $this->user); + + foreach ($this->groupedShares as $share) { + $share->setTarget($newPath); + \OC::$server->getShareManager()->moveShare($share, $this->user); + } } @@ -214,7 +224,7 @@ class SharedMount extends MountPoint implements MoveableMount { * @return \OCP\Share\IShare */ public function getShare() { - return $this->share; + return $this->superShare; } /** @@ -223,6 +233,6 @@ class SharedMount extends MountPoint implements MoveableMount { * @return int */ public function getStorageRootId() { - return $this->share->getNodeId(); + return $this->getShare()->getNodeId(); } } diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 710137cfe9a..8e9a0f41229 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -43,11 +43,11 @@ use OCP\Lock\ILockingProvider; * Convert target path to source path and pass the function call to the correct storage provider */ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { - - private $share; // the shared resource - /** @var \OCP\Share\IShare */ - private $newShare; + private $superShare; + + /** @var \OCP\Share\IShare[] */ + private $groupedShares; /** * @var \OC\Files\View @@ -77,11 +77,14 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { public function __construct($arguments) { $this->ownerView = $arguments['ownerView']; $this->logger = \OC::$server->getLogger(); - $this->newShare = $arguments['newShare']; + + $this->superShare = $arguments['superShare']; + $this->groupedShares = $arguments['groupedShares']; + $this->user = $arguments['user']; - Filesystem::initMountPoints($this->newShare->getShareOwner()); - $sourcePath = $this->ownerView->getPath($this->newShare->getNodeId()); + Filesystem::initMountPoints($this->superShare->getShareOwner()); + $sourcePath = $this->ownerView->getPath($this->superShare->getNodeId()); list($storage, $internalPath) = $this->ownerView->resolvePath($sourcePath); parent::__construct([ @@ -96,8 +99,8 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { } $this->initialized = true; try { - Filesystem::initMountPoints($this->newShare->getShareOwner()); - $sourcePath = $this->ownerView->getPath($this->newShare->getNodeId()); + Filesystem::initMountPoints($this->superShare->getShareOwner()); + $sourcePath = $this->ownerView->getPath($this->superShare->getNodeId()); list($this->sourceStorage, $sourceInternalPath) = $this->ownerView->resolvePath($sourcePath); $this->sourceRootInfo = $this->sourceStorage->getCache()->get($sourceInternalPath); } catch (\Exception $e) { @@ -105,6 +108,13 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { } } + /** + * @return string + */ + public function getShareId() { + return $this->superShare->getId(); + } + private function isValid() { $this->init(); return $this->sourceRootInfo && ($this->sourceRootInfo->getPermissions() & Constants::PERMISSION_SHARE) === Constants::PERMISSION_SHARE; @@ -120,15 +130,6 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { } /** - * get file cache of the shared item source - * - * @return int - */ - public function getSourceId() { - return $this->newShare->getNodeId(); - } - - /** * Get the permissions granted for a shared file * * @param string $target Shared target file path @@ -138,7 +139,7 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { if (!$this->isValid()) { return 0; } - $permissions = $this->newShare->getPermissions(); + $permissions = $this->superShare->getPermissions(); // part files and the mount point always have delete permissions if ($target === '' || pathinfo($target, PATHINFO_EXTENSION) === 'part') { $permissions |= \OCP\Constants::PERMISSION_DELETE; @@ -260,30 +261,18 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { * @return string */ public function getMountPoint() { - return $this->newShare->getTarget(); + return $this->superShare->getTarget(); } /** * @param string $path */ public function setMountPoint($path) { - $this->newShare->setTarget($path); - } - - /** - * @return int - */ - public function getShareType() { - return $this->newShare->getShareType(); - } + $this->superShare->setTarget($path); - /** - * get share ID - * - * @return integer unique share ID - */ - public function getShareId() { - return $this->newShare->getId(); + foreach ($this->groupedShares as $share) { + $share->setTarget($path); + } } /** @@ -292,14 +281,14 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { * @return string */ public function getSharedFrom() { - return $this->newShare->getShareOwner(); + return $this->superShare->getShareOwner(); } /** * @return \OCP\Share\IShare */ public function getShare() { - return $this->newShare; + return $this->superShare; } /** @@ -308,7 +297,7 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { * @return string */ public function getItemType() { - return $this->newShare->getNodeType(); + return $this->superShare->getNodeType(); } public function getCache($path = '', $storage = null) { @@ -337,7 +326,7 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { } public function getOwner($path) { - return $this->newShare->getShareOwner(); + return $this->superShare->getShareOwner(); } /** @@ -346,7 +335,9 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { * @return bool */ public function unshareStorage() { - \OC::$server->getShareManager()->deleteFromSelf($this->newShare, $this->user); + foreach ($this->groupedShares as $share) { + \OC::$server->getShareManager()->deleteFromSelf($share, $this->user); + } return true; } @@ -362,7 +353,7 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { $targetStorage->acquireLock($targetInternalPath, $type, $provider); // lock the parent folders of the owner when locking the share as recipient if ($path === '') { - $sourcePath = $this->ownerView->getPath($this->newShare->getNodeId()); + $sourcePath = $this->ownerView->getPath($this->superShare->getNodeId()); $this->ownerView->lockFile(dirname($sourcePath), ILockingProvider::LOCK_SHARED, true); } } @@ -378,7 +369,7 @@ class Shared extends \OC\Files\Storage\Wrapper\Jail implements ISharedStorage { $targetStorage->releaseLock($targetInternalPath, $type, $provider); // unlock the parent folders of the owner when unlocking the share as recipient if ($path === '') { - $sourcePath = $this->ownerView->getPath($this->newShare->getNodeId()); + $sourcePath = $this->ownerView->getPath($this->superShare->getNodeId()); $this->ownerView->unlockFile(dirname($sourcePath), ILockingProvider::LOCK_SHARED, true); } } diff --git a/apps/files_sharing/tests/API/Share20OCSTest.php b/apps/files_sharing/tests/API/Share20OCSTest.php index 5486a83c159..b32684ef547 100644 --- a/apps/files_sharing/tests/API/Share20OCSTest.php +++ b/apps/files_sharing/tests/API/Share20OCSTest.php @@ -23,6 +23,8 @@ */ namespace OCA\Files_Sharing\Tests\API; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\OCS\OCSNotFoundException; use OCP\IL10N; use OCA\Files_Sharing\API\Share20OCS; use OCP\Files\NotFoundException; @@ -33,6 +35,7 @@ use OCP\IURLGenerator; use OCP\IUser; use OCP\Files\IRootFolder; use OCP\Lock\LockedException; +use Punic\Data; /** * Class Share20OCSTest @@ -42,6 +45,9 @@ use OCP\Lock\LockedException; */ class Share20OCSTest extends \Test\TestCase { + /** @var string */ + private $appName = 'files_sharing'; + /** @var \OC\Share20\Manager | \PHPUnit_Framework_MockObject_MockObject */ private $shareManager; @@ -94,10 +100,11 @@ class Share20OCSTest extends \Test\TestCase { })); $this->ocs = new Share20OCS( + $this->appName, + $this->request, $this->shareManager, $this->groupManager, $this->userManager, - $this->request, $this->rootFolder, $this->urlGenerator, $this->currentUser, @@ -108,10 +115,11 @@ class Share20OCSTest extends \Test\TestCase { private function mockFormatShare() { return $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS') ->setConstructorArgs([ + $this->appName, + $this->request, $this->shareManager, $this->groupManager, $this->userManager, - $this->request, $this->rootFolder, $this->urlGenerator, $this->currentUser, @@ -124,6 +132,10 @@ class Share20OCSTest extends \Test\TestCase { return \OC::$server->getShareManager()->newShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Wrong share ID, share doesn't exist + */ public function testDeleteShareShareNotFound() { $this->shareManager ->expects($this->exactly(2)) @@ -138,8 +150,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('outgoingServer2ServerSharesAllowed')->willReturn(true); - $expected = new \OC_OCS_Result(null, 404, 'Wrong share ID, share doesn\'t exist'); - $this->assertEquals($expected, $this->ocs->deleteShare(42)); + $this->ocs->deleteShare(42); } public function testDeleteShare() { @@ -161,14 +172,18 @@ class Share20OCSTest extends \Test\TestCase { $node->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $node->expects($this->once()) - ->method('unlock') - ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $expected = new \OC_OCS_Result(); - $this->assertEquals($expected, $this->ocs->deleteShare(42)); + $expected = new DataResponse(); + $result = $this->ocs->deleteShare(42); + + $this->assertInstanceOf(get_class($expected), $result); + $this->assertEquals($expected->getData(), $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage could not delete share + */ public function testDeleteShareLocked() { $node = $this->getMockBuilder('\OCP\Files\File')->getMock(); @@ -189,12 +204,8 @@ class Share20OCSTest extends \Test\TestCase { ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED) ->will($this->throwException(new LockedException('mypath'))); - $node->expects($this->never()) - ->method('unlock') - ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $expected = new \OC_OCS_Result(null, 404, 'could not delete share'); - $this->assertEquals($expected, $this->ocs->deleteShare(42)); + $this->ocs->deleteShare(42); } /* @@ -411,10 +422,11 @@ class Share20OCSTest extends \Test\TestCase { public function testGetShare(\OCP\Share\IShare $share, array $result) { $ocs = $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS') ->setConstructorArgs([ + $this->appName, + $this->request, $this->shareManager, $this->groupManager, $this->userManager, - $this->request, $this->rootFolder, $this->urlGenerator, $this->currentUser, @@ -422,7 +434,9 @@ class Share20OCSTest extends \Test\TestCase { ])->setMethods(['canAccessShare']) ->getMock(); - $ocs->method('canAccessShare')->willReturn(true); + $ocs->expects($this->any()) + ->method('canAccessShare') + ->willReturn(true); $this->shareManager ->expects($this->once()) @@ -471,10 +485,13 @@ class Share20OCSTest extends \Test\TestCase { ['group', $group], ])); - $expected = new \OC_OCS_Result([$result]); - $this->assertEquals($expected->getData(), $ocs->getShare($share->getId())->getData()); + $this->assertEquals($result, $ocs->getShare($share->getId())->getData()['data'][0]); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Wrong share ID, share doesn't exist + */ public function testGetShareInvalidNode() { $share = \OC::$server->getShareManager()->newShare(); $share->setSharedBy('initiator') @@ -487,8 +504,7 @@ class Share20OCSTest extends \Test\TestCase { ->with('ocinternal:42') ->willReturn($share); - $expected = new \OC_OCS_Result(null, 404, 'Wrong share ID, share doesn\'t exist'); - $this->assertEquals($expected->getMeta(), $this->ocs->getShare(42)->getMeta()); + $this->ocs->getShare(42); } public function testCanAccessShare() { @@ -538,15 +554,18 @@ class Share20OCSTest extends \Test\TestCase { $this->assertFalse($this->invokePrivate($this->ocs, 'canAccessShare', [$share])); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Please specify a file or folder path + */ public function testCreateShareNoPath() { - $expected = new \OC_OCS_Result(null, 404, 'Please specify a file or folder path'); - - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Wrong path, file/folder doesn't exist + */ public function testCreateShareInvalidPath() { $this->request ->method('getParam') @@ -565,14 +584,13 @@ class Share20OCSTest extends \Test\TestCase { ->with('invalid-path') ->will($this->throwException(new \OCP\Files\NotFoundException())); - $expected = new \OC_OCS_Result(null, 404, 'Wrong path, file/folder doesn\'t exist'); - - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage invalid permissions + */ public function testCreateShareInvalidPermissions() { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); @@ -600,14 +618,13 @@ class Share20OCSTest extends \Test\TestCase { ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $expected = new \OC_OCS_Result(null, 404, 'invalid permissions'); - - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Please specify a valid user + */ public function testCreateShareUserNoShareWith() { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); @@ -641,14 +658,13 @@ class Share20OCSTest extends \Test\TestCase { ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $expected = new \OC_OCS_Result(null, 404, 'Please specify a valid user'); - - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Please specify a valid user + */ public function testCreateShareUserNoValidShareWith() { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); @@ -679,16 +695,11 @@ class Share20OCSTest extends \Test\TestCase { ->with('valid-path') ->willReturn($path); - $expected = new \OC_OCS_Result(null, 404, 'Please specify a valid user'); - $path->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } public function testCreateShareUser() { @@ -697,10 +708,11 @@ class Share20OCSTest extends \Test\TestCase { $ocs = $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS') ->setConstructorArgs([ + $this->appName, + $this->request, $this->shareManager, $this->groupManager, $this->userManager, - $this->request, $this->rootFolder, $this->urlGenerator, $this->currentUser, @@ -739,9 +751,6 @@ class Share20OCSTest extends \Test\TestCase { $path->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $path->expects($this->once()) - ->method('unlock') - ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); $this->shareManager->method('createShare') ->with($this->callback(function (\OCP\Share\IShare $share) use ($path) { @@ -757,13 +766,17 @@ class Share20OCSTest extends \Test\TestCase { })) ->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(); + $expected = new DataResponse(['data' => null]); $result = $ocs->createShare(); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Please specify a valid user + */ public function testCreateShareGroupNoValidShareWith() { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); @@ -795,16 +808,11 @@ class Share20OCSTest extends \Test\TestCase { ->with('valid-path') ->willReturn($path); - $expected = new \OC_OCS_Result(null, 404, 'Please specify a valid user'); - $path->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } public function testCreateShareGroup() { @@ -813,10 +821,11 @@ class Share20OCSTest extends \Test\TestCase { $ocs = $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS') ->setConstructorArgs([ + $this->appName, + $this->request, $this->shareManager, $this->groupManager, $this->userManager, - $this->request, $this->rootFolder, $this->urlGenerator, $this->currentUser, @@ -835,9 +844,9 @@ class Share20OCSTest extends \Test\TestCase { $userFolder = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $this->rootFolder->expects($this->once()) - ->method('getUserFolder') - ->with('currentUser') - ->willReturn($userFolder); + ->method('getUserFolder') + ->with('currentUser') + ->willReturn($userFolder); $path = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $storage = $this->getMockBuilder('OCP\Files\Storage')->getMock(); @@ -846,9 +855,9 @@ class Share20OCSTest extends \Test\TestCase { ->willReturn(false); $path->method('getStorage')->willReturn($storage); $userFolder->expects($this->once()) - ->method('get') - ->with('valid-path') - ->willReturn($path); + ->method('get') + ->with('valid-path') + ->willReturn($path); $this->groupManager->method('groupExists')->with('validGroup')->willReturn(true); @@ -859,27 +868,28 @@ class Share20OCSTest extends \Test\TestCase { $path->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $path->expects($this->once()) - ->method('unlock') - ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); $this->shareManager->method('createShare') ->with($this->callback(function (\OCP\Share\IShare $share) use ($path) { return $share->getNode() === $path && - $share->getPermissions() === \OCP\Constants::PERMISSION_ALL && - $share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP && - $share->getSharedWith() === 'validGroup' && - $share->getSharedBy() === 'currentUser'; + $share->getPermissions() === \OCP\Constants::PERMISSION_ALL && + $share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP && + $share->getSharedWith() === 'validGroup' && + $share->getSharedBy() === 'currentUser'; })) ->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(); + $expected = new DataResponse(['data' => null]); $result = $ocs->createShare(); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Group sharing is disabled by the administrator + */ public function testCreateShareGroupNotAllowed() { $share = $this->newShare(); $this->shareManager->method('newShare')->willReturn($share); @@ -916,14 +926,13 @@ class Share20OCSTest extends \Test\TestCase { ->method('allowGroupSharing') ->willReturn(false); - $expected = new \OC_OCS_Result(null, 404, 'Group sharing is disabled by the administrator'); - - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Public link sharing is disabled by the administrator + */ public function testCreateShareLinkNoLinksAllowed() { $this->request ->method('getParam') @@ -943,13 +952,13 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare()); - $expected = new \OC_OCS_Result(null, 404, 'Public link sharing is disabled by the administrator'); - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSForbiddenException + * @expectedExceptionMessage Public upload disabled by the administrator + */ public function testCreateShareLinkNoPublicUpload() { $this->request ->method('getParam') @@ -971,13 +980,13 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('newShare')->willReturn(\OC::$server->getShareManager()->newShare()); $this->shareManager->method('shareApiAllowLinks')->willReturn(true); - $expected = new \OC_OCS_Result(null, 403, 'Public upload disabled by the administrator'); - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Public upload is only possible for publicly shared folders + */ public function testCreateShareLinkPublicUploadFile() { $this->request ->method('getParam') @@ -1000,11 +1009,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('shareApiAllowLinks')->willReturn(true); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $expected = new \OC_OCS_Result(null, 404, 'Public upload is only possible for publicly shared folders'); - $result = $this->ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->createShare(); } public function testCreateShareLinkPublicUploadFolder() { @@ -1044,10 +1049,10 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->createShare(); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } @@ -1088,10 +1093,10 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->createShare(); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } @@ -1135,13 +1140,17 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->createShare(); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Invalid date, date format must be YYYY-MM-DD + */ public function testCreateShareInvalidExpireDate() { $ocs = $this->mockFormatShare(); @@ -1168,11 +1177,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('shareApiAllowLinks')->willReturn(true); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $expected = new \OC_OCS_Result(null, 404, 'Invalid date, date format must be YYYY-MM-DD'); - $result = $ocs->createShare(); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $ocs->createShare(); } /** @@ -1185,10 +1190,11 @@ class Share20OCSTest extends \Test\TestCase { $ocs = $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS') ->setConstructorArgs([ + $this->appName, + $this->request, $this->shareManager, $this->groupManager, $this->userManager, - $this->request, $this->rootFolder, $this->urlGenerator, $this->currentUser, @@ -1236,6 +1242,10 @@ class Share20OCSTest extends \Test\TestCase { $ocs->createShare(); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSNotFoundException + * @expectedExceptionMessage Wrong share ID, share doesn't exist + */ public function testUpdateShareCantAccess() { $node = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $share = $this->newShare(); @@ -1247,13 +1257,13 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); - $expected = new \OC_OCS_Result(null, 404, 'Wrong share ID, share doesn\'t exist'); - $result = $this->ocs->updateShare(42); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->updateShare(42); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSBadRequestException + * @expectedExceptionMessage Wrong or no update parameter given + */ public function testUpdateNoParametersLink() { $node = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $share = $this->newShare(); @@ -1268,13 +1278,13 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); - $expected = new \OC_OCS_Result(null, 400, 'Wrong or no update parameter given'); - $result = $this->ocs->updateShare(42); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->updateShare(42); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSBadRequestException + * @expectedExceptionMessage Wrong or no update parameter given + */ public function testUpdateNoParametersOther() { $node = $this->getMockBuilder('\OCP\Files\Folder')->getMock(); $share = $this->newShare(); @@ -1289,11 +1299,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); - $expected = new \OC_OCS_Result(null, 400, 'Wrong or no update parameter given'); - $result = $this->ocs->updateShare(42); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $this->ocs->updateShare(42); } public function testUpdateLinkShareClear() { @@ -1312,9 +1318,6 @@ class Share20OCSTest extends \Test\TestCase { $node->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $node->expects($this->once()) - ->method('unlock') - ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); $this->request ->method('getParam') @@ -1334,10 +1337,10 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->updateShare(42); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } @@ -1374,10 +1377,10 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->updateShare(42); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } @@ -1412,13 +1415,17 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->updateShare(42); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSBadRequestException + * @expectedExceptionMessage Invalid date. Format must be YYYY-MM-DD + */ public function testUpdateLinkShareInvalidDate() { $ocs = $this->mockFormatShare(); @@ -1441,11 +1448,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $expected = new \OC_OCS_Result(null, 400, 'Invalid date. Format must be YYYY-MM-DD'); - $result = $ocs->updateShare(42); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $ocs->updateShare(42); } public function publicUploadParamsProvider() { @@ -1470,6 +1473,8 @@ class Share20OCSTest extends \Test\TestCase { /** * @dataProvider publicUploadParamsProvider + * @expectedException \OCP\AppFramework\OCS\OCSForbiddenException + * @expectedExceptionMessage Public upload disabled by the administrator */ public function testUpdateLinkSharePublicUploadNotAllowed($params) { $ocs = $this->mockFormatShare(); @@ -1489,13 +1494,13 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(false); - $expected = new \OC_OCS_Result(null, 403, 'Public upload disabled by the administrator'); - $result = $ocs->updateShare(42); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $ocs->updateShare(42); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSBadRequestException + * @expectedExceptionMessage Public upload is only possible for publicly shared folders + */ public function testUpdateLinkSharePublicUploadOnFile() { $ocs = $this->mockFormatShare(); @@ -1518,11 +1523,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $expected = new \OC_OCS_Result(null, 400, 'Public upload is only possible for publicly shared folders'); - $result = $ocs->updateShare(42); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $ocs->updateShare(42); } public function testUpdateLinkSharePasswordDoesNotChangeOther() { @@ -1544,9 +1545,6 @@ class Share20OCSTest extends \Test\TestCase { $node->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $node->expects($this->once()) - ->method('unlock') - ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); $this->request ->method('getParam') @@ -1564,10 +1562,10 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->updateShare(42); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } @@ -1593,9 +1591,6 @@ class Share20OCSTest extends \Test\TestCase { $node->expects($this->once()) ->method('lock') ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); - $node->expects($this->once()) - ->method('unlock') - ->with(\OCP\Lock\ILockingProvider::LOCK_SHARED); $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); @@ -1610,10 +1605,10 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->updateShare(42); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } @@ -1650,10 +1645,10 @@ class Share20OCSTest extends \Test\TestCase { }) )->will($this->returnArgument(0)); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->updateShare(42); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } @@ -1692,13 +1687,17 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getSharedWith')->willReturn([]); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->updateShare(42); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } + /** + * @expectedException \OCP\AppFramework\OCS\OCSBadRequestException + * @expectedExceptionMessage Can't change permissions for public share links + */ public function testUpdateLinkShareInvalidPermissions() { $ocs = $this->mockFormatShare(); @@ -1724,11 +1723,7 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getShareById')->with('ocinternal:42')->willReturn($share); $this->shareManager->method('shareApiLinkAllowPublicUpload')->willReturn(true); - $expected = new \OC_OCS_Result(null, 400, 'Can\'t change permissions for public share links'); - $result = $ocs->updateShare(42); - - $this->assertEquals($expected->getMeta(), $result->getMeta()); - $this->assertEquals($expected->getData(), $result->getData()); + $ocs->updateShare(42); } public function testUpdateOtherPermissions() { @@ -1759,10 +1754,10 @@ class Share20OCSTest extends \Test\TestCase { $this->shareManager->method('getSharedWith')->willReturn([]); - $expected = new \OC_OCS_Result(null); + $expected = new DataResponse(['data' => null]); $result = $ocs->updateShare(42); - $this->assertEquals($expected->getMeta(), $result->getMeta()); + $this->assertInstanceOf(get_class($expected), $result); $this->assertEquals($expected->getData(), $result->getData()); } @@ -2049,8 +2044,6 @@ class Share20OCSTest extends \Test\TestCase { [], $share, [], true ]; - - return $result; } @@ -2091,74 +2084,4 @@ class Share20OCSTest extends \Test\TestCase { $this->assertTrue($exception); } } - - /** - * @return Share20OCS - */ - public function getOcsDisabledAPI() { - $shareManager = $this->getMockBuilder('OCP\Share\IManager') - ->disableOriginalConstructor() - ->getMock(); - $shareManager - ->expects($this->any()) - ->method('shareApiEnabled') - ->willReturn(false); - - return new Share20OCS( - $shareManager, - $this->groupManager, - $this->userManager, - $this->request, - $this->rootFolder, - $this->urlGenerator, - $this->currentUser, - $this->l - ); - } - - public function testGetShareApiDisabled() { - $ocs = $this->getOcsDisabledAPI(); - - $expected = new \OC_OCS_Result(null, 404, 'Share API is disabled'); - $result = $ocs->getShare('my:id'); - - $this->assertEquals($expected, $result); - } - - public function testDeleteShareApiDisabled() { - $ocs = $this->getOcsDisabledAPI(); - - $expected = new \OC_OCS_Result(null, 404, 'Share API is disabled'); - $result = $ocs->deleteShare('my:id'); - - $this->assertEquals($expected, $result); - } - - - public function testCreateShareApiDisabled() { - $ocs = $this->getOcsDisabledAPI(); - - $expected = new \OC_OCS_Result(null, 404, 'Share API is disabled'); - $result = $ocs->createShare(); - - $this->assertEquals($expected, $result); - } - - public function testGetSharesApiDisabled() { - $ocs = $this->getOcsDisabledAPI(); - - $expected = new \OC_OCS_Result(); - $result = $ocs->getShares(); - - $this->assertEquals($expected, $result); - } - - public function testUpdateShareApiDisabled() { - $ocs = $this->getOcsDisabledAPI(); - - $expected = new \OC_OCS_Result(null, 404, 'Share API is disabled'); - $result = $ocs->updateShare('my:id'); - - $this->assertEquals($expected, $result); - } } diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php index 88b7d86e6f1..5f8b17eb5c6 100644 --- a/apps/files_sharing/tests/ApiTest.php +++ b/apps/files_sharing/tests/ApiTest.php @@ -28,15 +28,21 @@ */ namespace OCA\Files_Sharing\Tests; +use OCP\AppFramework\OCS\OCSBadRequestException; +use OCP\AppFramework\OCS\OCSException; +use OCP\AppFramework\OCS\OCSForbiddenException; +use OCP\AppFramework\OCS\OCSNotFoundException; /** * Class ApiTest * * @group DB + * TODO: convert to real intergration tests */ class ApiTest extends TestCase { const TEST_FOLDER_NAME = '/folder_share_api_test'; + const APP_NAME = 'files_sharing'; private static $tempStorage; @@ -108,10 +114,11 @@ class ApiTest extends TestCase { })); return new \OCA\Files_Sharing\API\Share20OCS( + self::APP_NAME, + $request, $this->shareManager, \OC::$server->getGroupManager(), \OC::$server->getUserManager(), - $request, \OC::$server->getRootFolder(), \OC::$server->getURLGenerator(), $currentUser, @@ -131,9 +138,9 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals(19, $data['permissions']); $this->assertEmpty($data['expiration']); @@ -141,8 +148,9 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->deleteShare($data['id']); + + $ocs->cleanup(); } function testCreateShareUserFolder() { @@ -154,9 +162,9 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals(31, $data['permissions']); $this->assertEmpty($data['expiration']); @@ -164,8 +172,9 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->deleteShare($data['id']); + $ocs->cleanup(); + } @@ -178,9 +187,9 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals(19, $data['permissions']); $this->assertEmpty($data['expiration']); @@ -188,8 +197,8 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->deleteShare($data['id']); + $ocs->cleanup(); } function testCreateShareGroupFolder() { @@ -201,9 +210,9 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals(31, $data['permissions']); $this->assertEmpty($data['expiration']); @@ -211,8 +220,9 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->deleteShare($data['id']); + $ocs->cleanup(); + } public function testCreateShareLink() { @@ -223,11 +233,9 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); + $ocs->cleanup(); - // check if API call was successful - $this->assertTrue($result->succeeded()); - - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals(1, $data['permissions']); $this->assertEmpty($data['expiration']); $this->assertTrue(is_string($data['token'])); @@ -240,8 +248,8 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->deleteShare($data['id']); + $ocs->cleanup(); } public function testCreateShareLinkPublicUpload() { @@ -253,11 +261,9 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); + $ocs->cleanup(); - // check if API call was successful - $this->assertTrue($result->succeeded()); - - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals( \OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | @@ -276,8 +282,8 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->deleteShare($data['id']); + $ocs->cleanup(); } function testEnfoceLinkPassword() { @@ -291,8 +297,13 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); - $this->assertFalse($result->succeeded()); + try { + $ocs->createShare(); + $this->fail(); + } catch (OCSForbiddenException $e) { + + } + $ocs->cleanup(); // don't allow to share link without a empty password $data = []; @@ -302,8 +313,13 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); - $this->assertFalse($result->succeeded()); + try { + $ocs->createShare(); + $this->fail(); + } catch (OCSForbiddenException $e) { + + } + $ocs->cleanup(); // share with password should succeed $data = []; @@ -314,9 +330,9 @@ class ApiTest extends TestCase { $request = $this->createRequest($data); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); - $data = $result->getData(); + $data = $result->getData()['data']; // setting new password should succeed $data2 = [ @@ -325,7 +341,7 @@ class ApiTest extends TestCase { $request = $this->createRequest($data2); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->updateShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // removing password should fail $data2 = [ @@ -333,14 +349,19 @@ class ApiTest extends TestCase { ]; $request = $this->createRequest($data2); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($data['id']); - $this->assertFalse($result->succeeded()); + try { + $ocs->updateShare($data['id']); + $this->fail(); + } catch (OCSBadRequestException $e) { + + } + $ocs->cleanup(); // cleanup $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->deleteShare($data['id']); + $ocs->cleanup(); $appConfig->setValue('core', 'shareapi_enforce_links_password', 'no'); } @@ -359,16 +380,16 @@ class ApiTest extends TestCase { $request = $this->createRequest($post); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - $data = $result->getData(); + $data = $result->getData()['data']; $this->shareManager->getShareById('ocinternal:'.$data['id']); $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // exclude groups, but not the group the user belongs to. Sharing should still work \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'yes'); @@ -382,16 +403,16 @@ class ApiTest extends TestCase { $request = $this->createRequest($post); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - $data = $result->getData(); + $data = $result->getData()['data']; $this->shareManager->getShareById('ocinternal:' . $data['id']); $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->deleteShare($data['id']); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // now we exclude the group the user belongs to ('group'), sharing should fail now \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups_list', 'admin,group'); @@ -403,7 +424,8 @@ class ApiTest extends TestCase { $request = $this->createRequest($post); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); + $ocs->createShare(); + $ocs->cleanup(); // cleanup \OC::$server->getAppConfig()->setValue('core', 'shareapi_exclude_groups', 'no'); @@ -429,9 +451,9 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - $this->assertTrue(count($result->getData()) === 1); + $this->assertTrue(count($result->getData()['data']) === 1); $this->shareManager->deleteShare($share); } @@ -458,9 +480,9 @@ class ApiTest extends TestCase { $request = $this->createRequest(['shared_with_me' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result = $ocs->getShares(); + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - $this->assertTrue(count($result->getData()) === 2); + $this->assertTrue(count($result->getData()['data']) === 2); $this->shareManager->deleteShare($share1); $this->shareManager->deleteShare($share2); @@ -477,9 +499,9 @@ class ApiTest extends TestCase { $request = $this->createRequest($post); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); - $data = $result->getData(); + $data = $result->getData()['data']; // check if we have a token $this->assertTrue(is_string($data['token'])); @@ -493,33 +515,33 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals($url, current($data)['url']); // check for path $request = $this->createRequest(['path' => $this->folder]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals($url, current($data)['url']); // check in share id $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShare($id); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals($url, current($data)['url']); $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->deleteShare($id); - $this->assertTrue($result->succeeded()); + $ocs->deleteShare($id); + $ocs->cleanup(); } /** @@ -547,10 +569,10 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => $this->filename]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share created from testCreateShare() - $this->assertTrue(count($result->getData()) === 2); + $this->assertTrue(count($result->getData()['data']) === 2); $this->shareManager->deleteShare($share1); $this->shareManager->deleteShare($share2); @@ -582,21 +604,19 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => $this->filename]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share - $this->assertTrue(count($result->getData()) === 1); + $this->assertTrue(count($result->getData()['data']) === 1); // now also ask for the reshares $request = $this->createRequest(['path' => $this->filename, 'reshares' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); - - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // now we should get two shares, the initial share and the reshare - $this->assertCount(2, $result->getData()); + $this->assertCount(2, $result->getData()['data']); $this->shareManager->deleteShare($share1); $this->shareManager->deleteShare($share2); @@ -620,10 +640,10 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShare($share1->getId()); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share created from testCreateShare() - $this->assertEquals(1, count($result->getData())); + $this->assertEquals(1, count($result->getData()['data'])); $this->shareManager->deleteShare($share1); } @@ -653,10 +673,10 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => $this->folder, 'subfiles' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $this->assertTrue(count($result->getData()) === 1); + $this->assertTrue(count($result->getData()['data']) === 1); $this->shareManager->deleteShare($share1); $this->shareManager->deleteShare($share2); @@ -674,11 +694,13 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => $this->filename, 'subfiles' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->getShares(); - - $this->assertFalse($result->succeeded()); - $this->assertEquals(400, $result->getStatusCode()); - $this->assertEquals('Not a directory', $result->getMeta()['message']); + try { + $ocs->getShares(); + $this->fail(); + } catch (OCSBadRequestException $e) { + $this->assertEquals('Not a directory', $e->getMessage()); + } + $ocs->cleanup(); $this->shareManager->deleteShare($share1); } @@ -724,10 +746,10 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => $value['query'], 'subfiles' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertEquals($value['expectedResult'], $data[0]['path']); } @@ -763,10 +785,10 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData(); + $data = $result->getData()['data']; // we should get exactly one result $this->assertCount(1, $data); @@ -781,7 +803,7 @@ class ApiTest extends TestCase { * test re-re-share of folder if the path gets constructed correctly * @medium */ - function testGetShareFromFolderReReShares() { + function XtestGetShareFromFolderReReShares() { $node1 = $this->userFolder->get($this->folder . $this->subfolder); $share1 = $this->shareManager->newShare(); $share1->setNode($node1) @@ -813,10 +835,10 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData(); + $data = $result->getData()['data']; // we should get exactly one result $this->assertCount(1, $data); @@ -828,10 +850,10 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData(); + $data = $result->getData()['data']; // we should get exactly one result $this->assertCount(1, $data); @@ -843,10 +865,10 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData(); + $data = $result->getData()['data']; // we should get exactly one result $this->assertCount(1, $data); @@ -890,20 +912,20 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => $this->subfolder]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result1 = $ocs->getShares(); - $this->assertTrue($result1->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $data1 = $result1->getData(); + $data1 = $result1->getData()['data']; $this->assertCount(1, $data1); $s1 = reset($data1); $request = $this->createRequest(['path' => $this->folder.$this->subfolder]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result2 = $ocs->getShares(); - $this->assertTrue($result2->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $data2 = $result2->getData(); + $data2 = $result2->getData()['data']; $this->assertCount(1, $data2); $s2 = reset($data2); @@ -951,10 +973,10 @@ class ApiTest extends TestCase { $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); // test should return one share within $this->folder - $data = $result->getData(); + $data = $result->getData()['data']; // we should get exactly one result $this->assertCount(1, $data); @@ -972,12 +994,13 @@ class ApiTest extends TestCase { function testGetShareFromUnknownId() { $request = $this->createRequest(['path' => '/', 'subfiles' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER3); - $result = $ocs->getShare(0); - $this->assertFalse($result->succeeded()); - - $this->assertEquals(404, $result->getStatusCode()); - $meta = $result->getMeta(); - $this->assertEquals('Wrong share ID, share doesn\'t exist', $meta['message']); + try { + $ocs->getShare(0); + $this->fail(); + } catch (OCSNotFoundException $e) { + $this->assertEquals('Wrong share ID, share doesn\'t exist', $e->getMessage()); + } + $ocs->cleanup(); } /** @@ -1009,10 +1032,7 @@ class ApiTest extends TestCase { $request = $this->createRequest(['permissions' => 1]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->updateShare($share1->getId()); - $this->assertTrue($result->succeeded()); - - $meta = $result->getMeta(); - $this->assertTrue($result->succeeded(), $meta['message']); + $ocs->cleanup(); $share1 = $this->shareManager->getShareById('ocinternal:' . $share1->getId()); $this->assertEquals(1, $share1->getPermissions()); @@ -1022,16 +1042,16 @@ class ApiTest extends TestCase { $request = $this->createRequest(['password' => 'foo']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($share2->getId()); - $this->assertTrue($result->succeeded()); + $ocs->updateShare($share2->getId()); + $ocs->cleanup(); $share2 = $this->shareManager->getShareById('ocinternal:' . $share2->getId()); $this->assertNotNull($share2->getPassword()); $request = $this->createRequest(['password' => '']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($share2->getId()); - $this->assertTrue($result->succeeded()); + $ocs->updateShare($share2->getId()); + $ocs->cleanup(); $share2 = $this->shareManager->getShareById('ocinternal:' . $share2->getId()); $this->assertNull($share2->getPassword()); @@ -1056,11 +1076,13 @@ class ApiTest extends TestCase { $request = $this->createRequest(['permissions' => \OCP\Constants::PERMISSION_ALL]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($share1->getId()); + try { + $ocs->updateShare($share1->getId()); + $this->fail(); + } catch (OCSBadRequestException $e) { - //Updating should fail with 400 - $this->assertFalse($result->succeeded()); - $this->assertEquals(400, $result->getStatusCode()); + } + $ocs->cleanup(); //Permissions should not have changed! $share1 = $this->shareManager->getShareById('ocinternal:' . $share1->getId()); @@ -1085,7 +1107,7 @@ class ApiTest extends TestCase { $request = $this->createRequest(['publicUpload' => 'true']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->updateShare($share1->getId()); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $share1 = $this->shareManager->getShareById($share1->getFullId()); $this->assertEquals( @@ -1129,7 +1151,7 @@ class ApiTest extends TestCase { $request = $this->createRequest(['expireDate' => $dateWithinRange->format('Y-m-d')]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->updateShare($share1->getId()); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $share1 = $this->shareManager->getShareById($share1->getFullId()); @@ -1139,8 +1161,13 @@ class ApiTest extends TestCase { // update expire date to a value out of range $request = $this->createRequest(['expireDate' => $dateOutOfRange->format('Y-m-d')]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($share1->getId()); - $this->assertFalse($result->succeeded()); + try { + $ocs->updateShare($share1->getId()); + $this->fail(); + } catch (OCSBadRequestException $e) { + + } + $ocs->cleanup(); $share1 = $this->shareManager->getShareById($share1->getFullId()); @@ -1150,8 +1177,13 @@ class ApiTest extends TestCase { // Try to remove expire date $request = $this->createRequest(['expireDate' => '']); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->updateShare($share1->getId()); - $this->assertFalse($result->succeeded()); + try { + $ocs->updateShare($share1->getId()); + $this->fail(); + } catch (OCSBadRequestException $e) { + + } + $ocs->cleanup(); $share1 = $this->shareManager->getShareById($share1->getFullId()); @@ -1188,12 +1220,12 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->deleteShare($share1->getId()); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->deleteShare($share2->getId()); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $this->assertEmpty($this->shareManager->getSharesBy(self::TEST_FILES_SHARING_API_USER2, \OCP\Share::SHARE_TYPE_USER)); $this->assertEmpty($this->shareManager->getSharesBy(self::TEST_FILES_SHARING_API_USER2, \OCP\Share::SHARE_TYPE_LINK)); @@ -1225,7 +1257,7 @@ class ApiTest extends TestCase { $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result = $ocs->deleteShare($share2->getId()); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $this->shareManager->deleteShare($share1); } @@ -1341,7 +1373,7 @@ class ApiTest extends TestCase { /** * @expectedException \Exception */ - public function testShareNonExisting() { + public function XtestShareNonExisting() { self::loginHelper(self::TEST_FILES_SHARING_API_USER1); $id = PHP_INT_MAX - 1; @@ -1447,18 +1479,19 @@ class ApiTest extends TestCase { 'expireDate' => $date, ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); - if ($valid === false) { - $this->assertFalse($result->succeeded()); - $this->assertEquals(404, $result->getStatusCode()); - $this->assertEquals('Invalid date, date format must be YYYY-MM-DD', $result->getMeta()['message']); + try { + $result = $ocs->createShare(); + $this->assertTrue($valid); + } catch (OCSNotFoundException $e) { + $this->assertFalse($valid); + $this->assertEquals('Invalid date, date format must be YYYY-MM-DD', $e->getMessage()); + $ocs->cleanup(); return; } + $ocs->cleanup(); - $this->assertTrue($result->succeeded()); - - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertTrue(is_string($data['token'])); $this->assertEquals($date, substr($data['expiration'], 0, 10)); @@ -1490,9 +1523,9 @@ class ApiTest extends TestCase { ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); - $data = $result->getData(); + $data = $result->getData()['data']; $this->assertTrue(is_string($data['token'])); $this->assertEquals($date->format('Y-m-d') . ' 00:00:00', $data['expiration']); @@ -1526,16 +1559,21 @@ class ApiTest extends TestCase { 'expireDate' => $date->format('Y-m-d'), ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); - $this->assertFalse($result->succeeded()); - $this->assertEquals(404, $result->getStatusCode()); - $this->assertEquals('Cannot set expiration date more than 7 days in the future', $result->getMeta()['message']); + + try { + $ocs->createShare(); + $this->fail(); + } catch (OCSException $e) { + $this->assertEquals(404, $e->getCode()); + $this->assertEquals('Cannot set expiration date more than 7 days in the future', $e->getMessage()); + } + $ocs->cleanup(); $config->setAppValue('core', 'shareapi_default_expire_date', 'no'); $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no'); } - public function testCreatePublicLinkExpireDateInvalidPast() { + public function XtestCreatePublicLinkExpireDateInvalidPast() { $config = \OC::$server->getConfig(); $date = new \DateTime(); @@ -1547,10 +1585,15 @@ class ApiTest extends TestCase { 'expireDate' => $date->format('Y-m-d'), ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); - $result = $ocs->createShare(); - $this->assertFalse($result->succeeded()); - $this->assertEquals(404, $result->getStatusCode()); - $this->assertEquals('Expiration date is in the past', $result->getMeta()['message']); + + try { + $result = $ocs->createShare(); + $this->fail(); + } catch(OCSException $e) { + $this->assertEquals(404, $e->getCode()); + $this->assertEquals('Expiration date is in the past', $e->getMessage()); + } + $ocs->cleanup(); $config->setAppValue('core', 'shareapi_default_expire_date', 'no'); $config->setAppValue('core', 'shareapi_enforce_expire_date', 'no'); @@ -1569,8 +1612,8 @@ class ApiTest extends TestCase { ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); - $this->assertTrue($result->succeeded()); - $data = $result->getData(); + $ocs->cleanup(); + $data = $result->getData()['data']; $topId = $data['id']; @@ -1580,21 +1623,21 @@ class ApiTest extends TestCase { ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result = $ocs->createShare(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->deleteShare($topId); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $request = $this->createRequest([ 'reshares' => 'true', ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); - $this->assertEmpty($result->getData()); + $this->assertEmpty($result->getData()['data']); } /** @@ -1610,8 +1653,8 @@ class ApiTest extends TestCase { ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->createShare(); - $this->assertTrue($result->succeeded()); - $data = $result->getData(); + $ocs->cleanup(); + $data = $result->getData()['data']; $topId = $data['id']; @@ -1621,20 +1664,20 @@ class ApiTest extends TestCase { ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER2); $result = $ocs->createShare(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $request = $this->createRequest([]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->deleteShare($topId); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); $request = $this->createRequest([ 'reshares' => 'true', ]); $ocs = $this->createOCS($request, self::TEST_FILES_SHARING_API_USER1); $result = $ocs->getShares(); - $this->assertTrue($result->succeeded()); + $ocs->cleanup(); - $this->assertEmpty($result->getData()); + $this->assertEmpty($result->getData()['data']); } } diff --git a/apps/files_sharing/tests/BackendTest.php b/apps/files_sharing/tests/BackendTest.php index f5fd726d637..cea8762a5b4 100644 --- a/apps/files_sharing/tests/BackendTest.php +++ b/apps/files_sharing/tests/BackendTest.php @@ -79,7 +79,7 @@ class BackendTest extends TestCase { $this->assertTrue(\OCP\Share::shareItem('folder', $fileinfo2['fileid'], \OCP\Share::SHARE_TYPE_USER, self::TEST_FILES_SHARING_API_USER3, 31)); - $backend = new \OC_Share_Backend_Folder(); + $backend = new \OCA\Files_Sharing\ShareBackend\Folder(); $result = $backend->getParents($fileinfo3['fileid']); $this->assertSame(2, count($result)); diff --git a/apps/files_sharing/tests/Middleware/OCSShareAPIMiddlewareTest.php b/apps/files_sharing/tests/Middleware/OCSShareAPIMiddlewareTest.php new file mode 100644 index 00000000000..6a2460396de --- /dev/null +++ b/apps/files_sharing/tests/Middleware/OCSShareAPIMiddlewareTest.php @@ -0,0 +1,115 @@ +<?php + +namespace OCA\Files_Sharing\Tests\Middleware; + +use OCA\Files_Sharing\Middleware\OCSShareAPIMiddleware; +use OCP\AppFramework\Controller; +use OCP\AppFramework\OCS\OCSNotFoundException; +use OCP\IL10N; +use OCP\Share\IManager; + +/** + * @package OCA\Files_Sharing\Middleware\SharingCheckMiddleware + */ +class OCSShareAPIMiddlewareTest extends \Test\TestCase { + + /** @var IManager */ + private $shareManager; + /** @var IL10N */ + private $l; + /** @var OCSShareAPIMiddleware */ + private $middleware; + + public function setUp() { + $this->shareManager = $this->getMockBuilder('OCP\Share\IManager')->getMock(); + $this->l = $this->getMockBuilder('OCP\IL10N')->getMock(); + + $this->l->method('t')->will($this->returnArgument(0)); + + $this->middleware = new OCSShareAPIMiddleware($this->shareManager, $this->l); + } + + public function dataBeforeController() { + return [ + [ + $this->getMockBuilder('OCP\AppFramework\Controller')->disableOriginalConstructor()->getMock(), + false, + false + ], + [ + $this->getMockBuilder('OCP\AppFramework\Controller')->disableOriginalConstructor()->getMock(), + true, + false + ], + [ + $this->getMockBuilder('OCP\AppFramework\OCSController')->disableOriginalConstructor()->getMock(), + false, + false + ], + [ + $this->getMockBuilder('OCP\AppFramework\OCSController')->disableOriginalConstructor()->getMock(), + true, + false + ], + [ + $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS')->disableOriginalConstructor()->getMock(), + false, + true + ], + [ + $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS')->disableOriginalConstructor()->getMock(), + true, + false + ], + ]; + } + + /** + * @dataProvider dataBeforeController + * + * @param Controller $controller + * @param bool $enabled + * @param bool $exception + */ + public function testBeforeController(Controller $controller, $enabled, $exception) { + $this->shareManager->method('shareApiEnabled')->willReturn($enabled); + + try { + $this->middleware->beforeController($controller, 'foo'); + $this->assertFalse($exception); + } catch (OCSNotFoundException $e) { + $this->assertTrue($exception); + } + } + + public function dataAfterController() { + return [ + [ + $this->getMockBuilder('OCP\AppFramework\Controller')->disableOriginalConstructor()->getMock(), + ], + [ + $this->getMockBuilder('OCP\AppFramework\OCSController')->disableOriginalConstructor()->getMock(), + ], + [ + $this->getMockBuilder('OCA\Files_Sharing\API\Share20OCS')->disableOriginalConstructor()->getMock(), + ], + ]; + } + + /** + * @dataProvider dataAfterController + * + * @param Controller $controller + * @param bool $called + */ + public function testAfterController(Controller $controller) { + if ($controller instanceof OCA\Files_Sharing\API\Share20OCS) { + $controller->expects($this->once())->method('cleanup'); + } + + $response = $this->getMockBuilder('OCP\AppFramework\Http\Response') + ->disableOriginalConstructor() + ->getMock(); + $this->middleware->afterController($controller, 'foo', $response); + } +} diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php index 8fe43d454f6..576f05d565d 100644 --- a/apps/files_sharing/tests/MountProviderTest.php +++ b/apps/files_sharing/tests/MountProviderTest.php @@ -68,51 +68,224 @@ class MountProviderTest extends \Test\TestCase { $this->provider = new MountProvider($this->config, $this->shareManager, $this->logger); } - public function testExcludeShares() { - /** @var IShare | \PHPUnit_Framework_MockObject_MockObject $share1 */ - $share1 = $this->getMockBuilder('\OCP\Share\IShare')->getMock(); - $share1->expects($this->once()) - ->method('getPermissions') - ->will($this->returnValue(0)); - - $share2 = $this->getMockBuilder('\OCP\Share\IShare')->getMock(); - $share2->expects($this->once()) + private function makeMockShare($id, $nodeId, $owner = 'user2', $target = null, $permissions = 31) { + $share = $this->getMock('\OCP\Share\IShare'); + $share->expects($this->any()) ->method('getPermissions') - ->will($this->returnValue(31)); - $share2->expects($this->any()) + ->will($this->returnValue($permissions)); + $share->expects($this->any()) ->method('getShareOwner') - ->will($this->returnValue('user2')); - $share2->expects($this->any()) + ->will($this->returnValue($owner)); + $share->expects($this->any()) ->method('getTarget') - ->will($this->returnValue('/share2')); + ->will($this->returnValue($target)); + $share->expects($this->any()) + ->method('getId') + ->will($this->returnValue($id)); + $share->expects($this->any()) + ->method('getNodeId') + ->will($this->returnValue($nodeId)); + $share->expects($this->any()) + ->method('getShareTime') + ->will($this->returnValue( + // compute share time based on id, simulating share order + new \DateTime('@' . (1469193980 + 1000 * $id)) + )); + return $share; + } - $share3 = $this->getMockBuilder('\OCP\Share\IShare')->getMock(); - $share3->expects($this->once()) - ->method('getPermissions') - ->will($this->returnValue(0)); + /** + * Tests excluding shares from the current view. This includes: + * - shares that were opted out of (permissions === 0) + * - shares with a group in which the owner is already in + */ + public function testExcludeShares() { + $rootFolder = $this->getMock('\OCP\Files\IRootFolder'); + $userManager = $this->getMock('\OCP\IUserManager'); + $userShares = [ + $this->makeMockShare(1, 100, 'user2', '/share2', 0), + $this->makeMockShare(2, 100, 'user2', '/share2', 31), + ]; + $groupShares = [ + $this->makeMockShare(3, 100, 'user2', '/share2', 0), + $this->makeMockShare(4, 101, 'user2', '/share4', 31), + $this->makeMockShare(5, 100, 'user1', '/share4', 31), + ]; + $this->user->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('user1')); + $this->shareManager->expects($this->at(0)) + ->method('getSharedWith') + ->with('user1', \OCP\Share::SHARE_TYPE_USER) + ->will($this->returnValue($userShares)); + $this->shareManager->expects($this->at(1)) + ->method('getSharedWith') + ->with('user1', \OCP\Share::SHARE_TYPE_GROUP, null, -1) + ->will($this->returnValue($groupShares)); + $this->shareManager->expects($this->any()) + ->method('newShare') + ->will($this->returnCallback(function() use ($rootFolder, $userManager) { + return new \OC\Share20\Share($rootFolder, $userManager); + })); + $mounts = $this->provider->getMountsForUser($this->user, $this->loader); + $this->assertCount(2, $mounts); + $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mounts[0]); + $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mounts[1]); + $mountedShare1 = $mounts[0]->getShare(); + $this->assertEquals('2', $mountedShare1->getId()); + $this->assertEquals('user2', $mountedShare1->getShareOwner()); + $this->assertEquals(100, $mountedShare1->getNodeId()); + $this->assertEquals('/share2', $mountedShare1->getTarget()); + $this->assertEquals(31, $mountedShare1->getPermissions()); + $mountedShare2 = $mounts[1]->getShare(); + $this->assertEquals('4', $mountedShare2->getId()); + $this->assertEquals('user2', $mountedShare2->getShareOwner()); + $this->assertEquals(101, $mountedShare2->getNodeId()); + $this->assertEquals('/share4', $mountedShare2->getTarget()); + $this->assertEquals(31, $mountedShare2->getPermissions()); + } - /** @var IShare | \PHPUnit_Framework_MockObject_MockObject $share4 */ - $share4 = $this->getMockBuilder('\OCP\Share\IShare')->getMock(); - $share4->expects($this->once()) - ->method('getPermissions') - ->will($this->returnValue(31)); - $share4->expects($this->any()) - ->method('getShareOwner') - ->will($this->returnValue('user2')); - $share4->expects($this->any()) - ->method('getTarget') - ->will($this->returnValue('/share4')); + public function mergeSharesDataProvider() { + // note: the user in the specs here is the shareOwner not recipient + // the recipient is always "user1" + return [ + // #0: share as outsider with "group1" and "user1" with same permissions + [ + [ + [1, 100, 'user2', '/share2', 31], + ], + [ + [2, 100, 'user2', '/share2', 31], + ], + [ + // combined, user share has higher priority + ['1', 100, 'user2', '/share2', 31], + ], + ], + // #1: share as outsider with "group1" and "user1" with different permissions + [ + [ + [1, 100, 'user2', '/share', 31], + ], + [ + [2, 100, 'user2', '/share', 15], + ], + [ + // use highest permissions + ['1', 100, 'user2', '/share', 31], + ], + ], + // #2: share as outsider with "group1" and "group2" with same permissions + [ + [ + ], + [ + [1, 100, 'user2', '/share', 31], + [2, 100, 'user2', '/share', 31], + ], + [ + // combined, first group share has higher priority + ['1', 100, 'user2', '/share', 31], + ], + ], + // #3: share as outsider with "group1" and "group2" with different permissions + [ + [ + ], + [ + [1, 100, 'user2', '/share', 31], + [2, 100, 'user2', '/share', 15], + ], + [ + // use higher permissions + ['1', 100, 'user2', '/share', 31], + ], + ], + // #4: share as insider with "group1" + [ + [ + ], + [ + [1, 100, 'user1', '/share', 31], + ], + [ + // no received share since "user1" is the sharer/owner + ], + ], + // #5: share as insider with "group1" and "group2" with different permissions + [ + [ + ], + [ + [1, 100, 'user1', '/share', 31], + [2, 100, 'user1', '/share', 15], + ], + [ + // no received share since "user1" is the sharer/owner + ], + ], + // #6: share as outside with "group1", recipient opted out + [ + [ + ], + [ + [1, 100, 'user2', '/share', 0], + ], + [ + // no received share since "user1" opted out + ], + ], + // #7: share as outsider with "group1" and "user1" where recipient renamed in between + [ + [ + [1, 100, 'user2', '/share2-renamed', 31], + ], + [ + [2, 100, 'user2', '/share2', 31], + ], + [ + // use target of least recent share + ['1', 100, 'user2', '/share2-renamed', 31], + ], + ], + // #8: share as outsider with "group1" and "user1" where recipient renamed in between + [ + [ + [2, 100, 'user2', '/share2', 31], + ], + [ + [1, 100, 'user2', '/share2-renamed', 31], + ], + [ + // use target of least recent share + ['1', 100, 'user2', '/share2-renamed', 31], + ], + ], + ]; + } - $share5 = $this->getMockBuilder('\OCP\Share\IShare')->getMock(); - $share5->expects($this->once()) - ->method('getPermissions') - ->will($this->returnValue(31)); - $share5->expects($this->any()) - ->method('getShareOwner') - ->will($this->returnValue('user1')); + /** + * Tests merging shares. + * + * Happens when sharing the same entry to a user through multiple ways, + * like several groups and also direct shares at the same time. + * + * @dataProvider mergeSharesDataProvider + * + * @param array $userShares array of user share specs + * @param array $groupShares array of group share specs + * @param array $expectedShares array of expected supershare specs + */ + public function testMergeShares($userShares, $groupShares, $expectedShares) { + $rootFolder = $this->getMock('\OCP\Files\IRootFolder'); + $userManager = $this->getMock('\OCP\IUserManager'); - $userShares = [$share1, $share2]; - $groupShares = [$share3, $share4, $share5]; + $userShares = array_map(function($shareSpec) { + return $this->makeMockShare($shareSpec[0], $shareSpec[1], $shareSpec[2], $shareSpec[3], $shareSpec[4]); + }, $userShares); + $groupShares = array_map(function($shareSpec) { + return $this->makeMockShare($shareSpec[0], $shareSpec[1], $shareSpec[2], $shareSpec[3], $shareSpec[4]); + }, $groupShares); $this->user->expects($this->any()) ->method('getUID') @@ -126,17 +299,29 @@ class MountProviderTest extends \Test\TestCase { ->method('getSharedWith') ->with('user1', \OCP\Share::SHARE_TYPE_GROUP, null, -1) ->will($this->returnValue($groupShares)); + $this->shareManager->expects($this->any()) + ->method('newShare') + ->will($this->returnCallback(function() use ($rootFolder, $userManager) { + return new \OC\Share20\Share($rootFolder, $userManager); + })); $mounts = $this->provider->getMountsForUser($this->user, $this->loader); - $this->assertCount(2, $mounts); - $this->assertSharedMount($share1, $mounts[0]); - $this->assertSharedMount($share4, $mounts[1]); - } + $this->assertCount(count($expectedShares), $mounts); + + foreach ($mounts as $index => $mount) { + $expectedShare = $expectedShares[$index]; + $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mount); + + // supershare + $share = $mount->getShare(); - private function assertSharedMount(IShare $share, IMountPoint $mount) { - $this->assertInstanceOf('OCA\Files_Sharing\SharedMount', $mount); - $this->assertEquals($share, $mount->getShare()); + $this->assertEquals($expectedShare[0], $share->getId()); + $this->assertEquals($expectedShare[1], $share->getNodeId()); + $this->assertEquals($expectedShare[2], $share->getShareOwner()); + $this->assertEquals($expectedShare[3], $share->getTarget()); + $this->assertEquals($expectedShare[4], $share->getPermissions()); + } } } diff --git a/apps/files_trashbin/ajax/undelete.php b/apps/files_trashbin/ajax/undelete.php index 9095c551b4f..ba671325372 100644 --- a/apps/files_trashbin/ajax/undelete.php +++ b/apps/files_trashbin/ajax/undelete.php @@ -29,7 +29,6 @@ OCP\JSON::checkLoggedIn(); OCP\JSON::callCheck(); \OC::$server->getSession()->close(); -$files = $_POST['files']; $dir = '/'; if (isset($_POST['dir'])) { $dir = rtrim((string)$_POST['dir'], '/'). '/'; @@ -50,7 +49,7 @@ if (isset($_POST['allfiles']) && (string)$_POST['allfiles'] === 'true') { $list[] = $fileName; } } else { - $list = json_decode($files); + $list = json_decode($_POST['files']); } $error = array(); diff --git a/apps/files_trashbin/appinfo/info.xml b/apps/files_trashbin/appinfo/info.xml index 2b19ba6fe11..16ed81efd77 100644 --- a/apps/files_trashbin/appinfo/info.xml +++ b/apps/files_trashbin/appinfo/info.xml @@ -10,7 +10,7 @@ To prevent a user from running out of disk space, the Deleted files app will not <licence>AGPL</licence> <author>Bjoern Schiessle</author> <default_enable/> - <version>1.0.0</version> + <version>1.1.0</version> <types> <filesystem/> </types> diff --git a/apps/files_trashbin/l10n/de_DE.js b/apps/files_trashbin/l10n/de_DE.js index 84a2c382efa..f39b61b58ef 100644 --- a/apps/files_trashbin/l10n/de_DE.js +++ b/apps/files_trashbin/l10n/de_DE.js @@ -9,7 +9,7 @@ OC.L10N.register( "Delete permanently" : "Endgültig löschen", "Error" : "Fehler", "This operation is forbidden" : "Diese Operation ist nicht erlaubt", - "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfen Sie die Logdateien oder kontaktieren Sie den Administrator", + "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfen Sie die Log-Dateien oder kontaktieren Sie den Administrator", "restored" : "Wiederhergestellt", "No deleted files" : "Keine gelöschten Dateien", "You will be able to recover deleted files from here" : "Sie können hier gelöschte Dateien wiederherstellen", diff --git a/apps/files_trashbin/l10n/de_DE.json b/apps/files_trashbin/l10n/de_DE.json index 966461efee3..0f4e3f950e4 100644 --- a/apps/files_trashbin/l10n/de_DE.json +++ b/apps/files_trashbin/l10n/de_DE.json @@ -7,7 +7,7 @@ "Delete permanently" : "Endgültig löschen", "Error" : "Fehler", "This operation is forbidden" : "Diese Operation ist nicht erlaubt", - "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfen Sie die Logdateien oder kontaktieren Sie den Administrator", + "This directory is unavailable, please check the logs or contact the administrator" : "Dieses Verzeichnis ist nicht verfügbar, bitte überprüfen Sie die Log-Dateien oder kontaktieren Sie den Administrator", "restored" : "Wiederhergestellt", "No deleted files" : "Keine gelöschten Dateien", "You will be able to recover deleted files from here" : "Sie können hier gelöschte Dateien wiederherstellen", diff --git a/apps/files_versions/l10n/id.js b/apps/files_versions/l10n/id.js index 5d3579c3e62..5848578b3d4 100644 --- a/apps/files_versions/l10n/id.js +++ b/apps/files_versions/l10n/id.js @@ -6,6 +6,6 @@ OC.L10N.register( "Failed to revert {file} to revision {timestamp}." : "Gagal mengembalikan {file} ke revisi {timestamp}.", "Restore" : "Pulihkan", "No other versions available" : "Tidak ada versi lain yang tersedia", - "More versions..." : "Versi lebih..." + "More versions..." : "Versi lainnya..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/id.json b/apps/files_versions/l10n/id.json index 7ab5a1638f2..9560af3af5a 100644 --- a/apps/files_versions/l10n/id.json +++ b/apps/files_versions/l10n/id.json @@ -4,6 +4,6 @@ "Failed to revert {file} to revision {timestamp}." : "Gagal mengembalikan {file} ke revisi {timestamp}.", "Restore" : "Pulihkan", "No other versions available" : "Tidak ada versi lain yang tersedia", - "More versions..." : "Versi lebih..." + "More versions..." : "Versi lainnya..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/provisioning_api/appinfo/info.xml b/apps/provisioning_api/appinfo/info.xml index 2f62ff69b17..009bdca0c1e 100644 --- a/apps/provisioning_api/appinfo/info.xml +++ b/apps/provisioning_api/appinfo/info.xml @@ -17,7 +17,7 @@ <documentation> <admin>admin-provisioning-api</admin> </documentation> - <version>1.0.0</version> + <version>1.1.0</version> <namespace>Provisioning_API</namespace> <types> <prevent_group_restriction/> diff --git a/apps/systemtags/admin.php b/apps/systemtags/admin.php new file mode 100644 index 00000000000..45ea577e8ab --- /dev/null +++ b/apps/systemtags/admin.php @@ -0,0 +1,23 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +$template = new \OCP\Template('systemtags', 'admin'); +return $template->fetchPage(); diff --git a/apps/systemtags/appinfo/app.php b/apps/systemtags/appinfo/app.php index af91e5fdbcd..5a365c4ef15 100644 --- a/apps/systemtags/appinfo/app.php +++ b/apps/systemtags/appinfo/app.php @@ -78,6 +78,9 @@ $mapperListener = function(MapperEvent $event) use ($activityManager) { $eventDispatcher->addListener(MapperEvent::EVENT_ASSIGN, $mapperListener); $eventDispatcher->addListener(MapperEvent::EVENT_UNASSIGN, $mapperListener); +$app = new \OCA\SystemTags\AppInfo\Application(); +$app->registerAdminPage(); + $l = \OC::$server->getL10N('systemtags'); \OCA\Files\App::getNavigationManager()->add( diff --git a/apps/systemtags/appinfo/info.xml b/apps/systemtags/appinfo/info.xml index 1d75610f545..5eced10b710 100644 --- a/apps/systemtags/appinfo/info.xml +++ b/apps/systemtags/appinfo/info.xml @@ -5,9 +5,9 @@ <description>Collaborative tagging functionality which shares tags among users. Great for teams. (If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)</description> <licence>AGPL</licence> - <author>Vincent Petry</author> + <author>Vincent Petry, Joas Schilling</author> <default_enable/> - <version>1.0.0</version> + <version>1.1.0</version> <dependencies> <owncloud min-version="9.2" max-version="9.2" /> </dependencies> diff --git a/apps/systemtags/img/app.svg b/apps/systemtags/img/app.svg new file mode 100644 index 00000000000..8bfd246078e --- /dev/null +++ b/apps/systemtags/img/app.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0"> + <path fill="#fff" d="m12.372 1.9224-9.614 0.02632c-0.54322 0-0.69312 0.41974-0.69406 0.69208l-0.030264 9.6034 17.446 17.444c0.39376 0.39658 1.0247 0.39394 1.4184 0l8.9138-8.9138c0.39344-0.39376 0.3979-1.0265 0.004-1.4205l-0.0022 0.01752-16.734-16.734-0.7082-0.70834zm-4.3336 3.7044a2.2876 2.2876 0 0 1 2.2876 2.288 2.2876 2.2876 0 0 1 -2.2876 2.2882 2.2876 2.2876 0 0 1 -2.288 -2.2882 2.2876 2.2876 0 0 1 2.288 -2.288z"/> +</svg> diff --git a/apps/systemtags/img/tag.png b/apps/systemtags/img/tag.png Binary files differindex 694a8cf17ad..1ec3843c9d3 100644 --- a/apps/systemtags/img/tag.png +++ b/apps/systemtags/img/tag.png diff --git a/apps/systemtags/img/tag.svg b/apps/systemtags/img/tag.svg index bf4688c9228..293a7f5be9c 100644 --- a/apps/systemtags/img/tag.svg +++ b/apps/systemtags/img/tag.svg @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0"> <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/> - <path d="m6.1861 0.96121-4.807 0.01316c-0.27161 0-0.34656 0.20987-0.34703 0.34604l-0.015132 4.8017 8.7232 8.7222c0.19688 0.19829 0.51234 0.19697 0.7092 0l4.4569-4.4569c0.19672-0.19688 0.19895-0.51327 0.002-0.71024l-0.0011 0.00876-8.3668-8.3668-0.3541-0.35417zm-2.1669 1.8522a1.1438 1.1438 0 0 1 1.144 1.144 1.1438 1.1438 0 0 1 -1.144 1.144 1.1438 1.1438 0 0 1 -1.144 -1.144 1.1438 1.1438 0 0 1 1.144 -1.144z" fill="#6e6e6e"/> + <path d="m6.1861 0.96121-4.807 0.01316c-0.27161 0-0.34656 0.20987-0.34703 0.34604l-0.015132 4.8017 8.7232 8.7222c0.19688 0.19829 0.51234 0.19697 0.7092 0l4.4569-4.4569c0.19672-0.19688 0.19895-0.51327 0.002-0.71024l-0.0011 0.00876-8.3668-8.3668-0.3541-0.35417zm-2.1669 1.8522a1.1438 1.1438 0 0 1 1.144 1.144 1.1438 1.1438 0 0 1 -1.144 1.144 1.1438 1.1438 0 0 1 -1.144 -1.144 1.1438 1.1438 0 0 1 1.144 -1.144z"/> </svg> diff --git a/apps/systemtags/js/admin.js b/apps/systemtags/js/admin.js new file mode 100644 index 00000000000..ed21f82f3ba --- /dev/null +++ b/apps/systemtags/js/admin.js @@ -0,0 +1,164 @@ +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + if (!OCA.SystemTags) { + /** + * @namespace + */ + OCA.SystemTags = {}; + } + + OCA.SystemTags.Admin = { + + collection: null, + + init: function() { + var self = this; + + this.collection = OC.SystemTags.collection; + this.collection.fetch({ + success: function() { + $('#systemtag').select2(_.extend(self.select2)); + } + }); + + $('#systemtag_submit').on('click', _.bind(this._onClickSubmit, this)); + $('#systemtag_delete').on('click', _.bind(this._onClickDelete, this)); + $('#systemtag_reset').on('click', _.bind(this._onClickReset, this)); + }, + + /** + * Selecting a systemtag in select2 + * + * @param {OC.SystemTags.SystemTagModel} tag + */ + onSelectTag: function (tag) { + var level = 0; + if (tag.get('userVisible')) { + level += 2; + if (tag.get('userAssignable')) { + level += 1; + } + } + + $('#systemtag_name').val(tag.get('name')); + $('#systemtag_level').val(level); + + this._prepareForm(tag.get('id')); + }, + + /** + * Clicking the "Create"/"Update" button + */ + _onClickSubmit: function () { + var level = parseInt($('#systemtag_level').val(), 10), + tagId = $('#systemtags').attr('data-systemtag-id'); + var data = { + name: $('#systemtag_name').val(), + userVisible: level === 2 || level === 3, + userAssignable: level === 3 + }; + + if (tagId) { + var model = this.collection.get(tagId); + model.save(data); + } else { + this.collection.create(data); + } + + this._onClickReset(); + }, + + /** + * Clicking the "Delete" button + */ + _onClickDelete: function () { + var tagId = $('#systemtags').attr('data-systemtag-id'); + var model = this.collection.get(tagId); + model.destroy(); + + this._onClickReset(); + }, + + /** + * Clicking the "Reset" button + */ + _onClickReset: function () { + $('#systemtag_name').val(''); + $('#systemtag_level').val(3); + this._prepareForm(0); + }, + + /** + * Prepare the form for create/update + * + * @param {int} tagId + */ + _prepareForm: function (tagId) { + if (tagId > 0) { + $('#systemtags').attr('data-systemtag-id', tagId); + $('#systemtag_delete').removeClass('hidden'); + $('#systemtag_submit').val(t('systemtags_manager', 'Update')); + } else { + $('#systemtag').select2('val', ''); + $('#systemtags').attr('data-systemtag-id', ''); + $('#systemtag_delete').addClass('hidden'); + $('#systemtag_submit').val(t('systemtags_manager', 'Create')); + } + }, + + /** + * Select2 options for the SystemTag dropdown + */ + select2: { + allowClear: false, + multiple: false, + placeholder: t('systemtags_manager', 'Select tag…'), + query: _.debounce(function(query) { + query.callback({ + results: OCA.SystemTags.Admin.collection.filterByName(query.term) + }); + }, 100, true), + id: function(element) { + return element; + }, + initSelection: function(element, callback) { + var selection = ($(element).val() || []).split('|').sort(); + callback(selection); + }, + formatResult: function (tag) { + return OC.SystemTags.getDescriptiveTag(tag); + }, + formatSelection: function (tag) { + OCA.SystemTags.Admin.onSelectTag(tag); + return OC.SystemTags.getDescriptiveTag(tag); + }, + escapeMarkup: function(m) { + return m; + } + } + }; +})(); + +$(document).ready(function() { + OCA.SystemTags.Admin.init(); +}); + diff --git a/apps/systemtags/l10n/ca.js b/apps/systemtags/l10n/ca.js index 46d9d409662..3506940d2ee 100644 --- a/apps/systemtags/l10n/ca.js +++ b/apps/systemtags/l10n/ca.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha des-assignat les marques de sistema de la %3$s a la %2$s", "%s (restricted)" : "%s (restringit)", "%s (invisible)" : "%s (invisible)", + "Name" : "Nom", "No files in here" : "No hi ha arxius", "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", - "Name" : "Nom", "Size" : "Mida", "Modified" : "Modificat" }, diff --git a/apps/systemtags/l10n/ca.json b/apps/systemtags/l10n/ca.json index 9bb1d6fba83..46bdaabfacc 100644 --- a/apps/systemtags/l10n/ca.json +++ b/apps/systemtags/l10n/ca.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha des-assignat les marques de sistema de la %3$s a la %2$s", "%s (restricted)" : "%s (restringit)", "%s (invisible)" : "%s (invisible)", + "Name" : "Nom", "No files in here" : "No hi ha arxius", "No entries found in this folder" : "No hi ha entrades en aquesta carpeta", - "Name" : "Nom", "Size" : "Mida", "Modified" : "Modificat" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/cs_CZ.js b/apps/systemtags/l10n/cs_CZ.js index 2af8db9f183..31f290bd280 100644 --- a/apps/systemtags/l10n/cs_CZ.js +++ b/apps/systemtags/l10n/cs_CZ.js @@ -2,6 +2,9 @@ OC.L10N.register( "systemtags", { "Tags" : "Značky", + "Update" : "Aktualizovat", + "Create" : "Vytvořit", + "Select tag…" : "Zvolit značku…", "Tagged files" : "Otagované soubory", "Select tags to filter by" : "Vybrat tagy pro filtr", "Please select tags to filter by" : "Vyberte prosím tagy pro filtrování", @@ -23,9 +26,15 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s", "%s (restricted)" : "%s (omezeno)", "%s (invisible)" : "%s (neviditelný)", + "Collaborative tags" : "Značky pro spolupráci", + "Name" : "Název", + "Delete" : "Smazat", + "Public" : "Veřejné", + "Restricted" : "Omezené", + "Invisible" : "Neviditelné", + "Reset" : "Obnovit", "No files in here" : "Žádné soubory", "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno", - "Name" : "Název", "Size" : "Velikost", "Modified" : "Upraveno" }, diff --git a/apps/systemtags/l10n/cs_CZ.json b/apps/systemtags/l10n/cs_CZ.json index c2c6536daa5..d0729858edf 100644 --- a/apps/systemtags/l10n/cs_CZ.json +++ b/apps/systemtags/l10n/cs_CZ.json @@ -1,5 +1,8 @@ { "translations": { "Tags" : "Značky", + "Update" : "Aktualizovat", + "Create" : "Vytvořit", + "Select tag…" : "Zvolit značku…", "Tagged files" : "Otagované soubory", "Select tags to filter by" : "Vybrat tagy pro filtr", "Please select tags to filter by" : "Vyberte prosím tagy pro filtrování", @@ -21,9 +24,15 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s odebral systémový tag %3$s ze %2$s", "%s (restricted)" : "%s (omezeno)", "%s (invisible)" : "%s (neviditelný)", + "Collaborative tags" : "Značky pro spolupráci", + "Name" : "Název", + "Delete" : "Smazat", + "Public" : "Veřejné", + "Restricted" : "Omezené", + "Invisible" : "Neviditelné", + "Reset" : "Obnovit", "No files in here" : "Žádné soubory", "No entries found in this folder" : "V tomto adresáři nebylo nic nalezeno", - "Name" : "Název", "Size" : "Velikost", "Modified" : "Upraveno" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" diff --git a/apps/systemtags/l10n/de.js b/apps/systemtags/l10n/de.js index 47b60136500..3271146d62b 100644 --- a/apps/systemtags/l10n/de.js +++ b/apps/systemtags/l10n/de.js @@ -2,30 +2,39 @@ OC.L10N.register( "systemtags", { "Tags" : "Tags", - "Tagged files" : "Tags", - "Select tags to filter by" : "Wähle Tags die gefiltert werden sollen", - "Please select tags to filter by" : "Bitte wähle Tags die gefiltert werden sollen", + "Update" : "Aktualisierung", + "Create" : "Erstellen", + "Select tag…" : "Tag wählen", + "Tagged files" : "Mit Tags versehene Dateien", + "Select tags to filter by" : "Wähle Tags nach denen gefilter werden soll", + "Please select tags to filter by" : "Bitte wähle die Tags nach denen gefiltert werden soll", "No files found for the selected tags" : "Keine Dateien für die ausgewählten Tags gefunden", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden", - "You assigned system tag %3$s" : "System-Kennzeichnung %3$s wurde zugewiesen", - "%1$s assigned system tag %3$s" : "%1$s hat System-Tag %3$s angebracht", - "You unassigned system tag %3$s" : "System-Bezeichnung %3$s wurde entfernt", + "You assigned system tag %3$s" : "System-Tag %3$s wurde zugewiesen", + "%1$s assigned system tag %3$s" : "%1$s hat System-Tag %3$s zugewiesen", + "You unassigned system tag %3$s" : "System-Tag %3$s wurde entfernt", "%1$s unassigned system tag %3$s" : "%1$s hat den System-Tag %3$s entfernt", - "You created system tag %2$s" : "System-Bezeichnung %2$s wurde erstellt", - "%1$s created system tag %2$s" : "%1$s hat erstellt System-Tag %2$s", - "You deleted system tag %2$s" : "System-Kennzeichnung %2$s wurde gelöscht", + "You created system tag %2$s" : "System-Tag %2$s wurde erstellt", + "%1$s created system tag %2$s" : "%1$s hat System-Tag %2$s erstellt", + "You deleted system tag %2$s" : "System-Tag %2$s wurde gelöscht", "%1$s deleted system tag %2$s" : "%1$s hat System-Tag %2$s gelöscht", - "You updated system tag %3$s to %2$s" : "System-Bezeichnung %3$s zu %2$s aktualisiert", - "%1$s updated system tag %3$s to %2$s" : "%1$s hat System-Bezeichnung von %3$s zu %2$s aktualisiert", - "You assigned system tag %3$s to %2$s" : "System-Bezeichnung %3$s an %2$s zugewiesen", - "%1$s assigned system tag %3$s to %2$s" : "%1$s hat System-Tag %3$s an %2$s angebracht", + "You updated system tag %3$s to %2$s" : "System-Tag %3$s wurde zu %2$s aktualisiert", + "%1$s updated system tag %3$s to %2$s" : "%1$s hat System-BTag von %3$s zu %2$s aktualisiert", + "You assigned system tag %3$s to %2$s" : "System-Tag %3$s an %2$s zugewiesen", + "%1$s assigned system tag %3$s to %2$s" : "%1$s hat System-Tag %3$s %2$s zugewiesen", "You unassigned system tag %3$s from %2$s" : "System-Bezeichnung %3$s von %2$s entfernt", "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt", "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", + "Collaborative tags" : "Zusammenarbeits-Tags", + "Name" : "Name", + "Delete" : "Löschen", + "Public" : "Öffentlich", + "Restricted" : "Eingeschränkt", + "Invisible" : "Versteckt", + "Reset" : "Zurücksetzen", "No files in here" : "Keine Dateien vorhanden", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", - "Name" : "Name", "Size" : "Größe", "Modified" : "Geändert" }, diff --git a/apps/systemtags/l10n/de.json b/apps/systemtags/l10n/de.json index 100b3b32398..67a13fd0999 100644 --- a/apps/systemtags/l10n/de.json +++ b/apps/systemtags/l10n/de.json @@ -1,29 +1,38 @@ { "translations": { "Tags" : "Tags", - "Tagged files" : "Tags", - "Select tags to filter by" : "Wähle Tags die gefiltert werden sollen", - "Please select tags to filter by" : "Bitte wähle Tags die gefiltert werden sollen", + "Update" : "Aktualisierung", + "Create" : "Erstellen", + "Select tag…" : "Tag wählen", + "Tagged files" : "Mit Tags versehene Dateien", + "Select tags to filter by" : "Wähle Tags nach denen gefilter werden soll", + "Please select tags to filter by" : "Bitte wähle die Tags nach denen gefiltert werden soll", "No files found for the selected tags" : "Keine Dateien für die ausgewählten Tags gefunden", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden", - "You assigned system tag %3$s" : "System-Kennzeichnung %3$s wurde zugewiesen", - "%1$s assigned system tag %3$s" : "%1$s hat System-Tag %3$s angebracht", - "You unassigned system tag %3$s" : "System-Bezeichnung %3$s wurde entfernt", + "You assigned system tag %3$s" : "System-Tag %3$s wurde zugewiesen", + "%1$s assigned system tag %3$s" : "%1$s hat System-Tag %3$s zugewiesen", + "You unassigned system tag %3$s" : "System-Tag %3$s wurde entfernt", "%1$s unassigned system tag %3$s" : "%1$s hat den System-Tag %3$s entfernt", - "You created system tag %2$s" : "System-Bezeichnung %2$s wurde erstellt", - "%1$s created system tag %2$s" : "%1$s hat erstellt System-Tag %2$s", - "You deleted system tag %2$s" : "System-Kennzeichnung %2$s wurde gelöscht", + "You created system tag %2$s" : "System-Tag %2$s wurde erstellt", + "%1$s created system tag %2$s" : "%1$s hat System-Tag %2$s erstellt", + "You deleted system tag %2$s" : "System-Tag %2$s wurde gelöscht", "%1$s deleted system tag %2$s" : "%1$s hat System-Tag %2$s gelöscht", - "You updated system tag %3$s to %2$s" : "System-Bezeichnung %3$s zu %2$s aktualisiert", - "%1$s updated system tag %3$s to %2$s" : "%1$s hat System-Bezeichnung von %3$s zu %2$s aktualisiert", - "You assigned system tag %3$s to %2$s" : "System-Bezeichnung %3$s an %2$s zugewiesen", - "%1$s assigned system tag %3$s to %2$s" : "%1$s hat System-Tag %3$s an %2$s angebracht", + "You updated system tag %3$s to %2$s" : "System-Tag %3$s wurde zu %2$s aktualisiert", + "%1$s updated system tag %3$s to %2$s" : "%1$s hat System-BTag von %3$s zu %2$s aktualisiert", + "You assigned system tag %3$s to %2$s" : "System-Tag %3$s an %2$s zugewiesen", + "%1$s assigned system tag %3$s to %2$s" : "%1$s hat System-Tag %3$s %2$s zugewiesen", "You unassigned system tag %3$s from %2$s" : "System-Bezeichnung %3$s von %2$s entfernt", "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt", "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", + "Collaborative tags" : "Zusammenarbeits-Tags", + "Name" : "Name", + "Delete" : "Löschen", + "Public" : "Öffentlich", + "Restricted" : "Eingeschränkt", + "Invisible" : "Versteckt", + "Reset" : "Zurücksetzen", "No files in here" : "Keine Dateien vorhanden", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", - "Name" : "Name", "Size" : "Größe", "Modified" : "Geändert" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/de_DE.js b/apps/systemtags/l10n/de_DE.js index 9a5566f7572..8c7e0c1d466 100644 --- a/apps/systemtags/l10n/de_DE.js +++ b/apps/systemtags/l10n/de_DE.js @@ -2,30 +2,39 @@ OC.L10N.register( "systemtags", { "Tags" : "Tags", - "Tagged files" : "Tags", - "Select tags to filter by" : "Wählen Sie Tags die gefiltert werden sollen", - "Please select tags to filter by" : "Bitte wählen Sie Tags die gefiltert werden sollen", + "Update" : "Aktualisieren", + "Create" : "Erstellen", + "Select tag…" : "Tag wählen", + "Tagged files" : "Getaggte Dateien", + "Select tags to filter by" : "Wählen Sie Tags nach denen gefiltert werden soll", + "Please select tags to filter by" : "Bitte wählen Sie Tags nach denen gefiltert werden sollen", "No files found for the selected tags" : "Keine Dateien für die ausgewählten Tags gefunden", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden", - "You assigned system tag %3$s" : "Sie haben den System-Tag %3$s angebracht", - "%1$s assigned system tag %3$s" : "%1$s hat System-Tag %3$s angebracht", + "You assigned system tag %3$s" : "Sie haben den System-Tag %3$s zugeordnet", + "%1$s assigned system tag %3$s" : "%1$s hat den System-Tag %3$s zugeordnet", "You unassigned system tag %3$s" : "Sie haben den System-Tag %3$s entfernt", "%1$s unassigned system tag %3$s" : "%1$s hat den System-Tag %3$s entfernt", "You created system tag %2$s" : "Sie haben den System-Tag %2$s erstellt", - "%1$s created system tag %2$s" : "%1$s hat erstellt System-Tag %2$s", + "%1$s created system tag %2$s" : "%1$s hat den System-Tag %2$s erstellt", "You deleted system tag %2$s" : "Sie haben den System-Tag %2$s gelöscht", "%1$s deleted system tag %2$s" : "%1$s hat System-Tag %2$s gelöscht", "You updated system tag %3$s to %2$s" : "Sie haben den System-Tag %3$s zu %2$s aktualisiert", "%1$s updated system tag %3$s to %2$s" : "%1$s hat System-Tag von %3$s zu %2$s aktualisiert", - "You assigned system tag %3$s to %2$s" : "Sie haben den System-Tag %3$s an %2$s angebracht", - "%1$s assigned system tag %3$s to %2$s" : "%1$s hat System-Tag %3$s an %2$s angebracht", + "You assigned system tag %3$s to %2$s" : "Sie haben den System-Tag %3$s an %2$s zugeordnet", + "%1$s assigned system tag %3$s to %2$s" : "%1$s hat den System-Tag %3$s an %2$s zugeordnet", "You unassigned system tag %3$s from %2$s" : "Sie haben den System-Tag %3$s von %2$s entfernt", "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt", "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", + "Collaborative tags" : "Gemeinsame Tags", + "Name" : "Name", + "Delete" : "Löschen", + "Public" : "Öffentlich", + "Restricted" : "Eingeschränkt", + "Invisible" : "Nicht sichtbar", + "Reset" : "Zurücksetzen", "No files in here" : "Keine Dateien vorhanden", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", - "Name" : "Name", "Size" : "Größe", "Modified" : "Geändert" }, diff --git a/apps/systemtags/l10n/de_DE.json b/apps/systemtags/l10n/de_DE.json index 77a5bbf0354..443868af44a 100644 --- a/apps/systemtags/l10n/de_DE.json +++ b/apps/systemtags/l10n/de_DE.json @@ -1,29 +1,38 @@ { "translations": { "Tags" : "Tags", - "Tagged files" : "Tags", - "Select tags to filter by" : "Wählen Sie Tags die gefiltert werden sollen", - "Please select tags to filter by" : "Bitte wählen Sie Tags die gefiltert werden sollen", + "Update" : "Aktualisieren", + "Create" : "Erstellen", + "Select tag…" : "Tag wählen", + "Tagged files" : "Getaggte Dateien", + "Select tags to filter by" : "Wählen Sie Tags nach denen gefiltert werden soll", + "Please select tags to filter by" : "Bitte wählen Sie Tags nach denen gefiltert werden sollen", "No files found for the selected tags" : "Keine Dateien für die ausgewählten Tags gefunden", "<strong>System tags</strong> for a file have been modified" : "<strong>System-Tags</strong> für eine Datei sind geändert worden", - "You assigned system tag %3$s" : "Sie haben den System-Tag %3$s angebracht", - "%1$s assigned system tag %3$s" : "%1$s hat System-Tag %3$s angebracht", + "You assigned system tag %3$s" : "Sie haben den System-Tag %3$s zugeordnet", + "%1$s assigned system tag %3$s" : "%1$s hat den System-Tag %3$s zugeordnet", "You unassigned system tag %3$s" : "Sie haben den System-Tag %3$s entfernt", "%1$s unassigned system tag %3$s" : "%1$s hat den System-Tag %3$s entfernt", "You created system tag %2$s" : "Sie haben den System-Tag %2$s erstellt", - "%1$s created system tag %2$s" : "%1$s hat erstellt System-Tag %2$s", + "%1$s created system tag %2$s" : "%1$s hat den System-Tag %2$s erstellt", "You deleted system tag %2$s" : "Sie haben den System-Tag %2$s gelöscht", "%1$s deleted system tag %2$s" : "%1$s hat System-Tag %2$s gelöscht", "You updated system tag %3$s to %2$s" : "Sie haben den System-Tag %3$s zu %2$s aktualisiert", "%1$s updated system tag %3$s to %2$s" : "%1$s hat System-Tag von %3$s zu %2$s aktualisiert", - "You assigned system tag %3$s to %2$s" : "Sie haben den System-Tag %3$s an %2$s angebracht", - "%1$s assigned system tag %3$s to %2$s" : "%1$s hat System-Tag %3$s an %2$s angebracht", + "You assigned system tag %3$s to %2$s" : "Sie haben den System-Tag %3$s an %2$s zugeordnet", + "%1$s assigned system tag %3$s to %2$s" : "%1$s hat den System-Tag %3$s an %2$s zugeordnet", "You unassigned system tag %3$s from %2$s" : "Sie haben den System-Tag %3$s von %2$s entfernt", "%1$s unassigned system tag %3$s from %2$s" : "%1$s hat den System-Tag %3$s von %2$s entfernt", "%s (restricted)" : "%s (eingeschränkt)", "%s (invisible)" : "%s (unsichtbar)", + "Collaborative tags" : "Gemeinsame Tags", + "Name" : "Name", + "Delete" : "Löschen", + "Public" : "Öffentlich", + "Restricted" : "Eingeschränkt", + "Invisible" : "Nicht sichtbar", + "Reset" : "Zurücksetzen", "No files in here" : "Keine Dateien vorhanden", "No entries found in this folder" : "Keine Einträge in diesem Ordner gefunden", - "Name" : "Name", "Size" : "Größe", "Modified" : "Geändert" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/en_GB.js b/apps/systemtags/l10n/en_GB.js index 09487413b04..2e64bf6720f 100644 --- a/apps/systemtags/l10n/en_GB.js +++ b/apps/systemtags/l10n/en_GB.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s unassigned system tag %3$s from %2$s", "%s (restricted)" : "%s (restricted)", "%s (invisible)" : "%s (invisible)", + "Name" : "Name", "No files in here" : "No files in here", "No entries found in this folder" : "No entries found in this folder", - "Name" : "Name", "Size" : "Size", "Modified" : "Modified" }, diff --git a/apps/systemtags/l10n/en_GB.json b/apps/systemtags/l10n/en_GB.json index a6b50bd65c2..865bd76d220 100644 --- a/apps/systemtags/l10n/en_GB.json +++ b/apps/systemtags/l10n/en_GB.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s unassigned system tag %3$s from %2$s", "%s (restricted)" : "%s (restricted)", "%s (invisible)" : "%s (invisible)", + "Name" : "Name", "No files in here" : "No files in here", "No entries found in this folder" : "No entries found in this folder", - "Name" : "Name", "Size" : "Size", "Modified" : "Modified" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/es.js b/apps/systemtags/l10n/es.js index d9701e07a42..08dce10c27b 100644 --- a/apps/systemtags/l10n/es.js +++ b/apps/systemtags/l10n/es.js @@ -2,6 +2,9 @@ OC.L10N.register( "systemtags", { "Tags" : "Etiquetas", + "Update" : "Actualizar", + "Create" : "Crear", + "Select tag…" : "Seleccionar etiqueta...", "Tagged files" : "Archivos etiquetados", "Select tags to filter by" : "Seleccionar etiquetas por las que filtrar", "Please select tags to filter by" : "Por favor, seleccione las etiquetas por las que desea filtrar", @@ -23,9 +26,15 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s eliminó la asignación de etiqueta de sistema %3$s de %2$s", "%s (restricted)" : "%s (restringido)", "%s (invisible)" : "%s (invisible)", + "Collaborative tags" : "Etiquetas colaborativas", + "Name" : "Nombre", + "Delete" : "Borrar", + "Public" : "Público", + "Restricted" : "Restringido", + "Invisible" : "Invisible", + "Reset" : "Reiniciar", "No files in here" : "Aquí no hay archivos", "No entries found in this folder" : "No hay entradas en esta carpeta", - "Name" : "Nombre", "Size" : "Tamaño", "Modified" : "Modificado" }, diff --git a/apps/systemtags/l10n/es.json b/apps/systemtags/l10n/es.json index c310a231202..695f6a0fcbd 100644 --- a/apps/systemtags/l10n/es.json +++ b/apps/systemtags/l10n/es.json @@ -1,5 +1,8 @@ { "translations": { "Tags" : "Etiquetas", + "Update" : "Actualizar", + "Create" : "Crear", + "Select tag…" : "Seleccionar etiqueta...", "Tagged files" : "Archivos etiquetados", "Select tags to filter by" : "Seleccionar etiquetas por las que filtrar", "Please select tags to filter by" : "Por favor, seleccione las etiquetas por las que desea filtrar", @@ -21,9 +24,15 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s eliminó la asignación de etiqueta de sistema %3$s de %2$s", "%s (restricted)" : "%s (restringido)", "%s (invisible)" : "%s (invisible)", + "Collaborative tags" : "Etiquetas colaborativas", + "Name" : "Nombre", + "Delete" : "Borrar", + "Public" : "Público", + "Restricted" : "Restringido", + "Invisible" : "Invisible", + "Reset" : "Reiniciar", "No files in here" : "Aquí no hay archivos", "No entries found in this folder" : "No hay entradas en esta carpeta", - "Name" : "Nombre", "Size" : "Tamaño", "Modified" : "Modificado" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/fr.js b/apps/systemtags/l10n/fr.js index 387bc45643c..75cb31f8541 100644 --- a/apps/systemtags/l10n/fr.js +++ b/apps/systemtags/l10n/fr.js @@ -2,6 +2,9 @@ OC.L10N.register( "systemtags", { "Tags" : "Étiquettes", + "Update" : "Mise à jour", + "Create" : "Créer", + "Select tag…" : "Sélectionner une étiquette...", "Tagged files" : "Fichiers étiquetés", "Select tags to filter by" : "Sélectionner les étiquettes par lesquelles filtrer", "Please select tags to filter by" : "Veuillez sélectionner les étiquettes par lesquelles filtrer", @@ -23,9 +26,15 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s a retiré l'étiquette collaborative %3$s à %2$s", "%s (restricted)" : "%s (restreint)", "%s (invisible)" : "%s (invisible)", + "Collaborative tags" : "Étiquettes collaboratives ", + "Name" : "Nom", + "Delete" : "Supprimer", + "Public" : "Publique", + "Restricted" : "Restreint", + "Invisible" : "Invisible", + "Reset" : "Réinitialiser", "No files in here" : "Aucun fichier", "No entries found in this folder" : "Aucune entrée trouvée dans ce dossier", - "Name" : "Nom", "Size" : "Taille", "Modified" : "Modifié" }, diff --git a/apps/systemtags/l10n/fr.json b/apps/systemtags/l10n/fr.json index 66b4d246dac..df1b18a3eb2 100644 --- a/apps/systemtags/l10n/fr.json +++ b/apps/systemtags/l10n/fr.json @@ -1,5 +1,8 @@ { "translations": { "Tags" : "Étiquettes", + "Update" : "Mise à jour", + "Create" : "Créer", + "Select tag…" : "Sélectionner une étiquette...", "Tagged files" : "Fichiers étiquetés", "Select tags to filter by" : "Sélectionner les étiquettes par lesquelles filtrer", "Please select tags to filter by" : "Veuillez sélectionner les étiquettes par lesquelles filtrer", @@ -21,9 +24,15 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s a retiré l'étiquette collaborative %3$s à %2$s", "%s (restricted)" : "%s (restreint)", "%s (invisible)" : "%s (invisible)", + "Collaborative tags" : "Étiquettes collaboratives ", + "Name" : "Nom", + "Delete" : "Supprimer", + "Public" : "Publique", + "Restricted" : "Restreint", + "Invisible" : "Invisible", + "Reset" : "Réinitialiser", "No files in here" : "Aucun fichier", "No entries found in this folder" : "Aucune entrée trouvée dans ce dossier", - "Name" : "Nom", "Size" : "Taille", "Modified" : "Modifié" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/systemtags/l10n/he.js b/apps/systemtags/l10n/he.js index 9077fb2dcde..6a7d32cde10 100644 --- a/apps/systemtags/l10n/he.js +++ b/apps/systemtags/l10n/he.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s הסיר/ה שיוך תגית מערכת %3$s מ- %2$s", "%s (restricted)" : "%s (מוגבל)", "%s (invisible)" : "%s (נסתר)", + "Name" : "שם", "No files in here" : "אין כאן קבצים", "No entries found in this folder" : "לא נמצאו כניסות לתיקייה זו", - "Name" : "שם", "Size" : "גודל", "Modified" : "זמן שינוי" }, diff --git a/apps/systemtags/l10n/he.json b/apps/systemtags/l10n/he.json index b67b25afbd9..0d05d252f7e 100644 --- a/apps/systemtags/l10n/he.json +++ b/apps/systemtags/l10n/he.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s הסיר/ה שיוך תגית מערכת %3$s מ- %2$s", "%s (restricted)" : "%s (מוגבל)", "%s (invisible)" : "%s (נסתר)", + "Name" : "שם", "No files in here" : "אין כאן קבצים", "No entries found in this folder" : "לא נמצאו כניסות לתיקייה זו", - "Name" : "שם", "Size" : "גודל", "Modified" : "זמן שינוי" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/hu_HU.js b/apps/systemtags/l10n/hu_HU.js index 783b90ece8a..109175f6447 100644 --- a/apps/systemtags/l10n/hu_HU.js +++ b/apps/systemtags/l10n/hu_HU.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s elvette ezt a rendszer címkét %3$s tőle: %2$s", "%s (restricted)" : "%s (korlátozott)", "%s (invisible)" : "%s (láthatatlan)", + "Name" : "Név", "No files in here" : "Itt nincsenek fájlok", "No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban", - "Name" : "Név", "Size" : "Méret", "Modified" : "Módosítva" }, diff --git a/apps/systemtags/l10n/hu_HU.json b/apps/systemtags/l10n/hu_HU.json index f89da5d3dfd..681f4d14ef5 100644 --- a/apps/systemtags/l10n/hu_HU.json +++ b/apps/systemtags/l10n/hu_HU.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s elvette ezt a rendszer címkét %3$s tőle: %2$s", "%s (restricted)" : "%s (korlátozott)", "%s (invisible)" : "%s (láthatatlan)", + "Name" : "Név", "No files in here" : "Itt nincsenek fájlok", "No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban", - "Name" : "Név", "Size" : "Méret", "Modified" : "Módosítva" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/id.js b/apps/systemtags/l10n/id.js index 5ce41462833..bb6424c9556 100644 --- a/apps/systemtags/l10n/id.js +++ b/apps/systemtags/l10n/id.js @@ -2,9 +2,39 @@ OC.L10N.register( "systemtags", { "Tags" : "Tag", + "Update" : "Pembaruan", + "Create" : "Buat", + "Select tag…" : "Pilih tag...", + "Tagged files" : "Berkas ter-tag", + "Select tags to filter by" : "Pilih tag untuk disaring", + "Please select tags to filter by" : "Mohon pilih tag untuk disaring", + "No files found for the selected tags" : "Berkas tidak ditemukan untuk tag yang dipilih", + "<strong>System tags</strong> for a file have been modified" : "<strong>Tag sistem</strong> untuk sebuah berkas telah dimodifikasi", + "You assigned system tag %3$s" : "Anda memberikan tag sistem %3$s", + "%1$s assigned system tag %3$s" : "%1$s memberikan tag sistem %3$s", + "You unassigned system tag %3$s" : "Anda melepas tag sistem %3$s", + "%1$s unassigned system tag %3$s" : "%1$s melepas tag sistem %3$s", + "You created system tag %2$s" : "Anda membuat tag sistem %2$s", + "%1$s created system tag %2$s" : "%1$s membuat tag sistem %2$s", + "You deleted system tag %2$s" : "Anda menghapus tag sistem %2$s", + "%1$s deleted system tag %2$s" : "%1$s menghapus tag sistem %2$s", + "You updated system tag %3$s to %2$s" : "Anda memperbarui tag sistem %3$s ke %2$s", + "%1$s updated system tag %3$s to %2$s" : "%1$s memperbarui tag sistem %3$s ke %2$s", + "You assigned system tag %3$s to %2$s" : "Anda memberikan tag sistem %3$s ke %2$s", + "%1$s assigned system tag %3$s to %2$s" : "%1$s memberikan tag sistem %3$s ke %2$s", + "You unassigned system tag %3$s from %2$s" : "Anda melepas tag sistem %3$s ke %2$s", + "%1$s unassigned system tag %3$s from %2$s" : "%1$s melepas tag sistem %3$s ke %2$s", + "%s (restricted)" : "%s (terbatas)", + "%s (invisible)" : "%s (tersembunyi)", + "Collaborative tags" : "Tag kolaboratif", + "Name" : "Nama", + "Delete" : "Hapus", + "Public" : "Publik", + "Restricted" : "Terbatas", + "Invisible" : "Tersembunyi", + "Reset" : "Atur ulang", "No files in here" : "Tidak ada berkas disini", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", - "Name" : "Nama", "Size" : "Ukuran", "Modified" : "Dimodifikasi" }, diff --git a/apps/systemtags/l10n/id.json b/apps/systemtags/l10n/id.json index 631da4fbe66..fcbdb6ca1e2 100644 --- a/apps/systemtags/l10n/id.json +++ b/apps/systemtags/l10n/id.json @@ -1,8 +1,38 @@ { "translations": { "Tags" : "Tag", + "Update" : "Pembaruan", + "Create" : "Buat", + "Select tag…" : "Pilih tag...", + "Tagged files" : "Berkas ter-tag", + "Select tags to filter by" : "Pilih tag untuk disaring", + "Please select tags to filter by" : "Mohon pilih tag untuk disaring", + "No files found for the selected tags" : "Berkas tidak ditemukan untuk tag yang dipilih", + "<strong>System tags</strong> for a file have been modified" : "<strong>Tag sistem</strong> untuk sebuah berkas telah dimodifikasi", + "You assigned system tag %3$s" : "Anda memberikan tag sistem %3$s", + "%1$s assigned system tag %3$s" : "%1$s memberikan tag sistem %3$s", + "You unassigned system tag %3$s" : "Anda melepas tag sistem %3$s", + "%1$s unassigned system tag %3$s" : "%1$s melepas tag sistem %3$s", + "You created system tag %2$s" : "Anda membuat tag sistem %2$s", + "%1$s created system tag %2$s" : "%1$s membuat tag sistem %2$s", + "You deleted system tag %2$s" : "Anda menghapus tag sistem %2$s", + "%1$s deleted system tag %2$s" : "%1$s menghapus tag sistem %2$s", + "You updated system tag %3$s to %2$s" : "Anda memperbarui tag sistem %3$s ke %2$s", + "%1$s updated system tag %3$s to %2$s" : "%1$s memperbarui tag sistem %3$s ke %2$s", + "You assigned system tag %3$s to %2$s" : "Anda memberikan tag sistem %3$s ke %2$s", + "%1$s assigned system tag %3$s to %2$s" : "%1$s memberikan tag sistem %3$s ke %2$s", + "You unassigned system tag %3$s from %2$s" : "Anda melepas tag sistem %3$s ke %2$s", + "%1$s unassigned system tag %3$s from %2$s" : "%1$s melepas tag sistem %3$s ke %2$s", + "%s (restricted)" : "%s (terbatas)", + "%s (invisible)" : "%s (tersembunyi)", + "Collaborative tags" : "Tag kolaboratif", + "Name" : "Nama", + "Delete" : "Hapus", + "Public" : "Publik", + "Restricted" : "Terbatas", + "Invisible" : "Tersembunyi", + "Reset" : "Atur ulang", "No files in here" : "Tidak ada berkas disini", "No entries found in this folder" : "Tidak ada entri yang ditemukan dalam folder ini", - "Name" : "Nama", "Size" : "Ukuran", "Modified" : "Dimodifikasi" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/systemtags/l10n/is.js b/apps/systemtags/l10n/is.js index 079fb251f82..efdeb28fc86 100644 --- a/apps/systemtags/l10n/is.js +++ b/apps/systemtags/l10n/is.js @@ -7,17 +7,25 @@ OC.L10N.register( "Please select tags to filter by" : "Veldu merki til að sía eftir", "No files found for the selected tags" : "Engar skrár fundust með völdum merkjum", "<strong>System tags</strong> for a file have been modified" : "<strong>Kerfismerkjum</strong> á skrá hefur verið breytt", + "You assigned system tag %3$s" : "Þú úthlutaðir kerfismerkinu %3$s", "%1$s assigned system tag %3$s" : "%1$s úthlutaði kerfismerki %3$s", + "You unassigned system tag %3$s" : "Þú tókst af úthlutun kerfismerkisins %3$s", "%1$s unassigned system tag %3$s" : "%1$s tók af úthlutun kerfismerkis %3$s", + "You created system tag %2$s" : "Þú bjóst til kerfismerkið %2$s", "%1$s created system tag %2$s" : "%1$s bjó til kerfismerki %2$s", + "You deleted system tag %2$s" : "Þú eyddir kerfismerkinu %2$s", "%1$s deleted system tag %2$s" : "%1$s eyddi kerfismerki %2$s", + "You updated system tag %3$s to %2$s" : "Þú uppfærðir kerfismerki %3$s í %2$s", "%1$s updated system tag %3$s to %2$s" : "%1$s uppfærði kerfismerki %3$s í %2$s", + "You assigned system tag %3$s to %2$s" : "Þú úthlutaðir kerfismerki %3$s á %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s úthlutaði kerfismerki %3$s á %2$s", + "You unassigned system tag %3$s from %2$s" : "Þú tókst kerfismerkið %3$s af %2$s", "%1$s unassigned system tag %3$s from %2$s" : "%1$s tók kerfismerki %3$s af %2$s", + "%s (restricted)" : "%s (takmarkaður aðgangur)", "%s (invisible)" : "%s (ósýnilegt)", + "Name" : "Heiti", "No files in here" : "Engar skrár hér", "No entries found in this folder" : "Engar skrár fundust í þessari möppu", - "Name" : "Heiti", "Size" : "Stærð", "Modified" : "Breytt" }, diff --git a/apps/systemtags/l10n/is.json b/apps/systemtags/l10n/is.json index c51cc851932..d47891dabd1 100644 --- a/apps/systemtags/l10n/is.json +++ b/apps/systemtags/l10n/is.json @@ -5,17 +5,25 @@ "Please select tags to filter by" : "Veldu merki til að sía eftir", "No files found for the selected tags" : "Engar skrár fundust með völdum merkjum", "<strong>System tags</strong> for a file have been modified" : "<strong>Kerfismerkjum</strong> á skrá hefur verið breytt", + "You assigned system tag %3$s" : "Þú úthlutaðir kerfismerkinu %3$s", "%1$s assigned system tag %3$s" : "%1$s úthlutaði kerfismerki %3$s", + "You unassigned system tag %3$s" : "Þú tókst af úthlutun kerfismerkisins %3$s", "%1$s unassigned system tag %3$s" : "%1$s tók af úthlutun kerfismerkis %3$s", + "You created system tag %2$s" : "Þú bjóst til kerfismerkið %2$s", "%1$s created system tag %2$s" : "%1$s bjó til kerfismerki %2$s", + "You deleted system tag %2$s" : "Þú eyddir kerfismerkinu %2$s", "%1$s deleted system tag %2$s" : "%1$s eyddi kerfismerki %2$s", + "You updated system tag %3$s to %2$s" : "Þú uppfærðir kerfismerki %3$s í %2$s", "%1$s updated system tag %3$s to %2$s" : "%1$s uppfærði kerfismerki %3$s í %2$s", + "You assigned system tag %3$s to %2$s" : "Þú úthlutaðir kerfismerki %3$s á %2$s", "%1$s assigned system tag %3$s to %2$s" : "%1$s úthlutaði kerfismerki %3$s á %2$s", + "You unassigned system tag %3$s from %2$s" : "Þú tókst kerfismerkið %3$s af %2$s", "%1$s unassigned system tag %3$s from %2$s" : "%1$s tók kerfismerki %3$s af %2$s", + "%s (restricted)" : "%s (takmarkaður aðgangur)", "%s (invisible)" : "%s (ósýnilegt)", + "Name" : "Heiti", "No files in here" : "Engar skrár hér", "No entries found in this folder" : "Engar skrár fundust í þessari möppu", - "Name" : "Heiti", "Size" : "Stærð", "Modified" : "Breytt" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" diff --git a/apps/systemtags/l10n/it.js b/apps/systemtags/l10n/it.js index 4d6ae6b8a72..e448ae94594 100644 --- a/apps/systemtags/l10n/it.js +++ b/apps/systemtags/l10n/it.js @@ -2,6 +2,9 @@ OC.L10N.register( "systemtags", { "Tags" : "Etichette", + "Update" : "Aggiorna", + "Create" : "Crea", + "Select tag…" : "Seleziona etichetta...", "Tagged files" : "File etichettati", "Select tags to filter by" : "Seleziona le etichette per filtrare", "Please select tags to filter by" : "Seleziona le etichette per filtrare", @@ -23,9 +26,15 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha rimosso l'etichetta di sistema %3$s da %2$s", "%s (restricted)" : "%s (limitato)", "%s (invisible)" : "%s (invisibile)", + "Collaborative tags" : "Etichette collaborative", + "Name" : "Nome", + "Delete" : "Elimina", + "Public" : "Pubblico", + "Restricted" : "Limitato", + "Invisible" : "invisibile", + "Reset" : "Ripristina", "No files in here" : "Qui non c'è alcun file", "No entries found in this folder" : "Nessuna voce trovata in questa cartella", - "Name" : "Nome", "Size" : "Dimensione", "Modified" : "Modificato" }, diff --git a/apps/systemtags/l10n/it.json b/apps/systemtags/l10n/it.json index fc7204f35a8..a06a99dd806 100644 --- a/apps/systemtags/l10n/it.json +++ b/apps/systemtags/l10n/it.json @@ -1,5 +1,8 @@ { "translations": { "Tags" : "Etichette", + "Update" : "Aggiorna", + "Create" : "Crea", + "Select tag…" : "Seleziona etichetta...", "Tagged files" : "File etichettati", "Select tags to filter by" : "Seleziona le etichette per filtrare", "Please select tags to filter by" : "Seleziona le etichette per filtrare", @@ -21,9 +24,15 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s ha rimosso l'etichetta di sistema %3$s da %2$s", "%s (restricted)" : "%s (limitato)", "%s (invisible)" : "%s (invisibile)", + "Collaborative tags" : "Etichette collaborative", + "Name" : "Nome", + "Delete" : "Elimina", + "Public" : "Pubblico", + "Restricted" : "Limitato", + "Invisible" : "invisibile", + "Reset" : "Ripristina", "No files in here" : "Qui non c'è alcun file", "No entries found in this folder" : "Nessuna voce trovata in questa cartella", - "Name" : "Nome", "Size" : "Dimensione", "Modified" : "Modificato" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/ja.js b/apps/systemtags/l10n/ja.js index a5d2d2d0b38..e9b8d5aab4f 100644 --- a/apps/systemtags/l10n/ja.js +++ b/apps/systemtags/l10n/ja.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s は%2$s から タグ %3$s を解除", "%s (restricted)" : "%s (制限)", "%s (invisible)" : "%s (不可視)", + "Name" : "名前", "No files in here" : "ファイルがありません", "No entries found in this folder" : "このフォルダーにはエントリーがありません", - "Name" : "名前", "Size" : "サイズ", "Modified" : "更新日時" }, diff --git a/apps/systemtags/l10n/ja.json b/apps/systemtags/l10n/ja.json index b0d947b981f..874969fdd00 100644 --- a/apps/systemtags/l10n/ja.json +++ b/apps/systemtags/l10n/ja.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s は%2$s から タグ %3$s を解除", "%s (restricted)" : "%s (制限)", "%s (invisible)" : "%s (不可視)", + "Name" : "名前", "No files in here" : "ファイルがありません", "No entries found in this folder" : "このフォルダーにはエントリーがありません", - "Name" : "名前", "Size" : "サイズ", "Modified" : "更新日時" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/systemtags/l10n/nl.js b/apps/systemtags/l10n/nl.js index 567b14aa1f4..0623602d0ba 100644 --- a/apps/systemtags/l10n/nl.js +++ b/apps/systemtags/l10n/nl.js @@ -2,30 +2,39 @@ OC.L10N.register( "systemtags", { "Tags" : "Tags", + "Update" : "Update", + "Create" : "Creeër", + "Select tag…" : "Selecteren tag…", "Tagged files" : "Getagde bestanden", "Select tags to filter by" : "Selecteer tags om op te filteren", "Please select tags to filter by" : "Selecteer tags om op te filteren", "No files found for the selected tags" : "Geen bestanden gevonden voor de geselecteerde tags", - "<strong>System tags</strong> for a file have been modified" : "<strong>Systeem tags</strong> voor een bestand zijn gewijzigd", - "You assigned system tag %3$s" : "Je wees systeem tag %3$s toe", - "%1$s assigned system tag %3$s" : "%1$s wees systeem tag %3$s toe", - "You unassigned system tag %3$s" : "Je maakte toewijzing systeem tag %3$s ongedaan", + "<strong>System tags</strong> for a file have been modified" : "<strong>Systeemtags</strong> voor een bestand zijn gewijzigd", + "You assigned system tag %3$s" : "Je wees systeemtag %3$s toe", + "%1$s assigned system tag %3$s" : "%1$s wees systeemtag %3$s toe", + "You unassigned system tag %3$s" : "Je maakte toewijzing systeemtag %3$s ongedaan", "%1$s unassigned system tag %3$s" : "%1$s verwijderde systeem tag %3$s", - "You created system tag %2$s" : "Je creëerde systeem tag %2$s", - "%1$s created system tag %2$s" : "%1$s creëerde systeem tag %2$s", - "You deleted system tag %2$s" : "Je verwijderde systeem tag %2$s", + "You created system tag %2$s" : "Je creëerde systeemtag %2$s", + "%1$s created system tag %2$s" : "%1$s creëerde systeemtag %2$s", + "You deleted system tag %2$s" : "Je verwijderde systeemtag %2$s", "%1$s deleted system tag %2$s" : "%1$s verwijderde systeem tag %2$s van het systeem", - "You updated system tag %3$s to %2$s" : "U werkte systeemtag %3$s bij naar %2$s", + "You updated system tag %3$s to %2$s" : "Je werkte systeemtag %3$s bij naar %2$s", "%1$s updated system tag %3$s to %2$s" : "%1$s hernoemde systeem tag %3$s naar %2$s", - "You assigned system tag %3$s to %2$s" : "Je wees systeem tag %3$s aan %2$s toe", - "%1$s assigned system tag %3$s to %2$s" : "%1$s wees systeem tag %3$s aan %2$s toe", - "You unassigned system tag %3$s from %2$s" : "Je maakte toewijzing systeem tag %3$s van %2$s ongedaan", - "%1$s unassigned system tag %3$s from %2$s" : "%1$s verwijderde systeem tag %3$s van %2$s", + "You assigned system tag %3$s to %2$s" : "Je wees systeemtag %3$s aan %2$s toe", + "%1$s assigned system tag %3$s to %2$s" : "%1$s wees systeemtag %3$s aan %2$s toe", + "You unassigned system tag %3$s from %2$s" : "Je maakte de toewijzing van systeem tag %3$s van %2$s ongedaan", + "%1$s unassigned system tag %3$s from %2$s" : "%1$s verwijderde systeemtag %3$s van %2$s", "%s (restricted)" : "%s (beperkt)", "%s (invisible)" : "%s (onzichtbaar)", + "Collaborative tags" : "Samenwerk tags", + "Name" : "Naam", + "Delete" : "Verwijder", + "Public" : "Openbaar", + "Restricted" : "Beperkt", + "Invisible" : "Verborgen", + "Reset" : "Reset", "No files in here" : "Hier geen bestanden", "No entries found in this folder" : "Niets gevonden in deze map", - "Name" : "Naam", "Size" : "Grootte", "Modified" : "Aangepast" }, diff --git a/apps/systemtags/l10n/nl.json b/apps/systemtags/l10n/nl.json index f7d83699c2d..c40528b6a63 100644 --- a/apps/systemtags/l10n/nl.json +++ b/apps/systemtags/l10n/nl.json @@ -1,29 +1,38 @@ { "translations": { "Tags" : "Tags", + "Update" : "Update", + "Create" : "Creeër", + "Select tag…" : "Selecteren tag…", "Tagged files" : "Getagde bestanden", "Select tags to filter by" : "Selecteer tags om op te filteren", "Please select tags to filter by" : "Selecteer tags om op te filteren", "No files found for the selected tags" : "Geen bestanden gevonden voor de geselecteerde tags", - "<strong>System tags</strong> for a file have been modified" : "<strong>Systeem tags</strong> voor een bestand zijn gewijzigd", - "You assigned system tag %3$s" : "Je wees systeem tag %3$s toe", - "%1$s assigned system tag %3$s" : "%1$s wees systeem tag %3$s toe", - "You unassigned system tag %3$s" : "Je maakte toewijzing systeem tag %3$s ongedaan", + "<strong>System tags</strong> for a file have been modified" : "<strong>Systeemtags</strong> voor een bestand zijn gewijzigd", + "You assigned system tag %3$s" : "Je wees systeemtag %3$s toe", + "%1$s assigned system tag %3$s" : "%1$s wees systeemtag %3$s toe", + "You unassigned system tag %3$s" : "Je maakte toewijzing systeemtag %3$s ongedaan", "%1$s unassigned system tag %3$s" : "%1$s verwijderde systeem tag %3$s", - "You created system tag %2$s" : "Je creëerde systeem tag %2$s", - "%1$s created system tag %2$s" : "%1$s creëerde systeem tag %2$s", - "You deleted system tag %2$s" : "Je verwijderde systeem tag %2$s", + "You created system tag %2$s" : "Je creëerde systeemtag %2$s", + "%1$s created system tag %2$s" : "%1$s creëerde systeemtag %2$s", + "You deleted system tag %2$s" : "Je verwijderde systeemtag %2$s", "%1$s deleted system tag %2$s" : "%1$s verwijderde systeem tag %2$s van het systeem", - "You updated system tag %3$s to %2$s" : "U werkte systeemtag %3$s bij naar %2$s", + "You updated system tag %3$s to %2$s" : "Je werkte systeemtag %3$s bij naar %2$s", "%1$s updated system tag %3$s to %2$s" : "%1$s hernoemde systeem tag %3$s naar %2$s", - "You assigned system tag %3$s to %2$s" : "Je wees systeem tag %3$s aan %2$s toe", - "%1$s assigned system tag %3$s to %2$s" : "%1$s wees systeem tag %3$s aan %2$s toe", - "You unassigned system tag %3$s from %2$s" : "Je maakte toewijzing systeem tag %3$s van %2$s ongedaan", - "%1$s unassigned system tag %3$s from %2$s" : "%1$s verwijderde systeem tag %3$s van %2$s", + "You assigned system tag %3$s to %2$s" : "Je wees systeemtag %3$s aan %2$s toe", + "%1$s assigned system tag %3$s to %2$s" : "%1$s wees systeemtag %3$s aan %2$s toe", + "You unassigned system tag %3$s from %2$s" : "Je maakte de toewijzing van systeem tag %3$s van %2$s ongedaan", + "%1$s unassigned system tag %3$s from %2$s" : "%1$s verwijderde systeemtag %3$s van %2$s", "%s (restricted)" : "%s (beperkt)", "%s (invisible)" : "%s (onzichtbaar)", + "Collaborative tags" : "Samenwerk tags", + "Name" : "Naam", + "Delete" : "Verwijder", + "Public" : "Openbaar", + "Restricted" : "Beperkt", + "Invisible" : "Verborgen", + "Reset" : "Reset", "No files in here" : "Hier geen bestanden", "No entries found in this folder" : "Niets gevonden in deze map", - "Name" : "Naam", "Size" : "Grootte", "Modified" : "Aangepast" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/pt_BR.js b/apps/systemtags/l10n/pt_BR.js index 0b7bafaab49..9ff39ad7fb1 100644 --- a/apps/systemtags/l10n/pt_BR.js +++ b/apps/systemtags/l10n/pt_BR.js @@ -2,6 +2,9 @@ OC.L10N.register( "systemtags", { "Tags" : "Etiquetas", + "Update" : "Atualizar", + "Create" : "Criar", + "Select tag…" : "Selecionar etiqueta...", "Tagged files" : "Arquivos etiquetados", "Select tags to filter by" : "Selecionar etiquetas para filtrar por", "Please select tags to filter by" : "Por favor selecione etiquetas para filtrar por", @@ -23,9 +26,15 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s etiqueta de sistema não atribuída %3$s de %2$s", "%s (restricted)" : "%s (restrito)", "%s (invisible)" : "%s (invisivel)", + "Collaborative tags" : "Etiquetas colaborativas", + "Name" : "Nome", + "Delete" : "Excluir", + "Public" : "Público", + "Restricted" : "Restrito", + "Invisible" : "Invisível", + "Reset" : "Restaurar", "No files in here" : "Nenhum arquivo aqui", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", - "Name" : "Nome", "Size" : "Tamanho", "Modified" : "Modificado" }, diff --git a/apps/systemtags/l10n/pt_BR.json b/apps/systemtags/l10n/pt_BR.json index cb38dfd1de3..6f7a8ee2f2d 100644 --- a/apps/systemtags/l10n/pt_BR.json +++ b/apps/systemtags/l10n/pt_BR.json @@ -1,5 +1,8 @@ { "translations": { "Tags" : "Etiquetas", + "Update" : "Atualizar", + "Create" : "Criar", + "Select tag…" : "Selecionar etiqueta...", "Tagged files" : "Arquivos etiquetados", "Select tags to filter by" : "Selecionar etiquetas para filtrar por", "Please select tags to filter by" : "Por favor selecione etiquetas para filtrar por", @@ -21,9 +24,15 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s etiqueta de sistema não atribuída %3$s de %2$s", "%s (restricted)" : "%s (restrito)", "%s (invisible)" : "%s (invisivel)", + "Collaborative tags" : "Etiquetas colaborativas", + "Name" : "Nome", + "Delete" : "Excluir", + "Public" : "Público", + "Restricted" : "Restrito", + "Invisible" : "Invisível", + "Reset" : "Restaurar", "No files in here" : "Nenhum arquivo aqui", "No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta", - "Name" : "Nome", "Size" : "Tamanho", "Modified" : "Modificado" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/systemtags/l10n/pt_PT.js b/apps/systemtags/l10n/pt_PT.js index bf33c8e9af9..d5844a64985 100644 --- a/apps/systemtags/l10n/pt_PT.js +++ b/apps/systemtags/l10n/pt_PT.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s removeu a etiqueta do sistema %3$s de %2$s", "%s (restricted)" : "%s (limitado)", "%s (invisible)" : "%s (invisível)", + "Name" : "Nome", "No files in here" : "Nenhuns ficheiros aqui", "No entries found in this folder" : "Não foram encontradas entradas nesta pasta", - "Name" : "Nome", "Size" : "Tamanho", "Modified" : "Modificado" }, diff --git a/apps/systemtags/l10n/pt_PT.json b/apps/systemtags/l10n/pt_PT.json index 1d6f99bfceb..59565b8053e 100644 --- a/apps/systemtags/l10n/pt_PT.json +++ b/apps/systemtags/l10n/pt_PT.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s removeu a etiqueta do sistema %3$s de %2$s", "%s (restricted)" : "%s (limitado)", "%s (invisible)" : "%s (invisível)", + "Name" : "Nome", "No files in here" : "Nenhuns ficheiros aqui", "No entries found in this folder" : "Não foram encontradas entradas nesta pasta", - "Name" : "Nome", "Size" : "Tamanho", "Modified" : "Modificado" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/ro.js b/apps/systemtags/l10n/ro.js index 762e9406d89..4a2ee02f325 100644 --- a/apps/systemtags/l10n/ro.js +++ b/apps/systemtags/l10n/ro.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s a înlăturat eticheta de sistem %3$s de la %2$s", "%s (restricted)" : "%s (restricționat)", "%s (invisible)" : "%s (invizibil)", + "Name" : "Nume", "No files in here" : "Niciun fișier aici", "No entries found in this folder" : "Niciun element găsit în acest director", - "Name" : "Nume", "Size" : "Mărime", "Modified" : "Modificat" }, diff --git a/apps/systemtags/l10n/ro.json b/apps/systemtags/l10n/ro.json index ef1c127d145..20517cf41a2 100644 --- a/apps/systemtags/l10n/ro.json +++ b/apps/systemtags/l10n/ro.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s a înlăturat eticheta de sistem %3$s de la %2$s", "%s (restricted)" : "%s (restricționat)", "%s (invisible)" : "%s (invizibil)", + "Name" : "Nume", "No files in here" : "Niciun fișier aici", "No entries found in this folder" : "Niciun element găsit în acest director", - "Name" : "Nume", "Size" : "Mărime", "Modified" : "Modificat" },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" diff --git a/apps/systemtags/l10n/ru.js b/apps/systemtags/l10n/ru.js index 97e27549a01..c3f2bb4858f 100644 --- a/apps/systemtags/l10n/ru.js +++ b/apps/systemtags/l10n/ru.js @@ -2,6 +2,9 @@ OC.L10N.register( "systemtags", { "Tags" : "Метки", + "Update" : "Обновить", + "Create" : "Создать", + "Select tag…" : "Выбрать метку...", "Tagged files" : "Файлы с метками", "Select tags to filter by" : "Выберите метки для фильтра", "Please select tags to filter by" : "Выберите метки для фильтра", @@ -23,9 +26,15 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s убрал системную метку %3$s с %2$s", "%s (restricted)" : "%s (ограничено)", "%s (invisible)" : "%s (невидимые)", + "Collaborative tags" : "Совместные метки", + "Name" : "Имя", + "Delete" : "Удалить", + "Public" : "Открытый", + "Restricted" : "Ограниченный", + "Invisible" : "Невидимый", + "Reset" : "Сбросить", "No files in here" : "Здесь нет файлов", "No entries found in this folder" : "Нет элементов в этом каталоге", - "Name" : "Имя", "Size" : "Размер", "Modified" : "Изменён" }, diff --git a/apps/systemtags/l10n/ru.json b/apps/systemtags/l10n/ru.json index 39a27781fcf..ecf414b9687 100644 --- a/apps/systemtags/l10n/ru.json +++ b/apps/systemtags/l10n/ru.json @@ -1,5 +1,8 @@ { "translations": { "Tags" : "Метки", + "Update" : "Обновить", + "Create" : "Создать", + "Select tag…" : "Выбрать метку...", "Tagged files" : "Файлы с метками", "Select tags to filter by" : "Выберите метки для фильтра", "Please select tags to filter by" : "Выберите метки для фильтра", @@ -21,9 +24,15 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s убрал системную метку %3$s с %2$s", "%s (restricted)" : "%s (ограничено)", "%s (invisible)" : "%s (невидимые)", + "Collaborative tags" : "Совместные метки", + "Name" : "Имя", + "Delete" : "Удалить", + "Public" : "Открытый", + "Restricted" : "Ограниченный", + "Invisible" : "Невидимый", + "Reset" : "Сбросить", "No files in here" : "Здесь нет файлов", "No entries found in this folder" : "Нет элементов в этом каталоге", - "Name" : "Имя", "Size" : "Размер", "Modified" : "Изменён" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" diff --git a/apps/systemtags/l10n/sl.js b/apps/systemtags/l10n/sl.js index 727f03b8eb0..eda8054c9bf 100644 --- a/apps/systemtags/l10n/sl.js +++ b/apps/systemtags/l10n/sl.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "Uporabnik %1$s je prevzel sistemsko oznako %3$s od %2$s", "%s (restricted)" : "%s (omejeno)", "%s (invisible)" : "%s (nevidno)", + "Name" : "Ime", "No files in here" : "V mapi ni datotek", "No entries found in this folder" : "V tej mapi ni najdenih predmetov.", - "Name" : "Ime", "Size" : "Velikost", "Modified" : "Spremenjeno" }, diff --git a/apps/systemtags/l10n/sl.json b/apps/systemtags/l10n/sl.json index 6ec3bf25957..9231aeabf9c 100644 --- a/apps/systemtags/l10n/sl.json +++ b/apps/systemtags/l10n/sl.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "Uporabnik %1$s je prevzel sistemsko oznako %3$s od %2$s", "%s (restricted)" : "%s (omejeno)", "%s (invisible)" : "%s (nevidno)", + "Name" : "Ime", "No files in here" : "V mapi ni datotek", "No entries found in this folder" : "V tej mapi ni najdenih predmetov.", - "Name" : "Ime", "Size" : "Velikost", "Modified" : "Spremenjeno" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" diff --git a/apps/systemtags/l10n/sq.js b/apps/systemtags/l10n/sq.js index 284bb09fb6e..9312d671bd1 100644 --- a/apps/systemtags/l10n/sq.js +++ b/apps/systemtags/l10n/sq.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s", "%s (restricted)" : "%s (e kufizuar)", "%s (invisible)" : "%s (e padukshme)", + "Name" : "Emër", "No files in here" : "S’ka kartela këtu", "No entries found in this folder" : "S’u gjetën zëra në këtë dosje", - "Name" : "Emër", "Size" : "Madhësi", "Modified" : "Ndryshuar më" }, diff --git a/apps/systemtags/l10n/sq.json b/apps/systemtags/l10n/sq.json index 8d2b6b6a33e..eed88992e5a 100644 --- a/apps/systemtags/l10n/sq.json +++ b/apps/systemtags/l10n/sq.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s hoqi prej %2$s etiketën e sistemit %3$s", "%s (restricted)" : "%s (e kufizuar)", "%s (invisible)" : "%s (e padukshme)", + "Name" : "Emër", "No files in here" : "S’ka kartela këtu", "No entries found in this folder" : "S’u gjetën zëra në këtë dosje", - "Name" : "Emër", "Size" : "Madhësi", "Modified" : "Ndryshuar më" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/sv.js b/apps/systemtags/l10n/sv.js index 0a2be892f0b..be11b9f9ad3 100644 --- a/apps/systemtags/l10n/sv.js +++ b/apps/systemtags/l10n/sv.js @@ -23,9 +23,9 @@ OC.L10N.register( "%1$s unassigned system tag %3$s from %2$s" : "%1$s tog bort tilldelad systemtagg %3$s från %2$s", "%s (restricted)" : "%s (begränsad)", "%s (invisible)" : "%s (osynlig)", + "Name" : "Namn", "No files in here" : "Inga filer kunde hittas", "No entries found in this folder" : "nga Filer hittades i denna mapp", - "Name" : "Namn", "Size" : "Storlek", "Modified" : "Ändrad" }, diff --git a/apps/systemtags/l10n/sv.json b/apps/systemtags/l10n/sv.json index ac18892d320..214bd3b100a 100644 --- a/apps/systemtags/l10n/sv.json +++ b/apps/systemtags/l10n/sv.json @@ -21,9 +21,9 @@ "%1$s unassigned system tag %3$s from %2$s" : "%1$s tog bort tilldelad systemtagg %3$s från %2$s", "%s (restricted)" : "%s (begränsad)", "%s (invisible)" : "%s (osynlig)", + "Name" : "Namn", "No files in here" : "Inga filer kunde hittas", "No entries found in this folder" : "nga Filer hittades i denna mapp", - "Name" : "Namn", "Size" : "Storlek", "Modified" : "Ändrad" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/systemtags/l10n/tr.js b/apps/systemtags/l10n/tr.js index eeb72403018..64329421d4d 100644 --- a/apps/systemtags/l10n/tr.js +++ b/apps/systemtags/l10n/tr.js @@ -2,22 +2,39 @@ OC.L10N.register( "systemtags", { "Tags" : "Etiketler", + "Update" : "Güncelle", + "Create" : "Oluştur", + "Select tag…" : "Etiket seç...", "Tagged files" : "Etiketli dosyalar", "Select tags to filter by" : "Filtrelemek için etiketleri seçin", "Please select tags to filter by" : "Filtrelemek için etiketleri seçin", "No files found for the selected tags" : "Seçilen etiketler ile ilgili dosya bulunamadı", "<strong>System tags</strong> for a file have been modified" : "Bir dosya için <strong>sistem etiketleri</strong> değiştirildi", + "You assigned system tag %3$s" : "%3$s sistem etiketini atadınız", "%1$s assigned system tag %3$s" : "%1$s, %3$s sistem etiketini atadı", + "You unassigned system tag %3$s" : "%3$s sistem etiket atamasını kaldırdınız", "%1$s unassigned system tag %3$s" : "%1$s, %3$s sistem etiket atamasını kaldırdı", + "You created system tag %2$s" : "%2$s sistem etiketini oluşturdunuz", "%1$s created system tag %2$s" : "%1$s, %2$s sistem etiketini oluşturdu", + "You deleted system tag %2$s" : "%2$s sistem etiketini sildiniz", "%1$s deleted system tag %2$s" : "%1$s, %2$s sistem etiketini sildi", + "You updated system tag %3$s to %2$s" : "%3$s sistem etiketini %2$s olarak güncellediniz", "%1$s updated system tag %3$s to %2$s" : "%1$s, %3$s sistem etiketini %2$s olarak güncelledi", + "You assigned system tag %3$s to %2$s" : "%3$s sistem etiketini %2$s etiketine atadınız", "%1$s assigned system tag %3$s to %2$s" : "%1$s, %3$s sistem etiketini %2$s etiketine atadı", + "You unassigned system tag %3$s from %2$s" : "%3$s sistem etiketinin %2$s atamasını kaldırdınız", "%1$s unassigned system tag %3$s from %2$s" : "%1$s, %3$s sistem etiketinin %2$s atamasını kaldırdı", + "%s (restricted)" : "%s (kısıtlı)", "%s (invisible)" : "%s (gizli)", + "Collaborative tags" : "İşbirlikçi etiketler", + "Name" : "Ad", + "Delete" : "Sil", + "Public" : "Herkese açık", + "Restricted" : "Kısıtlı", + "Invisible" : "Görünmez", + "Reset" : "Sıfırla", "No files in here" : "Burada hiç dosya yok", "No entries found in this folder" : "Bu klasörde hiçbir girdi bulunamadı", - "Name" : "Ad", "Size" : "Boyut", "Modified" : "Değiştirilme" }, diff --git a/apps/systemtags/l10n/tr.json b/apps/systemtags/l10n/tr.json index 4d29b328fde..b1f724e7e60 100644 --- a/apps/systemtags/l10n/tr.json +++ b/apps/systemtags/l10n/tr.json @@ -1,21 +1,38 @@ { "translations": { "Tags" : "Etiketler", + "Update" : "Güncelle", + "Create" : "Oluştur", + "Select tag…" : "Etiket seç...", "Tagged files" : "Etiketli dosyalar", "Select tags to filter by" : "Filtrelemek için etiketleri seçin", "Please select tags to filter by" : "Filtrelemek için etiketleri seçin", "No files found for the selected tags" : "Seçilen etiketler ile ilgili dosya bulunamadı", "<strong>System tags</strong> for a file have been modified" : "Bir dosya için <strong>sistem etiketleri</strong> değiştirildi", + "You assigned system tag %3$s" : "%3$s sistem etiketini atadınız", "%1$s assigned system tag %3$s" : "%1$s, %3$s sistem etiketini atadı", + "You unassigned system tag %3$s" : "%3$s sistem etiket atamasını kaldırdınız", "%1$s unassigned system tag %3$s" : "%1$s, %3$s sistem etiket atamasını kaldırdı", + "You created system tag %2$s" : "%2$s sistem etiketini oluşturdunuz", "%1$s created system tag %2$s" : "%1$s, %2$s sistem etiketini oluşturdu", + "You deleted system tag %2$s" : "%2$s sistem etiketini sildiniz", "%1$s deleted system tag %2$s" : "%1$s, %2$s sistem etiketini sildi", + "You updated system tag %3$s to %2$s" : "%3$s sistem etiketini %2$s olarak güncellediniz", "%1$s updated system tag %3$s to %2$s" : "%1$s, %3$s sistem etiketini %2$s olarak güncelledi", + "You assigned system tag %3$s to %2$s" : "%3$s sistem etiketini %2$s etiketine atadınız", "%1$s assigned system tag %3$s to %2$s" : "%1$s, %3$s sistem etiketini %2$s etiketine atadı", + "You unassigned system tag %3$s from %2$s" : "%3$s sistem etiketinin %2$s atamasını kaldırdınız", "%1$s unassigned system tag %3$s from %2$s" : "%1$s, %3$s sistem etiketinin %2$s atamasını kaldırdı", + "%s (restricted)" : "%s (kısıtlı)", "%s (invisible)" : "%s (gizli)", + "Collaborative tags" : "İşbirlikçi etiketler", + "Name" : "Ad", + "Delete" : "Sil", + "Public" : "Herkese açık", + "Restricted" : "Kısıtlı", + "Invisible" : "Görünmez", + "Reset" : "Sıfırla", "No files in here" : "Burada hiç dosya yok", "No entries found in this folder" : "Bu klasörde hiçbir girdi bulunamadı", - "Name" : "Ad", "Size" : "Boyut", "Modified" : "Değiştirilme" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/systemtags/lib/AppInfo/Application.php b/apps/systemtags/lib/AppInfo/Application.php new file mode 100644 index 00000000000..7cd49d6424b --- /dev/null +++ b/apps/systemtags/lib/AppInfo/Application.php @@ -0,0 +1,37 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\SystemTags\AppInfo; + +use OCP\AppFramework\App; + +class Application extends App { + public function __construct() { + parent::__construct('systemtags'); + } + + /** + * Register admin settings + */ + public function registerAdminPage() { + \OCP\App::registerAdmin($this->getContainer()->getAppName(), 'admin'); + } +} diff --git a/apps/systemtags/templates/admin.php b/apps/systemtags/templates/admin.php new file mode 100644 index 00000000000..883e998ed61 --- /dev/null +++ b/apps/systemtags/templates/admin.php @@ -0,0 +1,59 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +vendor_script('core', 'select2/select2'); +vendor_style('core', 'select2/select2'); +script('core', [ + 'oc-backbone-webdav', + 'systemtags/systemtags', + 'systemtags/systemtagmodel', + 'systemtags/systemtagscollection', +]); + +script('systemtags', 'admin'); + +/** @var \OCP\IL10N $l */ +?> + +<form id="systemtags" class="section" data-systemtag-id=""> + <h2><?php p($l->t('Collaborative tags')); ?></h2> + + <input type="hidden" name="systemtag" id="systemtag" placeholder="<?php p($l->t('Select tag…')); ?>" style="width: 400px;" /> + + <br><br> + + <input type="text" id="systemtag_name" name="systemtag_name" placeholder="<?php p($l->t('Name')); ?>" style="width: 200px;"> + + <span id="systemtag_delete" class="hidden"> + <img src="<?php p(\OCP\Template::image_path('core', 'actions/delete.svg')); ?>" alt="<?php p($l->t('Delete')); ?>"> + </span> + + <br> + + <select id="systemtag_level"> + <option value="3"><?php p($l->t('Public')); ?></option> + <option value="2"><?php p($l->t('Restricted')); ?></option> + <option value="0"><?php p($l->t('Invisible')); ?></option> + </select> + + <input type="button" id="systemtag_submit" value="<?php p($l->t('Create')); ?>"> + <input type="button" id="systemtag_reset" value="<?php p($l->t('Reset')); ?>"> +</form> diff --git a/apps/testing/appinfo/info.xml b/apps/testing/appinfo/info.xml index 1ab6e67805a..0acccf357fb 100644 --- a/apps/testing/appinfo/info.xml +++ b/apps/testing/appinfo/info.xml @@ -5,7 +5,7 @@ <description>This app is only for testing! It is dangerous to have it enabled in a live instance</description> <licence>AGPL</licence> <author>Joas Schilling</author> - <version>1.0.0</version> + <version>1.1.0</version> <dependencies> <owncloud min-version="9.2" max-version="9.2" /> </dependencies> diff --git a/apps/theming/appinfo/app.php b/apps/theming/appinfo/app.php index 76580879ca1..5ef506e5acd 100644 --- a/apps/theming/appinfo/app.php +++ b/apps/theming/appinfo/app.php @@ -31,7 +31,7 @@ $linkToCSS = \OC::$server->getURLGenerator()->linkToRoute( 'v' => \OC::$server->getConfig()->getAppValue('theming', 'cachebuster', '0'), ] ); -\OC_Util::addHeader( +\OCP\Util::addHeader( 'link', [ 'rel' => 'stylesheet', diff --git a/apps/theming/appinfo/info.xml b/apps/theming/appinfo/info.xml index 2cc18672a3b..8ae1d3eb73a 100644 --- a/apps/theming/appinfo/info.xml +++ b/apps/theming/appinfo/info.xml @@ -5,7 +5,7 @@ <description>Adjust the Nextcloud theme</description> <licence>AGPL</licence> <author>Nextcloud</author> - <version>1.0.0</version> + <version>1.1.0</version> <namespace>Theming</namespace> <category>other</category> diff --git a/apps/theming/appinfo/routes.php b/apps/theming/appinfo/routes.php index 073dacb789c..e062a68d69d 100644 --- a/apps/theming/appinfo/routes.php +++ b/apps/theming/appinfo/routes.php @@ -24,9 +24,7 @@ * */ -namespace OCA\Theming\AppInfo; - -(new \OCP\AppFramework\App('theming'))->registerRoutes($this, array('routes' => array( +return ['routes' => [ [ 'name' => 'Theming#updateStylesheet', 'url' => '/ajax/updateStylesheet', @@ -57,5 +55,5 @@ namespace OCA\Theming\AppInfo; 'url' => '/loginbackground', 'verb' => 'GET', ], -))); +]]; diff --git a/apps/theming/js/settings-admin.js b/apps/theming/js/settings-admin.js index 85e781411ed..01ff9123842 100644 --- a/apps/theming/js/settings-admin.js +++ b/apps/theming/js/settings-admin.js @@ -46,40 +46,57 @@ function calculateLuminance(rgb) { return (0.299*r + 0.587*g + 0.114*b)/255; } +function generateRadioButton(color) { + var radioButton = '<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16">' + + '<path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="' + color + '"/></svg>'; + return btoa(radioButton); +} + function preview(setting, value) { if (setting === 'color') { var headerClass = document.getElementById('header'); var expandDisplayNameClass = document.getElementById('expandDisplayName'); var headerAppName = headerClass.getElementsByClassName('header-appname')[0]; var textColor, icon; + var luminance = calculateLuminance(value); + var elementColor = value; - if (calculateLuminance(value) > 0.5) { + if (luminance > 0.5) { textColor = "#000000"; icon = 'caret-dark'; } else { textColor = "#ffffff"; icon = 'caret'; } + if (luminance>0.8) { + elementColor = '#555555'; + } headerClass.style.background = value; headerClass.style.backgroundImage = '../img/logo-icon.svg'; expandDisplayNameClass.style.color = textColor; headerAppName.style.color = textColor; - $(headerClass).find('.icon-caret').each(function() { - $(this).css('background-image', "url('" + OC.getRootPath() + '/core/img/actions/' + icon + ".svg')"); - }); + $('#previewStyles').html( + '#header .icon-caret { background-image: url(\'' + OC.getRootPath() + '/core/img/actions/' + icon + '.svg\') }' + + 'input[type="checkbox"].checkbox:checked:enabled:not(.checkbox--white) + label:before {' + + 'background-image:url(\'' + OC.getRootPath() + '/core/img/actions/checkmark-white.svg\');' + + 'background-color: ' + elementColor + '; background-position: center center; background-size:contain;' + + 'width:12px; height:12px; padding:0; margin:2px 6px 6px 2px; border-radius:1px;}' + + 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' + + 'background-image: url(\'data:image/svg+xml;base64,' + generateRadioButton(elementColor) + '\'); }' + ); } if (setting === 'logoMime') { console.log(setting); var logos = document.getElementsByClassName('logo-icon'); var timestamp = new Date().getTime(); if (value !== '') { - logos[0].style.background = "url('" + OC.generateUrl('/apps/theming/logo') + "?v" + timestamp + "')"; - logos[0].style.backgroundSize = "62px 34px"; + logos[0].style.backgroundImage = "url('" + OC.generateUrl('/apps/theming/logo') + "?v" + timestamp + "')"; + logos[0].style.backgroundSize = "contain"; } else { - logos[0].style.background = "url('" + OC.getRootPath() + '/core/img/logo-icon.svg?v' + timestamp +"')"; - logos[0].style.backgroundSize = "62px 34px"; + logos[0].style.backgroundImage = "url('" + OC.getRootPath() + '/core/img/logo-icon.svg?v' + timestamp +"')"; + logos[0].style.backgroundSize = "contain"; } } } @@ -87,6 +104,8 @@ function preview(setting, value) { $(document).ready(function () { $('#theming [data-toggle="tooltip"]').tooltip(); + $('html > head').append($('<style type="text/css" id="previewStyles"></style>')); + var uploadParamsLogo = { pasteZone: null, dropZone: null, diff --git a/apps/theming/lib/controller/themingcontroller.php b/apps/theming/lib/Controller/ThemingController.php index b6fb1a6be5b..8d9869b84a7 100644 --- a/apps/theming/lib/controller/themingcontroller.php +++ b/apps/theming/lib/Controller/ThemingController.php @@ -30,7 +30,10 @@ namespace OCA\Theming\Controller; use OCA\Theming\Template; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; +use OCP\AppFramework\Http\DataDownloadResponse; use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\Http\StreamResponse; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\Files\IRootFolder; use OCP\IConfig; use OCP\IL10N; @@ -47,6 +50,10 @@ use OCA\Theming\Util; class ThemingController extends Controller { /** @var Template */ private $template; + /** @var Util */ + private $util; + /** @var ITimeFactory */ + private $timeFactory; /** @var IL10N */ private $l; /** @var IConfig */ @@ -61,6 +68,8 @@ class ThemingController extends Controller { * @param IRequest $request * @param IConfig $config * @param Template $template + * @param Util $util + * @param ITimeFactory $timeFactory * @param IL10N $l * @param IRootFolder $rootFolder */ @@ -69,12 +78,16 @@ class ThemingController extends Controller { IRequest $request, IConfig $config, Template $template, + Util $util, + ITimeFactory $timeFactory, IL10N $l, IRootFolder $rootFolder ) { parent::__construct($appName, $request); - + $this->template = $template; + $this->util = $util; + $this->timeFactory = $timeFactory; $this->l = $l; $this->config = $config; $this->rootFolder = $rootFolder; @@ -87,6 +100,50 @@ class ThemingController extends Controller { * @internal param string $color */ public function updateStylesheet($setting, $value) { + $value = trim($value); + switch ($setting) { + case 'name': + if (strlen($value) > 250) { + return new DataResponse([ + 'data' => [ + 'message' => $this->l->t('The given name is too long'), + ], + 'status' => 'error' + ]); + } + break; + case 'url': + if (strlen($value) > 500) { + return new DataResponse([ + 'data' => [ + 'message' => $this->l->t('The given web address is too long'), + ], + 'status' => 'error' + ]); + } + break; + case 'slogan': + if (strlen($value) > 500) { + return new DataResponse([ + 'data' => [ + 'message' => $this->l->t('The given slogan is too long'), + ], + 'status' => 'error' + ]); + } + break; + case 'color': + if (!preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $value)) { + return new DataResponse([ + 'data' => [ + 'message' => $this->l->t('The given color is invalid'), + ], + 'status' => 'error' + ]); + } + break; + } + $this->template->set($setting, $value); return new DataResponse( [ @@ -166,7 +223,7 @@ class ThemingController extends Controller { * @PublicPage * @NoCSRFRequired * - * @return Http\StreamResponse + * @return StreamResponse|DataResponse */ public function getLogo() { $pathToLogo = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/') . '/themedinstancelogo'; @@ -174,10 +231,9 @@ class ThemingController extends Controller { return new DataResponse(); } - \OC_Response::setExpiresHeader(gmdate('D, d M Y H:i:s', time() + (60*60*24*45)) . ' GMT'); - \OC_Response::enableCaching(); $response = new Http\StreamResponse($pathToLogo); $response->cacheFor(3600); + $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); $response->addHeader('Content-Disposition', 'attachment'); $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'logoMime', '')); return $response; @@ -187,7 +243,7 @@ class ThemingController extends Controller { * @PublicPage * @NoCSRFRequired * - * @return Http\StreamResponse + * @return StreamResponse|DataResponse */ public function getLoginBackground() { $pathToLogo = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data/') . '/themedbackgroundlogo'; @@ -195,10 +251,9 @@ class ThemingController extends Controller { return new DataResponse(); } - \OC_Response::setExpiresHeader(gmdate('D, d M Y H:i:s', time() + (60*60*24*45)) . ' GMT'); - \OC_Response::enableCaching(); - $response = new Http\StreamResponse($pathToLogo); + $response = new StreamResponse($pathToLogo); $response->cacheFor(3600); + $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); $response->addHeader('Content-Disposition', 'attachment'); $response->addHeader('Content-Type', $this->config->getAppValue($this->appName, 'backgroundMime', '')); return $response; @@ -208,45 +263,72 @@ class ThemingController extends Controller { * @NoCSRFRequired * @PublicPage * - * @return Http\DataDownloadResponse + * @return DataDownloadResponse */ public function getStylesheet() { $cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0'); $responseCss = ''; $color = $this->config->getAppValue($this->appName, 'color'); + $elementColor = $this->util->elementColor($color); if($color !== '') { $responseCss .= sprintf( - '#body-user #header,#body-settings #header,#body-public #header {background-color: %s}', + '#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: %s}' . "\n", $color ); + $responseCss .= sprintf('input[type="checkbox"].checkbox:checked:enabled:not(.checkbox--white) + label:before {' . + 'background-image:url(\'%s/core/img/actions/checkmark-white.svg\');' . + 'background-color: %s; background-position: center center; background-size:contain;' . + 'width:12px; height:12px; padding:0; margin:2px 6px 6px 2px; border-radius:1px;' . + "}\n", + \OC::$WEBROOT, + $elementColor + ); + $responseCss .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . + 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton($elementColor).'\');' . + "}\n"; + $responseCss .= ' + #firstrunwizard .firstrunwizard-header { + background-color: ' . $color . '; + } + #firstrunwizard p a { + color: ' . $color . '; + } + '; + } $logo = $this->config->getAppValue($this->appName, 'logoMime'); if($logo !== '') { - $responseCss .= sprintf('#header .logo { - background-image: url(\'./logo?v='.$cacheBusterValue.'\'); - } - #header .logo-icon { - background-image: url(\'./logo?v='.$cacheBusterValue.'\'); - background-size: 62px 34px; - }' + $responseCss .= sprintf( + '#header .logo {' . + 'background-image: url(\'./logo?v='.$cacheBusterValue.'\');' . + 'background-size: contain;' . + '}' . "\n" . + '#header .logo-icon {' . + 'background-image: url(\'./logo?v='.$cacheBusterValue.'\');' . + 'background-size: contain;' . + '}' . "\n" . + '#firstrunwizard .firstrunwizard-header .logo {' . + 'background-image: url(\'./logo?v='.$cacheBusterValue.'\');' . + 'background-size: contain;' . + '}' . "\n" ); } $backgroundLogo = $this->config->getAppValue($this->appName, 'backgroundMime'); if($backgroundLogo !== '') { - $responseCss .= '#body-login { - background-image: url(\'./loginbackground?v='.$cacheBusterValue.'\'); - }'; + $responseCss .= '#body-login {background-image: url(\'./loginbackground?v='.$cacheBusterValue.'\');}' . "\n"; + $responseCss .= '#firstrunwizard .firstrunwizard-header {' . + 'background-image: url(\'./loginbackground?v='.$cacheBusterValue.'\');' . + '}' . "\n"; } - if(Util::invertTextColor($color)) { - $responseCss .= '#header .header-appname, #expandDisplayName { color: #000000; } '; - $responseCss .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); } '; - $responseCss .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }'; - $responseCss .= '.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }'; + if($this->util->invertTextColor($color)) { + $responseCss .= '#header .header-appname, #expandDisplayName { color: #000000; }' . "\n"; + $responseCss .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n"; + $responseCss .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n"; + $responseCss .= '.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }' . "\n"; } - \OC_Response::setExpiresHeader(gmdate('D, d M Y H:i:s', time() + (60*60*24*45)) . ' GMT'); - \OC_Response::enableCaching(); - $response = new Http\DataDownloadResponse($responseCss, 'style', 'text/css'); + $response = new DataDownloadResponse($responseCss, 'style', 'text/css'); + $response->addHeader('Expires', date(\DateTime::RFC2822, $this->timeFactory->getTime())); $response->cacheFor(3600); return $response; } diff --git a/apps/theming/lib/template.php b/apps/theming/lib/Template.php index 8cd2befc1d1..25730aad95b 100644 --- a/apps/theming/lib/template.php +++ b/apps/theming/lib/Template.php @@ -40,7 +40,7 @@ use OCP\IURLGenerator; class Template extends \OC_Defaults { /** @var IConfig */ private $config; - /** @var IL10N */ + /** @var IL10N */ private $l; /** @var IURLGenerator */ private $urlGenerator; diff --git a/apps/theming/lib/util.php b/apps/theming/lib/Util.php index 2088650b19d..71ed0958e42 100644 --- a/apps/theming/lib/util.php +++ b/apps/theming/lib/Util.php @@ -29,8 +29,8 @@ class Util { * @param string $color rgb color value * @return bool */ - public static function invertTextColor($color) { - $l = self::calculateLuminance($color); + public function invertTextColor($color) { + $l = $this->calculateLuminance($color); if($l>0.5) { return true; } else { @@ -39,10 +39,25 @@ class Util { } /** + * get color for on-page elements: + * theme color by default, grey if theme color is to bright + * @param $color + * @return string + */ + public function elementColor($color) { + $l = $this->calculateLuminance($color); + if($l>0.8) { + return '#555555'; + } else { + return $color; + } + } + + /** * @param string $color rgb color value * @return float */ - public static function calculateLuminance($color) { + public function calculateLuminance($color) { $hex = preg_replace("/[^0-9A-Fa-f]/", '', $color); if (strlen($hex) === 3) { $hex = $hex{0} . $hex{0} . $hex{1} . $hex{1} . $hex{2} . $hex{2}; @@ -56,4 +71,14 @@ class Util { return (0.299 * $r + 0.587 * $g + 0.114 * $b)/255; } + /** + * @param $color + * @return string base64 encoded radio button svg + */ + public function generateRadioButton($color) { + $radioButtonIcon = '<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16">' . + '<path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="'.$color.'"/></svg>'; + return base64_encode($radioButtonIcon); + } + } diff --git a/apps/theming/settings/settings-admin.php b/apps/theming/settings/settings-admin.php index d9aa05cfca0..8ef499789e8 100644 --- a/apps/theming/settings/settings-admin.php +++ b/apps/theming/settings/settings-admin.php @@ -23,8 +23,6 @@ * */ -\OC_Util::checkAdminUser(); - $config = \OC::$server->getConfig(); $l = \OC::$server->getL10N('theming'); $urlGenerator = \OC::$server->getURLGenerator(); @@ -40,7 +38,7 @@ if ($theme !== '') { $errorMessage = $l->t('You already use a custom theme'); } -$template = new OCP\Template('theming', 'settings-admin'); +$template = new \OCP\Template('theming', 'settings-admin'); $template->assign('themable', $themable); $template->assign('errorMessage', $errorMessage); diff --git a/apps/theming/templates/settings-admin.php b/apps/theming/templates/settings-admin.php index 811b2883a88..50c4a8fb5ec 100644 --- a/apps/theming/templates/settings-admin.php +++ b/apps/theming/templates/settings-admin.php @@ -36,25 +36,25 @@ style('theming', 'settings-admin'); <?php } else { ?> <p> <label><span><?php p($l->t('Name')) ?></span> - <input id="theming-name" type="text" placeholder="<?php p($l->t('Name')); ?>" value="<?php p($_['name']) ?>" /> + <input id="theming-name" type="text" placeholder="<?php p($l->t('Name')); ?>" value="<?php p($_['name']) ?>" maxlength="250" /> </label> <span data-setting="name" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></span> </p> <p> <label><span><?php p($l->t('Web address')) ?></span> - <input id="theming-url" type="text" placeholder="<?php p($l->t('Web address https://…')); ?>" value="<?php p($_['url']) ?>" /> + <input id="theming-url" type="text" placeholder="<?php p($l->t('Web address https://…')); ?>" value="<?php p($_['url']) ?>" maxlength="500" /> </label> <span data-setting="url" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></span> </p> <p> <label><span><?php p($l->t('Slogan')) ?></span> - <input id="theming-slogan" type="text" placeholder="<?php p($l->t('Slogan')); ?>" value="<?php p($_['slogan']) ?>" /> + <input id="theming-slogan" type="text" placeholder="<?php p($l->t('Slogan')); ?>" value="<?php p($_['slogan']) ?>" maxlength="500" /> </label> <span data-setting="slogan" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></span> </p> <p> <label><span><?php p($l->t('Color')) ?></span> - <input id="theming-color" type="text" class="jscolor" value="<?php p($_['color']) ?>" /> + <input id="theming-color" type="text" class="jscolor" maxlength="6" value="<?php p($_['color']) ?>" /> </label> <span data-setting="color" data-toggle="tooltip" data-original-title="<?php p($l->t('reset to default')); ?>" class="theme-undo icon icon-history"></span> </p> diff --git a/apps/theming/tests/lib/controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php index 6dcb4b548c4..82eb8259af5 100644 --- a/apps/theming/tests/lib/controller/ThemingControllerTest.php +++ b/apps/theming/tests/Controller/ThemingControllerTest.php @@ -26,6 +26,7 @@ namespace OCA\Theming\Tests\Controller; use OCA\Theming\Controller\ThemingController; use OCA\Theming\Template; +use OCA\Theming\Util; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\Files\IRootFolder; @@ -35,32 +36,46 @@ use OCP\IRequest; use Test\TestCase; class ThemingControllerTest extends TestCase { - /** @var IRequest */ + /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ private $request; - /** @var IConfig */ + /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ private $config; - /** @var Template */ + /** @var Template|\PHPUnit_Framework_MockObject_MockObject */ private $template; - /** @var IL10N */ + /** @var Util */ + private $util; + /** @var \OCP\AppFramework\Utility\ITimeFactory */ + private $timeFactory; + /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ private $l10n; /** @var ThemingController */ private $themingController; - /** @var IRootFolder */ + /** @var IRootFolder|\PHPUnit_Framework_MockObject_MockObject */ private $rootFolder; public function setUp() { - $this->request = $this->getMock('\\OCP\\IRequest'); - $this->config = $this->getMock('\\OCP\\IConfig'); - $this->template = $this->getMockBuilder('\\OCA\\Theming\\Template') + $this->request = $this->getMockBuilder('OCP\IRequest')->getMock(); + $this->config = $this->getMockBuilder('OCP\IConfig')->getMock(); + $this->template = $this->getMockBuilder('OCA\Theming\Template') ->disableOriginalConstructor()->getMock(); - $this->l10n = $this->getMock('\\OCP\\IL10N'); - $this->rootFolder = $this->getMock('\\OCP\\Files\\IRootFolder'); + $this->util = new Util(); + $this->timeFactory = $this->getMockBuilder('OCP\AppFramework\Utility\ITimeFactory') + ->disableOriginalConstructor() + ->getMock(); + $this->l10n = $this->getMockBuilder('OCP\IL10N')->getMock(); + $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->getMock(); + + $this->timeFactory->expects($this->any()) + ->method('getTime') + ->willReturn(123); $this->themingController = new ThemingController( 'theming', $this->request, $this->config, $this->template, + $this->util, + $this->timeFactory, $this->l10n, $this->rootFolder ); @@ -68,27 +83,48 @@ class ThemingControllerTest extends TestCase { return parent::setUp(); } - public function testUpdateStylesheet() { + public function dataUpdateStylesheet() { + return [ + ['name', str_repeat('a', 250), 'success', 'Saved'], + ['name', str_repeat('a', 251), 'error', 'The given name is too long'], + ['url', str_repeat('a', 500), 'success', 'Saved'], + ['url', str_repeat('a', 501), 'error', 'The given web address is too long'], + ['slogan', str_repeat('a', 500), 'success', 'Saved'], + ['slogan', str_repeat('a', 501), 'error', 'The given slogan is too long'], + ['color', '#0082c9', 'success', 'Saved'], + ['color', '#0082C9', 'success', 'Saved'], + ['color', '0082C9', 'error', 'The given color is invalid'], + ['color', '#0082Z9', 'error', 'The given color is invalid'], + ['color', 'Nextcloud', 'error', 'The given color is invalid'], + ]; + } + + /** + * @dataProvider dataUpdateStylesheet + * + * @param string $setting + * @param string $value + * @param string $status + * @param string $message + */ + public function testUpdateStylesheet($setting, $value, $status, $message) { $this->template - ->expects($this->once()) + ->expects($status === 'success' ? $this->once() : $this->never()) ->method('set') - ->with('MySetting', 'MyValue'); + ->with($setting, $value); $this->l10n ->expects($this->once()) ->method('t') - ->with('Saved') - ->willReturn('Saved'); + ->with($message) + ->willReturn($message); - $expected = new DataResponse( - [ - 'data' => - [ - 'message' => 'Saved', - ], - 'status' => 'success' - ] - ); - $this->assertEquals($expected, $this->themingController->updateStylesheet('MySetting', 'MyValue')); + $expected = new DataResponse([ + 'data' => [ + 'message' => $message, + ], + 'status' => $status, + ]); + $this->assertEquals($expected, $this->themingController->updateStylesheet($setting, $value)); } public function testUpdateLogoNoData() { @@ -272,6 +308,7 @@ class ThemingControllerTest extends TestCase { @$expected = new Http\StreamResponse($tmpLogo); $expected->cacheFor(3600); + $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); $expected->addHeader('Content-Disposition', 'attachment'); $expected->addHeader('Content-Type', 'text/svg'); @$this->assertEquals($expected, $this->themingController->getLogo()); @@ -300,12 +337,16 @@ class ThemingControllerTest extends TestCase { @$expected = new Http\StreamResponse($tmpLogo); $expected->cacheFor(3600); + $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); $expected->addHeader('Content-Disposition', 'attachment'); $expected->addHeader('Content-Type', 'image/png'); @$this->assertEquals($expected, $this->themingController->getLoginBackground()); } public function testGetStylesheetWithOnlyColor() { + + $color = '#000'; + $this->config ->expects($this->at(0)) ->method('getAppValue') @@ -315,7 +356,7 @@ class ThemingControllerTest extends TestCase { ->expects($this->at(1)) ->method('getAppValue') ->with('theming', 'color', '') - ->willReturn('#000'); + ->willReturn($color); $this->config ->expects($this->at(2)) ->method('getAppValue') @@ -327,12 +368,42 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'backgroundMime', '') ->willReturn(''); - $expected = new Http\DataDownloadResponse('#body-user #header,#body-settings #header,#body-public #header {background-color: #000}', 'style', 'text/css'); + $expectedData = sprintf( + '#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: %s}' . "\n", + $color + ); + $expectedData .= sprintf('input[type="checkbox"].checkbox:checked:enabled:not(.checkbox--white) + label:before {' . + 'background-image:url(\'%s/core/img/actions/checkmark-white.svg\');' . + 'background-color: %s; background-position: center center; background-size:contain;' . + 'width:12px; height:12px; padding:0; margin:2px 6px 6px 2px; border-radius:1px;' . + "}\n", + \OC::$WEBROOT, + $color + ); + $expectedData .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . + 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton($color).'\');' . + "}\n"; + + $expectedData .= ' + #firstrunwizard .firstrunwizard-header { + background-color: ' . $color . '; + } + #firstrunwizard p a { + color: ' . $color . '; + } + '; + + $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); + $expected->cacheFor(3600); + $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } public function testGetStylesheetWithOnlyColorInvert() { + + $color = '#fff'; + $this->config ->expects($this->at(0)) ->method('getAppValue') @@ -342,7 +413,7 @@ class ThemingControllerTest extends TestCase { ->expects($this->at(1)) ->method('getAppValue') ->with('theming', 'color', '') - ->willReturn('#fff'); + ->willReturn($color); $this->config ->expects($this->at(2)) ->method('getAppValue') @@ -354,8 +425,39 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'backgroundMime', '') ->willReturn(''); - $expected = new Http\DataDownloadResponse('#body-user #header,#body-settings #header,#body-public #header {background-color: #fff}#header .header-appname, #expandDisplayName { color: #000000; } #header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); } .searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }', 'style', 'text/css'); + $expectedData = sprintf( + '#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: %s}' . "\n", + $color + ); + $expectedData .= sprintf('input[type="checkbox"].checkbox:checked:enabled:not(.checkbox--white) + label:before {' . + 'background-image:url(\'%s/core/img/actions/checkmark-white.svg\');' . + 'background-color: #555555; background-position: center center; background-size:contain;' . + 'width:12px; height:12px; padding:0; margin:2px 6px 6px 2px; border-radius:1px;' . + "}\n", + \OC::$WEBROOT + ); + $expectedData .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . + 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton('#555555').'\');' . + "}\n"; + + $expectedData .= ' + #firstrunwizard .firstrunwizard-header { + background-color: ' . $color . '; + } + #firstrunwizard p a { + color: ' . $color . '; + } + '; + $expectedData .= '#header .header-appname, #expandDisplayName { color: #000000; }' . "\n"; + $expectedData .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n"; + $expectedData .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n"; + $expectedData .= '.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }' . "\n"; + + + $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); + $expected->cacheFor(3600); + $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } @@ -381,14 +483,23 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'backgroundMime', '') ->willReturn(''); - $expected = new Http\DataDownloadResponse('#header .logo { - background-image: url(\'./logo?v=0\'); - } - #header .logo-icon { - background-image: url(\'./logo?v=0\'); - background-size: 62px 34px; - }', 'style', 'text/css'); + $expectedData = '#header .logo {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n" . + '#header .logo-icon {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n" . + '#firstrunwizard .firstrunwizard-header .logo {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n"; + + $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); + $expected->cacheFor(3600); + $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } @@ -414,14 +525,22 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'backgroundMime', '') ->willReturn('text/svg'); - $expected = new Http\DataDownloadResponse('#body-login { - background-image: url(\'./loginbackground?v=0\'); - }', 'style', 'text/css'); + $expectedData = '#body-login {background-image: url(\'./loginbackground?v=0\');}' . "\n"; + $expectedData .= '#firstrunwizard .firstrunwizard-header {' . + 'background-image: url(\'./loginbackground?v=0\');' . + '}' . "\n"; + + $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); + $expected->cacheFor(3600); + $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } public function testGetStylesheetWithAllCombined() { + + $color = '#000'; + $this->config ->expects($this->at(0)) ->method('getAppValue') @@ -431,7 +550,7 @@ class ThemingControllerTest extends TestCase { ->expects($this->at(1)) ->method('getAppValue') ->with('theming', 'color', '') - ->willReturn('#000'); + ->willReturn($color); $this->config ->expects($this->at(2)) ->method('getAppValue') @@ -443,19 +562,58 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'backgroundMime', '') ->willReturn('image/png'); - $expected = new Http\DataDownloadResponse('#body-user #header,#body-settings #header,#body-public #header {background-color: #000}#header .logo { - background-image: url(\'./logo?v=0\'); - } - #header .logo-icon { - background-image: url(\'./logo?v=0\'); - background-size: 62px 34px; - }#body-login { - background-image: url(\'./loginbackground?v=0\'); - }', 'style', 'text/css'); + $expectedData = sprintf( + '#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: %s}' . "\n", + $color); + + $expectedData .= sprintf('input[type="checkbox"].checkbox:checked:enabled:not(.checkbox--white) + label:before {' . + 'background-image:url(\'%s/core/img/actions/checkmark-white.svg\');' . + 'background-color: %s; background-position: center center; background-size:contain;' . + 'width:12px; height:12px; padding:0; margin:2px 6px 6px 2px; border-radius:1px;' . + "}\n", + \OC::$WEBROOT, + $color + ); + $expectedData .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . + 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton($color).'\');' . + "}\n"; + $expectedData .= ' + #firstrunwizard .firstrunwizard-header { + background-color: ' . $color . '; + } + #firstrunwizard p a { + color: ' . $color . '; + } + '; + $expectedData .= sprintf( + '#header .logo {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n" . + '#header .logo-icon {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n" . + '#firstrunwizard .firstrunwizard-header .logo {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n" + ); + $expectedData .= '#body-login {background-image: url(\'./loginbackground?v=0\');}' . "\n"; + $expectedData .= '#firstrunwizard .firstrunwizard-header {' . + 'background-image: url(\'./loginbackground?v=0\');' . + '}' . "\n"; + $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); + $expected->cacheFor(3600); + $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } + public function testGetStylesheetWithAllCombinedInverted() { + + $color = '#fff'; + $this->config ->expects($this->at(0)) ->method('getAppValue') @@ -477,17 +635,55 @@ class ThemingControllerTest extends TestCase { ->with('theming', 'backgroundMime', '') ->willReturn('image/png'); - $expected = new Http\DataDownloadResponse('#body-user #header,#body-settings #header,#body-public #header {background-color: #fff}#header .logo { - background-image: url(\'./logo?v=0\'); - } - #header .logo-icon { - background-image: url(\'./logo?v=0\'); - background-size: 62px 34px; - }#body-login { - background-image: url(\'./loginbackground?v=0\'); - }#header .header-appname, #expandDisplayName { color: #000000; } #header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); } .searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }', 'style', 'text/css'); + + $expectedData = sprintf( + '#body-user #header,#body-settings #header,#body-public #header,#body-login,.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid {background-color: %s}' . "\n", + $color); + + $expectedData .= sprintf('input[type="checkbox"].checkbox:checked:enabled:not(.checkbox--white) + label:before {' . + 'background-image:url(\'%s/core/img/actions/checkmark-white.svg\');' . + 'background-color: #555555; background-position: center center; background-size:contain;' . + 'width:12px; height:12px; padding:0; margin:2px 6px 6px 2px; border-radius:1px;' . + "}\n", + \OC::$WEBROOT + ); + $expectedData .= 'input[type="radio"].radio:checked:not(.radio--white):not(:disabled) + label:before {' . + 'background-image: url(\'data:image/svg+xml;base64,'.$this->util->generateRadioButton('#555555').'\');' . + "}\n"; + $expectedData .= ' + #firstrunwizard .firstrunwizard-header { + background-color: ' . $color . '; + } + #firstrunwizard p a { + color: ' . $color . '; + } + '; + $expectedData .= sprintf( + '#header .logo {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n" . + '#header .logo-icon {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n" . + '#firstrunwizard .firstrunwizard-header .logo {' . + 'background-image: url(\'./logo?v=0\');' . + 'background-size: contain;' . + '}' . "\n" + ); + $expectedData .= '#body-login {background-image: url(\'./loginbackground?v=0\');}' . "\n"; + $expectedData .= '#firstrunwizard .firstrunwizard-header {' . + 'background-image: url(\'./loginbackground?v=0\');' . + '}' . "\n"; + $expectedData .= '#header .header-appname, #expandDisplayName { color: #000000; }' . "\n"; + $expectedData .= '#header .icon-caret { background-image: url(\'' . \OC::$WEBROOT . '/core/img/actions/caret-dark.svg\'); }' . "\n"; + $expectedData .= '.searchbox input[type="search"] { background: transparent url(\'' . \OC::$WEBROOT . '/core/img/actions/search.svg\') no-repeat 6px center; color: #000; }' . "\n"; + $expectedData .= '.searchbox input[type="search"]:focus,.searchbox input[type="search"]:active,.searchbox input[type="search"]:valid { color: #000; border: 1px solid rgba(0, 0, 0, .5); }' . "\n"; + $expected = new Http\DataDownloadResponse($expectedData, 'style', 'text/css'); + $expected->cacheFor(3600); + $expected->addHeader('Expires', date(\DateTime::RFC2822, 123)); @$this->assertEquals($expected, $this->themingController->getStylesheet()); } - } diff --git a/apps/theming/tests/lib/TemplateTest.php b/apps/theming/tests/TemplateTest.php index c3c792657ec..c3c792657ec 100644 --- a/apps/theming/tests/lib/TemplateTest.php +++ b/apps/theming/tests/TemplateTest.php diff --git a/apps/theming/tests/UtilTest.php b/apps/theming/tests/UtilTest.php new file mode 100644 index 00000000000..c7fc385d25d --- /dev/null +++ b/apps/theming/tests/UtilTest.php @@ -0,0 +1,97 @@ +<?php +/** + * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net> + * + * @author Julius Haertl <jus@bitgrid.net> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +namespace OCA\Theming\Tests; + +use OCA\Theming\Util; +use Test\TestCase; + +class UtilTest extends TestCase { + + /** @var Util */ + protected $util; + + protected function setUp() { + parent::setUp(); + $this->util = new Util(); + } + + public function testInvertTextColorLight() { + $invert = $this->util->invertTextColor('#ffffff'); + $this->assertEquals(true, $invert); + } + + public function testInvertTextColorDark() { + $invert = $this->util->invertTextColor('#000000'); + $this->assertEquals(false, $invert); + } + + public function testCalculateLuminanceLight() { + $luminance = $this->util->calculateLuminance('#ffffff'); + $this->assertEquals(1, $luminance); + } + + public function testCalculateLuminanceDark() { + $luminance = $this->util->calculateLuminance('#000000'); + $this->assertEquals(0, $luminance); + } + + public function testCalculateLuminanceLightShorthand() { + $luminance = $this->util->calculateLuminance('#fff'); + $this->assertEquals(1, $luminance); + } + + public function testCalculateLuminanceDarkShorthand() { + $luminance = $this->util->calculateLuminance('#000'); + $this->assertEquals(0, $luminance); + } + public function testInvertTextColorInvalid() { + $invert = $this->util->invertTextColor('aaabbbcccddd123'); + $this->assertEquals(false, $invert); + } + + public function testInvertTextColorEmpty() { + $invert = $this->util->invertTextColor(''); + $this->assertEquals(false, $invert); + } + + public function testElementColorDefault() { + $elementColor = $this->util->elementColor("#000000"); + $this->assertEquals('#000000', $elementColor); + } + + public function testElementColorOnBrightBackground() { + $elementColor = $this->util->elementColor('#ffffff'); + $this->assertEquals('#555555', $elementColor); + } + + public function testGenerateRadioButtonWhite() { + $button = $this->util->generateRadioButton('#ffffff'); + $expected = 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+PHBhdGggZD0iTTggMWE3IDcgMCAwIDAtNyA3IDcgNyAwIDAgMCA3IDcgNyA3IDAgMCAwIDctNyA3IDcgMCAwIDAtNy03em0wIDFhNiA2IDAgMCAxIDYgNiA2IDYgMCAwIDEtNiA2IDYgNiAwIDAgMS02LTYgNiA2IDAgMCAxIDYtNnptMCAyYTQgNCAwIDEgMCAwIDggNCA0IDAgMCAwIDAtOHoiIGZpbGw9IiNmZmZmZmYiLz48L3N2Zz4='; + $this->assertEquals($expected, $button); + } + public function testGenerateRadioButtonBlack() { + $button = $this->util->generateRadioButton('#000000'); + $expected = 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTYiIHdpZHRoPSIxNiI+PHBhdGggZD0iTTggMWE3IDcgMCAwIDAtNyA3IDcgNyAwIDAgMCA3IDcgNyA3IDAgMCAwIDctNyA3IDcgMCAwIDAtNy03em0wIDFhNiA2IDAgMCAxIDYgNiA2IDYgMCAwIDEtNiA2IDYgNiAwIDAgMS02LTYgNiA2IDAgMCAxIDYtNnptMCAyYTQgNCAwIDEgMCAwIDggNCA0IDAgMCAwIDAtOHoiIGZpbGw9IiMwMDAwMDAiLz48L3N2Zz4='; + $this->assertEquals($expected, $button); + } +} diff --git a/apps/theming/tests/lib/UtilTest.php b/apps/theming/tests/lib/UtilTest.php deleted file mode 100644 index 9ebb11d6288..00000000000 --- a/apps/theming/tests/lib/UtilTest.php +++ /dev/null @@ -1,68 +0,0 @@ -<?php -/** - * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net> - * - * @author Julius Haertl <jus@bitgrid.net> - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * 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 - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ -namespace OCA\Theming\Tests; - -use OCA\Theming\Util; -use Test\TestCase; - -class UtilTest extends TestCase { - - public function testInvertTextColorLight() { - $invert = Util::invertTextColor('#ffffff'); - $this->assertEquals(true, $invert); - } - - public function testInvertTextColorDark() { - $invert = Util::invertTextColor('#000000'); - $this->assertEquals(false, $invert); - } - - public function testCalculateLuminanceLight() { - $luminance = Util::calculateLuminance('#ffffff'); - $this->assertEquals(1, $luminance); - } - - public function testCalculateLuminanceDark() { - $luminance = Util::calculateLuminance('#000000'); - $this->assertEquals(0, $luminance); - } - - public function testCalculateLuminanceLightShorthand() { - $luminance = Util::calculateLuminance('#fff'); - $this->assertEquals(1, $luminance); - } - - public function testCalculateLuminanceDarkShorthand() { - $luminance = Util::calculateLuminance('#000'); - $this->assertEquals(0, $luminance); - } - public function testInvertTextColorInvalid() { - $invert = Util::invertTextColor('aaabbbcccddd123'); - $this->assertEquals(false, $invert); - } - - public function testInvertTextColorEmpty() { - $invert = Util::invertTextColor(''); - $this->assertEquals(false, $invert); - } -} diff --git a/apps/updatenotification/appinfo/info.xml b/apps/updatenotification/appinfo/info.xml index 08043827370..4070e90f221 100644 --- a/apps/updatenotification/appinfo/info.xml +++ b/apps/updatenotification/appinfo/info.xml @@ -5,7 +5,7 @@ <description>Displays update notifications for ownCloud and provides the SSO for the updater.</description> <licence>AGPL</licence> <author>Lukas Reschke</author> - <version>1.0.0</version> + <version>1.1.0</version> <namespace>UpdateNotification</namespace> <default_enable/> <dependencies> diff --git a/apps/updatenotification/l10n/cs_CZ.js b/apps/updatenotification/l10n/cs_CZ.js index 37fef1c73f9..56dcfdd7aee 100644 --- a/apps/updatenotification/l10n/cs_CZ.js +++ b/apps/updatenotification/l10n/cs_CZ.js @@ -15,6 +15,7 @@ OC.L10N.register( "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Vždy můžete aktualizovat na novější verzi / experimentální kanál. Poté ale nelze nikdy provést downgrade zpět na nižší stabilní kanál.", "Notify members of the following groups about available updates:" : "Upozorňovat členy následujících skupin na dostupné aktualizace:", "Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.", "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru." }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/updatenotification/l10n/cs_CZ.json b/apps/updatenotification/l10n/cs_CZ.json index 29f2c9a027c..3f93f490446 100644 --- a/apps/updatenotification/l10n/cs_CZ.json +++ b/apps/updatenotification/l10n/cs_CZ.json @@ -13,6 +13,7 @@ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Vždy můžete aktualizovat na novější verzi / experimentální kanál. Poté ale nelze nikdy provést downgrade zpět na nižší stabilní kanál.", "Notify members of the following groups about available updates:" : "Upozorňovat členy následujících skupin na dostupné aktualizace:", "Only notification for app updates are available." : "Je možné pouze upozornění na dostupné aktualizace aplikací.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Zvolený kanál aktualizací označuje dedikovaná upozornění pro server za zastaralá.", "The selected update channel does not support updates of the server." : "Vybraný kanál aktualizací nepodporuje aktualizace serveru." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/de.js b/apps/updatenotification/l10n/de.js index a4d7b3062fd..331993c2cb4 100644 --- a/apps/updatenotification/l10n/de.js +++ b/apps/updatenotification/l10n/de.js @@ -10,7 +10,7 @@ OC.L10N.register( "A new version is available: %s" : "Eine neue Version ist verfügbar: %s", "Open updater" : "Updater aufrufen", "Your version is up to date." : "Deine Version ist aktuell.", - "Checked on %s" : "Geprüft auf %s", + "Checked on %s" : "Geprüft am %s", "Update channel:" : "Update-Kanal:", "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Es kann immer auf eine neuere Version / experimentellen Kanal aktualisiert werden. Allerdings kann kein Downgrade auf einen stabileren Kanal durchgeführt werden.", "Notify members of the following groups about available updates:" : "Informiere die Mitglieder der folgenden Gruppen über verfügbare Updates:", diff --git a/apps/updatenotification/l10n/de.json b/apps/updatenotification/l10n/de.json index 73a8e89d1c1..18924aa14d6 100644 --- a/apps/updatenotification/l10n/de.json +++ b/apps/updatenotification/l10n/de.json @@ -8,7 +8,7 @@ "A new version is available: %s" : "Eine neue Version ist verfügbar: %s", "Open updater" : "Updater aufrufen", "Your version is up to date." : "Deine Version ist aktuell.", - "Checked on %s" : "Geprüft auf %s", + "Checked on %s" : "Geprüft am %s", "Update channel:" : "Update-Kanal:", "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Es kann immer auf eine neuere Version / experimentellen Kanal aktualisiert werden. Allerdings kann kein Downgrade auf einen stabileren Kanal durchgeführt werden.", "Notify members of the following groups about available updates:" : "Informiere die Mitglieder der folgenden Gruppen über verfügbare Updates:", diff --git a/apps/updatenotification/l10n/de_DE.js b/apps/updatenotification/l10n/de_DE.js index 332f31cea33..0c20537b338 100644 --- a/apps/updatenotification/l10n/de_DE.js +++ b/apps/updatenotification/l10n/de_DE.js @@ -10,7 +10,7 @@ OC.L10N.register( "A new version is available: %s" : "Eine neue Version ist verfügbar: %s", "Open updater" : "Updater aufrufen", "Your version is up to date." : "Ihre Version ist aktuell.", - "Checked on %s" : "Überprüft auf %s", + "Checked on %s" : "Überprüft am %s", "Update channel:" : "Update-Kanal:", "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Sie können immer auf eine neuere Version / experimentellen Kanal updaten, aber kein Downgrade auf einen stabileren Kanal durchführen.", "Notify members of the following groups about available updates:" : "Informieren Sie die Mitglieder der folgenden Gruppen über verfügbare Updates:", diff --git a/apps/updatenotification/l10n/de_DE.json b/apps/updatenotification/l10n/de_DE.json index 5dc8c420889..afce6689371 100644 --- a/apps/updatenotification/l10n/de_DE.json +++ b/apps/updatenotification/l10n/de_DE.json @@ -8,7 +8,7 @@ "A new version is available: %s" : "Eine neue Version ist verfügbar: %s", "Open updater" : "Updater aufrufen", "Your version is up to date." : "Ihre Version ist aktuell.", - "Checked on %s" : "Überprüft auf %s", + "Checked on %s" : "Überprüft am %s", "Update channel:" : "Update-Kanal:", "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Sie können immer auf eine neuere Version / experimentellen Kanal updaten, aber kein Downgrade auf einen stabileren Kanal durchführen.", "Notify members of the following groups about available updates:" : "Informieren Sie die Mitglieder der folgenden Gruppen über verfügbare Updates:", diff --git a/apps/updatenotification/l10n/id.js b/apps/updatenotification/l10n/id.js index f328e4641e6..7d420dd49a6 100644 --- a/apps/updatenotification/l10n/id.js +++ b/apps/updatenotification/l10n/id.js @@ -1,10 +1,21 @@ OC.L10N.register( "updatenotification", { + "Update notifications" : "Perbarui pemberitahuan", "{version} is available. Get more information on how to update." : "{version} tersedia. Dapatkan informasi lebih lanjut cara memperbaruinya.", + "Updated channel" : "Kanal diperbarui", + "Nextcloud core" : "Nextcloud core", + "Update for %1$s to version %2$s is available." : "Pembaruan untuk %1$s ke versi %2$s tersedia.", "Updater" : "Pengupdate", "A new version is available: %s" : "Versi baru tersedia: %s", + "Open updater" : "Buka pembaruan", + "Your version is up to date." : "Versi Anda saat ini adalah yang terbaru.", + "Checked on %s" : "Dicek pada %s", "Update channel:" : "Saluran update:", - "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Anda dapat memperbarui ke versi yang lebih baru / saluran percobaan. Namun Anda tidak dapat menurunkan ke saluran stabil." + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Anda dapat memperbarui ke versi yang lebih baru / saluran percobaan. Namun Anda tidak dapat menurunkan ke saluran stabil.", + "Notify members of the following groups about available updates:" : "Beritahu anggota grup tentang pembaruan yang tersedia:", + "Only notification for app updates are available." : "Hanya pemberitahuan untuk pembaruan aplikasi tersedia.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Kanal pembaruan yang terpilih membuat pemberitahuan terdedikasi untuk server usang.", + "The selected update channel does not support updates of the server." : "Kanal pembaruan yang terpilih tidak mendukung pembaruan server." }, "nplurals=1; plural=0;"); diff --git a/apps/updatenotification/l10n/id.json b/apps/updatenotification/l10n/id.json index c3ba9eb7a3f..64fc3bedf99 100644 --- a/apps/updatenotification/l10n/id.json +++ b/apps/updatenotification/l10n/id.json @@ -1,8 +1,19 @@ { "translations": { + "Update notifications" : "Perbarui pemberitahuan", "{version} is available. Get more information on how to update." : "{version} tersedia. Dapatkan informasi lebih lanjut cara memperbaruinya.", + "Updated channel" : "Kanal diperbarui", + "Nextcloud core" : "Nextcloud core", + "Update for %1$s to version %2$s is available." : "Pembaruan untuk %1$s ke versi %2$s tersedia.", "Updater" : "Pengupdate", "A new version is available: %s" : "Versi baru tersedia: %s", + "Open updater" : "Buka pembaruan", + "Your version is up to date." : "Versi Anda saat ini adalah yang terbaru.", + "Checked on %s" : "Dicek pada %s", "Update channel:" : "Saluran update:", - "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Anda dapat memperbarui ke versi yang lebih baru / saluran percobaan. Namun Anda tidak dapat menurunkan ke saluran stabil." + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Anda dapat memperbarui ke versi yang lebih baru / saluran percobaan. Namun Anda tidak dapat menurunkan ke saluran stabil.", + "Notify members of the following groups about available updates:" : "Beritahu anggota grup tentang pembaruan yang tersedia:", + "Only notification for app updates are available." : "Hanya pemberitahuan untuk pembaruan aplikasi tersedia.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Kanal pembaruan yang terpilih membuat pemberitahuan terdedikasi untuk server usang.", + "The selected update channel does not support updates of the server." : "Kanal pembaruan yang terpilih tidak mendukung pembaruan server." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/is.js b/apps/updatenotification/l10n/is.js index a2bd2757d97..c1961755c78 100644 --- a/apps/updatenotification/l10n/is.js +++ b/apps/updatenotification/l10n/is.js @@ -1,14 +1,18 @@ OC.L10N.register( "updatenotification", { + "Update notifications" : "Tilkynningar um uppfærslu", "{version} is available. Get more information on how to update." : "{version} er í boði. Fáðu frekari upplýsingar um hvernig á að uppfæra.", "Updated channel" : "Uppfærði rás", + "Nextcloud core" : "Nextcloud kjarni", + "Update for %1$s to version %2$s is available." : "Upfærsla %1$s í útgáfu %2$s er tiltæk.", "Updater" : "Uppfærslustýring", "A new version is available: %s" : "Ný útgáfa er tiltæk: %s", "Open updater" : "Opna uppfærslustýringu", "Your version is up to date." : "Útgáfan þín er af nýjustu gerð.", "Checked on %s" : "Athugað þann %s", "Update channel:" : "Uppfærslurás:", - "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Þú getur alltaf uppfært í nýrri útgáfu eða tilraunaútgáfurás. En þú getur aldrei niðurfært í stöðugri rás." + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Þú getur alltaf uppfært í nýrri útgáfu eða tilraunaútgáfurás. En þú getur aldrei niðurfært í stöðugri rás.", + "Notify members of the following groups about available updates:" : "Tilkynna meðlimum eftirfarandi hópa um tiltækar uppfærslur:" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/updatenotification/l10n/is.json b/apps/updatenotification/l10n/is.json index 45df407065f..044131460fc 100644 --- a/apps/updatenotification/l10n/is.json +++ b/apps/updatenotification/l10n/is.json @@ -1,12 +1,16 @@ { "translations": { + "Update notifications" : "Tilkynningar um uppfærslu", "{version} is available. Get more information on how to update." : "{version} er í boði. Fáðu frekari upplýsingar um hvernig á að uppfæra.", "Updated channel" : "Uppfærði rás", + "Nextcloud core" : "Nextcloud kjarni", + "Update for %1$s to version %2$s is available." : "Upfærsla %1$s í útgáfu %2$s er tiltæk.", "Updater" : "Uppfærslustýring", "A new version is available: %s" : "Ný útgáfa er tiltæk: %s", "Open updater" : "Opna uppfærslustýringu", "Your version is up to date." : "Útgáfan þín er af nýjustu gerð.", "Checked on %s" : "Athugað þann %s", "Update channel:" : "Uppfærslurás:", - "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Þú getur alltaf uppfært í nýrri útgáfu eða tilraunaútgáfurás. En þú getur aldrei niðurfært í stöðugri rás." + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Þú getur alltaf uppfært í nýrri útgáfu eða tilraunaútgáfurás. En þú getur aldrei niðurfært í stöðugri rás.", + "Notify members of the following groups about available updates:" : "Tilkynna meðlimum eftirfarandi hópa um tiltækar uppfærslur:" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/updatenotification/l10n/tr.js b/apps/updatenotification/l10n/tr.js index aa4ec123f96..eb0a2558cb1 100644 --- a/apps/updatenotification/l10n/tr.js +++ b/apps/updatenotification/l10n/tr.js @@ -1,14 +1,21 @@ OC.L10N.register( "updatenotification", { + "Update notifications" : "Bildirimleri güncelle", "{version} is available. Get more information on how to update." : "Sürüm {version} hazır. Nasıl güncelleyeceğinizle ilgili daha fazla bilgi alın.", "Updated channel" : "Kanal güncellendi", + "Nextcloud core" : "Nextcloud çekirdeği", + "Update for %1$s to version %2$s is available." : "%1$s sürümünden %2$s sürümüne güncelleme mevcut.", "Updater" : "Güncelleyici", "A new version is available: %s" : "Yeni bir sürüm mevcut: %s", "Open updater" : "Güncelleyiciyi aç", "Your version is up to date." : "Sürümünüz güncel.", "Checked on %s" : "Son denetlenme: %s", "Update channel:" : "Güncelleme kanalı:", - "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Her zaman yeni / deneysel bir sürüme güncelleyebilirsiniz, ancak daha düşük bir kararlı sürüme düşüremezsiniz." + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Her zaman yeni / deneysel bir sürüme güncelleyebilirsiniz, ancak daha düşük bir kararlı sürüme düşüremezsiniz.", + "Notify members of the following groups about available updates:" : "Aşağıdaki grupların üyelerini mevcut güncellelemeler hakkında bilgilendir:", + "Only notification for app updates are available." : "Sadece uygulama bildirim güncellemeleri var.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Seçilen güncelleme kanalı sunucusnun eski olduğu bildirimine sahip.", + "The selected update channel does not support updates of the server." : "Seçilen güncelleme nakalı sunucunun güncellemelerini desteklemiyor." }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/updatenotification/l10n/tr.json b/apps/updatenotification/l10n/tr.json index 6c1514e659a..566771e3795 100644 --- a/apps/updatenotification/l10n/tr.json +++ b/apps/updatenotification/l10n/tr.json @@ -1,12 +1,19 @@ { "translations": { + "Update notifications" : "Bildirimleri güncelle", "{version} is available. Get more information on how to update." : "Sürüm {version} hazır. Nasıl güncelleyeceğinizle ilgili daha fazla bilgi alın.", "Updated channel" : "Kanal güncellendi", + "Nextcloud core" : "Nextcloud çekirdeği", + "Update for %1$s to version %2$s is available." : "%1$s sürümünden %2$s sürümüne güncelleme mevcut.", "Updater" : "Güncelleyici", "A new version is available: %s" : "Yeni bir sürüm mevcut: %s", "Open updater" : "Güncelleyiciyi aç", "Your version is up to date." : "Sürümünüz güncel.", "Checked on %s" : "Son denetlenme: %s", "Update channel:" : "Güncelleme kanalı:", - "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Her zaman yeni / deneysel bir sürüme güncelleyebilirsiniz, ancak daha düşük bir kararlı sürüme düşüremezsiniz." + "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Her zaman yeni / deneysel bir sürüme güncelleyebilirsiniz, ancak daha düşük bir kararlı sürüme düşüremezsiniz.", + "Notify members of the following groups about available updates:" : "Aşağıdaki grupların üyelerini mevcut güncellelemeler hakkında bilgilendir:", + "Only notification for app updates are available." : "Sadece uygulama bildirim güncellemeleri var.", + "The selected update channel makes dedicated notifications for the server obsolete." : "Seçilen güncelleme kanalı sunucusnun eski olduğu bildirimine sahip.", + "The selected update channel does not support updates of the server." : "Seçilen güncelleme nakalı sunucunun güncellemelerini desteklemiyor." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php index 6581e8453bd..f73e11d3e21 100644 --- a/apps/user_ldap/ajax/testConfiguration.php +++ b/apps/user_ldap/ajax/testConfiguration.php @@ -39,6 +39,13 @@ $_POST['ldap_configuration_active'] = 1; try { if ($connection->setConfiguration($_POST)) { + /* + * Clossing the session since it won't be used from this point on. There might be a potential + * race condition if a second request is made: either this request or the other might not + * contact the LDAP backup server the first time when it should, but there shouldn't be any + * problem with that other than the extra connection. + */ + \OC::$server->getSession()->close(); //Configuration is okay if ($connection->bind()) { /* diff --git a/apps/user_ldap/ajax/wizard.php b/apps/user_ldap/ajax/wizard.php index b5eab90af48..654fb70ced5 100644 --- a/apps/user_ldap/ajax/wizard.php +++ b/apps/user_ldap/ajax/wizard.php @@ -60,7 +60,7 @@ $userManager = new \OCA\User_LDAP\User\Manager( \OC::$server->getDatabaseConnection(), \OC::$server->getUserManager()); -$access = new \OCA\User_LDAP\Access($con, $ldapWrapper, $userManager); +$access = new \OCA\User_LDAP\Access($con, $ldapWrapper, $userManager, new \OCA\User_LDAP\Helper()); $wizard = new \OCA\User_LDAP\Wizard($configuration, $ldapWrapper, $access); diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php index 18987614bdb..10cc003a3f5 100644 --- a/apps/user_ldap/appinfo/app.php +++ b/apps/user_ldap/appinfo/app.php @@ -44,7 +44,7 @@ if(count($configPrefixes) === 1) { \OC::$server->getUserManager() ); $connector = new OCA\User_LDAP\Connection($ldapWrapper, $configPrefixes[0]); - $ldapAccess = new OCA\User_LDAP\Access($connector, $ldapWrapper, $userManager); + $ldapAccess = new OCA\User_LDAP\Access($connector, $ldapWrapper, $userManager, $helper); $ldapAccess->setUserMapper(new OCA\User_LDAP\Mapping\UserMapping($dbc)); $ldapAccess->setGroupMapper(new OCA\User_LDAP\Mapping\GroupMapping($dbc)); diff --git a/apps/user_ldap/appinfo/info.xml b/apps/user_ldap/appinfo/info.xml index b3141ec0c76..b0984dcf624 100644 --- a/apps/user_ldap/appinfo/info.xml +++ b/apps/user_ldap/appinfo/info.xml @@ -9,7 +9,7 @@ A user logs into ownCloud with their LDAP or AD credentials, and is granted acce </description> <licence>AGPL</licence> <author>Dominik Schmidt and Arthur Schiwon</author> - <version>1.0.0</version> + <version>1.1.0</version> <types> <authentication/> </types> diff --git a/apps/user_ldap/appinfo/install.php b/apps/user_ldap/appinfo/install.php index b3c92b0024a..c16a1f4a039 100644 --- a/apps/user_ldap/appinfo/install.php +++ b/apps/user_ldap/appinfo/install.php @@ -4,6 +4,7 @@ * * @author Arthur Schiwon <blizzz@arthur-schiwon.de> * @author Christopher Schäpers <kondou@ts.unde.re> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -24,3 +25,6 @@ $state = OCP\Config::getSystemValue('ldapIgnoreNamingRules', 'doSet'); if($state === 'doSet') { OCP\Config::setSystemValue('ldapIgnoreNamingRules', false); } + +$helper = new \OCA\User_LDAP\Helper(); +$helper->setLDAPProvider(); diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php new file mode 100644 index 00000000000..3c9745338e6 --- /dev/null +++ b/apps/user_ldap/appinfo/update.php @@ -0,0 +1,24 @@ +<?php +/** + * + * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +$helper = new \OCA\User_LDAP\Helper(); +$helper->setLDAPProvider(); diff --git a/apps/user_ldap/l10n/el.js b/apps/user_ldap/l10n/el.js index a1076031199..3157958092e 100644 --- a/apps/user_ldap/l10n/el.js +++ b/apps/user_ldap/l10n/el.js @@ -13,6 +13,7 @@ OC.L10N.register( " Could not set configuration %s" : "Αδυναμία ρύθμισης %s", "Action does not exist" : "Η ενέργεια δεν υπάρχει", "The Base DN appears to be wrong" : "Το Base DN φαίνεται να είναι εσφαλμένο", + "Testing configuration…" : "Γίνεται δοκιμή ρυθμίσεων...", "Configuration incorrect" : "Η διαμόρφωση είναι λανθασμένη", "Configuration incomplete" : "Η διαμόρφωση είναι ελλιπής", "Configuration OK" : "Η διαμόρφωση είναι εντάξει", diff --git a/apps/user_ldap/l10n/el.json b/apps/user_ldap/l10n/el.json index 07cb93ce931..81f8cb094b5 100644 --- a/apps/user_ldap/l10n/el.json +++ b/apps/user_ldap/l10n/el.json @@ -11,6 +11,7 @@ " Could not set configuration %s" : "Αδυναμία ρύθμισης %s", "Action does not exist" : "Η ενέργεια δεν υπάρχει", "The Base DN appears to be wrong" : "Το Base DN φαίνεται να είναι εσφαλμένο", + "Testing configuration…" : "Γίνεται δοκιμή ρυθμίσεων...", "Configuration incorrect" : "Η διαμόρφωση είναι λανθασμένη", "Configuration incomplete" : "Η διαμόρφωση είναι ελλιπής", "Configuration OK" : "Η διαμόρφωση είναι εντάξει", diff --git a/apps/user_ldap/l10n/id.js b/apps/user_ldap/l10n/id.js index 10192553f2f..41bddd33847 100644 --- a/apps/user_ldap/l10n/id.js +++ b/apps/user_ldap/l10n/id.js @@ -13,6 +13,7 @@ OC.L10N.register( " Could not set configuration %s" : "Tidak dapat menyetel konfigurasi %s", "Action does not exist" : "Tidak ada tindakan", "The Base DN appears to be wrong" : "Base DN tampaknya salah", + "Testing configuration…" : "Menguji konfigurasi...", "Configuration incorrect" : "Konfigurasi salah", "Configuration incomplete" : "Konfigurasi tidak lengkap", "Configuration OK" : "Konfigurasi Oke", @@ -24,6 +25,7 @@ OC.L10N.register( "Could not detect Base DN, please enter it manually." : "Tidak dapat mendeteksi Base DN, mohon masukkan secara manual.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "Tidak ada obyek ditemukan di Base DN yang diberikan. Mohon diperiksa kembali.", + "More than 1,000 directory entries available." : "Lebih dari 1000 entri direktori tersedia.", " entries available within the provided Base DN" : "entri tersedia didalam Base DN yang diberikan", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Terjadi kesalahan. Silakan periksa Base DN, serta pengaturan sambungan dan kredensial.", "Do you really want to delete the current Server Configuration?" : "Apakan Anda ingin menghapus Konfigurasi Server saat ini?", @@ -94,6 +96,7 @@ OC.L10N.register( "Test Base DN" : "Uji Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Mencegah permintaan LDAP otomatis. Berguna untuk setelan yang lebih besar, tapi memerlukan beberapa pengetahuan LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Masukkan penyaring LDAP secara manual (direkomendasikan untuk direktori yang besar)", + "%s access is limited to users meeting these criteria:" : "Akses %s terbatas bagi pengguna yang memenuhi kriteria:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Kelas obyek yang umum untuk pengguna adalah organizationalPerson, person, user, dan inetOrgPerson. Jika Anda tidak yakin kelas obyek mana yang akan dipilih, silakan konsultasi dengan admin direktori Anda.", "The filter specifies which LDAP users shall have access to the %s instance." : "Penyaring menentukan pengguna LDAP mana yang memiliki akses ke %s.", "Verify settings and count users" : "Verifikasi setelan dan jumlah pengguna", @@ -120,6 +123,8 @@ OC.L10N.register( "Directory Settings" : "Pengaturan Direktori", "User Display Name Field" : "Bidang Tampilan Nama Pengguna", "The LDAP attribute to use to generate the user's display name." : "Atribut LDAP digunakan untuk menghasilkan nama tampilan pengguna.", + "2nd User Display Name Field" : "Bidang Tampilan Nama Pengguna Kedua", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opsional. Atribut LDAP bisa ditambahkan ke nama tampilan dalam tanda kurung. Hasil dalam cth. »John Doe (john.doe@example.org)«.", "Base User Tree" : "Base User Tree", "One User Base DN per line" : "Satu Pengguna Base DN per baris", "User Search Attributes" : "Atribut Pencarian Pengguna", @@ -130,6 +135,8 @@ OC.L10N.register( "One Group Base DN per line" : "Satu Grup Base DN per baris", "Group Search Attributes" : "Atribut Pencarian Grup", "Group-Member association" : "Asosiasi Anggota-Grup", + "Dynamic Group Member URL" : "URL Member Grup Dinamis", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Atribut LDAP dalam objek grup mengandung URL pencarian LDAP yang menentukan apa objek yang dimiliki grup. (Pengaturan kosong menonaktifkan fungsi keanggoaan grup dinamis.)", "Nested Groups" : "Grup Bersarang", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ketika dihidupkan, grup yang berisi grup akan didukung. (Hanya bekerja jika atribut anggota grup berisi DN.)", "Paging chunksize" : "Paging chunksize", @@ -142,6 +149,7 @@ OC.L10N.register( "User Home Folder Naming Rule" : "Aturan Penamaan Folder Home Pengguna", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Biarkan nama pengguna kosong (default). Atau tetapkan atribut LDAP/AD.", "Internal Username" : "Nama Pengguna Internal", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Secara bawaan nama pengguna internal akan dibuat dari atribut UUID. Hal ini memastikan bahwa nama yang unik dan karakter tidak perlu dikonversi. Nama pengguna internal yang memiliki batasan bahwa hanya karakter ini diperbolehkan: [ a-zA-Z0-9_.@- ]. Karakter lain yang diganti dengan korespondensi ASCII mereka atau hanya dihilangkan. Pada tabrakan nomor akan ditambahkan / meningkat. Nama pengguna internal digunakan untuk mengidentifikasi pengguna internal. Itu juga merupakan nama bawaan untuk folder pengguna rumah. Ini juga merupakan bagian dari URL remote, misalnya instansi untuk semua layanan *DAV. Dengan pengaturan ini, perilaku bawaan dapat diganti. Biarkan kosong untuk perilaku bawaan. Perubahan hanya akan berpengaruh pada baru dipetakan (ditambahkan) pengguna LDAP.", "Internal Username Attribute:" : "Atribut Nama Pengguna Internal:", "Override UUID detection" : "Timpa deteksi UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Secara default, atribut UUID akan secara otomatis terdeteksi. Atribut UUID ini digunakan untuk mengidentifikasi pengguna dan grup LDAP yang diragukan. Nama pengguna internal juga akan dibuat berdasarkan UUID jika belum ditetapkan di atas. Anda dapat mengganti pengaturan dan meluluskan atribut pilihan Anda. Anda harus memastikan bahwa atribut pilihan Anda dapat diambil untuk pengguna dan grup, serta haruslah unik. Biarkan kosong untuk perilaku default. Perubahan akan berpengaruh hanya pada pengguna dan grup LDAP yang baru dipetakan (ditambahkan).", diff --git a/apps/user_ldap/l10n/id.json b/apps/user_ldap/l10n/id.json index 641f53d7b14..d18d62a716d 100644 --- a/apps/user_ldap/l10n/id.json +++ b/apps/user_ldap/l10n/id.json @@ -11,6 +11,7 @@ " Could not set configuration %s" : "Tidak dapat menyetel konfigurasi %s", "Action does not exist" : "Tidak ada tindakan", "The Base DN appears to be wrong" : "Base DN tampaknya salah", + "Testing configuration…" : "Menguji konfigurasi...", "Configuration incorrect" : "Konfigurasi salah", "Configuration incomplete" : "Konfigurasi tidak lengkap", "Configuration OK" : "Konfigurasi Oke", @@ -22,6 +23,7 @@ "Could not detect Base DN, please enter it manually." : "Tidak dapat mendeteksi Base DN, mohon masukkan secara manual.", "{nthServer}. Server" : "{nthServer}. Server", "No object found in the given Base DN. Please revise." : "Tidak ada obyek ditemukan di Base DN yang diberikan. Mohon diperiksa kembali.", + "More than 1,000 directory entries available." : "Lebih dari 1000 entri direktori tersedia.", " entries available within the provided Base DN" : "entri tersedia didalam Base DN yang diberikan", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Terjadi kesalahan. Silakan periksa Base DN, serta pengaturan sambungan dan kredensial.", "Do you really want to delete the current Server Configuration?" : "Apakan Anda ingin menghapus Konfigurasi Server saat ini?", @@ -92,6 +94,7 @@ "Test Base DN" : "Uji Base DN", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Mencegah permintaan LDAP otomatis. Berguna untuk setelan yang lebih besar, tapi memerlukan beberapa pengetahuan LDAP.", "Manually enter LDAP filters (recommended for large directories)" : "Masukkan penyaring LDAP secara manual (direkomendasikan untuk direktori yang besar)", + "%s access is limited to users meeting these criteria:" : "Akses %s terbatas bagi pengguna yang memenuhi kriteria:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Kelas obyek yang umum untuk pengguna adalah organizationalPerson, person, user, dan inetOrgPerson. Jika Anda tidak yakin kelas obyek mana yang akan dipilih, silakan konsultasi dengan admin direktori Anda.", "The filter specifies which LDAP users shall have access to the %s instance." : "Penyaring menentukan pengguna LDAP mana yang memiliki akses ke %s.", "Verify settings and count users" : "Verifikasi setelan dan jumlah pengguna", @@ -118,6 +121,8 @@ "Directory Settings" : "Pengaturan Direktori", "User Display Name Field" : "Bidang Tampilan Nama Pengguna", "The LDAP attribute to use to generate the user's display name." : "Atribut LDAP digunakan untuk menghasilkan nama tampilan pengguna.", + "2nd User Display Name Field" : "Bidang Tampilan Nama Pengguna Kedua", + "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opsional. Atribut LDAP bisa ditambahkan ke nama tampilan dalam tanda kurung. Hasil dalam cth. »John Doe (john.doe@example.org)«.", "Base User Tree" : "Base User Tree", "One User Base DN per line" : "Satu Pengguna Base DN per baris", "User Search Attributes" : "Atribut Pencarian Pengguna", @@ -128,6 +133,8 @@ "One Group Base DN per line" : "Satu Grup Base DN per baris", "Group Search Attributes" : "Atribut Pencarian Grup", "Group-Member association" : "Asosiasi Anggota-Grup", + "Dynamic Group Member URL" : "URL Member Grup Dinamis", + "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Atribut LDAP dalam objek grup mengandung URL pencarian LDAP yang menentukan apa objek yang dimiliki grup. (Pengaturan kosong menonaktifkan fungsi keanggoaan grup dinamis.)", "Nested Groups" : "Grup Bersarang", "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Ketika dihidupkan, grup yang berisi grup akan didukung. (Hanya bekerja jika atribut anggota grup berisi DN.)", "Paging chunksize" : "Paging chunksize", @@ -140,6 +147,7 @@ "User Home Folder Naming Rule" : "Aturan Penamaan Folder Home Pengguna", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Biarkan nama pengguna kosong (default). Atau tetapkan atribut LDAP/AD.", "Internal Username" : "Nama Pengguna Internal", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Secara bawaan nama pengguna internal akan dibuat dari atribut UUID. Hal ini memastikan bahwa nama yang unik dan karakter tidak perlu dikonversi. Nama pengguna internal yang memiliki batasan bahwa hanya karakter ini diperbolehkan: [ a-zA-Z0-9_.@- ]. Karakter lain yang diganti dengan korespondensi ASCII mereka atau hanya dihilangkan. Pada tabrakan nomor akan ditambahkan / meningkat. Nama pengguna internal digunakan untuk mengidentifikasi pengguna internal. Itu juga merupakan nama bawaan untuk folder pengguna rumah. Ini juga merupakan bagian dari URL remote, misalnya instansi untuk semua layanan *DAV. Dengan pengaturan ini, perilaku bawaan dapat diganti. Biarkan kosong untuk perilaku bawaan. Perubahan hanya akan berpengaruh pada baru dipetakan (ditambahkan) pengguna LDAP.", "Internal Username Attribute:" : "Atribut Nama Pengguna Internal:", "Override UUID detection" : "Timpa deteksi UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Secara default, atribut UUID akan secara otomatis terdeteksi. Atribut UUID ini digunakan untuk mengidentifikasi pengguna dan grup LDAP yang diragukan. Nama pengguna internal juga akan dibuat berdasarkan UUID jika belum ditetapkan di atas. Anda dapat mengganti pengaturan dan meluluskan atribut pilihan Anda. Anda harus memastikan bahwa atribut pilihan Anda dapat diambil untuk pengguna dan grup, serta haruslah unik. Biarkan kosong untuk perilaku default. Perubahan akan berpengaruh hanya pada pengguna dan grup LDAP yang baru dipetakan (ditambahkan).", diff --git a/apps/user_ldap/l10n/nl.js b/apps/user_ldap/l10n/nl.js index 50526df73ea..f3af05d915a 100644 --- a/apps/user_ldap/l10n/nl.js +++ b/apps/user_ldap/l10n/nl.js @@ -28,11 +28,11 @@ OC.L10N.register( "More than 1,000 directory entries available." : "Meer dan 1000 directorynamen beschikbaar.", " entries available within the provided Base DN" : "accounts beschikbaar binnen de provider Basis DN", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Er trad een fout op. Controleer de Basis DN en de verbindingsinstellingen en inloggegevens.", - "Do you really want to delete the current Server Configuration?" : "Wilt u werkelijk de huidige Serverconfiguratie verwijderen?", + "Do you really want to delete the current Server Configuration?" : "Wilt je werkelijk de huidige Serverconfiguratie verwijderen?", "Confirm Deletion" : "Bevestig verwijderen", "Mappings cleared successfully!" : "Mappings succesvol schoongemaakt!", "Error while clearing the mappings." : "Fout bij opschonen mappings.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonieme bind is niet toegestaan. Geef een gebruikers DN en wachrwoord op.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonieme bind is niet toegestaan. Geef een gebruikers DN en wachtwoord op.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP operatie fout. Anonieme bind is misschien niet toegstaan.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Opslaan mislukt. Verifieer dat de database draait. Herlaad voordat je verder gaat.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Omschakelen van de modus schakelt automatische LDAP opvragingen in. Afhankelijk van je LDAP omvang kan dat even duren. Wil je nog steeds omschakelen?", @@ -97,7 +97,7 @@ OC.L10N.register( "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Voorkom automatische LDAP opvragingen. Weliswaar beter voor grote installaties, maar vergt LDAP kennis.", "Manually enter LDAP filters (recommended for large directories)" : "Handmatig invoeren LDAP filters (aanbevolen voor grote directories)", "%s access is limited to users meeting these criteria:" : "%s toegang is beperkt tot gebruikers die voldoen aan deze criteria:", - "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De meest gebruikeliujke objectklassen voor gebruikers zijn organizationalPerson, persoon, gebruiker, en inetOrgPerson. Als u niet zeker weet welke objectklasse moet worden geselecteerd, raadpleeg dan uw directorybeheerder.", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De meest gebruikelijke objectklassen voor gebruikers zijn organizationalPerson, persoon, gebruiker, en inetOrgPerson. Als je niet zeker weet welke objectklasse moet worden geselecteerd, raadpleeg dan je directorybeheerder.", "The filter specifies which LDAP users shall have access to the %s instance." : "Dit filter geeft aan welke LDAP gebruikers toegang hebben tot %s.", "Verify settings and count users" : "Verifiëren instellingen en tellen gebruikers", "Saving" : "Opslaan", @@ -106,8 +106,8 @@ OC.L10N.register( "LDAP" : "LDAP", "Expert" : "Expert", "Advanced" : "Geavanceerd", - "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Waarschuwing:</b> De Apps user_ldap en user_webdavauth zijn incompatible. U kunt onverwacht gedrag ervaren. Vraag uw beheerder om een van beide apps de deactiveren.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Waarschuwing:</b> De PHP LDAP module is niet geïnstalleerd, het backend zal niet werken. Vraag uw systeembeheerder om de module te installeren.", + "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Waarschuwing:</b> De Apps user_ldap en user_webdavauth zijn incompatible. Je kunt onverwacht gedrag ervaren. Vraag je beheerder om een van beide apps de deactiveren.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Waarschuwing:</b> De PHP LDAP module is niet geïnstalleerd, het backend zal niet werken. Vraag je systeembeheerder om de module te installeren.", "Connection Settings" : "Verbindingsinstellingen", "Configuration Active" : "Configuratie actief", "When unchecked, this configuration will be skipped." : "Als dit niet is ingeschakeld wordt deze configuratie overgeslagen.", @@ -117,7 +117,7 @@ OC.L10N.register( "Disable Main Server" : "Deactiveren hoofdserver", "Only connect to the replica server." : "Maak alleen een verbinding met de replica server.", "Turn off SSL certificate validation." : "Schakel SSL certificaat validatie uit.", - "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Niet aanbevolen, gebruik alleen om te testen! Als de connectie alleen werkt met deze optie, importeer dan het SSL-certificaat van de LDAP-server naar uw %s server.", + "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Niet aanbevolen, gebruik dit alleen om te testen! Als de verbinding alleen werkt met deze optie, importeer dan het SSL-certificaat van de LDAP-server naar jouw %s server.", "Cache Time-To-Live" : "Cache time-to-live", "in seconds. A change empties the cache." : "in seconden. Een verandering maakt de cache leeg.", "Directory Settings" : "Mapinstellingen", @@ -152,7 +152,7 @@ OC.L10N.register( "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standaard wordt de interne gebruikersnaam afgeleid van het UUID attribuut. dat zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft de beperking dat alleen deze tekens zijn toegestaan: [ a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun overeenkomstige ASCII-waarde of simpelweg weggelaten. Bij conflicten wordt een nummer toegevoegd/verhoogd. De interne gebruikersnaam wordt gebruikt om een gebruiker intern te identificeren. Het is ook de standaardnaam voor de thuis-map van de gebruiker. Het is ook onderdeel van de externe URLs, bijvoorbeeld voor alle *DAV services. Met deze instelling kan het standaardgedrag worden overschreven. Laat het leeg voor de standaardwerkwijze. Wijzigingen hebben alleen effect voor nieuw gekoppelde (toegevoegde) LDAP gebruikers.", "Internal Username Attribute:" : "Interne gebruikersnaam attribuut:", "Override UUID detection" : "Negeren UUID detectie", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Standaard herkent ownCloud het UUID-attribuut automatisch. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. U kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. U moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Standaard herkent ownCloud het UUID-attribuut automatisch. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. Je kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. Je moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", "UUID Attribute for Users:" : "UUID attribuut voor gebruikers:", "UUID Attribute for Groups:" : "UUID attribuut voor groepen:", "Username-LDAP User Mapping" : "Gebruikersnaam-LDAP gebruikers vertaling", diff --git a/apps/user_ldap/l10n/nl.json b/apps/user_ldap/l10n/nl.json index 56ebbfc7ba0..f50af5c44d3 100644 --- a/apps/user_ldap/l10n/nl.json +++ b/apps/user_ldap/l10n/nl.json @@ -26,11 +26,11 @@ "More than 1,000 directory entries available." : "Meer dan 1000 directorynamen beschikbaar.", " entries available within the provided Base DN" : "accounts beschikbaar binnen de provider Basis DN", "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Er trad een fout op. Controleer de Basis DN en de verbindingsinstellingen en inloggegevens.", - "Do you really want to delete the current Server Configuration?" : "Wilt u werkelijk de huidige Serverconfiguratie verwijderen?", + "Do you really want to delete the current Server Configuration?" : "Wilt je werkelijk de huidige Serverconfiguratie verwijderen?", "Confirm Deletion" : "Bevestig verwijderen", "Mappings cleared successfully!" : "Mappings succesvol schoongemaakt!", "Error while clearing the mappings." : "Fout bij opschonen mappings.", - "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonieme bind is niet toegestaan. Geef een gebruikers DN en wachrwoord op.", + "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonieme bind is niet toegestaan. Geef een gebruikers DN en wachtwoord op.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP operatie fout. Anonieme bind is misschien niet toegstaan.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Opslaan mislukt. Verifieer dat de database draait. Herlaad voordat je verder gaat.", "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Omschakelen van de modus schakelt automatische LDAP opvragingen in. Afhankelijk van je LDAP omvang kan dat even duren. Wil je nog steeds omschakelen?", @@ -95,7 +95,7 @@ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Voorkom automatische LDAP opvragingen. Weliswaar beter voor grote installaties, maar vergt LDAP kennis.", "Manually enter LDAP filters (recommended for large directories)" : "Handmatig invoeren LDAP filters (aanbevolen voor grote directories)", "%s access is limited to users meeting these criteria:" : "%s toegang is beperkt tot gebruikers die voldoen aan deze criteria:", - "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De meest gebruikeliujke objectklassen voor gebruikers zijn organizationalPerson, persoon, gebruiker, en inetOrgPerson. Als u niet zeker weet welke objectklasse moet worden geselecteerd, raadpleeg dan uw directorybeheerder.", + "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De meest gebruikelijke objectklassen voor gebruikers zijn organizationalPerson, persoon, gebruiker, en inetOrgPerson. Als je niet zeker weet welke objectklasse moet worden geselecteerd, raadpleeg dan je directorybeheerder.", "The filter specifies which LDAP users shall have access to the %s instance." : "Dit filter geeft aan welke LDAP gebruikers toegang hebben tot %s.", "Verify settings and count users" : "Verifiëren instellingen en tellen gebruikers", "Saving" : "Opslaan", @@ -104,8 +104,8 @@ "LDAP" : "LDAP", "Expert" : "Expert", "Advanced" : "Geavanceerd", - "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Waarschuwing:</b> De Apps user_ldap en user_webdavauth zijn incompatible. U kunt onverwacht gedrag ervaren. Vraag uw beheerder om een van beide apps de deactiveren.", - "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Waarschuwing:</b> De PHP LDAP module is niet geïnstalleerd, het backend zal niet werken. Vraag uw systeembeheerder om de module te installeren.", + "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>Waarschuwing:</b> De Apps user_ldap en user_webdavauth zijn incompatible. Je kunt onverwacht gedrag ervaren. Vraag je beheerder om een van beide apps de deactiveren.", + "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Waarschuwing:</b> De PHP LDAP module is niet geïnstalleerd, het backend zal niet werken. Vraag je systeembeheerder om de module te installeren.", "Connection Settings" : "Verbindingsinstellingen", "Configuration Active" : "Configuratie actief", "When unchecked, this configuration will be skipped." : "Als dit niet is ingeschakeld wordt deze configuratie overgeslagen.", @@ -115,7 +115,7 @@ "Disable Main Server" : "Deactiveren hoofdserver", "Only connect to the replica server." : "Maak alleen een verbinding met de replica server.", "Turn off SSL certificate validation." : "Schakel SSL certificaat validatie uit.", - "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Niet aanbevolen, gebruik alleen om te testen! Als de connectie alleen werkt met deze optie, importeer dan het SSL-certificaat van de LDAP-server naar uw %s server.", + "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "Niet aanbevolen, gebruik dit alleen om te testen! Als de verbinding alleen werkt met deze optie, importeer dan het SSL-certificaat van de LDAP-server naar jouw %s server.", "Cache Time-To-Live" : "Cache time-to-live", "in seconds. A change empties the cache." : "in seconden. Een verandering maakt de cache leeg.", "Directory Settings" : "Mapinstellingen", @@ -150,7 +150,7 @@ "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Standaard wordt de interne gebruikersnaam afgeleid van het UUID attribuut. dat zorgt ervoor dat de gebruikersnaam uniek is en dat tekens niet hoeven te worden geconverteerd. De interne gebruikersnaam heeft de beperking dat alleen deze tekens zijn toegestaan: [ a-zA-Z0-9_.@- ]. Andere tekens worden vervangen door hun overeenkomstige ASCII-waarde of simpelweg weggelaten. Bij conflicten wordt een nummer toegevoegd/verhoogd. De interne gebruikersnaam wordt gebruikt om een gebruiker intern te identificeren. Het is ook de standaardnaam voor de thuis-map van de gebruiker. Het is ook onderdeel van de externe URLs, bijvoorbeeld voor alle *DAV services. Met deze instelling kan het standaardgedrag worden overschreven. Laat het leeg voor de standaardwerkwijze. Wijzigingen hebben alleen effect voor nieuw gekoppelde (toegevoegde) LDAP gebruikers.", "Internal Username Attribute:" : "Interne gebruikersnaam attribuut:", "Override UUID detection" : "Negeren UUID detectie", - "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Standaard herkent ownCloud het UUID-attribuut automatisch. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. U kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. U moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", + "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Standaard herkent ownCloud het UUID-attribuut automatisch. Het UUID attribuut wordt gebruikt om LDAP-gebruikers en -groepen uniek te identificeren. Ook zal de interne gebruikersnaam worden aangemaakt op basis van het UUID, tenzij deze hierboven anders is aangegeven. Je kunt de instelling overschrijven en zelf een waarde voor het attribuut opgeven. Je moet ervoor zorgen dat het ingestelde attribuut kan worden opgehaald voor zowel gebruikers als groepen en dat het uniek is. Laat het leeg voor standaard gedrag. Veranderingen worden alleen doorgevoerd op nieuw gekoppelde (toegevoegde) LDAP-gebruikers en-groepen.", "UUID Attribute for Users:" : "UUID attribuut voor gebruikers:", "UUID Attribute for Groups:" : "UUID attribuut voor groepen:", "Username-LDAP User Mapping" : "Gebruikersnaam-LDAP gebruikers vertaling", diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index cb34a610621..20430afdda1 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -149,6 +149,7 @@ OC.L10N.register( "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.", "Internal Username" : "Внутреннее имя пользователя", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Это даёт гарантию того, что имя пользователя уникально и символы не нужно конвертировать. Внутреннее имя пользователя имеет ограничение на то, что только эти символы допустимы: [ a-zA-Z0-9_.@- ]. Другие символы замещаются их корреспондирующими символами ASCII или же просто отбрасываются. При коллизиях добавляется или увеличивается номер. Внутреннее имя пользователя используется для идентификации пользователя внутри системы. Также это по умолчанию имя для домашней папки пользователя. Также это часть адресов URL, например для всех служб *DAV. С помощью этой установки, поведение по умолчанию может быть изменено. Оставьте его пустым для поведения по умолчанию. Изменения будут иметь эффект только для вновь спроецированных (добавленных) пользователей LDAP. ", "Internal Username Attribute:" : "Атрибут для внутреннего имени:", "Override UUID detection" : "Переопределить нахождение UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "По умолчанию ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно идентифицировать пользователей и группы LDAP. Также на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.", diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index 9e4c37624f1..24d26b613c9 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -147,6 +147,7 @@ "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.", "Internal Username" : "Внутреннее имя пользователя", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Это даёт гарантию того, что имя пользователя уникально и символы не нужно конвертировать. Внутреннее имя пользователя имеет ограничение на то, что только эти символы допустимы: [ a-zA-Z0-9_.@- ]. Другие символы замещаются их корреспондирующими символами ASCII или же просто отбрасываются. При коллизиях добавляется или увеличивается номер. Внутреннее имя пользователя используется для идентификации пользователя внутри системы. Также это по умолчанию имя для домашней папки пользователя. Также это часть адресов URL, например для всех служб *DAV. С помощью этой установки, поведение по умолчанию может быть изменено. Оставьте его пустым для поведения по умолчанию. Изменения будут иметь эффект только для вновь спроецированных (добавленных) пользователей LDAP. ", "Internal Username Attribute:" : "Атрибут для внутреннего имени:", "Override UUID detection" : "Переопределить нахождение UUID", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "По умолчанию ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно идентифицировать пользователей и группы LDAP. Также на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.", diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index dc7a7c66cab..9b319a1c6c8 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -96,6 +96,7 @@ OC.L10N.register( "Test Base DN" : "Base DN'i Sına", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Otomatik LDAP isteklerinden kaçın. Büyük kurulumlar için daha iyi ancak LDAP bilgisi gerektirir.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP filtrelerini el ile girin (büyük dizinler için önerilir)", + "%s access is limited to users meeting these criteria:" : "%s erişimi aşağıdaki kritere uyan kullanıcılara kısıtlanmıştır:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Kullanıcılar için en çok ortak nesne sınıfları organizationalPerson, person, user ve inetOrgPerson sınıflarıdır. Hangi nesne sınıfını seçeceğinizden emin değilseniz lütfen dizin yöneticinize danışın.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtre, %s örneğine erişmesi gereken LDAP kullanıcılarını belirtir.", "Verify settings and count users" : "Ayarları doğrula ve kullanıcıları say", @@ -148,6 +149,7 @@ OC.L10N.register( "User Home Folder Naming Rule" : "Kullanıcı Ana Dizini İsimlendirme Kuralı", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Kullanıcı adı bölümünü boş bırakın (öntanımlı). Aksi halde bir LDAP/AD özniteliği belirtin.", "Internal Username" : "Dahili Kullanıcı Adı", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Dahili kullanıcı adı varsayılan olarak UUID özelliklerinden oluşturulur. Böylece kullanıcı adının benzersiz olması ve dönüştürülecek karakter içermediğinden emin olunur. Dahili kullanıcı adının kısıtlaması sadece şu karakterleri içerebilmesidir: [ a-zA-Z0-9_.@- ]. Diğer karakterler ASCII karşılıklarına dönüştürülür veya basitçe yok sayılır. Çakışmalarda bir sayı eklenir. Dahili kullanıcı adı bir kullanıcıyı dahili olarak belirlemeye yarar. Aynı zamanda kullanıcı ev dizininin varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin *DAV servislerinin bir parçasıdır. Bu ayarla varsayılan davranışı değiştirebilirsiniz. Varsayılanı kullanmak için boş bırakın. Değişiklik sadece yeni oluşturulacak LDAP kullanıcılarını etkileyecektir.", "Internal Username Attribute:" : "Dahili Kullanıcı Adı Özniteliği:", "Override UUID detection" : "UUID tespitinin üzerine yaz", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Öntanımlı olarak, UUID niteliği otomatik olarak tespit edilmez. UUID niteliği LDAP kullanıcılarını ve gruplarını şüphesiz biçimde tanımlamak için kullanılır. Ayrıca yukarıda belirtilmemişse, bu UUID'ye bağlı olarak dahili bir kullanıcı adı oluşturulacaktır. Bu ayarın üzerine yazabilir ve istediğiniz bir nitelik belirtebilirsiniz. Ancak istediğiniz niteliğin benzersiz olduğundan ve hem kullanıcı hem de gruplar tarafından getirilebileceğinden emin olmalısınız. Öntanımlı davranış için boş bırakın. Değişiklikler sadece yeni eşleştirilen (eklenen) LDAP kullanıcı ve gruplarında etkili olacaktır.", diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index 20e4c306755..119b09968f8 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -94,6 +94,7 @@ "Test Base DN" : "Base DN'i Sına", "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Otomatik LDAP isteklerinden kaçın. Büyük kurulumlar için daha iyi ancak LDAP bilgisi gerektirir.", "Manually enter LDAP filters (recommended for large directories)" : "LDAP filtrelerini el ile girin (büyük dizinler için önerilir)", + "%s access is limited to users meeting these criteria:" : "%s erişimi aşağıdaki kritere uyan kullanıcılara kısıtlanmıştır:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "Kullanıcılar için en çok ortak nesne sınıfları organizationalPerson, person, user ve inetOrgPerson sınıflarıdır. Hangi nesne sınıfını seçeceğinizden emin değilseniz lütfen dizin yöneticinize danışın.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filtre, %s örneğine erişmesi gereken LDAP kullanıcılarını belirtir.", "Verify settings and count users" : "Ayarları doğrula ve kullanıcıları say", @@ -146,6 +147,7 @@ "User Home Folder Naming Rule" : "Kullanıcı Ana Dizini İsimlendirme Kuralı", "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Kullanıcı adı bölümünü boş bırakın (öntanımlı). Aksi halde bir LDAP/AD özniteliği belirtin.", "Internal Username" : "Dahili Kullanıcı Adı", + "By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "Dahili kullanıcı adı varsayılan olarak UUID özelliklerinden oluşturulur. Böylece kullanıcı adının benzersiz olması ve dönüştürülecek karakter içermediğinden emin olunur. Dahili kullanıcı adının kısıtlaması sadece şu karakterleri içerebilmesidir: [ a-zA-Z0-9_.@- ]. Diğer karakterler ASCII karşılıklarına dönüştürülür veya basitçe yok sayılır. Çakışmalarda bir sayı eklenir. Dahili kullanıcı adı bir kullanıcıyı dahili olarak belirlemeye yarar. Aynı zamanda kullanıcı ev dizininin varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin *DAV servislerinin bir parçasıdır. Bu ayarla varsayılan davranışı değiştirebilirsiniz. Varsayılanı kullanmak için boş bırakın. Değişiklik sadece yeni oluşturulacak LDAP kullanıcılarını etkileyecektir.", "Internal Username Attribute:" : "Dahili Kullanıcı Adı Özniteliği:", "Override UUID detection" : "UUID tespitinin üzerine yaz", "By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." : "Öntanımlı olarak, UUID niteliği otomatik olarak tespit edilmez. UUID niteliği LDAP kullanıcılarını ve gruplarını şüphesiz biçimde tanımlamak için kullanılır. Ayrıca yukarıda belirtilmemişse, bu UUID'ye bağlı olarak dahili bir kullanıcı adı oluşturulacaktır. Bu ayarın üzerine yazabilir ve istediğiniz bir nitelik belirtebilirsiniz. Ancak istediğiniz niteliğin benzersiz olduğundan ve hem kullanıcı hem de gruplar tarafından getirilebileceğinden emin olmalısınız. Öntanımlı davranış için boş bırakın. Değişiklikler sadece yeni eşleştirilen (eklenen) LDAP kullanıcı ve gruplarında etkili olacaktır.", diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index dabf243eda1..299ad581644 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -20,6 +20,7 @@ * @author Ralph Krimmel <rkrimme1@gwdg.de> * @author Renaud Fortier <Renaud.Fortier@fsaa.ulaval.ca> * @author Robin McCorkell <robin@mccorkell.me.uk> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -77,13 +78,19 @@ class Access extends LDAPUtility implements IUserTools { * @var AbstractMapping $userMapper */ protected $groupMapper; + + /** + * @var \OCA\User_LDAP\Helper + */ + private $helper; public function __construct(Connection $connection, ILDAPWrapper $ldap, - Manager $userManager) { + Manager $userManager, Helper $helper) { parent::__construct($ldap); $this->connection = $connection; $this->userManager = $userManager; $this->userManager->setLdapAccess($this); + $this->helper = $helper; } /** @@ -173,7 +180,7 @@ class Access extends LDAPUtility implements IUserTools { // (cf. #12306), 500 is default for paging and should work everywhere. $maxResults = $pagingSize > 20 ? $pagingSize : 500; $this->initPagedSearch($filter, array($dn), array($attr), $maxResults, 0); - $dn = $this->DNasBaseParameter($dn); + $dn = $this->helper->DNasBaseParameter($dn); $rr = @$this->ldap->read($cr, $dn, $filter, array($attr)); if(!$this->ldap->isResource($rr)) { if(!empty($attr)) { @@ -201,7 +208,7 @@ class Access extends LDAPUtility implements IUserTools { $values = array(); for($i=0;$i<$result[$attr]['count'];$i++) { if($this->resemblesDN($attr)) { - $values[] = $this->sanitizeDN($result[$attr][$i]); + $values[] = $this->helper->sanitizeDN($result[$attr][$i]); } elseif(strtolower($attr) === 'objectguid' || strtolower($attr) === 'guid') { $values[] = $this->convertObjectGUID2Str($result[$attr][$i]); } else { @@ -243,49 +250,6 @@ class Access extends LDAPUtility implements IUserTools { } /** - * sanitizes a DN received from the LDAP server - * @param array $dn the DN in question - * @return array the sanitized DN - */ - private function sanitizeDN($dn) { - //treating multiple base DNs - if(is_array($dn)) { - $result = array(); - foreach($dn as $singleDN) { - $result[] = $this->sanitizeDN($singleDN); - } - return $result; - } - - //OID sometimes gives back DNs with whitespace after the comma - // a la "uid=foo, cn=bar, dn=..." We need to tackle this! - $dn = preg_replace('/([^\\\]),(\s+)/u', '\1,', $dn); - - //make comparisons and everything work - $dn = mb_strtolower($dn, 'UTF-8'); - - //escape DN values according to RFC 2253 – this is already done by ldap_explode_dn - //to use the DN in search filters, \ needs to be escaped to \5c additionally - //to use them in bases, we convert them back to simple backslashes in readAttribute() - $replacements = array( - '\,' => '\5c2C', - '\=' => '\5c3D', - '\+' => '\5c2B', - '\<' => '\5c3C', - '\>' => '\5c3E', - '\;' => '\5c3B', - '\"' => '\5c22', - '\#' => '\5c23', - '(' => '\28', - ')' => '\29', - '*' => '\2A', - ); - $dn = str_replace(array_keys($replacements), array_values($replacements), $dn); - - return $dn; - } - - /** * returns a DN-string that is cleaned from not domain parts, e.g. * cn=foo,cn=bar,dc=foobar,dc=server,dc=org * becomes dc=foobar,dc=server,dc=org @@ -1071,10 +1035,10 @@ class Access extends LDAPUtility implements IUserTools { } if($key !== 'dn') { $selection[$i][$key] = $this->resemblesDN($key) ? - $this->sanitizeDN($item[$key]) + $this->helper->sanitizeDN($item[$key]) : $item[$key]; } else { - $selection[$i][$key] = [$this->sanitizeDN($item[$key])]; + $selection[$i][$key] = [$this->helper->sanitizeDN($item[$key])]; } } @@ -1298,7 +1262,7 @@ class Access extends LDAPUtility implements IUserTools { * @return bool */ public function areCredentialsValid($name, $password) { - $name = $this->DNasBaseParameter($name); + $name = $this->helper->DNasBaseParameter($name); $testConnection = clone $this->connection; $credentials = array( 'ldapAgentName' => $name, @@ -1570,15 +1534,6 @@ class Access extends LDAPUtility implements IUserTools { } /** - * converts a stored DN so it can be used as base parameter for LDAP queries, internally we store them for usage in LDAP filters - * @param string $dn the DN - * @return string - */ - private function DNasBaseParameter($dn) { - return str_ireplace('\\5c', '\\', $dn); - } - - /** * checks if the given DN is part of the given base DN(s) * @param string $dn the DN * @param string[] $bases array containing the allowed base DN or DNs @@ -1586,7 +1541,7 @@ class Access extends LDAPUtility implements IUserTools { */ public function isDNPartOfBase($dn, $bases) { $belongsToBase = false; - $bases = $this->sanitizeDN($bases); + $bases = $this->helper->sanitizeDN($bases); foreach($bases as $base) { $belongsToBase = true; diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index 7bd5e97e4f4..7fb26526195 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -11,6 +11,7 @@ * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> * @author Robin McCorkell <robin@mccorkell.me.uk> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -52,6 +53,8 @@ class Connection extends LDAPUtility { private $configID; private $configured = false; private $hasPagedResultSupport = true; + //whether connection should be kept on __destruct + private $dontDestruct = false; /** * @var bool runtime flag that indicates whether supported primary groups are available @@ -93,7 +96,7 @@ class Connection extends LDAPUtility { } public function __destruct() { - if($this->ldap->isResource($this->ldapConnectionRes)) { + if(!$this->dontDestruct && $this->ldap->isResource($this->ldapConnectionRes)) { @$this->ldap->unbind($this->ldapConnectionRes); }; } @@ -105,6 +108,7 @@ class Connection extends LDAPUtility { $this->configuration = new Configuration($this->configPrefix, !is_null($this->configID)); $this->ldapConnectionRes = null; + $this->dontDestruct = true; } /** diff --git a/apps/user_ldap/lib/Helper.php b/apps/user_ldap/lib/Helper.php index ccc1d2c0b44..90807a3c526 100644 --- a/apps/user_ldap/lib/Helper.php +++ b/apps/user_ldap/lib/Helper.php @@ -10,6 +10,7 @@ * @author Morris Jobke <hey@morrisjobke.de> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -183,6 +184,70 @@ class Helper { return $domain; } + + /** + * + * Set the LDAPProvider in the config + * + */ + public function setLDAPProvider() { + $current = \OC::$server->getConfig()->getSystemValue('ldapProviderFactory', null); + if(is_null($current)) { + \OC::$server->getConfig()->setSystemValue('ldapProviderFactory', '\\OCA\\User_LDAP\\LDAPProviderFactory'); + } + } + + /** + * sanitizes a DN received from the LDAP server + * @param array $dn the DN in question + * @return array the sanitized DN + */ + public function sanitizeDN($dn) { + //treating multiple base DNs + if(is_array($dn)) { + $result = array(); + foreach($dn as $singleDN) { + $result[] = $this->sanitizeDN($singleDN); + } + return $result; + } + + //OID sometimes gives back DNs with whitespace after the comma + // a la "uid=foo, cn=bar, dn=..." We need to tackle this! + $dn = preg_replace('/([^\\\]),(\s+)/u', '\1,', $dn); + + //make comparisons and everything work + $dn = mb_strtolower($dn, 'UTF-8'); + + //escape DN values according to RFC 2253 – this is already done by ldap_explode_dn + //to use the DN in search filters, \ needs to be escaped to \5c additionally + //to use them in bases, we convert them back to simple backslashes in readAttribute() + $replacements = array( + '\,' => '\5c2C', + '\=' => '\5c3D', + '\+' => '\5c2B', + '\<' => '\5c3C', + '\>' => '\5c3E', + '\;' => '\5c3B', + '\"' => '\5c22', + '\#' => '\5c23', + '(' => '\28', + ')' => '\29', + '*' => '\2A', + ); + $dn = str_replace(array_keys($replacements), array_values($replacements), $dn); + + return $dn; + } + + /** + * converts a stored DN so it can be used as base parameter for LDAP queries, internally we store them for usage in LDAP filters + * @param string $dn the DN + * @return string + */ + public function DNasBaseParameter($dn) { + return str_ireplace('\\5c', '\\', $dn); + } /** * listens to a hook thrown by server2server sharing and replaces the given diff --git a/apps/user_ldap/lib/IUserLDAP.php b/apps/user_ldap/lib/IUserLDAP.php new file mode 100644 index 00000000000..cb7d0138892 --- /dev/null +++ b/apps/user_ldap/lib/IUserLDAP.php @@ -0,0 +1,49 @@ +<?php +/** + * + * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP; + +interface IUserLDAP { + + //Functions used by LDAPProvider + + /** + * Return access for LDAP interaction. + * @param string $uid + * @return Access instance of Access for LDAP interaction + */ + public function getLDAPAccess($uid); + + /** + * Return a new LDAP connection for the specified user. + * @param string $uid + * @return resource of the LDAP connection + */ + public function getNewLDAPConnection($uid); + + /** + * Return the username for the given LDAP DN, if available. + * @param string $dn + * @return string|false with the username + */ + public function dn2UserName($dn); +} diff --git a/apps/user_ldap/lib/Jobs/UpdateGroups.php b/apps/user_ldap/lib/Jobs/UpdateGroups.php index 91d40d58742..047b95a6d9b 100644 --- a/apps/user_ldap/lib/Jobs/UpdateGroups.php +++ b/apps/user_ldap/lib/Jobs/UpdateGroups.php @@ -188,7 +188,7 @@ class UpdateGroups extends \OC\BackgroundJob\TimedJob { $dbc, \OC::$server->getUserManager()); $connector = new Connection($ldapWrapper, $configPrefixes[0]); - $ldapAccess = new Access($connector, $ldapWrapper, $userManager); + $ldapAccess = new Access($connector, $ldapWrapper, $userManager, $helper); $groupMapper = new GroupMapping($dbc); $userMapper = new UserMapping($dbc); $ldapAccess->setGroupMapper($groupMapper); diff --git a/apps/user_ldap/lib/LDAPProvider.php b/apps/user_ldap/lib/LDAPProvider.php new file mode 100644 index 00000000000..5bd6a0fd08c --- /dev/null +++ b/apps/user_ldap/lib/LDAPProvider.php @@ -0,0 +1,188 @@ +<?php +/** + * + * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP; + +use OCP\IUserBackend; +use OCP\LDAP\ILDAPProvider; +use OCP\LDAP\IDeletionFlagSupport; +use OCP\IServerContainer; +use OCA\User_LDAP\User\DeletedUsersIndex; +use OCA\User_LDAP\Mapping\UserMapping; + +/** + * LDAP provider for pulic access to the LDAP backend. + */ +class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { + + private $backend; + private $logger; + private $helper; + private $deletedUsersIndex; + + /** + * Create new LDAPProvider + * @param \OCP\IServerContainer $serverContainer + * @throws \Exception if user_ldap app was not enabled + */ + public function __construct(IServerContainer $serverContainer, Helper $helper, DeletedUsersIndex $deletedUsersIndex) { + $this->logger = $serverContainer->getLogger(); + $this->helper = $helper; + $this->deletedUsersIndex = $deletedUsersIndex; + foreach ($serverContainer->getUserManager()->getBackends() as $backend){ + $this->logger->debug('instance '.get_class($backend).' backend.', ['app' => 'user_ldap']); + if ($backend instanceof IUserLDAP) { + $this->backend = $backend; + return; + } + } + throw new \Exception('To use the LDAPProvider, user_ldap app must be enabled'); + } + + /** + * Translate an user id to LDAP DN + * @param string $uid user id + * @return string with the LDAP DN + * @throws \Exception if translation was unsuccessful + */ + public function getUserDN($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + $result = $this->backend->getLDAPAccess($uid)->username2dn($uid); + if(!$result){ + throw new \Exception('Translation to LDAP DN unsuccessful'); + } + return $result; + } + + /** + * Translate a LDAP DN to an internal user name. If there is no mapping between + * the DN and the user name, a new one will be created. + * @param string $dn LDAP DN + * @return string with the internal user name + * @throws \Exception if translation was unsuccessful + */ + public function getUserName($dn) { + $result = $this->backend->dn2UserName($dn); + if(!$result){ + throw new \Exception('Translation to internal user name unsuccessful'); + } + return $result; + } + + /** + * Convert a stored DN so it can be used as base parameter for LDAP queries. + * @param string $dn the DN in question + * @return string + */ + public function DNasBaseParameter($dn) { + return $this->helper->DNasBaseParameter($dn); + } + + /** + * Sanitize a DN received from the LDAP server. + * @param array $dn the DN in question + * @return array the sanitized DN + */ + public function sanitizeDN($dn) { + return $this->helper->sanitizeDN($dn); + } + + /** + * Return a new LDAP connection resource for the specified user. + * The connection must be closed manually. + * @param string $uid user id + * @return resource of the LDAP connection + * @throws \Exception if user id was not found in LDAP + */ + public function getLDAPConnection($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + return $this->backend->getNewLDAPConnection($uid); + } + + /** + * Get the LDAP base for users. + * @param string $uid user id + * @return string the base for users + * @throws \Exception if user id was not found in LDAP + */ + public function getLDAPBaseUsers($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + return $this->backend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_users']; + } + + /** + * Get the LDAP base for groups. + * @param string $uid user id + * @return string the base for groups + * @throws \Exception if user id was not found in LDAP + */ + public function getLDAPBaseGroups($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + return $this->backend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_groups']; + } + + /** + * Clear the cache if a cache is used, otherwise do nothing. + * @param string $uid user id + * @throws \Exception if user id was not found in LDAP + */ + public function clearCache($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + $this->backend->getLDAPAccess($uid)->getConnection()->clearCache(); + } + + /** + * Check whether a LDAP DN exists + * @param string $dn LDAP DN + * @return bool whether the DN exists + */ + public function dnExists($dn) { + $result = $this->backend->dn2UserName($dn); + return !$result ? false : true; + } + + /** + * Flag record for deletion. + * @param string $uid user id + */ + public function flagRecord($uid) { + $this->deletedUsersIndex->markUser($uid); + } + + /** + * Unflag record for deletion. + * @param string $uid user id + */ + public function unflagRecord($uid) { + //do nothing + } +} diff --git a/apps/user_ldap/lib/LDAPProviderFactory.php b/apps/user_ldap/lib/LDAPProviderFactory.php new file mode 100644 index 00000000000..528af001037 --- /dev/null +++ b/apps/user_ldap/lib/LDAPProviderFactory.php @@ -0,0 +1,59 @@ +<?php +/** + * + * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP; + +use OCP\LDAP\ILDAPProviderFactory; +use OCP\IServerContainer; +use OCA\User_LDAP\User\DeletedUsersIndex; +use OCA\User_LDAP\Mapping\UserMapping; + +class LDAPProviderFactory implements ILDAPProviderFactory { + /** + * Server container + * + * @var IServerContainer + */ + private $serverContainer; + + /** + * Constructor for the LDAP provider factory + * + * @param IServerContainer $serverContainer server container + */ + public function __construct(IServerContainer $serverContainer) { + $this->serverContainer = $serverContainer; + } + + /** + * creates and returns an instance of the ILDAPProvider + * + * @return OCP\LDAP\ILDAPProvider + */ + public function getLDAPProvider() { + $dbConnection = $this->serverContainer->getDatabaseConnection(); + $userMapping = new UserMapping($dbConnection); + return new LDAPProvider($this->serverContainer, new Helper(), + new DeletedUsersIndex($this->serverContainer->getConfig(), + $dbConnection, $userMapping)); + } +} diff --git a/apps/user_ldap/lib/Proxy.php b/apps/user_ldap/lib/Proxy.php index 07cc1ea0e8c..db1c761656f 100644 --- a/apps/user_ldap/lib/Proxy.php +++ b/apps/user_ldap/lib/Proxy.php @@ -77,7 +77,7 @@ abstract class Proxy { $userManager = new Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image(), $db, $coreUserManager); $connector = new Connection($this->ldap, $configPrefix); - $access = new Access($connector, $this->ldap, $userManager); + $access = new Access($connector, $this->ldap, $userManager, new Helper()); $access->setUserMapper($userMap); $access->setGroupMapper($groupMap); self::$accesses[$configPrefix] = $access; diff --git a/apps/user_ldap/lib/User/User.php b/apps/user_ldap/lib/User/User.php index 56d881c5d5a..3d247663b3f 100644 --- a/apps/user_ldap/lib/User/User.php +++ b/apps/user_ldap/lib/User/User.php @@ -435,7 +435,10 @@ class User { if(!is_null($email)) { $user = $this->userManager->get($this->uid); if (!is_null($user)) { - $user->setEMailAddress($email); + $currentEmail = $user->getEMailAddress(); + if ($currentEmail !== $email) { + $user->setEMailAddress($email); + } } } } diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index a2a65bb8406..ce1aafc210e 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -15,6 +15,7 @@ * @author Robin McCorkell <robin@mccorkell.me.uk> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Tom Needham <tom@owncloud.com> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -39,7 +40,7 @@ use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; use OCP\IConfig; -class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface { +class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP { /** @var string[] $homesToKill */ protected $homesToKill = array(); @@ -90,6 +91,16 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn return false; } } + + /** + * returns the username for the given LDAP DN, if available + * + * @param string $dn + * @return string|false with the username + */ + public function dn2UserName($dn) { + return $this->access->dn2username($dn); + } /** * returns an LDAP record based on a given login name @@ -384,8 +395,14 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn } $user = $this->access->userManager->get($uid); - $displayName = $user->composeAndStoreDisplayName($displayName, $displayName2); - $this->access->connection->writeToCache($cacheKey, $displayName); + if ($user instanceof User) { + $displayName = $user->composeAndStoreDisplayName($displayName, $displayName2); + $this->access->connection->writeToCache($cacheKey, $displayName); + } + if ($user instanceof OfflineUser) { + /** @var OfflineUser $user*/ + $displayName = $user->getDisplayName(); + } return $displayName; } @@ -462,5 +479,25 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn public function getBackendName(){ return 'LDAP'; } - + + /** + * Return access for LDAP interaction. + * @param string $uid + * @return Access instance of Access for LDAP interaction + */ + public function getLDAPAccess($uid) { + return $this->access; + } + + /** + * Return LDAP connection resource from a cloned connection. + * The cloned connection needs to be closed manually. + * of the current access. + * @param string $uid + * @return resource of the LDAP connection + */ + public function getNewLDAPConnection($uid) { + $connection = clone $this->access->getConnection(); + return $connection->getConnectionResource(); + } } diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php index c86d4f29ec4..cced469a7ae 100644 --- a/apps/user_ldap/lib/User_Proxy.php +++ b/apps/user_ldap/lib/User_Proxy.php @@ -9,6 +9,7 @@ * @author Morris Jobke <hey@morrisjobke.de> * @author Robin McCorkell <robin@mccorkell.me.uk> * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -31,7 +32,7 @@ namespace OCA\User_LDAP; use OCA\User_LDAP\User\User; use OCP\IConfig; -class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface { +class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP { private $backends = array(); private $refBackend = null; @@ -193,6 +194,17 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface $id = 'LOGINNAME,' . $loginName; return $this->handleRequest($id, 'loginName2UserName', array($loginName)); } + + /** + * returns the username for the given LDAP DN, if available + * + * @param string $dn + * @return string|false with the username + */ + public function dn2UserName($dn) { + $id = 'DN,' . $dn; + return $this->handleRequest($id, 'dn2UserName', array($dn)); + } /** * get the user's home directory @@ -273,4 +285,22 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface return $users; } + /** + * Return access for LDAP interaction. + * @param string $uid + * @return Access instance of Access for LDAP interaction + */ + public function getLDAPAccess($uid) { + return $this->handleRequest($uid, 'getLDAPAccess', array($uid)); + } + + /** + * Return a new LDAP connection for the specified user. + * The connection needs to be closed manually. + * @param string $uid + * @return resource of the LDAP connection + */ + public function getNewLDAPConnection($uid) { + return $this->handleRequest($uid, 'getNewLDAPConnection', array($uid)); + } } diff --git a/apps/user_ldap/lib/Wizard.php b/apps/user_ldap/lib/Wizard.php index be4d1821ee1..573d30f0005 100644 --- a/apps/user_ldap/lib/Wizard.php +++ b/apps/user_ldap/lib/Wizard.php @@ -498,7 +498,7 @@ class Wizard extends LDAPUtility { throw new \Exception('Could not connect to LDAP'); } - $obclasses = array('groupOfNames', 'group', 'posixGroup', '*'); + $obclasses = array('groupOfNames', 'groupOfUniqueNames', 'group', 'posixGroup', '*'); $this->determineFeature($obclasses, 'objectclass', 'ldap_groupfilter_objectclass', diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php index f96813ba711..2fddafa214b 100644 --- a/apps/user_ldap/tests/AccessTest.php +++ b/apps/user_ldap/tests/AccessTest.php @@ -60,21 +60,22 @@ class AccessTest extends \Test\TestCase { $this->getMock('\OCP\Image'), $this->getMock('\OCP\IDBConnection'), $this->getMock('\OCP\IUserManager'))); + $helper = new \OCA\User_LDAP\Helper(); - return array($lw, $connector, $um); + return array($lw, $connector, $um, $helper); } public function testEscapeFilterPartValidChars() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $input = 'okay'; $this->assertTrue($input === $access->escapeFilterPart($input)); } public function testEscapeFilterPartEscapeWildcard() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $input = '*'; $expected = '\\\\*'; @@ -82,8 +83,8 @@ class AccessTest extends \Test\TestCase { } public function testEscapeFilterPartEscapeWildcard2() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $input = 'foo*bar'; $expected = 'foo\\\\*bar'; @@ -92,8 +93,8 @@ class AccessTest extends \Test\TestCase { /** @dataProvider convertSID2StrSuccessData */ public function testConvertSID2StrSuccess(array $sidArray, $sidExpected) { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $sidBinary = implode('', $sidArray); $this->assertSame($sidExpected, $access->convertSID2Str($sidBinary)); @@ -127,8 +128,8 @@ class AccessTest extends \Test\TestCase { } public function testConvertSID2StrInputError() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $sidIllegal = 'foobar'; $sidExpected = ''; @@ -137,8 +138,8 @@ class AccessTest extends \Test\TestCase { } public function testGetDomainDNFromDNSuccess() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $inputDN = 'uid=zaphod,cn=foobar,dc=my,dc=server,dc=com'; $domainDN = 'dc=my,dc=server,dc=com'; @@ -152,8 +153,8 @@ class AccessTest extends \Test\TestCase { } public function testGetDomainDNFromDNError() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $inputDN = 'foobar'; $expected = ''; @@ -187,8 +188,8 @@ class AccessTest extends \Test\TestCase { } public function testStringResemblesDN() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $cases = $this->getResemblesDNInputData(); @@ -208,9 +209,9 @@ class AccessTest extends \Test\TestCase { } public function testStringResemblesDNLDAPmod() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); $lw = new \OCA\User_LDAP\LDAP(); - $access = new Access($con, $lw, $um); + $access = new Access($con, $lw, $um, $helper); if(!function_exists('ldap_explode_dn')) { $this->markTestSkipped('LDAP Module not available'); @@ -224,8 +225,8 @@ class AccessTest extends \Test\TestCase { } public function testCacheUserHome() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $con->expects($this->once()) ->method('writeToCache'); @@ -234,8 +235,8 @@ class AccessTest extends \Test\TestCase { } public function testBatchApplyUserAttributes() { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); - $access = new Access($con, $lw, $um); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); + $access = new Access($con, $lw, $um, $helper); $mapperMock = $this->getMockBuilder('\OCA\User_LDAP\Mapping\UserMapping') ->disableOriginalConstructor() ->getMock(); @@ -294,7 +295,7 @@ class AccessTest extends \Test\TestCase { * @dataProvider dNAttributeProvider */ public function testSanitizeDN($attribute) { - list($lw, $con, $um) = $this->getConnectorAndLdapMock(); + list($lw, $con, $um, $helper) = $this->getConnectorAndLdapMock(); $dnFromServer = 'cn=Mixed Cases,ou=Are Sufficient To,ou=Test,dc=example,dc=org'; @@ -309,7 +310,7 @@ class AccessTest extends \Test\TestCase { $attribute => array('count' => 1, $dnFromServer) ))); - $access = new Access($con, $lw, $um); + $access = new Access($con, $lw, $um, $helper); $values = $access->readAttribute('uid=whoever,dc=example,dc=org', $attribute); $this->assertSame($values[0], strtolower($dnFromServer)); } diff --git a/apps/user_ldap/tests/Group_LDAPTest.php b/apps/user_ldap/tests/Group_LDAPTest.php index 71120bdb838..83ec2dedf22 100644 --- a/apps/user_ldap/tests/Group_LDAPTest.php +++ b/apps/user_ldap/tests/Group_LDAPTest.php @@ -55,9 +55,10 @@ class Group_LDAPTest extends \Test\TestCase { $um = $this->getMockBuilder('\OCA\User_LDAP\User\Manager') ->disableOriginalConstructor() ->getMock(); + $helper = new \OCA\User_LDAP\Helper(); $access = $this->getMock('\OCA\User_LDAP\Access', $accMethods, - array($connector, $lw, $um)); + array($connector, $lw, $um, $helper)); $access->expects($this->any()) ->method('getConnection') diff --git a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php index 4ec36617c14..bd56494eac0 100644 --- a/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php +++ b/apps/user_ldap/tests/Integration/AbstractIntegrationTest.php @@ -26,6 +26,7 @@ namespace OCA\User_LDAP\Tests\Integration; use OCA\User_LDAP\Access; use OCA\User_LDAP\Connection; use OCA\User_LDAP\LDAP; +use OCA\User_LDAP\Helper; use OCA\User_LDAP\User\Manager; abstract class AbstractIntegrationTest { @@ -40,6 +41,9 @@ abstract class AbstractIntegrationTest { /** @var Manager */ protected $userManager; + + /** @var Helper */ + protected $helper; /** @var string */ protected $base; @@ -65,6 +69,7 @@ abstract class AbstractIntegrationTest { $this->initLDAPWrapper(); $this->initConnection(); $this->initUserManager(); + $this->initHelper(); $this->initAccess(); } @@ -103,12 +108,19 @@ abstract class AbstractIntegrationTest { protected function initUserManager() { $this->userManager = new FakeManager(); } + + /** + * initializes the test Helper + */ + protected function initHelper() { + $this->helper = new Helper(); + } /** * initializes the Access test instance */ protected function initAccess() { - $this->access = new Access($this->connection, $this->ldap, $this->userManager); + $this->access = new Access($this->connection, $this->ldap, $this->userManager, $this->helper); } /** diff --git a/apps/user_ldap/tests/Integration/Bootstrap.php b/apps/user_ldap/tests/Integration/Bootstrap.php new file mode 100644 index 00000000000..f52f1322171 --- /dev/null +++ b/apps/user_ldap/tests/Integration/Bootstrap.php @@ -0,0 +1,26 @@ +<?php + +/** + * @copyright Copyright (c) 2016 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @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/> + * + */ + +define('CLI_TEST_RUN', true); +require_once __DIR__ . '/../../../../lib/base.php'; +require_once __DIR__ . '/setup-scripts/config.php'; diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php index 4fcc8334338..2411a46d8ee 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestAccessGroupsMatchFilter.php @@ -23,10 +23,9 @@ namespace OCA\User_LDAP\Tests\Integration\Lib; - use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; -require_once __DIR__ . '/../../../../../lib/base.php'; +require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestAccessGroupsMatchFilter extends AbstractIntegrationTest { @@ -118,7 +117,6 @@ class IntegrationTestAccessGroupsMatchFilter extends AbstractIntegrationTest { } } -require_once(__DIR__ . '/../setup-scripts/config.php'); $test = new IntegrationTestAccessGroupsMatchFilter($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php index 1d4bd05b8a5..f433930bd26 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestBackupServer.php @@ -27,7 +27,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User_LDAP; -require_once __DIR__ . '/../../../../../lib/base.php'; +require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestBackupServer extends AbstractIntegrationTest { /** @var UserMapping */ @@ -113,7 +113,6 @@ class IntegrationTestBackupServer extends AbstractIntegrationTest { } } -require_once(__DIR__ . '/../setup-scripts/config.php'); $test = new IntegrationTestBackupServer($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php index 2574877fca4..89ce764e51a 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestBatchApplyUserAttributes.php @@ -26,7 +26,7 @@ namespace OCA\User_LDAP\Tests\Integration\Lib; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; -require_once __DIR__ . '/../../../../../lib/base.php'; +require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestBatchApplyUserAttributes extends AbstractIntegrationTest { /** @@ -68,7 +68,6 @@ class IntegrationTestBatchApplyUserAttributes extends AbstractIntegrationTest { } -require_once(__DIR__ . '/../setup-scripts/config.php'); $test = new IntegrationTestBatchApplyUserAttributes($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php index 85a185c8ac6..44b16aed6a1 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestConnect.php @@ -27,7 +27,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User_LDAP; -require_once __DIR__ . '/../../../../../lib/base.php'; +require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestConnect extends AbstractIntegrationTest { /** @var UserMapping */ @@ -161,7 +161,6 @@ class IntegrationTestConnect extends AbstractIntegrationTest { } } -require_once(__DIR__ . '/../setup-scripts/config.php'); $test = new IntegrationTestConnect($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php index 4d20d52595e..eb4a0a5c9cf 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestCountUsersByLoginName.php @@ -25,7 +25,7 @@ namespace OCA\User_LDAP\Tests\Integration\Lib; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; -require_once __DIR__ . '/../../../../../lib/base.php'; +require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestCountUsersByLoginName extends AbstractIntegrationTest { @@ -61,7 +61,6 @@ class IntegrationTestCountUsersByLoginName extends AbstractIntegrationTest { } } -require_once(__DIR__ . '/../setup-scripts/config.php'); $test = new IntegrationTestCountUsersByLoginName($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php index 56f44cc58b2..32fc2151a7c 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestFetchUsersByLoginName.php @@ -27,7 +27,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User_LDAP; -require_once __DIR__ . '/../../../../../lib/base.php'; +require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest { /** @var UserMapping */ @@ -74,7 +74,6 @@ class IntegrationTestFetchUsersByLoginName extends AbstractIntegrationTest { } -require_once(__DIR__ . '/../setup-scripts/config.php'); $test = new IntegrationTestFetchUsersByLoginName($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php index 7acd49af00a..3826cbdae51 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestPaging.php @@ -27,7 +27,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User_LDAP; -require_once __DIR__ . '/../../../../../lib/base.php'; +require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestPaging extends AbstractIntegrationTest { /** @var UserMapping */ @@ -76,7 +76,6 @@ class IntegrationTestPaging extends AbstractIntegrationTest { } } -require_once(__DIR__ . '/../setup-scripts/config.php'); $test = new IntegrationTestPaging($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php b/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php index a4db8cae681..95c14ca8947 100644 --- a/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php +++ b/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php @@ -28,7 +28,7 @@ use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\User_LDAP; -require_once __DIR__ . '/../../../../../lib/base.php'; +require_once __DIR__ . '/../Bootstrap.php'; class IntegrationTestUserHome extends AbstractIntegrationTest { /** @var UserMapping */ @@ -169,7 +169,6 @@ class IntegrationTestUserHome extends AbstractIntegrationTest { } } -require_once(__DIR__ . '/../setup-scripts/config.php'); $test = new IntegrationTestUserHome($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php index bd4da5ea97f..7c8f9475b41 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserAvatar.php @@ -29,7 +29,7 @@ use OCA\User_LDAP\User\User; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; -require_once __DIR__ . '/../../../../../../lib/base.php'; +require_once __DIR__ . '/../../Bootstrap.php'; class IntegrationTestUserAvatar extends AbstractIntegrationTest { /** @var UserMapping */ @@ -148,7 +148,6 @@ class IntegrationTestUserAvatar extends AbstractIntegrationTest { } } -require_once(__DIR__ . '/../../setup-scripts/config.php'); $test = new IntegrationTestUserAvatar($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php index de86e17d014..ab0d2ffdcce 100644 --- a/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php +++ b/apps/user_ldap/tests/Integration/Lib/User/IntegrationTestUserDisplayName.php @@ -26,7 +26,7 @@ namespace OCA\User_LDAP\Tests\Integration\Lib\User; use OCA\User_LDAP\Mapping\UserMapping; use OCA\User_LDAP\Tests\Integration\AbstractIntegrationTest; -require_once __DIR__ . '/../../../../../../lib/base.php'; +require_once __DIR__ . '/../../Bootstrap.php'; class IntegrationTestUserDisplayName extends AbstractIntegrationTest { /** @var UserMapping */ @@ -100,7 +100,6 @@ class IntegrationTestUserDisplayName extends AbstractIntegrationTest { } } -require_once(__DIR__ . '/../../setup-scripts/config.php'); $test = new IntegrationTestUserDisplayName($host, $port, $adn, $apwd, $bdn); $test->init(); $test->run(); diff --git a/apps/user_ldap/tests/LDAPProviderTest.php b/apps/user_ldap/tests/LDAPProviderTest.php new file mode 100644 index 00000000000..22dfb61e5fb --- /dev/null +++ b/apps/user_ldap/tests/LDAPProviderTest.php @@ -0,0 +1,338 @@ +<?php +/** + * + * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\User_LDAP\Tests; + +use OCP\IServerContainer; +use OCA\User_LDAP\IUserLDAP; + +/** + * Class LDAPProviderTest + * + * @group DB + * + * @package OCA\User_LDAP\Tests + */ +class LDAPProviderTest extends \Test\TestCase { + + protected function setUp() { + parent::setUp(); + } + + private function getServerMock(IUserLDAP $backend) { + $server = $this->getMockBuilder('OC\Server') + ->setMethods(['getUserManager', 'getBackends']) + ->setConstructorArgs(['', new \OC\Config(\OC::$configDir)]) + ->getMock(); + $server->expects($this->at(1)) + ->method('getBackends') + ->willReturn([$backend]); + $server->expects($this->any()) + ->method($this->anything()) + ->willReturnSelf(); + + return $server; + } + + private function getLDAPProvider(IServerContainer $serverContainer) { + $factory = new \OCA\User_LDAP\LDAPProviderFactory($serverContainer); + return $factory->getLDAPProvider(); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage User id not found in LDAP + */ + public function testGetUserDNUserIDNotFound() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->any())->method('userExists')->willReturn(false); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->getUserDN('nonexisting_user'); + } + + public function testGetUserDN() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists', 'getLDAPAccess', 'username2dn']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->at(0)) + ->method('userExists') + ->willReturn(true); + $backend->expects($this->at(2)) + ->method('username2dn') + ->willReturn('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org'); + $backend->expects($this->any()) + ->method($this->anything()) + ->willReturnSelf(); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $this->assertEquals('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org', + $ldapProvider->getUserDN('existing_user')); + } + + public function testGetUserName() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['dn2UserName']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->any()) + ->method('dn2UserName') + ->willReturn('existing_user'); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $this->assertEquals('existing_user', + $ldapProvider->getUserName('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); + } + + public function testDNasBaseParameter() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods([]) + ->disableOriginalConstructor() + ->getMock(); + + $server = $this->getServerMock($backend); + + $helper = new \OCA\User_LDAP\Helper(); + + $ldapProvider = $this->getLDAPProvider($server); + $this->assertEquals( + $helper->DNasBaseParameter('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org'), + $ldapProvider->DNasBaseParameter('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); + } + + public function testSanitizeDN() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods([]) + ->disableOriginalConstructor() + ->getMock(); + + $server = $this->getServerMock($backend); + + $helper = new \OCA\User_LDAP\Helper(); + + $ldapProvider = $this->getLDAPProvider($server); + $this->assertEquals( + $helper->sanitizeDN('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org'), + $ldapProvider->sanitizeDN('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage User id not found in LDAP + */ + public function testGetLDAPConnectionUserIDNotFound() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->any())->method('userExists')->willReturn(false); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->getLDAPConnection('nonexisting_user'); + } + + public function testGetLDAPConnection() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists', 'getNewLDAPConnection']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->any()) + ->method('userExists') + ->willReturn(true); + $backend->expects($this->any()) + ->method('getNewLDAPConnection') + ->willReturn(true); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $this->assertTrue($ldapProvider->getLDAPConnection('existing_user')); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage User id not found in LDAP + */ + public function testGetLDAPBaseUsersUserIDNotFound() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->any())->method('userExists')->willReturn(false); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->getLDAPBaseUsers('nonexisting_user'); + } + + public function testGetLDAPBaseUsers() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->at(0)) + ->method('userExists') + ->willReturn(true); + $backend->expects($this->at(3)) + ->method('getConfiguration') + ->willReturn(array('ldap_base_users'=>'ou=users,dc=example,dc=org')); + $backend->expects($this->any()) + ->method($this->anything()) + ->willReturnSelf(); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $this->assertEquals('ou=users,dc=example,dc=org', $ldapProvider->getLDAPBaseUsers('existing_user')); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage User id not found in LDAP + */ + public function testGetLDAPBaseGroupsUserIDNotFound() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->any())->method('userExists')->willReturn(false); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->getLDAPBaseGroups('nonexisting_user'); + } + + public function testGetLDAPBaseGroups() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'getConfiguration']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->at(0)) + ->method('userExists') + ->willReturn(true); + $backend->expects($this->at(3)) + ->method('getConfiguration') + ->willReturn(array('ldap_base_groups'=>'ou=groups,dc=example,dc=org')); + $backend->expects($this->any()) + ->method($this->anything()) + ->willReturnSelf(); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $this->assertEquals('ou=groups,dc=example,dc=org', $ldapProvider->getLDAPBaseGroups('existing_user')); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage User id not found in LDAP + */ + public function testClearCacheUserIDNotFound() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->any())->method('userExists')->willReturn(false); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->clearCache('nonexisting_user'); + } + + public function testClearCache() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['userExists', 'getLDAPAccess', 'getConnection', 'clearCache']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->at(0)) + ->method('userExists') + ->willReturn(true); + $backend->expects($this->at(3)) + ->method('clearCache') + ->willReturn(true); + $backend->expects($this->any()) + ->method($this->anything()) + ->willReturnSelf(); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->clearCache('existing_user'); + $this->assertTrue(TRUE); + } + + public function testDnExists() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods(['dn2UserName']) + ->disableOriginalConstructor() + ->getMock(); + $backend->expects($this->any()) + ->method('dn2UserName') + ->willReturn('existing_user'); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $this->assertTrue($ldapProvider->dnExists('cn=existing_user,ou=Are Sufficient To,ou=Test,dc=example,dc=org')); + } + + public function testFlagRecord() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods([]) + ->disableOriginalConstructor() + ->getMock(); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->flagRecord('existing_user'); + $this->assertTrue(TRUE); + } + + public function testUnflagRecord() { + $backend = $this->getMockBuilder('OCA\User_LDAP\User_LDAP') + ->setMethods([]) + ->disableOriginalConstructor() + ->getMock(); + + $server = $this->getServerMock($backend); + + $ldapProvider = $this->getLDAPProvider($server); + $ldapProvider->unflagRecord('existing_user'); + $this->assertTrue(TRUE); + } +} diff --git a/apps/user_ldap/tests/User/UserTest.php b/apps/user_ldap/tests/User/UserTest.php index cf1514009d8..d9e43dee047 100644 --- a/apps/user_ldap/tests/User/UserTest.php +++ b/apps/user_ldap/tests/User/UserTest.php @@ -71,8 +71,9 @@ class UserTest extends \Test\TestCase { $umMethods, array($cfMock, $fsMock, $logMock, $avaMgr, $im, $dbc, $userMgr)); $connector = $this->getMock('\OCA\User_LDAP\Connection', $conMethods, array($lw, null, null)); + $helper = new \OCA\User_LDAP\Helper(); $access = $this->getMock('\OCA\User_LDAP\Access', - $accMethods, array($connector, $lw, $um)); + $accMethods, array($connector, $lw, $um, $helper)); return array($access, $connector); } diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php index ae86e3cf3a2..47e789142e5 100644 --- a/apps/user_ldap/tests/User_LDAPTest.php +++ b/apps/user_ldap/tests/User_LDAPTest.php @@ -93,9 +93,11 @@ class User_LDAPTest extends \Test\TestCase { ->method('getDeletedUser') ->will($this->returnValue($offlineUser)); + $helper = new \OCA\User_LDAP\Helper(); + $access = $this->getMock('\OCA\User_LDAP\Access', $accMethods, - array($connector, $lw, $um)); + array($connector, $lw, $um, $helper)); $um->setLdapAccess($access); diff --git a/apps/user_ldap/tests/WizardTest.php b/apps/user_ldap/tests/WizardTest.php index cc110c6ee0d..e82cbcfc82a 100644 --- a/apps/user_ldap/tests/WizardTest.php +++ b/apps/user_ldap/tests/WizardTest.php @@ -69,8 +69,9 @@ class WizardTest extends \Test\TestCase { $um = $this->getMockBuilder('\OCA\User_LDAP\User\Manager') ->disableOriginalConstructor() ->getMock(); + $helper = new \OCA\User_LDAP\Helper(); $access = $this->getMock('\OCA\User_LDAP\Access', - $accMethods, array($connector, $lw, $um)); + $accMethods, array($connector, $lw, $um, $helper)); return array(new Wizard($conf, $lw, $access), $conf, $lw, $access); } diff --git a/apps/workflowengine/appinfo/app.php b/apps/workflowengine/appinfo/app.php new file mode 100644 index 00000000000..f6f22ce9488 --- /dev/null +++ b/apps/workflowengine/appinfo/app.php @@ -0,0 +1,23 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +$application = new \OCA\WorkflowEngine\AppInfo\Application(); +$application->registerHooksAndListeners(); diff --git a/apps/workflowengine/appinfo/database.xml b/apps/workflowengine/appinfo/database.xml new file mode 100644 index 00000000000..b67a41faed2 --- /dev/null +++ b/apps/workflowengine/appinfo/database.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<database> + <name>*dbname*</name> + <create>true</create> + <overwrite>false</overwrite> + <charset>utf8</charset> + + <table> + <name>*dbprefix*flow_checks</name> + <declaration> + <field> + <name>id</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <autoincrement>1</autoincrement> + <length>4</length> + </field> + + <field> + <name>class</name> + <type>text</type> + <notnull>true</notnull> + <length>256</length> + </field> + <field> + <name>operator</name> + <type>text</type> + <notnull>true</notnull> + <length>16</length> + </field> + <field> + <name>value</name> + <type>clob</type> + <notnull>false</notnull> + </field> + <field> + <name>hash</name> + <type>text</type> + <notnull>true</notnull> + <length>32</length> + </field> + + <index> + <name>flow_unique_hash</name> + <unique>true</unique> + <field> + <name>hash</name> + </field> + </index> + </declaration> + </table> + + <table> + <name>*dbprefix*flow_operations</name> + <declaration> + <field> + <name>id</name> + <type>integer</type> + <default>0</default> + <notnull>true</notnull> + <autoincrement>1</autoincrement> + <length>4</length> + </field> + + <field> + <name>class</name> + <type>text</type> + <notnull>true</notnull> + <length>256</length> + </field> + <field> + <name>name</name> + <type>text</type> + <notnull>true</notnull> + <length>256</length> + </field> + <field> + <name>checks</name> + <type>clob</type> + <notnull>false</notnull> + </field> + <field> + <name>operation</name> + <type>clob</type> + <notnull>false</notnull> + </field> + </declaration> + </table> +</database> diff --git a/apps/workflowengine/appinfo/info.xml b/apps/workflowengine/appinfo/info.xml new file mode 100644 index 00000000000..b53f8aedb16 --- /dev/null +++ b/apps/workflowengine/appinfo/info.xml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<info> + <id>workflowengine</id> + <name>Files workflow engine</name> + <description></description> + <licence>AGPL</licence> + <author>Morris Jobke</author> + <version>1.1.0</version> + <namespace>WorkflowEngine</namespace> + + <category>other</category> + <website>https://github.com/nextcloud/server</website> + <bugs>https://github.com/nextcloud/server/issues</bugs> + <repository type="git">https://github.com/nextcloud/server.git</repository> + + <types> + <filesystem/> + </types> + + <dependencies> + <owncloud min-version="9.2" max-version="9.2" /> + </dependencies> +</info> diff --git a/apps/workflowengine/appinfo/routes.php b/apps/workflowengine/appinfo/routes.php new file mode 100644 index 00000000000..5ae74bcafc3 --- /dev/null +++ b/apps/workflowengine/appinfo/routes.php @@ -0,0 +1,30 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +return [ + 'routes' => [ + ['name' => 'flowOperations#getOperations', 'url' => '/operations', 'verb' => 'GET'], + ['name' => 'flowOperations#addOperation', 'url' => '/operations', 'verb' => 'POST'], + ['name' => 'flowOperations#updateOperation', 'url' => '/operations/{id}', 'verb' => 'PUT'], + ['name' => 'flowOperations#deleteOperation', 'url' => '/operations/{id}', 'verb' => 'DELETE'], + ['name' => 'requestTime#getTimezones', 'url' => '/timezones', 'verb' => 'GET'], + ] +]; diff --git a/apps/workflowengine/css/admin.css b/apps/workflowengine/css/admin.css new file mode 100644 index 00000000000..5494b35ce69 --- /dev/null +++ b/apps/workflowengine/css/admin.css @@ -0,0 +1,58 @@ +.workflowengine .operation { + padding: 5px; + padding-bottom: 20px; + margin-bottom: 20px; + border-bottom: #eee 1px solid; + border-left: rgba(0,0,0,0) 1px solid; +} +.workflowengine .operation.modified { + border-left: rgb(255, 94, 32) 1px solid; +} +.workflowengine .operation button { + margin-bottom: 0; +} +.workflowengine .operation span.info { + padding: 7px; + color: #eee; +} +.workflowengine .rules .operation:nth-last-child(2) { + margin-bottom: 5px; +} + +.workflowengine .pull-right { + float: right +} + +.workflowengine .operation .msg { + border-radius: 3px; + margin: 3px 3px 3px 0; + padding: 5px; + transition: opacity .5s; +} + +.workflowengine .operation .check:hover { + background-color: #f8f8f8; +} + +.workflowengine .operation .button-delete, +.workflowengine .operation .button-delete-check { + opacity: 0.5; + padding: 7px; +} +.workflowengine .operation .button-delete:hover, +.workflowengine .operation .button-delete:focus, +.workflowengine .operation .button-delete-check:hover, +.workflowengine .operation .button-delete-check:focus { + opacity: 1; + cursor: pointer; +} + +.workflowengine .rules .icon-loading-small { + display: inline-block; + margin-right: 5px; +} + +.workflowengine .invalid-input { + border-color: #aa0000; +} + diff --git a/apps/workflowengine/js/admin.js b/apps/workflowengine/js/admin.js new file mode 100644 index 00000000000..2c6fa54d87d --- /dev/null +++ b/apps/workflowengine/js/admin.js @@ -0,0 +1,359 @@ +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + Handlebars.registerHelper('selectItem', function(currentValue, itemValue) { + if(currentValue === itemValue) { + return 'selected=selected'; + } + + return ""; + }); + + Handlebars.registerHelper('getOperators', function(classname) { + var check = OCA.WorkflowEngine.getCheckByClass(classname); + if (!_.isUndefined(check)) { + return check['operators']; + } + return []; + }); + + OCA.WorkflowEngine = _.extend(OCA.WorkflowEngine || {}, { + availablePlugins: [], + availableChecks: [], + + getCheckByClass: function(className) { + var length = OCA.WorkflowEngine.availableChecks.length; + for (var i = 0; i < length; i++) { + if (OCA.WorkflowEngine.availableChecks[i]['class'] === className) { + return OCA.WorkflowEngine.availableChecks[i]; + } + } + return undefined; + } + }); + + /** + * 888b d888 888 888 + * 8888b d8888 888 888 + * 88888b.d88888 888 888 + * 888Y88888P888 .d88b. .d88888 .d88b. 888 .d8888b + * 888 Y888P 888 d88""88b d88" 888 d8P Y8b 888 88K + * 888 Y8P 888 888 888 888 888 88888888 888 "Y8888b. + * 888 " 888 Y88..88P Y88b 888 Y8b. 888 X88 + * 888 888 "Y88P" "Y88888 "Y8888 888 88888P' + */ + + /** + * @class OCA.WorkflowEngine.Operation + */ + OCA.WorkflowEngine.Operation = + OC.Backbone.Model.extend({ + defaults: { + 'class': 'OCA\\WorkflowEngine\\Operation', + 'name': '', + 'checks': [], + 'operation': '' + } + }); + + /** + * .d8888b. 888 888 888 d8b + * d88P Y88b 888 888 888 Y8P + * 888 888 888 888 888 + * 888 .d88b. 888 888 .d88b. .d8888b 888888 888 .d88b. 88888b. .d8888b + * 888 d88""88b 888 888 d8P Y8b d88P" 888 888 d88""88b 888 "88b 88K + * 888 888 888 888 888 888 88888888 888 888 888 888 888 888 888 "Y8888b. + * Y88b d88P Y88..88P 888 888 Y8b. Y88b. Y88b. 888 Y88..88P 888 888 X88 + * "Y8888P" "Y88P" 888 888 "Y8888 "Y8888P "Y888 888 "Y88P" 888 888 88888P' + */ + + /** + * @class OCA.WorkflowEngine.OperationsCollection + * + * collection for all configurated operations + */ + OCA.WorkflowEngine.OperationsCollection = + OC.Backbone.Collection.extend({ + model: OCA.WorkflowEngine.Operation, + url: OC.generateUrl('apps/workflowengine/operations') + }); + + /** + * 888 888 d8b + * 888 888 Y8P + * 888 888 + * Y88b d88P 888 .d88b. 888 888 888 .d8888b + * Y88b d88P 888 d8P Y8b 888 888 888 88K + * Y88o88P 888 88888888 888 888 888 "Y8888b. + * Y888P 888 Y8b. Y88b 888 d88P X88 + * Y8P 888 "Y8888 "Y8888888P" 88888P' + */ + + /** + * @class OCA.WorkflowEngine.TemplateView + * + * a generic template that handles the Handlebars template compile step + * in a method called "template()" + */ + OCA.WorkflowEngine.TemplateView = + OC.Backbone.View.extend({ + _template: null, + template: function(vars) { + if (!this._template) { + this._template = Handlebars.compile($(this.templateId).html()); + } + return this._template(vars); + } + }); + + /** + * @class OCA.WorkflowEngine.OperationView + * + * this creates the view for a single operation + */ + OCA.WorkflowEngine.OperationView = + OCA.WorkflowEngine.TemplateView.extend({ + templateId: '#operation-template', + events: { + 'change .check-class': 'checkChanged', + 'change .check-operator': 'checkChanged', + 'change .check-value': 'checkChanged', + 'change .operation-name': 'operationChanged', + 'change .operation-operation': 'operationChanged', + 'click .button-reset': 'reset', + 'click .button-save': 'save', + 'click .button-add': 'add', + 'click .button-delete': 'delete', + 'click .button-delete-check': 'deleteCheck' + }, + originalModel: null, + hasChanged: false, + message: '', + errorMessage: '', + saving: false, + initialize: function() { + // this creates a new copy of the object to definitely have a new reference and being able to reset the model + this.originalModel = JSON.parse(JSON.stringify(this.model)); + this.model.on('change', function(){ + console.log('model changed'); + this.hasChanged = true; + this.render(); + }, this); + + if (this.model.get('id') === undefined) { + this.hasChanged = true; + } + }, + delete: function() { + this.model.destroy(); + this.remove(); + }, + reset: function() { + this.hasChanged = false; + // silent is need to not trigger the change event which resets the hasChanged attribute + this.model.set(this.originalModel, {silent: true}); + this.render(); + }, + save: function() { + var success = function(model, response, options) { + this.saving = false; + this.originalModel = JSON.parse(JSON.stringify(this.model)); + + this.message = t('workflowengine', 'Successfully saved'); + this.errorMessage = ''; + this.render(); + }; + var error = function(model, response, options) { + this.saving = false; + this.hasChanged = true; + + this.message = t('workflowengine', 'Saving failed:'); + this.errorMessage = response.responseText; + this.render(); + }; + this.hasChanged = false; + this.saving = true; + this.render(); + this.model.save(null, {success: success, error: error, context: this}); + }, + add: function() { + var checks = _.clone(this.model.get('checks')), + classname = OCA.WorkflowEngine.availableChecks[0]['class'], + operators = OCA.WorkflowEngine.availableChecks[0]['operators']; + + checks.push({ + 'class': classname, + 'operator': operators[0]['operator'], + 'value': '' + }); + this.model.set({'checks': checks}); + }, + checkChanged: function(event) { + var value = event.target.value, + id = $(event.target.parentElement).data('id'), + // this creates a new copy of the object to definitely have a new reference + checks = JSON.parse(JSON.stringify(this.model.get('checks'))), + key = null; + + for (var i = 0; i < event.target.classList.length; i++) { + var className = event.target.classList[i]; + if (className.substr(0, 'check-'.length) === 'check-') { + key = className.substr('check-'.length); + break; + } + } + + if (key === null) { + console.warn('checkChanged triggered but element doesn\'t have any "check-" class'); + return; + } + + if (!_.has(checks[id], key)) { + console.warn('key "' + key + '" is not available in check', check); + return; + } + + checks[id][key] = value; + // if the class is changed most likely also the operators have changed + // with this we set the operator to the first possible operator + if (key === 'class') { + var check = OCA.WorkflowEngine.getCheckByClass(value); + if (!_.isUndefined(check)) { + checks[id]['operator'] = check['operators'][0]['operator']; + } + } + // model change will trigger render + this.model.set({'checks': checks}); + }, + deleteCheck: function(event) { + console.log(arguments); + var id = $(event.target.parentElement).data('id'), + checks = JSON.parse(JSON.stringify(this.model.get('checks'))); + + // splice removes 1 element at index `id` + checks.splice(id, 1); + // model change will trigger render + this.model.set({'checks': checks}); + }, + operationChanged: function(event) { + var value = event.target.value, + key = null; + + for (var i = 0; i < event.target.classList.length; i++) { + var className = event.target.classList[i]; + if (className.substr(0, 'operation-'.length) === 'operation-') { + key = className.substr('operation-'.length); + break; + } + } + + if (key === null) { + console.warn('operationChanged triggered but element doesn\'t have any "operation-" class'); + return; + } + + if (key !== 'name' && key !== 'operation') { + console.warn('key "' + key + '" is no valid attribute'); + return; + } + + // model change will trigger render + this.model.set(key, value); + }, + render: function() { + this.$el.html(this.template({ + operation: this.model.toJSON(), + classes: OCA.WorkflowEngine.availableChecks, + hasChanged: this.hasChanged, + message: this.message, + errorMessage: this.errorMessage, + saving: this.saving + })); + + var checks = this.model.get('checks'); + _.each(this.$el.find('.check'), function(element){ + var $element = $(element), + id = $element.data('id'), + check = checks[id], + valueElement = $element.find('.check-value').first(); + + _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) { + if (_.isFunction(plugin.render)) { + plugin.render(valueElement, check); + } + }); + }, this); + + if (this.message !== '') { + // hide success messages after some time + _.delay(function(elements){ + $(elements).css('opacity', 0); + }, 7000, this.$el.find('.msg.success')); + this.message = ''; + } + + return this.$el; + } + }); + + /** + * @class OCA.WorkflowEngine.OperationsView + * + * this creates the view for configured operations + */ + OCA.WorkflowEngine.OperationsView = + OCA.WorkflowEngine.TemplateView.extend({ + templateId: '#operations-template', + collection: null, + $el: null, + events: { + 'click .button-add-operation': 'add' + }, + initialize: function(classname) { + if (!OCA.WorkflowEngine.availablePlugins.length) { + OCA.WorkflowEngine.availablePlugins = OC.Plugins.getPlugins('OCA.WorkflowEngine.CheckPlugins'); + _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) { + if (_.isFunction(plugin.getCheck)) { + OCA.WorkflowEngine.availableChecks.push(plugin.getCheck(classname)); + } + }); + } + + this.collection.fetch({data: { + 'class': classname + }}); + this.collection.once('sync', this.render, this); + }, + add: function() { + var operation = this.collection.create(); + this.renderOperation(operation); + }, + renderOperation: function(subView){ + var operationsElement = this.$el.find('.operations'); + operationsElement.append(subView.$el); + subView.render(); + }, + render: function() { + this.$el.html(this.template()); + this.collection.each(this.renderOperation, this); + } + }); +})(); diff --git a/apps/workflowengine/js/filemimetypeplugin.js b/apps/workflowengine/js/filemimetypeplugin.js new file mode 100644 index 00000000000..33cbbd7fd7e --- /dev/null +++ b/apps/workflowengine/js/filemimetypeplugin.js @@ -0,0 +1,72 @@ +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + + OCA.WorkflowEngine = OCA.WorkflowEngine || {}; + OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}; + + OCA.WorkflowEngine.Plugins.FileMimeTypePlugin = { + getCheck: function() { + return { + 'class': 'OCA\\WorkflowEngine\\Check\\FileMimeType', + 'name': t('workflowengine', 'File mime type (upload)'), + 'operators': [ + {'operator': 'is', 'name': t('workflowengine', 'is')}, + {'operator': '!is', 'name': t('workflowengine', 'is not')}, + {'operator': 'matches', 'name': t('workflowengine', 'matches')}, + {'operator': '!matches', 'name': t('workflowengine', 'does not match')} + ] + }; + }, + render: function(element, check) { + if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileMimeType') { + return; + } + + var placeholder = t('workflowengine', 'text/plain'); + if (check['operator'] === 'matches' || check['operator'] === '!matches') { + placeholder = t('workflowengine', '/^text\\/(plain|html)$/i'); + + if (this._validateRegex(check['value'])) { + $(element).removeClass('invalid-input'); + } else { + $(element).addClass('invalid-input'); + } + } + + $(element).css('width', '250px') + .attr('placeholder', placeholder) + .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder})) + .addClass('has-tooltip') + .tooltip({ + placement: 'bottom' + }); + }, + + _validateRegex: function(string) { + var regexRegex = /^\/(.*)\/([gui]{0,3})$/, + result = regexRegex.exec(string); + return result !== null; + } + }; +})(); + +OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileMimeTypePlugin); diff --git a/apps/workflowengine/js/filesizeplugin.js b/apps/workflowengine/js/filesizeplugin.js new file mode 100644 index 00000000000..0efa9d00edf --- /dev/null +++ b/apps/workflowengine/js/filesizeplugin.js @@ -0,0 +1,56 @@ +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + + OCA.WorkflowEngine = OCA.WorkflowEngine || {}; + OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}; + + OCA.WorkflowEngine.Plugins.FileSizePlugin = { + getCheck: function() { + return { + 'class': 'OCA\\WorkflowEngine\\Check\\FileSize', + 'name': t('workflowengine', 'File size (upload)'), + 'operators': [ + {'operator': 'less', 'name': t('workflowengine', 'less')}, + {'operator': '!greater', 'name': t('workflowengine', 'less or equals')}, + {'operator': '!less', 'name': t('workflowengine', 'greater or equals')}, + {'operator': 'greater', 'name': t('workflowengine', 'greater')} + ] + }; + }, + render: function(element, check) { + if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileSize') { + return; + } + + var placeholder = '12 MB'; // Do not translate!!! + $(element).css('width', '250px') + .attr('placeholder', placeholder) + .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder})) + .addClass('has-tooltip') + .tooltip({ + placement: 'bottom' + }); + } + }; +})(); + +OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileSizePlugin); diff --git a/apps/workflowengine/js/filesystemtagsplugin.js b/apps/workflowengine/js/filesystemtagsplugin.js new file mode 100644 index 00000000000..dc6f608d85a --- /dev/null +++ b/apps/workflowengine/js/filesystemtagsplugin.js @@ -0,0 +1,76 @@ +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + + OCA.WorkflowEngine = OCA.WorkflowEngine || {}; + OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}; + + OCA.WorkflowEngine.Plugins.FileSystemTagsPlugin = { + getCheck: function() { + this.collection = OC.SystemTags.collection; + + return { + 'class': 'OCA\\WorkflowEngine\\Check\\FileSystemTags', + 'name': t('workflowengine', 'File system tag'), + 'operators': [ + {'operator': 'is', 'name': t('workflowengine', 'is tagged with')}, + {'operator': '!is', 'name': t('workflowengine', 'is not tagged with')} + ] + }; + }, + render: function(element, check) { + if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileSystemTags') { + return; + } + + $(element).css('width', '400px'); + + $(element).select2({ + allowClear: false, + multiple: false, + placeholder: t('workflowengine', 'Select tag…'), + query: _.debounce(function(query) { + query.callback({ + results: OC.SystemTags.collection.filterByName(query.term) + }); + }, 100, true), + id: function(element) { + return element.get('id'); + }, + initSelection: function(element, callback) { + callback($(element).val()); + }, + formatResult: function (tag) { + return OC.SystemTags.getDescriptiveTag(tag); + }, + formatSelection: function (tagId) { + var tag = OC.SystemTags.collection.get(tagId); + return OC.SystemTags.getDescriptiveTag(tag); + }, + escapeMarkup: function(m) { + return m; + } + }); + } + }; +})(); + +OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileSystemTagsPlugin); diff --git a/apps/workflowengine/js/requestremoteaddressplugin.js b/apps/workflowengine/js/requestremoteaddressplugin.js new file mode 100644 index 00000000000..a66d6f51f0f --- /dev/null +++ b/apps/workflowengine/js/requestremoteaddressplugin.js @@ -0,0 +1,83 @@ +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + + OCA.WorkflowEngine = OCA.WorkflowEngine || {}; + OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}; + + OCA.WorkflowEngine.Plugins.RequestRemoteAddressPlugin = { + getCheck: function() { + return { + 'class': 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress', + 'name': t('workflowengine', 'Request remote address'), + 'operators': [ + {'operator': 'matchesIPv4', 'name': t('workflowengine', 'matches IPv4')}, + {'operator': '!matchesIPv4', 'name': t('workflowengine', 'does not match IPv4')}, + {'operator': 'matchesIPv6', 'name': t('workflowengine', 'matches IPv6')}, + {'operator': '!matchesIPv6', 'name': t('workflowengine', 'does not match IPv6')} + ] + }; + }, + render: function(element, check) { + if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress') { + return; + } + + var placeholder = '127.0.0.1/32'; // Do not translate!!! + if (check['operator'] === 'matchesIPv6' || check['operator'] === '!matchesIPv6') { + placeholder = '::1/128'; // Do not translate!!! + if (this._validateIPv6(check['value'])) { + $(element).removeClass('invalid-input'); + } else { + $(element).addClass('invalid-input'); + } + } else { + if (this._validateIPv4(check['value'])) { + $(element).removeClass('invalid-input'); + } else { + $(element).addClass('invalid-input'); + } + } + + $(element).css('width', '300px') + .attr('placeholder', placeholder) + .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder})) + .addClass('has-tooltip') + .tooltip({ + placement: 'bottom' + }); + }, + + _validateIPv4: function(string) { + var regexRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/, + result = regexRegex.exec(string); + return result !== null; + }, + + _validateIPv6: function(string) { + var regexRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/, + result = regexRegex.exec(string); + return result !== null; + } + }; +})(); + +OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestRemoteAddressPlugin); diff --git a/apps/workflowengine/js/requesttimeplugin.js b/apps/workflowengine/js/requesttimeplugin.js new file mode 100644 index 00000000000..111b2bb7437 --- /dev/null +++ b/apps/workflowengine/js/requesttimeplugin.js @@ -0,0 +1,196 @@ +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + + OCA.WorkflowEngine = OCA.WorkflowEngine || {}; + OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}; + + OCA.WorkflowEngine.Plugins.RequestTimePlugin = { + timezones: [ + "Europe/Berlin", + "Europe/London" + ], + _$element: null, + getCheck: function() { + return { + 'class': 'OCA\\WorkflowEngine\\Check\\RequestTime', + 'name': t('workflowengine', 'Request time'), + 'operators': [ + {'operator': 'in', 'name': t('workflowengine', 'between')}, + {'operator': '!in', 'name': t('workflowengine', 'not between')} + ] + }; + }, + render: function(element, check) { + if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestTime') { + return; + } + + var startTime = '09:00', + endTime = '18:00', + timezone = jstz.determine().name(), + $element = $(element); + + if (_.isString(check['value']) && check['value'] !== '') { + var value = JSON.parse(check['value']), + splittedStart = value[0].split(' ', 2), + splittedEnd = value[1].split(' ', 2); + + startTime = splittedStart[0]; + endTime = splittedEnd[0]; + timezone = splittedStart[1]; + } + + var valueJSON = JSON.stringify([startTime + ' ' + timezone, endTime + ' ' + timezone]); + if (check['value'] !== valueJSON) { + check['value'] = valueJSON; + $element.val(valueJSON); + } + + $element.css('display', 'none'); + + $('<input>') + .attr('type', 'text') + .attr('placeholder', t('workflowengine', 'Start')) + .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: '16:00'})) + .addClass('has-tooltip') + .tooltip({ + placement: 'bottom' + }) + .addClass('start') + .val(startTime) + .insertBefore($element); + $('<input>') + .attr('type', 'text') + .attr('placeholder', t('workflowengine', 'End')) + .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: '16:00'})) + .addClass('has-tooltip') + .tooltip({ + placement: 'bottom' + }) + .addClass('end') + .val(endTime) + .insertBefore($element); + + var timezoneInput = $('<input>') + .attr('type', 'hidden') + .css('width', '250px') + .insertBefore($element) + .val(timezone); + + timezoneInput.select2({ + allowClear: false, + multiple: false, + placeholder: t('workflowengine', 'Select timezone…'), + ajax: { + url: OC.generateUrl('apps/workflowengine/timezones'), + dataType: 'json', + quietMillis: 100, + data: function (term) { + if (term === '') { + // Default search in the same continent... + term = jstz.determine().name().split('/'); + term = term[0]; + } + return { + search: term + }; + }, + results: function (response) { + var results = []; + $.each(response, function(timezone) { + results.push({ id: timezone }); + }); + + return { + results: results, + more: false + }; + } + }, + initSelection: function (element, callback) { + callback(element.val()); + }, + formatResult: function (element) { + return '<span>' + element.id + '</span>'; + }, + formatSelection: function (element) { + if (!_.isUndefined(element.id)) { + element = element.id; + } + return '<span>' + element + '</span>'; + } + }); + + // Has to be added after select2 for `event.target.classList` + timezoneInput.addClass('timezone'); + + $element.parent() + .on('change', '.start', _.bind(this.update, this)) + .on('change', '.end', _.bind(this.update, this)) + .on('change', '.timezone', _.bind(this.update, this)); + + this._$element = $element; + }, + update: function(event) { + var value = event.target.value, + key = null; + + for (var i = 0; i < event.target.classList.length; i++) { + key = event.target.classList[i]; + } + + if (key === null) { + console.warn('update triggered but element doesn\'t have any class'); + return; + } + + var data = JSON.parse(this._$element.val()), + startTime = moment(data[0].split(' ', 2)[0], 'H:m Z'), + endTime = moment(data[1].split(' ', 2)[0], 'H:m Z'), + timezone = data[0].split(' ', 2)[1]; + + if (key === 'start' || key === 'end') { + var parsedDate = moment(value, ['H:m', 'h:m a'], true).format('HH:mm'); + + if (parsedDate === 'Invalid date') { + return; + } + + var indexValue = 0; + if (key === 'end') { + indexValue = 1; + } + data[indexValue] = parsedDate + ' ' + timezone; + } + + if (key === 'timezone') { + data[0] = startTime.format('HH:mm') + ' ' + value; + data[1] = endTime.format('HH:mm') + ' ' + value; + } + + this._$element.val(JSON.stringify(data)); + this._$element.trigger('change'); + } + }; +})(); + +OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestTimePlugin); diff --git a/apps/workflowengine/js/requesturlplugin.js b/apps/workflowengine/js/requesturlplugin.js new file mode 100644 index 00000000000..5f21d2a59fc --- /dev/null +++ b/apps/workflowengine/js/requesturlplugin.js @@ -0,0 +1,117 @@ +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + + OCA.WorkflowEngine = OCA.WorkflowEngine || {}; + OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}; + + OCA.WorkflowEngine.Plugins.RequestURLPlugin = { + predefinedValues: ['webdav'], + getCheck: function() { + return { + 'class': 'OCA\\WorkflowEngine\\Check\\RequestURL', + 'name': t('workflowengine', 'Request URL'), + 'operators': [ + {'operator': 'is', 'name': t('workflowengine', 'is')}, + {'operator': '!is', 'name': t('workflowengine', 'is not')}, + {'operator': 'matches', 'name': t('workflowengine', 'matches')}, + {'operator': '!matches', 'name': t('workflowengine', 'does not match')} + ] + }; + }, + render: function(element, check) { + if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestURL') { + return; + } + + var placeholder = t('workflowengine', 'https://localhost/index.php'); + + if (check['operator'] === 'matches' || check['operator'] === '!matches') { + placeholder = t('workflowengine', '/^https\\:\\/\\/localhost\\/index\\.php$/i'); + } + + $(element).css('width', '250px') + .attr('placeholder', placeholder) + .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder})) + .addClass('has-tooltip') + .tooltip({ + placement: 'bottom' + }); + + if (check['operator'] === 'matches' || check['operator'] === '!matches') { + if (this._validateRegex(check['value'])) { + $(element).removeClass('invalid-input'); + } else { + $(element).addClass('invalid-input'); + } + } else { + var self = this, + data = [ + { + text: t('workflowengine', 'Predefined URLs'), + children: [ + {id: 'webdav', text: t('workflowengine', 'Files WebDAV')} + ] + } + ]; + if (this.predefinedValues.indexOf(check['value']) === -1) { + data.unshift({ + id: check['value'], + text: check['value'] + }) + } + + + $(element).select2({ + data: data, + createSearchChoice: function(term) { + if (self.predefinedValues.indexOf(check['value']) === -1) { + return { + id: term, + text: term + }; + } + }, + id: function(element) { + return element.id; + }, + formatResult: function (tag) { + return tag.text; + }, + formatSelection: function (tag) { + return tag.text; + }, + escapeMarkup: function(m) { + return m; + } + }) + } + }, + + _validateRegex: function(string) { + var regexRegex = /^\/(.*)\/([gui]{0,3})$/, + result = regexRegex.exec(string); + return result !== null; + } + }; +})(); + +OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestURLPlugin); diff --git a/apps/workflowengine/js/requestuseragentplugin.js b/apps/workflowengine/js/requestuseragentplugin.js new file mode 100644 index 00000000000..8413d52ac43 --- /dev/null +++ b/apps/workflowengine/js/requestuseragentplugin.js @@ -0,0 +1,118 @@ +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + + OCA.WorkflowEngine = OCA.WorkflowEngine || {}; + OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}; + + OCA.WorkflowEngine.Plugins.RequestUserAgentPlugin = { + predefinedValues: ['android', 'ios', 'desktop'], + getCheck: function() { + return { + 'class': 'OCA\\WorkflowEngine\\Check\\RequestUserAgent', + 'name': t('workflowengine', 'Request user agent'), + 'operators': [ + {'operator': 'is', 'name': t('workflowengine', 'is')}, + {'operator': '!is', 'name': t('workflowengine', 'is not')}, + {'operator': 'matches', 'name': t('workflowengine', 'matches')}, + {'operator': '!matches', 'name': t('workflowengine', 'does not match')} + ] + }; + }, + render: function(element, check) { + if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestUserAgent') { + return; + } + + var placeholder = t('workflowengine', 'Mozilla/5.0 User Agent'); + + if (check['operator'] === 'matches' || check['operator'] === '!matches') { + placeholder = t('workflowengine', '/^Mozilla\\/5\\.0 (.?)$/i'); + } + + $(element).css('width', '250px') + .attr('placeholder', placeholder) + .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder})) + .addClass('has-tooltip') + .tooltip({ + placement: 'bottom' + }); + + if (check['operator'] === 'matches' || check['operator'] === '!matches') { + if (this._validateRegex(check['value'])) { + $(element).removeClass('invalid-input'); + } else { + $(element).addClass('invalid-input'); + } + } else { + var self = this, + data = [ + { + text: t('workflowengine', 'Sync clients'), + children: [ + {id: 'android', text: t('workflowengine', 'Android client')}, + {id: 'ios', text: t('workflowengine', 'iOS client')}, + {id: 'desktop', text: t('workflowengine', 'Desktop client')} + ] + } + ]; + if (this.predefinedValues.indexOf(check['value']) === -1) { + data.unshift({ + id: check['value'], + text: check['value'] + }) + } + + $(element).select2({ + data: data, + createSearchChoice: function(term) { + if (self.predefinedValues.indexOf(check['value']) === -1) { + return { + id: term, + text: term + }; + } + }, + id: function(element) { + return element.id; + }, + formatResult: function (tag) { + return tag.text; + }, + formatSelection: function (tag) { + return tag.text; + }, + escapeMarkup: function(m) { + return m; + } + }) + } + }, + + _validateRegex: function(string) { + var regexRegex = /^\/(.*)\/([gui]{0,3})$/, + result = regexRegex.exec(string); + return result !== null; + } + }; +})(); + +OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestUserAgentPlugin); diff --git a/apps/workflowengine/js/usergroupmembershipplugin.js b/apps/workflowengine/js/usergroupmembershipplugin.js new file mode 100644 index 00000000000..1c09e7d5ccd --- /dev/null +++ b/apps/workflowengine/js/usergroupmembershipplugin.js @@ -0,0 +1,95 @@ +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +(function() { + + OCA.WorkflowEngine = OCA.WorkflowEngine || {}; + OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}; + + OCA.WorkflowEngine.Plugins.UserGroupMembershipPlugin = { + getCheck: function() { + return { + 'class': 'OCA\\WorkflowEngine\\Check\\UserGroupMembership', + 'name': t('workflowengine', 'User group membership'), + 'operators': [ + {'operator': 'is', 'name': t('workflowengine', 'is member of')}, + {'operator': '!is', 'name': t('workflowengine', 'is not member of')} + ] + }; + }, + render: function(element, check) { + if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\UserGroupMembership') { + return; + } + + $(element).css('width', '400px'); + + $(element).select2({ + ajax: { + url: OC.generateUrl('settings/users/groups'), + dataType: 'json', + quietMillis: 100, + data: function (term) { + return { + pattern: term, //search term + filterGroups: true, + sortGroups: 2 // by groupname + }; + }, + results: function (response) { + // TODO improve error case + if (response.data === undefined) { + console.error('Failure happened', response); + return; + } + + var results = []; + + // add admin groups + $.each(response.data.adminGroups, function(id, group) { + results.push({ id: group.id }); + }); + // add groups + $.each(response.data.groups, function(id, group) { + results.push({ id: group.id }); + }); + + // TODO once limit and offset is implemented for groups we should paginate the search results + return { + results: results, + more: false + }; + } + }, + initSelection: function (element, callback) { + callback({id: element.val()}); + }, + formatResult: function (element) { + return '<span>' + escapeHTML(element.id) + '</span>'; + }, + formatSelection: function (element) { + return '<span title="'+escapeHTML(element.id)+'">'+escapeHTML(element.id)+'</span>'; + } + }); + } + }; +})(); + +OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.UserGroupMembershipPlugin); diff --git a/apps/workflowengine/lib/AppInfo/Application.php b/apps/workflowengine/lib/AppInfo/Application.php new file mode 100644 index 00000000000..b5e769d01d7 --- /dev/null +++ b/apps/workflowengine/lib/AppInfo/Application.php @@ -0,0 +1,74 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\AppInfo; + +use OCP\Util; +use OCP\WorkflowEngine\RegisterCheckEvent; + +class Application extends \OCP\AppFramework\App { + + public function __construct() { + parent::__construct('workflowengine'); + + $this->getContainer()->registerAlias('FlowOperationsController', 'OCA\WorkflowEngine\Controller\FlowOperations'); + $this->getContainer()->registerAlias('RequestTimeController', 'OCA\WorkflowEngine\Controller\RequestTime'); + } + + /** + * Register all hooks and listeners + */ + public function registerHooksAndListeners() { + $dispatcher = $this->getContainer()->getServer()->getEventDispatcher(); + $dispatcher->addListener( + 'OCP\WorkflowEngine::loadAdditionalSettingScripts', + function() { + style('workflowengine', [ + 'admin', + ]); + + script('core', [ + 'oc-backbone-webdav', + 'systemtags/systemtags', + 'systemtags/systemtagmodel', + 'systemtags/systemtagscollection', + ]); + + vendor_script('jsTimezoneDetect/jstz'); + + script('workflowengine', [ + 'admin', + + // Check plugins + 'filemimetypeplugin', + 'filesizeplugin', + 'filesystemtagsplugin', + 'requestremoteaddressplugin', + 'requesttimeplugin', + 'requesturlplugin', + 'requestuseragentplugin', + 'usergroupmembershipplugin', + ]); + }, + -100 + ); + } +} diff --git a/apps/workflowengine/lib/Check/AbstractStringCheck.php b/apps/workflowengine/lib/Check/AbstractStringCheck.php new file mode 100644 index 00000000000..0fd728e3496 --- /dev/null +++ b/apps/workflowengine/lib/Check/AbstractStringCheck.php @@ -0,0 +1,121 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\Files\Storage\IStorage; +use OCP\IL10N; +use OCP\WorkflowEngine\ICheck; + +abstract class AbstractStringCheck implements ICheck { + + /** @var array[] Nested array: [Pattern => [ActualValue => Regex Result]] */ + protected $matches; + + /** @var IL10N */ + protected $l; + + /** + * @param IL10N $l + */ + public function __construct(IL10N $l) { + $this->l = $l; + } + + /** + * @param IStorage $storage + * @param string $path + */ + public function setFileInfo(IStorage $storage, $path) { + // Nothing changes here with a different path + } + + /** + * @return string + */ + abstract protected function getActualValue(); + + /** + * @param string $operator + * @param string $value + * @return bool + */ + public function executeCheck($operator, $value) { + $actualValue = $this->getActualValue(); + return $this->executeStringCheck($operator, $value, $actualValue); + } + + /** + * @param string $operator + * @param string $checkValue + * @param string $actualValue + * @return bool + */ + protected function executeStringCheck($operator, $checkValue, $actualValue) { + if ($operator === 'is') { + return $checkValue === $actualValue; + } else if ($operator === '!is') { + return $checkValue !== $actualValue; + } else { + $match = $this->match($checkValue, $actualValue); + if ($operator === 'matches') { + return $match === 1; + } else { + return $match === 0; + } + } + } + + /** + * @param string $operator + * @param string $value + * @throws \UnexpectedValueException + */ + public function validateCheck($operator, $value) { + if (!in_array($operator, ['is', '!is', 'matches', '!matches'])) { + throw new \UnexpectedValueException($this->l->t('The given operator is invalid'), 1); + } + + if (in_array($operator, ['matches', '!matches']) && + @preg_match($value, null) === false) { + throw new \UnexpectedValueException($this->l->t('The given regular expression is invalid'), 2); + } + } + + /** + * @param string $pattern + * @param string $subject + * @return int|bool + */ + protected function match($pattern, $subject) { + $patternHash = md5($pattern); + $subjectHash = md5($subject); + if (isset($this->matches[$patternHash][$subjectHash])) { + return $this->matches[$patternHash][$subjectHash]; + } + if (!isset($this->matches[$patternHash])) { + $this->matches[$patternHash] = []; + } + $this->matches[$patternHash][$subjectHash] = preg_match($pattern, $subject); + return $this->matches[$patternHash][$subjectHash]; + } +} diff --git a/apps/workflowengine/lib/Check/FileMimeType.php b/apps/workflowengine/lib/Check/FileMimeType.php new file mode 100644 index 00000000000..1de9a70a17d --- /dev/null +++ b/apps/workflowengine/lib/Check/FileMimeType.php @@ -0,0 +1,85 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\Files\IMimeTypeDetector; +use OCP\IL10N; +use OCP\IRequest; + +class FileMimeType extends AbstractStringCheck { + + /** @var string */ + protected $mimeType; + + /** @var IRequest */ + protected $request; + + /** @var IMimeTypeDetector */ + protected $mimeTypeDetector; + + /** + * @param IL10N $l + * @param IRequest $request + * @param IMimeTypeDetector $mimeTypeDetector + */ + public function __construct(IL10N $l, IRequest $request, IMimeTypeDetector $mimeTypeDetector) { + parent::__construct($l); + $this->request = $request; + $this->mimeTypeDetector = $mimeTypeDetector; + } + + /** + * @return string + */ + protected function getActualValue() { + if ($this->mimeType !== null) { + return $this->mimeType; + } + + $this->mimeType = ''; + if ($this->isWebDAVRequest()) { + if ($this->request->getMethod() === 'PUT') { + $path = $this->request->getPathInfo(); + $this->mimeType = $this->mimeTypeDetector->detectPath($path); + } + } else if (in_array($this->request->getMethod(), ['POST', 'PUT'])) { + $files = $this->request->getUploadedFile('files'); + if (isset($files['type'][0])) { + $this->mimeType = $files['type'][0]; + } + } + return $this->mimeType; + } + + /** + * @return bool + */ + protected function isWebDAVRequest() { + return substr($this->request->getScriptName(), 0 - strlen('/remote.php')) === '/remote.php' && ( + $this->request->getPathInfo() === '/webdav' || + strpos($this->request->getPathInfo(), '/webdav/') === 0 || + $this->request->getPathInfo() === '/dav/files' || + strpos($this->request->getPathInfo(), '/dav/files/') === 0 + ); + } +} diff --git a/apps/workflowengine/lib/Check/FileSize.php b/apps/workflowengine/lib/Check/FileSize.php new file mode 100644 index 00000000000..1744793dec7 --- /dev/null +++ b/apps/workflowengine/lib/Check/FileSize.php @@ -0,0 +1,119 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\Files\Storage\IStorage; +use OCP\IL10N; +use OCP\IRequest; +use OCP\Util; +use OCP\WorkflowEngine\ICheck; + +class FileSize implements ICheck { + + /** @var int */ + protected $size; + + /** @var IL10N */ + protected $l; + + /** @var IRequest */ + protected $request; + + /** + * @param IL10N $l + * @param IRequest $request + */ + public function __construct(IL10N $l, IRequest $request) { + $this->l = $l; + $this->request = $request; + } + + /** + * @param IStorage $storage + * @param string $path + */ + public function setFileInfo(IStorage $storage, $path) { + } + + /** + * @param string $operator + * @param string $value + * @return bool + */ + public function executeCheck($operator, $value) { + $size = $this->getFileSizeFromHeader(); + + $value = Util::computerFileSize($value); + if ($size !== false) { + switch ($operator) { + case 'less': + return $size < $value; + case '!less': + return $size >= $value; + case 'greater': + return $size > $value; + case '!greater': + return $size <= $value; + } + } + return false; + } + + /** + * @param string $operator + * @param string $value + * @throws \UnexpectedValueException + */ + public function validateCheck($operator, $value) { + if (!in_array($operator, ['less', '!less', 'greater', '!greater'])) { + throw new \UnexpectedValueException($this->l->t('The given operator is invalid'), 1); + } + + if (!preg_match('/^[0-9]+[ ]?[kmgt]?b$/i', $value)) { + throw new \UnexpectedValueException($this->l->t('The given file size is invalid'), 2); + } + } + + /** + * @return string + */ + protected function getFileSizeFromHeader() { + if ($this->size !== null) { + return $this->size; + } + + $size = $this->request->getHeader('OC-Total-Length'); + if ($size === null) { + if (in_array($this->request->getMethod(), ['POST', 'PUT'])) { + $size = $this->request->getHeader('Content-Length'); + } + } + + if ($size === null) { + $size = false; + } + + $this->size = $size; + return $this->size; + } +} diff --git a/apps/workflowengine/lib/Check/FileSystemTags.php b/apps/workflowengine/lib/Check/FileSystemTags.php new file mode 100644 index 00000000000..e9b5a945967 --- /dev/null +++ b/apps/workflowengine/lib/Check/FileSystemTags.php @@ -0,0 +1,161 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\Files\Cache\ICache; +use OCP\Files\Storage\IStorage; +use OCP\IL10N; +use OCP\SystemTag\ISystemTagManager; +use OCP\SystemTag\ISystemTagObjectMapper; +use OCP\SystemTag\TagNotFoundException; +use OCP\WorkflowEngine\ICheck; + +class FileSystemTags implements ICheck { + + /** @var array */ + protected $fileIds; + + /** @var array */ + protected $fileSystemTags; + + /** @var IL10N */ + protected $l; + + /** @var ISystemTagManager */ + protected $systemTagManager; + + /** @var ISystemTagObjectMapper */ + protected $systemTagObjectMapper; + + /** @var IStorage */ + protected $storage; + + /** @var string */ + protected $path; + + /** + * @param IL10N $l + * @param ISystemTagManager $systemTagManager + * @param ISystemTagObjectMapper $systemTagObjectMapper + */ + public function __construct(IL10N $l, ISystemTagManager $systemTagManager, ISystemTagObjectMapper $systemTagObjectMapper) { + $this->l = $l; + $this->systemTagManager = $systemTagManager; + $this->systemTagObjectMapper = $systemTagObjectMapper; + } + + /** + * @param IStorage $storage + * @param string $path + */ + public function setFileInfo(IStorage $storage, $path) { + $this->storage = $storage; + $this->path = $path; + } + + /** + * @param string $operator + * @param string $value + * @return bool + */ + public function executeCheck($operator, $value) { + $systemTags = $this->getSystemTags(); + return ($operator === 'is') === in_array($value, $systemTags); + } + + /** + * @param string $operator + * @param string $value + * @throws \UnexpectedValueException + */ + public function validateCheck($operator, $value) { + if (!in_array($operator, ['is', '!is'])) { + throw new \UnexpectedValueException($this->l->t('The given operator is invalid'), 1); + } + + try { + $this->systemTagManager->getTagsByIds($value); + } catch (TagNotFoundException $e) { + throw new \UnexpectedValueException($this->l->t('The given tag id is invalid'), 2); + } catch (\InvalidArgumentException $e) { + throw new \UnexpectedValueException($this->l->t('The given tag id is invalid'), 3); + } + } + + /** + * Get the ids of the assigned system tags + * @return string[] + */ + protected function getSystemTags() { + $cache = $this->storage->getCache(); + $fileIds = $this->getFileIds($cache, $this->path); + + $systemTags = []; + foreach ($fileIds as $i => $fileId) { + if (isset($this->fileSystemTags[$fileId])) { + $systemTags[] = $this->fileSystemTags[$fileId]; + unset($fileIds[$i]); + } + } + + if (!empty($fileIds)) { + $mappedSystemTags = $this->systemTagObjectMapper->getTagIdsForObjects($fileIds, 'files'); + foreach ($mappedSystemTags as $fileId => $fileSystemTags) { + $this->fileSystemTags[$fileId] = $fileSystemTags; + $systemTags[] = $fileSystemTags; + } + } + + $systemTags = call_user_func_array('array_merge', $systemTags); + $systemTags = array_unique($systemTags); + return $systemTags; + } + + /** + * Get the file ids of the given path and its parents + * @param ICache $cache + * @param string $path + * @return int[] + */ + protected function getFileIds(ICache $cache, $path) { + $cacheId = $cache->getNumericStorageId(); + if (isset($this->fileIds[$cacheId][$path])) { + return $this->fileIds[$cacheId][$path]; + } + + if ($path !== dirname($path)) { + $parentIds = $this->getFileIds($cache, dirname($path)); + } else { + return []; + } + + $fileId = $cache->getId($path); + if ($fileId !== -1) { + $parentIds[] = $cache->getId($path); + } + + $this->fileIds[$cacheId][$path] = $parentIds; + + return $parentIds; + } +} diff --git a/apps/workflowengine/lib/Check/RequestRemoteAddress.php b/apps/workflowengine/lib/Check/RequestRemoteAddress.php new file mode 100644 index 00000000000..de9738fb631 --- /dev/null +++ b/apps/workflowengine/lib/Check/RequestRemoteAddress.php @@ -0,0 +1,154 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\Files\Storage\IStorage; +use OCP\IL10N; +use OCP\IRequest; +use OCP\WorkflowEngine\ICheck; + +class RequestRemoteAddress implements ICheck { + + /** @var IL10N */ + protected $l; + + /** @var IRequest */ + protected $request; + + /** + * @param IL10N $l + * @param IRequest $request + */ + public function __construct(IL10N $l, IRequest $request) { + $this->l = $l; + $this->request = $request; + } + + /** + * @param IStorage $storage + * @param string $path + */ + public function setFileInfo(IStorage $storage, $path) { + // A different path doesn't change time, so nothing to do here. + } + + /** + * @param string $operator + * @param string $value + * @return bool + */ + public function executeCheck($operator, $value) { + $actualValue = $this->request->getRemoteAddress(); + $decodedValue = explode('/', $value); + + if ($operator === 'matchesIPv4') { + return $this->matchIPv4($actualValue, $decodedValue[0], $decodedValue[1]); + } else if ($operator === '!matchesIPv4') { + return !$this->matchIPv4($actualValue, $decodedValue[0], $decodedValue[1]); + } else if ($operator === 'matchesIPv6') { + return $this->matchIPv6($actualValue, $decodedValue[0], $decodedValue[1]); + } else { + return !$this->matchIPv6($actualValue, $decodedValue[0], $decodedValue[1]); + } + } + + /** + * @param string $operator + * @param string $value + * @throws \UnexpectedValueException + */ + public function validateCheck($operator, $value) { + if (!in_array($operator, ['matchesIPv4', '!matchesIPv4', 'matchesIPv6', '!matchesIPv6'])) { + throw new \UnexpectedValueException($this->l->t('The given operator is invalid'), 1); + } + + $decodedValue = explode('/', $value); + if (sizeof($decodedValue) !== 2) { + throw new \UnexpectedValueException($this->l->t('The given IP range is invalid'), 2); + } + + if (in_array($operator, ['matchesIPv4', '!matchesIPv4'])) { + if (!filter_var($decodedValue[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { + throw new \UnexpectedValueException($this->l->t('The given IP range is not valid for IPv4'), 3); + } + if ($decodedValue[1] > 32 || $decodedValue[1] <= 0) { + throw new \UnexpectedValueException($this->l->t('The given IP range is not valid for IPv4'), 4); + } + } else { + if (!filter_var($decodedValue[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + throw new \UnexpectedValueException($this->l->t('The given IP range is not valid for IPv6'), 3); + } + if ($decodedValue[1] > 128 || $decodedValue[1] <= 0) { + throw new \UnexpectedValueException($this->l->t('The given IP range is not valid for IPv6'), 4); + } + } + } + + /** + * Based on http://stackoverflow.com/a/594134 + * @param string $ip + * @param string $rangeIp + * @param int $bits + * @return bool + */ + protected function matchIPv4($ip, $rangeIp, $bits) { + $rangeDecimal = ip2long($rangeIp); + $ipDecimal = ip2long($ip); + $mask = -1 << (32 - $bits); + return ($ipDecimal & $mask) === ($rangeDecimal & $mask); + } + + /** + * Based on http://stackoverflow.com/a/7951507 + * @param string $ip + * @param string $rangeIp + * @param int $bits + * @return bool + */ + protected function matchIPv6($ip, $rangeIp, $bits) { + $ipNet = inet_pton($ip); + $binaryIp = $this->ipv6ToBits($ipNet); + $ipNetBits = substr($binaryIp, 0, $bits); + + $rangeNet = inet_pton($rangeIp); + $binaryRange = $this->ipv6ToBits($rangeNet); + $rangeNetBits = substr($binaryRange, 0, $bits); + + return $ipNetBits === $rangeNetBits; + } + + /** + * Based on http://stackoverflow.com/a/7951507 + * @param string $packedIp + * @return string + */ + protected function ipv6ToBits($packedIp) { + $unpackedIp = unpack('A16', $packedIp); + $unpackedIp = str_split($unpackedIp[1]); + $binaryIp = ''; + foreach ($unpackedIp as $char) { + $binaryIp .= str_pad(decbin(ord($char)), 8, '0', STR_PAD_LEFT); + } + return str_pad($binaryIp, 128, '0', STR_PAD_RIGHT); + } +} diff --git a/apps/workflowengine/lib/Check/RequestTime.php b/apps/workflowengine/lib/Check/RequestTime.php new file mode 100644 index 00000000000..2aa79e77673 --- /dev/null +++ b/apps/workflowengine/lib/Check/RequestTime.php @@ -0,0 +1,129 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\AppFramework\Utility\ITimeFactory; +use OCP\Files\Storage\IStorage; +use OCP\IL10N; +use OCP\WorkflowEngine\ICheck; + +class RequestTime implements ICheck { + + const REGEX_TIME = '([0-1][0-9]|2[0-3]):([0-5][0-9])'; + const REGEX_TIMEZONE = '([a-zA-Z]+(?:\\/[a-zA-Z\-\_]+)+)'; + + /** @var bool[] */ + protected $cachedResults; + + /** @var IL10N */ + protected $l; + + /** @var ITimeFactory */ + protected $timeFactory; + + /** + * @param ITimeFactory $timeFactory + */ + public function __construct(IL10N $l, ITimeFactory $timeFactory) { + $this->l = $l; + $this->timeFactory = $timeFactory; + } + + /** + * @param IStorage $storage + * @param string $path + */ + public function setFileInfo(IStorage $storage, $path) { + // A different path doesn't change time, so nothing to do here. + } + + /** + * @param string $operator + * @param string $value + * @return bool + */ + public function executeCheck($operator, $value) { + $valueHash = md5($value); + + if (isset($this->cachedResults[$valueHash])) { + return $this->cachedResults[$valueHash]; + } + + $timestamp = $this->timeFactory->getTime(); + + $values = json_decode($value, true); + $timestamp1 = $this->getTimestamp($timestamp, $values[0]); + $timestamp2 = $this->getTimestamp($timestamp, $values[1]); + + if ($timestamp1 < $timestamp2) { + $in = $timestamp1 <= $timestamp && $timestamp <= $timestamp2; + } else { + $in = $timestamp1 <= $timestamp || $timestamp <= $timestamp2; + } + + return ($operator === 'in') ? $in : !$in; + } + + /** + * @param int $currentTimestamp + * @param string $value Format: "H:i e" + * @return int + */ + protected function getTimestamp($currentTimestamp, $value) { + list($time1, $timezone1) = explode(' ', $value); + list($hour1, $minute1) = explode(':', $time1); + $date1 = new \DateTime('now', new \DateTimeZone($timezone1)); + $date1->setTimestamp($currentTimestamp); + $date1->setTime($hour1, $minute1); + + return $date1->getTimestamp(); + } + + /** + * @param string $operator + * @param string $value + * @throws \UnexpectedValueException + */ + public function validateCheck($operator, $value) { + if (!in_array($operator, ['in', '!in'])) { + throw new \UnexpectedValueException($this->l->t('The given operator is invalid'), 1); + } + + $regexValue = '\"' . self::REGEX_TIME . ' ' . self::REGEX_TIMEZONE . '\"'; + $result = preg_match('/^\[' . $regexValue . ',' . $regexValue . '\]$/', $value, $matches); + if (!$result) { + throw new \UnexpectedValueException($this->l->t('The given time span is invalid'), 2); + } + + $values = json_decode($value, true); + $time1 = \DateTime::createFromFormat('H:i e', $values[0]); + if ($time1 === false) { + throw new \UnexpectedValueException($this->l->t('The given start time is invalid'), 3); + } + + $time2 = \DateTime::createFromFormat('H:i e', $values[1]); + if ($time2 === false) { + throw new \UnexpectedValueException($this->l->t('The given end time is invalid'), 4); + } + } +} diff --git a/apps/workflowengine/lib/Check/RequestURL.php b/apps/workflowengine/lib/Check/RequestURL.php new file mode 100644 index 00000000000..36d41c101f2 --- /dev/null +++ b/apps/workflowengine/lib/Check/RequestURL.php @@ -0,0 +1,92 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\IL10N; +use OCP\IRequest; + +class RequestURL extends AbstractStringCheck { + + /** @var string */ + protected $url; + + /** @var IRequest */ + protected $request; + + /** + * @param IL10N $l + * @param IRequest $request + */ + public function __construct(IL10N $l, IRequest $request) { + parent::__construct($l); + $this->request = $request; + } + + /** + * @param string $operator + * @param string $value + * @return bool + */ + public function executeCheck($operator, $value) { + $actualValue = $this->getActualValue(); + if (in_array($operator, ['is', '!is'])) { + switch ($value) { + case 'webdav': + if ($operator === 'is') { + return $this->isWebDAVRequest(); + } else { + return !$this->isWebDAVRequest(); + } + } + } + return $this->executeStringCheck($operator, $value, $actualValue); + } + + /** + * @return string + */ + protected function getActualValue() { + if ($this->url !== null) { + return $this->url; + } + + $this->url = $this->request->getServerProtocol() . '://';// E.g. http(s) + :// + $this->url .= $this->request->getServerHost();// E.g. localhost + $this->url .= $this->request->getScriptName();// E.g. /nextcloud/index.php + $this->url .= $this->request->getPathInfo();// E.g. /apps/files_texteditor/ajax/loadfile + + return $this->url; // E.g. https://localhost/nextcloud/index.php/apps/files_texteditor/ajax/loadfile + } + + /** + * @return bool + */ + protected function isWebDAVRequest() { + return substr($this->request->getScriptName(), 0 - strlen('/remote.php')) === '/remote.php' && ( + $this->request->getPathInfo() === '/webdav' || + strpos($this->request->getPathInfo(), '/webdav/') === 0 || + $this->request->getPathInfo() === '/dav/files' || + strpos($this->request->getPathInfo(), '/dav/files/') === 0 + ); + } +} diff --git a/apps/workflowengine/lib/Check/RequestUserAgent.php b/apps/workflowengine/lib/Check/RequestUserAgent.php new file mode 100644 index 00000000000..7a8d4a71acf --- /dev/null +++ b/apps/workflowengine/lib/Check/RequestUserAgent.php @@ -0,0 +1,74 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\IL10N; +use OCP\IRequest; + +class RequestUserAgent extends AbstractStringCheck { + + /** @var IRequest */ + protected $request; + + /** + * @param IL10N $l + * @param IRequest $request + */ + public function __construct(IL10N $l, IRequest $request) { + parent::__construct($l); + $this->request = $request; + } + + /** + * @param string $operator + * @param string $value + * @return bool + */ + public function executeCheck($operator, $value) { + $actualValue = $this->getActualValue(); + if (in_array($operator, ['is', '!is'])) { + switch ($value) { + case 'android': + $operator = $operator === 'is' ? 'matches' : '!matches'; + $value = IRequest::USER_AGENT_CLIENT_ANDROID; + break; + case 'ios': + $operator = $operator === 'is' ? 'matches' : '!matches'; + $value = IRequest::USER_AGENT_CLIENT_IOS; + break; + case 'desktop': + $operator = $operator === 'is' ? 'matches' : '!matches'; + $value = IRequest::USER_AGENT_CLIENT_DESKTOP; + break; + } + } + return $this->executeStringCheck($operator, $value, $actualValue); + } + + /** + * @return string + */ + protected function getActualValue() { + return (string) $this->request->getHeader('User-Agent'); + } +} diff --git a/apps/workflowengine/lib/Check/UserGroupMembership.php b/apps/workflowengine/lib/Check/UserGroupMembership.php new file mode 100644 index 00000000000..fd6ba00d092 --- /dev/null +++ b/apps/workflowengine/lib/Check/UserGroupMembership.php @@ -0,0 +1,114 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Check; + + +use OCP\Files\Storage\IStorage; +use OCP\IGroupManager; +use OCP\IL10N; +use OCP\IUser; +use OCP\IUserSession; +use OCP\WorkflowEngine\ICheck; + +class UserGroupMembership implements ICheck { + + /** @var string */ + protected $cachedUser; + + /** @var string[] */ + protected $cachedGroupMemberships; + + /** @var IUserSession */ + protected $userSession; + + /** @var IGroupManager */ + protected $groupManager; + + /** @var IL10N */ + protected $l; + + /** + * @param IUserSession $userSession + * @param IGroupManager $groupManager + * @param IL10N $l + */ + public function __construct(IUserSession $userSession, IGroupManager $groupManager, IL10N $l) { + $this->userSession = $userSession; + $this->groupManager = $groupManager; + $this->l = $l; + } + + /** + * @param IStorage $storage + * @param string $path + */ + public function setFileInfo(IStorage $storage, $path) { + // A different path doesn't change group memberships, so nothing to do here. + } + + /** + * @param string $operator + * @param string $value + * @return bool + */ + public function executeCheck($operator, $value) { + $user = $this->userSession->getUser(); + + if ($user instanceof IUser) { + $groupIds = $this->getUserGroups($user); + return ($operator === 'is') === in_array($value, $groupIds); + } else { + return $operator !== 'is'; + } + } + + + /** + * @param string $operator + * @param string $value + * @throws \UnexpectedValueException + */ + public function validateCheck($operator, $value) { + if (!in_array($operator, ['is', '!is'])) { + throw new \UnexpectedValueException($this->l->t('The given operator is invalid'), 1); + } + + if (!$this->groupManager->groupExists($value)) { + throw new \UnexpectedValueException($this->l->t('The given group does not exist'), 2); + } + } + + /** + * @param IUser $user + * @return string[] + */ + protected function getUserGroups(IUser $user) { + $uid = $user->getUID(); + + if ($this->cachedUser !== $uid) { + $this->cachedUser = $uid; + $this->cachedGroupMemberships = $this->groupManager->getUserGroupIds($user); + } + + return $this->cachedGroupMemberships; + } +} diff --git a/apps/workflowengine/lib/Controller/FlowOperations.php b/apps/workflowengine/lib/Controller/FlowOperations.php new file mode 100644 index 00000000000..94b8b9ddc79 --- /dev/null +++ b/apps/workflowengine/lib/Controller/FlowOperations.php @@ -0,0 +1,122 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Controller; + +use OCA\WorkflowEngine\Manager; +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\JSONResponse; +use OCP\IRequest; + +class FlowOperations extends Controller { + + /** @var Manager */ + protected $manager; + + /** + * @param IRequest $request + * @param Manager $manager + */ + public function __construct(IRequest $request, Manager $manager) { + parent::__construct('workflowengine', $request); + $this->manager = $manager; + } + + /** + * @NoCSRFRequired + * + * @param string $class + * @return JSONResponse + */ + public function getOperations($class) { + $operations = $this->manager->getOperations($class); + + foreach ($operations as &$operation) { + $operation = $this->prepareOperation($operation); + } + + return new JSONResponse($operations); + } + + /** + * @param string $class + * @param string $name + * @param array[] $checks + * @param string $operation + * @return JSONResponse The added element + */ + public function addOperation($class, $name, $checks, $operation) { + try { + $operation = $this->manager->addOperation($class, $name, $checks, $operation); + $operation = $this->prepareOperation($operation); + return new JSONResponse($operation); + } catch (\UnexpectedValueException $e) { + return new JSONResponse($e->getMessage(), Http::STATUS_BAD_REQUEST); + } + } + + /** + * @param int $id + * @param string $name + * @param array[] $checks + * @param string $operation + * @return JSONResponse The updated element + */ + public function updateOperation($id, $name, $checks, $operation) { + try { + $operation = $this->manager->updateOperation($id, $name, $checks, $operation); + $operation = $this->prepareOperation($operation); + return new JSONResponse($operation); + } catch (\UnexpectedValueException $e) { + return new JSONResponse($e->getMessage(), Http::STATUS_BAD_REQUEST); + } + } + + /** + * @param int $id + * @return JSONResponse + */ + public function deleteOperation($id) { + $deleted = $this->manager->deleteOperation((int) $id); + return new JSONResponse($deleted); + } + + /** + * @param array $operation + * @return array + */ + protected function prepareOperation(array $operation) { + $checkIds = json_decode($operation['checks']); + $checks = $this->manager->getChecks($checkIds); + + $operation['checks'] = []; + foreach ($checks as $check) { + // Remove internal values + unset($check['id']); + unset($check['hash']); + + $operation['checks'][] = $check; + } + + return $operation; + } +} diff --git a/apps/workflowengine/lib/Controller/RequestTime.php b/apps/workflowengine/lib/Controller/RequestTime.php new file mode 100644 index 00000000000..dd0efa89b91 --- /dev/null +++ b/apps/workflowengine/lib/Controller/RequestTime.php @@ -0,0 +1,52 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Controller; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\JSONResponse; + +class RequestTime extends Controller { + + /** + * @NoAdminRequired + * + * @param string $search + * @return JSONResponse + */ + public function getTimezones($search = '') { + $timezones = \DateTimeZone::listIdentifiers(); + + if ($search !== '') { + $timezones = array_filter($timezones, function ($timezone) use ($search) { + return strpos(strtolower($timezone), strtolower($search)) !== false; + }); + } + + $timezones = array_slice($timezones, 0, 10); + + $response = []; + foreach ($timezones as $timezone) { + $response[$timezone] = $timezone; + } + return new JSONResponse($response); + } +} diff --git a/apps/workflowengine/lib/Manager.php b/apps/workflowengine/lib/Manager.php new file mode 100644 index 00000000000..b72836a919c --- /dev/null +++ b/apps/workflowengine/lib/Manager.php @@ -0,0 +1,314 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine; + + +use OCP\AppFramework\QueryException; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\Files\Storage\IStorage; +use OCP\IDBConnection; +use OCP\IL10N; +use OCP\IServerContainer; +use OCP\WorkflowEngine\ICheck; +use OCP\WorkflowEngine\IManager; + +class Manager implements IManager { + + /** @var IStorage */ + protected $storage; + + /** @var string */ + protected $path; + + /** @var array[] */ + protected $operations = []; + + /** @var array[] */ + protected $checks = []; + + /** @var IDBConnection */ + protected $connection; + + /** @var IServerContainer|\OC\Server */ + protected $container; + + /** @var IL10N */ + protected $l; + + /** + * @param IDBConnection $connection + * @param IServerContainer $container + * @param IL10N $l + */ + public function __construct(IDBConnection $connection, IServerContainer $container, IL10N $l) { + $this->connection = $connection; + $this->container = $container; + $this->l = $l; + } + + /** + * @inheritdoc + */ + public function setFileInfo(IStorage $storage, $path) { + $this->storage = $storage; + $this->path = $path; + } + + /** + * @inheritdoc + */ + public function getMatchingOperations($class, $returnFirstMatchingOperationOnly = true) { + $operations = $this->getOperations($class); + + $matches = []; + foreach ($operations as $operation) { + $checkIds = json_decode($operation['checks'], true); + $checks = $this->getChecks($checkIds); + + foreach ($checks as $check) { + if (!$this->check($check)) { + // Check did not match, continue with the next operation + continue 2; + } + } + + if ($returnFirstMatchingOperationOnly) { + return $operation; + } + $matches[] = $operation; + } + + return $matches; + } + + /** + * @param array $check + * @return bool + */ + protected function check(array $check) { + try { + $checkInstance = $this->container->query($check['class']); + } catch (QueryException $e) { + // Check does not exist, assume it matches. + return true; + } + + if ($checkInstance instanceof ICheck) { + $checkInstance->setFileInfo($this->storage, $this->path); + return $checkInstance->executeCheck($check['operator'], $check['value']); + } else { + // Check is invalid + throw new \UnexpectedValueException($this->l->t('Check %s is invalid or does not exist', $check['class'])); + } + } + + /** + * @param string $class + * @return array[] + */ + public function getOperations($class) { + if (isset($this->operations[$class])) { + return $this->operations[$class]; + } + + $query = $this->connection->getQueryBuilder(); + + $query->select('*') + ->from('flow_operations') + ->where($query->expr()->eq('class', $query->createNamedParameter($class))); + $result = $query->execute(); + + $this->operations[$class] = []; + while ($row = $result->fetch()) { + $this->operations[$class][] = $row; + } + $result->closeCursor(); + + return $this->operations[$class]; + } + + /** + * @param int $id + * @return array + * @throws \UnexpectedValueException + */ + protected function getOperation($id) { + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('flow_operations') + ->where($query->expr()->eq('id', $query->createNamedParameter($id))); + $result = $query->execute(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row) { + return $row; + } + + throw new \UnexpectedValueException($this->l->t('Operation #%s does not exist', $id)); + } + + /** + * @param string $class + * @param string $name + * @param array[] $checks + * @param string $operation + * @return array The added operation + * @throws \UnexpectedValueException + */ + public function addOperation($class, $name, array $checks, $operation) { + $checkIds = []; + foreach ($checks as $check) { + $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']); + } + + $query = $this->connection->getQueryBuilder(); + $query->insert('flow_operations') + ->values([ + 'class' => $query->createNamedParameter($class), + 'name' => $query->createNamedParameter($name), + 'checks' => $query->createNamedParameter(json_encode(array_unique($checkIds))), + 'operation' => $query->createNamedParameter($operation), + ]); + $query->execute(); + + $id = $query->getLastInsertId(); + return $this->getOperation($id); + } + + /** + * @param int $id + * @param string $name + * @param array[] $checks + * @param string $operation + * @return array The updated operation + * @throws \UnexpectedValueException + */ + public function updateOperation($id, $name, array $checks, $operation) { + $checkIds = []; + foreach ($checks as $check) { + $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']); + } + + $query = $this->connection->getQueryBuilder(); + $query->update('flow_operations') + ->set('name', $query->createNamedParameter($name)) + ->set('checks', $query->createNamedParameter(json_encode(array_unique($checkIds)))) + ->set('operation', $query->createNamedParameter($operation)) + ->where($query->expr()->eq('id', $query->createNamedParameter($id))); + $query->execute(); + + return $this->getOperation($id); + } + + /** + * @param int $id + * @return bool + * @throws \UnexpectedValueException + */ + public function deleteOperation($id) { + $query = $this->connection->getQueryBuilder(); + $query->delete('flow_operations') + ->where($query->expr()->eq('id', $query->createNamedParameter($id))); + return (bool) $query->execute(); + } + + /** + * @param int[] $checkIds + * @return array[] + */ + public function getChecks(array $checkIds) { + $checkIds = array_map('intval', $checkIds); + + $checks = []; + foreach ($checkIds as $i => $checkId) { + if (isset($this->checks[$checkId])) { + $checks[$checkId] = $this->checks[$checkId]; + unset($checkIds[$i]); + } + } + + if (empty($checkIds)) { + return $checks; + } + + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('flow_checks') + ->where($query->expr()->in('id', $query->createNamedParameter($checkIds, IQueryBuilder::PARAM_INT_ARRAY))); + $result = $query->execute(); + + $checks = []; + while ($row = $result->fetch()) { + $this->checks[(int) $row['id']] = $row; + $checks[(int) $row['id']] = $row; + } + $result->closeCursor(); + + $checkIds = array_diff($checkIds, array_keys($checks)); + + if (!empty($checkIds)) { + $missingCheck = array_pop($checkIds); + throw new \UnexpectedValueException($this->l->t('Check #%s does not exist', $missingCheck)); + } + + return $checks; + } + + /** + * @param string $class + * @param string $operator + * @param string $value + * @return int Check unique ID + * @throws \UnexpectedValueException + */ + protected function addCheck($class, $operator, $value) { + /** @var ICheck $check */ + $check = $this->container->query($class); + $check->validateCheck($operator, $value); + + $hash = md5($class . '::' . $operator . '::' . $value); + + $query = $this->connection->getQueryBuilder(); + $query->select('id') + ->from('flow_checks') + ->where($query->expr()->eq('hash', $query->createNamedParameter($hash))); + $result = $query->execute(); + + if ($row = $result->fetch()) { + $result->closeCursor(); + return (int) $row['id']; + } + + $query = $this->connection->getQueryBuilder(); + $query->insert('flow_checks') + ->values([ + 'class' => $query->createNamedParameter($class), + 'operator' => $query->createNamedParameter($operator), + 'value' => $query->createNamedParameter($value), + 'hash' => $query->createNamedParameter($hash), + ]); + $query->execute(); + + return $query->getLastInsertId(); + } +} diff --git a/apps/workflowengine/templates/admin.php b/apps/workflowengine/templates/admin.php new file mode 100644 index 00000000000..ea4168b0ff9 --- /dev/null +++ b/apps/workflowengine/templates/admin.php @@ -0,0 +1,84 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +/** @var array $_ */ +/** @var \OCP\IL10N $l */ +?> +<div id="<?php p($_['appid']); ?>" class="section workflowengine"> + <h2 class="inlineblock"><?php p($_['heading']); ?></h2> + + <?php if ($_['description']): ?> + <p><?php p($_['description']); ?></p> + <?php endif; ?> + + <script type="text/template" id="operations-template"> + <div class="operations"></div> + <button class="button-add-operation"><?php p($l->t('Add rule group')); ?></button> + </script> + + <script type="text/template" id="operation-template"> + <div class="operation{{#if hasChanged}} modified{{/if}}"> + <input type="text" class="operation-name" placeholder="<?php p($l->t('Short rule description')); ?>" value="{{operation.name}}"> + {{! delete only makes sense if the operation is already saved }} + {{#if operation.id}} + <span class="button-delete pull-right icon-delete"></span> + {{/if}} + <input type="text" class="pull-right operation-operation" value="{{operation.operation}}"> + + <div class="checks"> + {{#each operation.checks}} + <div class="check" data-id="{{@index}}"> + <select class="check-class"> + {{#each ../classes}} + <option value="{{class}}" {{selectItem class ../class}}>{{name}}</option> + {{/each}} + </select> + <select class="check-operator"> + {{#each (getOperators class)}} + <option value="{{operator}}" {{selectItem operator ../operator}}>{{name}}</option> + {{/each}} + </select> + <input type="text" class="check-value" value="{{value}}"> + <span class="button-delete-check pull-right icon-delete"></span> + </div> + {{/each}} + </div> + <button class="button-add"><?php p($l->t('Add rule')); ?></button> + {{#if hasChanged}} + {{! reset only makes sense if the operation is already saved }} + {{#if operation.id}} + <button class="button-reset pull-right"><?php p($l->t('Reset')); ?></button> + {{/if}} + <button class="button-save pull-right"><?php p($l->t('Save')); ?></button> + {{/if}} + {{#if saving}} + <span class="icon-loading-small pull-right"></span> + <span class="pull-right"><?php p($l->t('Saving…')); ?></span> + {{else}}{{#if message}} + <span class="msg pull-right {{#if errorMessage}}error{{else}}success{{/if}}"> + {{message}}{{#if errorMessage}} {{errorMessage}}{{/if}} + </span> + {{/if}}{{/if}} + </div> + </script> + + <div class="rules"><span class="icon-loading-small"></span> <?php p($l->t('Loading…')); ?></div> +</div> diff --git a/apps/workflowengine/tests/Check/AbstractStringCheckTest.php b/apps/workflowengine/tests/Check/AbstractStringCheckTest.php new file mode 100644 index 00000000000..91da8931604 --- /dev/null +++ b/apps/workflowengine/tests/Check/AbstractStringCheckTest.php @@ -0,0 +1,149 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Tests\Check; + + +class AbstractStringCheckTest extends \Test\TestCase { + + protected function getCheckMock() { + $l = $this->getMockBuilder('OCP\IL10N') + ->disableOriginalConstructor() + ->getMock(); + $l->expects($this->any()) + ->method('t') + ->willReturnCallback(function($string, $args) { + return sprintf($string, $args); + }); + + $check = $this->getMockBuilder('OCA\WorkflowEngine\Check\AbstractStringCheck') + ->setConstructorArgs([ + $l, + ]) + ->setMethods([ + 'setPath', + 'executeCheck', + 'getActualValue', + ]) + ->getMock(); + + return $check; + } + + public function dataExecuteStringCheck() { + return [ + ['is', 'same', 'same', true], + ['is', 'different', 'not the same', false], + ['!is', 'same', 'same', false], + ['!is', 'different', 'not the same', true], + + ['matches', '/match/', 'match', true], + ['matches', '/different/', 'not the same', false], + ['!matches', '/match/', 'match', false], + ['!matches', '/different/', 'not the same', true], + ]; + } + + /** + * @dataProvider dataExecuteStringCheck + * @param string $operation + * @param string $checkValue + * @param string $actualValue + * @param bool $expected + */ + public function testExecuteStringCheck($operation, $checkValue, $actualValue, $expected) { + $check = $this->getCheckMock(); + + /** @var \OCA\WorkflowEngine\Check\AbstractStringCheck $check */ + $this->assertEquals($expected, $this->invokePrivate($check, 'executeStringCheck', [$operation, $checkValue, $actualValue])); + } + + public function dataValidateCheck() { + return [ + ['is', '/Invalid(Regex/'], + ['!is', '/Invalid(Regex/'], + ['matches', '/Valid(Regex)/'], + ['!matches', '/Valid(Regex)/'], + ]; + } + + /** + * @dataProvider dataValidateCheck + * @param string $operator + * @param string $value + */ + public function testValidateCheck($operator, $value) { + $check = $this->getCheckMock(); + + /** @var \OCA\WorkflowEngine\Check\AbstractStringCheck $check */ + $check->validateCheck($operator, $value); + } + + public function dataValidateCheckInvalid() { + return [ + ['!!is', '', 1, 'The given operator is invalid'], + ['less', '', 1, 'The given operator is invalid'], + ['matches', '/Invalid(Regex/', 2, 'The given regular expression is invalid'], + ['!matches', '/Invalid(Regex/', 2, 'The given regular expression is invalid'], + ]; + } + + /** + * @dataProvider dataValidateCheckInvalid + * @param $operator + * @param $value + * @param $exceptionCode + * @param $exceptionMessage + */ + public function testValidateCheckInvalid($operator, $value, $exceptionCode, $exceptionMessage) { + $check = $this->getCheckMock(); + + try { + /** @var \OCA\WorkflowEngine\Check\AbstractStringCheck $check */ + $check->validateCheck($operator, $value); + } catch (\UnexpectedValueException $e) { + $this->assertEquals($exceptionCode, $e->getCode()); + $this->assertEquals($exceptionMessage, $e->getMessage()); + } + } + + public function dataMatch() { + return [ + ['/valid/', 'valid', [], true], + ['/valid/', 'valid', [md5('/valid/') => [md5('valid') => false]], false], // Cache hit + ]; + } + + /** + * @dataProvider dataMatch + * @param string $pattern + * @param string $subject + * @param array[] $matches + * @param bool $expected + */ + public function testMatch($pattern, $subject, $matches, $expected) { + $check = $this->getCheckMock(); + + $this->invokePrivate($check, 'matches', [$matches]); + + $this->assertEquals($expected, $this->invokePrivate($check, 'match', [$pattern, $subject])); + } +} diff --git a/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php b/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php new file mode 100644 index 00000000000..efe8f6372dd --- /dev/null +++ b/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php @@ -0,0 +1,138 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Tests\Check; + + +class RequestRemoteAddressTest extends \Test\TestCase { + + /** @var \OCP\IRequest|\PHPUnit_Framework_MockObject_MockObject */ + protected $request; + + /** + * @return \OCP\IL10N|\PHPUnit_Framework_MockObject_MockObject + */ + protected function getL10NMock() { + $l = $this->getMockBuilder('OCP\IL10N') + ->disableOriginalConstructor() + ->getMock(); + $l->expects($this->any()) + ->method('t') + ->willReturnCallback(function ($string, $args) { + return sprintf($string, $args); + }); + return $l; + } + + protected function setUp() { + parent::setUp(); + + $this->request = $this->getMockBuilder('OCP\IRequest') + ->getMock(); + } + + public function dataExecuteCheckIPv4() { + return [ + ['127.0.0.1/32', '127.0.0.1', true], + ['127.0.0.1/32', '127.0.0.0', false], + ['127.0.0.1/31', '127.0.0.0', true], + ['127.0.0.1/32', '127.0.0.2', false], + ['127.0.0.1/31', '127.0.0.2', false], + ['127.0.0.1/30', '127.0.0.2', true], + ]; + } + + /** + * @dataProvider dataExecuteCheckIPv4 + * @param string $value + * @param string $ip + * @param bool $expected + */ + public function testExecuteCheckMatchesIPv4($value, $ip, $expected) { + $check = new \OCA\WorkflowEngine\Check\RequestRemoteAddress($this->getL10NMock(), $this->request); + + $this->request->expects($this->once()) + ->method('getRemoteAddress') + ->willReturn($ip); + + $this->assertEquals($expected, $check->executeCheck('matchesIPv4', $value)); + } + + /** + * @dataProvider dataExecuteCheckIPv4 + * @param string $value + * @param string $ip + * @param bool $expected + */ + public function testExecuteCheckNotMatchesIPv4($value, $ip, $expected) { + $check = new \OCA\WorkflowEngine\Check\RequestRemoteAddress($this->getL10NMock(), $this->request); + + $this->request->expects($this->once()) + ->method('getRemoteAddress') + ->willReturn($ip); + + $this->assertEquals(!$expected, $check->executeCheck('!matchesIPv4', $value)); + } + + public function dataExecuteCheckIPv6() { + return [ + ['::1/128', '::1', true], + ['::2/128', '::3', false], + ['::2/127', '::3', true], + ['::1/128', '::2', false], + ['::1/127', '::2', false], + ['::1/126', '::2', true], + ['1234::1/127', '1234::', true], + ]; + } + + /** + * @dataProvider dataExecuteCheckIPv6 + * @param string $value + * @param string $ip + * @param bool $expected + */ + public function testExecuteCheckMatchesIPv6($value, $ip, $expected) { + $check = new \OCA\WorkflowEngine\Check\RequestRemoteAddress($this->getL10NMock(), $this->request); + + $this->request->expects($this->once()) + ->method('getRemoteAddress') + ->willReturn($ip); + + $this->assertEquals($expected, $check->executeCheck('matchesIPv6', $value)); + } + + /** + * @dataProvider dataExecuteCheckIPv6 + * @param string $value + * @param string $ip + * @param bool $expected + */ + public function testExecuteCheckNotMatchesIPv6($value, $ip, $expected) { + $check = new \OCA\WorkflowEngine\Check\RequestRemoteAddress($this->getL10NMock(), $this->request); + + $this->request->expects($this->once()) + ->method('getRemoteAddress') + ->willReturn($ip); + + $this->assertEquals(!$expected, $check->executeCheck('!matchesIPv6', $value)); + } +} diff --git a/apps/workflowengine/tests/Check/RequestTimeTest.php b/apps/workflowengine/tests/Check/RequestTimeTest.php new file mode 100644 index 00000000000..c07b4bf8775 --- /dev/null +++ b/apps/workflowengine/tests/Check/RequestTimeTest.php @@ -0,0 +1,162 @@ +<?php +/** + * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\WorkflowEngine\Tests\Check; + + +class RequestTimeTest extends \Test\TestCase { + + /** @var \OCP\AppFramework\Utility\ITimeFactory|\PHPUnit_Framework_MockObject_MockObject */ + protected $timeFactory; + + /** + * @return \OCP\IL10N|\PHPUnit_Framework_MockObject_MockObject + */ + protected function getL10NMock() { + $l = $this->getMockBuilder('OCP\IL10N') + ->disableOriginalConstructor() + ->getMock(); + $l->expects($this->any()) + ->method('t') + ->willReturnCallback(function ($string, $args) { + return sprintf($string, $args); + }); + return $l; + } + + protected function setUp() { + parent::setUp(); + + $this->timeFactory = $this->getMockBuilder('OCP\AppFramework\Utility\ITimeFactory') + ->getMock(); + } + + public function dataExecuteCheck() { + return [ + [json_encode(['08:00 Europe/Berlin', '17:00 Europe/Berlin']), 1467870105, false], // 2016-07-07T07:41:45+02:00 + [json_encode(['08:00 Europe/Berlin', '17:00 Europe/Berlin']), 1467873705, true], // 2016-07-07T08:41:45+02:00 + [json_encode(['08:00 Europe/Berlin', '17:00 Europe/Berlin']), 1467902505, true], // 2016-07-07T16:41:45+02:00 + [json_encode(['08:00 Europe/Berlin', '17:00 Europe/Berlin']), 1467906105, false], // 2016-07-07T17:41:45+02:00 + [json_encode(['17:00 Europe/Berlin', '08:00 Europe/Berlin']), 1467870105, true], // 2016-07-07T07:41:45+02:00 + [json_encode(['17:00 Europe/Berlin', '08:00 Europe/Berlin']), 1467873705, false], // 2016-07-07T08:41:45+02:00 + [json_encode(['17:00 Europe/Berlin', '08:00 Europe/Berlin']), 1467902505, false], // 2016-07-07T16:41:45+02:00 + [json_encode(['17:00 Europe/Berlin', '08:00 Europe/Berlin']), 1467906105, true], // 2016-07-07T17:41:45+02:00 + + [json_encode(['08:00 Australia/Adelaide', '17:00 Australia/Adelaide']), 1467843105, false], // 2016-07-07T07:41:45+09:30 + [json_encode(['08:00 Australia/Adelaide', '17:00 Australia/Adelaide']), 1467846705, true], // 2016-07-07T08:41:45+09:30 + [json_encode(['08:00 Australia/Adelaide', '17:00 Australia/Adelaide']), 1467875505, true], // 2016-07-07T16:41:45+09:30 + [json_encode(['08:00 Australia/Adelaide', '17:00 Australia/Adelaide']), 1467879105, false], // 2016-07-07T17:41:45+09:30 + [json_encode(['17:00 Australia/Adelaide', '08:00 Australia/Adelaide']), 1467843105, true], // 2016-07-07T07:41:45+09:30 + [json_encode(['17:00 Australia/Adelaide', '08:00 Australia/Adelaide']), 1467846705, false], // 2016-07-07T08:41:45+09:30 + [json_encode(['17:00 Australia/Adelaide', '08:00 Australia/Adelaide']), 1467875505, false], // 2016-07-07T16:41:45+09:30 + [json_encode(['17:00 Australia/Adelaide', '08:00 Australia/Adelaide']), 1467879105, true], // 2016-07-07T17:41:45+09:30 + + [json_encode(['08:00 Pacific/Niue', '17:00 Pacific/Niue']), 1467916905, false], // 2016-07-07T07:41:45-11:00 + [json_encode(['08:00 Pacific/Niue', '17:00 Pacific/Niue']), 1467920505, true], // 2016-07-07T08:41:45-11:00 + [json_encode(['08:00 Pacific/Niue', '17:00 Pacific/Niue']), 1467949305, true], // 2016-07-07T16:41:45-11:00 + [json_encode(['08:00 Pacific/Niue', '17:00 Pacific/Niue']), 1467952905, false], // 2016-07-07T17:41:45-11:00 + [json_encode(['17:00 Pacific/Niue', '08:00 Pacific/Niue']), 1467916905, true], // 2016-07-07T07:41:45-11:00 + [json_encode(['17:00 Pacific/Niue', '08:00 Pacific/Niue']), 1467920505, false], // 2016-07-07T08:41:45-11:00 + [json_encode(['17:00 Pacific/Niue', '08:00 Pacific/Niue']), 1467949305, false], // 2016-07-07T16:41:45-11:00 + [json_encode(['17:00 Pacific/Niue', '08:00 Pacific/Niue']), 1467952905, true], // 2016-07-07T17:41:45-11:00 + ]; + } + + /** + * @dataProvider dataExecuteCheck + * @param string $value + * @param int $timestamp + * @param bool $expected + */ + public function testExecuteCheckIn($value, $timestamp, $expected) { + $check = new \OCA\WorkflowEngine\Check\RequestTime($this->getL10NMock(), $this->timeFactory); + + $this->timeFactory->expects($this->once()) + ->method('getTime') + ->willReturn($timestamp); + + $this->assertEquals($expected, $check->executeCheck('in', $value)); + } + + /** + * @dataProvider dataExecuteCheck + * @param string $value + * @param int $timestamp + * @param bool $expected + */ + public function testExecuteCheckNotIn($value, $timestamp, $expected) { + $check = new \OCA\WorkflowEngine\Check\RequestTime($this->getL10NMock(), $this->timeFactory); + + $this->timeFactory->expects($this->once()) + ->method('getTime') + ->willReturn($timestamp); + + $this->assertEquals(!$expected, $check->executeCheck('!in', $value)); + } + + public function dataValidateCheck() { + return [ + ['in', '["08:00 Europe/Berlin","17:00 Europe/Berlin"]'], + ['!in', '["08:00 Europe/Berlin","17:00 America/North_Dakota/Beulah"]'], + ['in', '["08:00 America/Port-au-Prince","17:00 America/Argentina/San_Luis"]'], + ]; + } + + /** + * @dataProvider dataValidateCheck + * @param string $operator + * @param string $value + */ + public function testValidateCheck($operator, $value) { + $check = new \OCA\WorkflowEngine\Check\RequestTime($this->getL10NMock(), $this->timeFactory); + $check->validateCheck($operator, $value); + } + + public function dataValidateCheckInvalid() { + return [ + ['!!in', '["08:00 Europe/Berlin","17:00 Europe/Berlin"]', 1, 'The given operator is invalid'], + ['in', '["28:00 Europe/Berlin","17:00 Europe/Berlin"]', 2, 'The given time span is invalid'], + ['in', '["08:00 Europe/Berlin","27:00 Europe/Berlin"]', 2, 'The given time span is invalid'], + ['in', '["08:00 Europa/Berlin","17:00 Europe/Berlin"]', 3, 'The given start time is invalid'], + ['in', '["08:00 Europe/Berlin","17:00 Europa/Berlin"]', 4, 'The given end time is invalid'], + ['in', '["08:00 Europe/Bearlin","17:00 Europe/Berlin"]', 3, 'The given start time is invalid'], + ['in', '["08:00 Europe/Berlin","17:00 Europe/Bearlin"]', 4, 'The given end time is invalid'], + ]; + } + + /** + * @dataProvider dataValidateCheckInvalid + * @param string $operator + * @param string $value + * @param int $exceptionCode + * @param string $exceptionMessage + */ + public function testValidateCheckInvalid($operator, $value, $exceptionCode, $exceptionMessage) { + $check = new \OCA\WorkflowEngine\Check\RequestTime($this->getL10NMock(), $this->timeFactory); + + try { + $check->validateCheck($operator, $value); + } catch (\UnexpectedValueException $e) { + $this->assertEquals($exceptionCode, $e->getCode()); + $this->assertEquals($exceptionMessage, $e->getMessage()); + } + } +} diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php index 0999000f2e3..0b0e5998c4b 100644 --- a/build/integration/features/bootstrap/BasicStructure.php +++ b/build/integration/features/bootstrap/BasicStructure.php @@ -157,6 +157,9 @@ trait BasicStructure { } else { $options['auth'] = [$this->currentUser, $this->regularUser]; } + $options['headers'] = [ + 'OCS_APIREQUEST' => 'true' + ]; if ($body instanceof \Behat\Gherkin\Node\TableNode) { $fd = $body->getRowsHash(); $options['body'] = $fd; @@ -300,7 +303,7 @@ trait BasicStructure { */ public static function addFilesToSkeleton(){ for ($i=0; $i<5; $i++){ - file_put_contents("../../core/skeleton/" . "textfile" . "$i" . ".txt", "ownCloud test text file\n"); + file_put_contents("../../core/skeleton/" . "textfile" . "$i" . ".txt", "Nextcloud test text file\n"); } if (!file_exists("../../core/skeleton/FOLDER")) { mkdir("../../core/skeleton/FOLDER", 0777, true); @@ -308,11 +311,11 @@ trait BasicStructure { if (!file_exists("../../core/skeleton/PARENT")) { mkdir("../../core/skeleton/PARENT", 0777, true); } - file_put_contents("../../core/skeleton/PARENT/" . "parent.txt", "ownCloud test text file\n"); + file_put_contents("../../core/skeleton/PARENT/" . "parent.txt", "Nextcloud test text file\n"); if (!file_exists("../../core/skeleton/PARENT/CHILD")) { mkdir("../../core/skeleton/PARENT/CHILD", 0777, true); } - file_put_contents("../../core/skeleton/PARENT/CHILD/" . "child.txt", "ownCloud test text file\n"); + file_put_contents("../../core/skeleton/PARENT/CHILD/" . "child.txt", "Nextcloud test text file\n"); } /** @@ -335,4 +338,3 @@ trait BasicStructure { } } } - diff --git a/build/integration/features/bootstrap/CommentsContext.php b/build/integration/features/bootstrap/CommentsContext.php index 5c3b0edafac..1d1b47f9736 100644 --- a/build/integration/features/bootstrap/CommentsContext.php +++ b/build/integration/features/bootstrap/CommentsContext.php @@ -191,6 +191,9 @@ class CommentsContext implements \Behat\Behat\Context\Context { $options['auth'] = [$user, '123456']; $fd = $body->getRowsHash(); $options['body'] = $fd; + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $client->send($client->createRequest($verb, $this->baseUrl.'/ocs/v1.php/'.$url, $options)); } diff --git a/build/integration/features/bootstrap/Sharing.php b/build/integration/features/bootstrap/Sharing.php index 9d230e35ac6..3a50b1917aa 100644 --- a/build/integration/features/bootstrap/Sharing.php +++ b/build/integration/features/bootstrap/Sharing.php @@ -52,7 +52,11 @@ trait Sharing { public function asCreatingAShareWith($user, $body) { $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares"; $client = new Client(); - $options = []; + $options = [ + 'headers' => [ + 'OCS-APIREQUEST' => 'true', + ], + ]; if ($user === 'admin') { $options['auth'] = $this->adminUser; } else { @@ -160,7 +164,11 @@ trait Sharing { $share_id = (string) $this->lastShareData->data[0]->id; $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares/$share_id"; $client = new Client(); - $options = []; + $options = [ + 'headers' => [ + 'OCS-APIREQUEST' => 'true', + ], + ]; if ($this->currentUser === 'admin') { $options['auth'] = $this->adminUser; } else { @@ -194,7 +202,11 @@ trait Sharing { $permissions = null){ $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares"; $client = new Client(); - $options = []; + $options = [ + 'headers' => [ + 'OCS-APIREQUEST' => 'true', + ], + ]; if ($user === 'admin') { $options['auth'] = $this->adminUser; @@ -309,10 +321,10 @@ trait Sharing { PHPUnit_Framework_Assert::assertEquals(False, $this->isFieldInResponse('share_with', "$user")); } - public function isUserOrGroupInSharedData($userOrGroup){ + public function isUserOrGroupInSharedData($userOrGroup, $permissions = null){ $data = $this->response->xml()->data[0]; foreach($data as $element) { - if ($element->share_with == $userOrGroup){ + if ($element->share_with == $userOrGroup && ($permissions === null || $permissions == $element->permissions)){ return True; } } @@ -320,13 +332,13 @@ trait Sharing { } /** - * @Given /^file "([^"]*)" of user "([^"]*)" is shared with user "([^"]*)"$/ + * @Given /^(file|folder|entry) "([^"]*)" of user "([^"]*)" is shared with user "([^"]*)"( with permissions ([\d]*))?$/ * * @param string $filepath * @param string $user1 * @param string $user2 */ - public function assureFileIsShared($filepath, $user1, $user2){ + public function assureFileIsShared($entry, $filepath, $user1, $user2, $withPerms = null, $permissions = null){ $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares" . "?path=$filepath"; $client = new Client(); $options = []; @@ -335,24 +347,27 @@ trait Sharing { } else { $options['auth'] = [$user1, $this->regularUser]; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); - if ($this->isUserOrGroupInSharedData($user2)){ + if ($this->isUserOrGroupInSharedData($user2, $permissions)){ return; } else { - $this->createShare($user1, $filepath, 0, $user2, null, null, null); + $this->createShare($user1, $filepath, 0, $user2, null, null, $permissions); } $this->response = $client->get($fullUrl, $options); - PHPUnit_Framework_Assert::assertEquals(True, $this->isUserOrGroupInSharedData($user2)); + PHPUnit_Framework_Assert::assertEquals(True, $this->isUserOrGroupInSharedData($user2, $permissions)); } /** - * @Given /^file "([^"]*)" of user "([^"]*)" is shared with group "([^"]*)"$/ + * @Given /^(file|folder|entry) "([^"]*)" of user "([^"]*)" is shared with group "([^"]*)"( with permissions ([\d]*))?$/ * * @param string $filepath * @param string $user * @param string $group */ - public function assureFileIsSharedWithGroup($filepath, $user, $group){ + public function assureFileIsSharedWithGroup($entry, $filepath, $user, $group, $withPerms = null, $permissions = null){ $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/apps/files_sharing/api/v{$this->sharingApiVersion}/shares" . "?path=$filepath"; $client = new Client(); $options = []; @@ -361,14 +376,17 @@ trait Sharing { } else { $options['auth'] = [$user, $this->regularUser]; } + $options['headers'] = [ + 'OCS-APIREQUEST' => 'true', + ]; $this->response = $client->get($fullUrl, $options); - if ($this->isUserOrGroupInSharedData($group)){ + if ($this->isUserOrGroupInSharedData($group, $permissions)){ return; } else { - $this->createShare($user, $filepath, 1, $group, null, null, null); + $this->createShare($user, $filepath, 1, $group, null, null, $permissions); } $this->response = $client->get($fullUrl, $options); - PHPUnit_Framework_Assert::assertEquals(True, $this->isUserOrGroupInSharedData($group)); + PHPUnit_Framework_Assert::assertEquals(True, $this->isUserOrGroupInSharedData($group, $permissions)); } /** @@ -448,6 +466,7 @@ trait Sharing { ], 'headers' => [ 'Content-Type' => 'application/json', + 'OCS-APIREQUEST' => 'true', ], ] ); @@ -465,6 +484,7 @@ trait Sharing { ], 'headers' => [ 'Content-Type' => 'application/json', + 'OCS-APIREQUEST' => 'true', ], ] ); diff --git a/build/integration/features/bootstrap/WebDav.php b/build/integration/features/bootstrap/WebDav.php index 9b0050d82dd..02f3e82a4c3 100644 --- a/build/integration/features/bootstrap/WebDav.php +++ b/build/integration/features/bootstrap/WebDav.php @@ -50,6 +50,18 @@ trait WebDav { $this->davPath = $davPath; } + /** + * @return string + */ + public function getFilesPath() { + if ($this->davPath === 'remote.php/dav') { + $basePath = '/files/' . $this->currentUser . '/'; + } else { + $basePath = '/'; + } + return $basePath; + } + public function makeDavRequest($user, $method, $path, $headers, $body = null){ $fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath . "$path"; $client = new GClient(); @@ -75,12 +87,12 @@ trait WebDav { } /** - * @Given /^User "([^"]*)" moved file "([^"]*)" to "([^"]*)"$/ + * @Given /^User "([^"]*)" moved (file|folder|entry) "([^"]*)" to "([^"]*)"$/ * @param string $user * @param string $fileSource * @param string $fileDestination */ - public function userMovedFile($user, $fileSource, $fileDestination){ + public function userMovedFile($user, $entry, $fileSource, $fileDestination){ $fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath; $headers['Destination'] = $fullUrl . $fileDestination; $this->response = $this->makeDavRequest($user, "MOVE", $fileSource, $headers); @@ -88,12 +100,12 @@ trait WebDav { } /** - * @When /^User "([^"]*)" moves file "([^"]*)" to "([^"]*)"$/ + * @When /^User "([^"]*)" moves (file|folder|entry) "([^"]*)" to "([^"]*)"$/ * @param string $user * @param string $fileSource * @param string $fileDestination */ - public function userMovesFile($user, $fileSource, $fileDestination){ + public function userMovesFile($user, $entry, $fileSource, $fileDestination){ $fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath; $headers['Destination'] = $fullUrl . $fileDestination; $this->response = $this->makeDavRequest($user, "MOVE", $fileSource, $headers); @@ -248,6 +260,32 @@ trait WebDav { } /** + * @Then /^as "([^"]*)" the (file|folder|entry) "([^"]*)" does not exist$/ + * @param string $user + * @param string $path + * @param \Behat\Gherkin\Node\TableNode|null $propertiesTable + */ + public function asTheFileOrFolderDoesNotExist($user, $entry, $path) { + $client = $this->getSabreClient($user); + $response = $client->request('HEAD', $this->makeSabrePath($path)); + if ($response['statusCode'] !== 404) { + throw new \Exception($entry . ' "' . $path . '" expected to not exist (status code ' . $response['statusCode'] . ', expected 404)'); + } + + return $response; + } + + /** + * @Then /^as "([^"]*)" the (file|folder|entry) "([^"]*)" exists$/ + * @param string $user + * @param string $path + * @param \Behat\Gherkin\Node\TableNode|null $propertiesTable + */ + public function asTheFileOrFolderExists($user, $entry, $path) { + $this->response = $this->listFolder($user, $path, 0); + } + + /** * @Then the single response should contain a property :key with value :value * @param string $key * @param string $expectedValue @@ -315,9 +353,25 @@ trait WebDav { } } - /*Returns the elements of a propfind, $folderDepth requires 1 to see elements without children*/ public function listFolder($user, $path, $folderDepth, $properties = null){ + $client = $this->getSabreClient($user); + if (!$properties) { + $properties = [ + '{DAV:}getetag' + ]; + } + + $response = $client->propfind($this->makeSabrePath($path), $properties, $folderDepth); + + return $response; + } + + public function makeSabrePath($path) { + return $this->encodePath($this->davPath . '/' . ltrim($path, '/')); + } + + public function getSabreClient($user) { $fullUrl = substr($this->baseUrl, 0, -4); $settings = array( @@ -331,17 +385,7 @@ trait WebDav { $settings['password'] = $this->regularUser; } - $client = new SClient($settings); - - if (!$properties) { - $properties = [ - '{DAV:}getetag' - ]; - } - - $response = $client->propfind($this->davPath . '/' . ltrim($path, '/'), $properties, $folderDepth); - - return $response; + return new SClient($settings); } /** @@ -413,9 +457,9 @@ trait WebDav { * @param string $user * @param string $destination */ - public function userCreatedAFolder($user, $destination){ + public function userCreatedAFolder($user, $destination) { try { - $this->response = $this->makeDavRequest($user, "MKCOL", $destination, []); + $this->response = $this->makeDavRequest($user, "MKCOL", $this->getFilesPath() . ltrim($destination, $this->getFilesPath()), []); } catch (\GuzzleHttp\Exception\ServerException $e) { // 4xx and 5xx responses cause an exception $this->response = $e->getResponse(); @@ -482,6 +526,17 @@ trait WebDav { } /** + * URL encodes the given path but keeps the slashes + * + * @param string $path to encode + * @return string encoded path + */ + private function encodePath($path) { + // slashes need to stay + return str_replace('%2F', '/', rawurlencode($path)); + } + + /** * @When user :user favorites element :path */ public function userFavoritesElement($user, $path){ diff --git a/build/integration/features/dav-v2.feature b/build/integration/features/dav-v2.feature index 2b3aeff9454..85405cbf93e 100644 --- a/build/integration/features/dav-v2.feature +++ b/build/integration/features/dav-v2.feature @@ -14,7 +14,7 @@ Feature: dav-v2 And As an "admin" And user "user0" exists And As an "user0" - When Downloading file "/files/user0/welcome.txt" with range "bytes=51-77" + When Downloading file "/files/user0/welcome.txt" with range "bytes=52-78" Then Downloaded content should be "example file for developers" Scenario: Downloading a file on the new endpoint should serve security headers @@ -30,18 +30,18 @@ Feature: dav-v2 |X-Permitted-Cross-Domain-Policies|none| |X-Robots-Tag|none| |X-XSS-Protection|1; mode=block| - And Downloaded content should start with "Welcome to your ownCloud account!" + And Downloaded content should start with "Welcome to your Nextcloud account!" Scenario: Doing a GET with a web login should work without CSRF token on the new backend Given Logging in using web as "admin" When Sending a "GET" to "/remote.php/dav/files/admin/welcome.txt" without requesttoken - Then Downloaded content should start with "Welcome to your ownCloud account!" + Then Downloaded content should start with "Welcome to your Nextcloud account!" Then the HTTP status code should be "200" Scenario: Doing a GET with a web login should work with CSRF token on the new backend Given Logging in using web as "admin" When Sending a "GET" to "/remote.php/dav/files/admin/welcome.txt" with requesttoken - Then Downloaded content should start with "Welcome to your ownCloud account!" + Then Downloaded content should start with "Welcome to your Nextcloud account!" Then the HTTP status code should be "200" Scenario: Doing a PROPFIND with a web login should not work without CSRF token on the new backend @@ -53,3 +53,30 @@ Feature: dav-v2 Given Logging in using web as "admin" When Sending a "PROPFIND" to "/remote.php/dav/files/admin/welcome.txt" with requesttoken Then the HTTP status code should be "207" + + Scenario: Uploading a file having 0B as quota + Given using dav path "remote.php/dav" + And As an "admin" + And user "user0" exists + And user "user0" has a quota of "0 B" + And As an "user0" + When User "user0" uploads file "data/textfile.txt" to "/files/user0/asdf.txt" + Then the HTTP status code should be "507" + + Scenario: Uploading a file as recipient using webdav new endpoint having quota + Given using dav path "remote.php/dav" + And As an "admin" + And user "user0" exists + And user "user1" exists + And user "user0" has a quota of "10 MB" + And user "user1" has a quota of "10 MB" + And As an "user1" + And user "user1" created a folder "/testquota" + And as "user1" creating a share with + | path | testquota | + | shareType | 0 | + | permissions | 31 | + | shareWith | user0 | + And As an "user0" + When User "user0" uploads file "data/textfile.txt" to "/files/user0/testquota/asdf.txt" + Then the HTTP status code should be "201" diff --git a/build/integration/features/provisioning-v1.feature b/build/integration/features/provisioning-v1.feature index 487e025092b..38ed5213b19 100644 --- a/build/integration/features/provisioning-v1.feature +++ b/build/integration/features/provisioning-v1.feature @@ -282,7 +282,6 @@ Feature: provisioning Then the OCS status code should be "100" And the HTTP status code should be "200" And apps returned are - | admin_audit | | comments | | dav | | federatedfilesharing | @@ -295,6 +294,7 @@ Feature: provisioning | systemtags | | theming | | updatenotification | + | workflowengine | Scenario: get app info Given As an "admin" diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index 75f98521e3a..edd599da555 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -312,8 +312,8 @@ Feature: sharing And As an "user1" When User "user1" deletes file "/textfile0 (2).txt" And As an "user3" - And Downloading file "/textfile0 (2).txt" with range "bytes=1-7" - Then Downloaded content should be "wnCloud" + And Downloading file "/textfile0 (2).txt" with range "bytes=1-8" + Then Downloaded content should be "extcloud" Scenario: getting share info of a share Given user "user0" exists @@ -500,9 +500,9 @@ Feature: sharing And User "user1" moved file "/textfile0.txt" to "/common/textfile0.txt" And User "user1" moved file "/common/textfile0.txt" to "/common/sub/textfile0.txt" And As an "user2" - When Downloading file "/common/sub/textfile0.txt" with range "bytes=9-17" + When Downloading file "/common/sub/textfile0.txt" with range "bytes=10-18" Then Downloaded content should be "test text" - And Downloaded content when downloading file "/textfile0.txt" with range "bytes=9-17" should be "test text" + And Downloaded content when downloading file "/textfile0.txt" with range "bytes=10-18" should be "test text" And user "user2" should see following elements | /common/sub/textfile0.txt | @@ -521,7 +521,7 @@ Feature: sharing And User "user1" moved file "/textfile0.txt" to "/common/textfile0.txt" And User "user1" moved file "/common/textfile0.txt" to "/common/sub/textfile0.txt" And As an "user2" - When Downloading file "/textfile0.txt" with range "bytes=9-17" + When Downloading file "/textfile0.txt" with range "bytes=10-18" Then Downloaded content should be "test text" And user "user2" should see following elements | /common/sub/textfile0.txt | @@ -759,3 +759,162 @@ Feature: sharing | shareType | 0 | Then the OCS status code should be "997" And the HTTP status code should be "401" + + Scenario: Deleting a group share as user + Given As an "admin" + And user "user0" exists + And user "user1" exists + And group "group1" exists + And user "user1" belongs to group "group1" + And As an "user0" + And creating a share with + | path | welcome.txt | + | shareType | 1 | + | shareWith | group1 | + When As an "user1" + And Deleting last share + Then the OCS status code should be "404" + And the HTTP status code should be "200" + + Scenario: Merging shares for recipient when shared from outside with group and member + Given As an "admin" + And user "user0" exists + And user "user1" exists + And group "group1" exists + And user "user1" belongs to group "group1" + And user "user0" created a folder "merge-test-outside" + When folder "merge-test-outside" of user "user0" is shared with group "group1" + And folder "merge-test-outside" of user "user0" is shared with user "user1" + Then as "user1" the folder "merge-test-outside" exists + And as "user1" the folder "merge-test-outside (2)" does not exist + + Scenario: Merging shares for recipient when shared from outside with group and member with different permissions + Given As an "admin" + And user "user0" exists + And user "user1" exists + And group "group1" exists + And user "user1" belongs to group "group1" + And user "user0" created a folder "merge-test-outside-perms" + When folder "merge-test-outside-perms" of user "user0" is shared with group "group1" with permissions 1 + And folder "merge-test-outside-perms" of user "user0" is shared with user "user1" with permissions 31 + Then as "user1" gets properties of folder "merge-test-outside-perms" with + |{http://owncloud.org/ns}permissions| + And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "SRDNVCK" + And as "user1" the folder "merge-test-outside-perms (2)" does not exist + + Scenario: Merging shares for recipient when shared from outside with two groups + Given As an "admin" + And user "user0" exists + And user "user1" exists + And group "group1" exists + And group "group2" exists + And user "user1" belongs to group "group1" + And user "user1" belongs to group "group2" + And user "user0" created a folder "merge-test-outside-twogroups" + When folder "merge-test-outside-twogroups" of user "user0" is shared with group "group1" + And folder "merge-test-outside-twogroups" of user "user0" is shared with group "group2" + Then as "user1" the folder "merge-test-outside-twogroups" exists + And as "user1" the folder "merge-test-outside-twogroups (2)" does not exist + + Scenario: Merging shares for recipient when shared from outside with two groups with different permissions + Given As an "admin" + And user "user0" exists + And user "user1" exists + And group "group1" exists + And group "group2" exists + And user "user1" belongs to group "group1" + And user "user1" belongs to group "group2" + And user "user0" created a folder "merge-test-outside-twogroups-perms" + When folder "merge-test-outside-twogroups-perms" of user "user0" is shared with group "group1" with permissions 1 + And folder "merge-test-outside-twogroups-perms" of user "user0" is shared with group "group2" with permissions 31 + Then as "user1" gets properties of folder "merge-test-outside-twogroups-perms" with + |{http://owncloud.org/ns}permissions| + And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "SRDNVCK" + And as "user1" the folder "merge-test-outside-twogroups-perms (2)" does not exist + + Scenario: Merging shares for recipient when shared from outside with two groups and member + Given As an "admin" + And user "user0" exists + And user "user1" exists + And group "group1" exists + And group "group2" exists + And user "user1" belongs to group "group1" + And user "user1" belongs to group "group2" + And user "user0" created a folder "merge-test-outside-twogroups-member-perms" + When folder "merge-test-outside-twogroups-member-perms" of user "user0" is shared with group "group1" with permissions 1 + And folder "merge-test-outside-twogroups-member-perms" of user "user0" is shared with group "group2" with permissions 31 + And folder "merge-test-outside-twogroups-member-perms" of user "user0" is shared with user "user1" with permissions 1 + Then as "user1" gets properties of folder "merge-test-outside-twogroups-member-perms" with + |{http://owncloud.org/ns}permissions| + And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "SRDNVCK" + And as "user1" the folder "merge-test-outside-twogroups-member-perms (2)" does not exist + + Scenario: Merging shares for recipient when shared from inside with group + Given As an "admin" + And user "user0" exists + And group "group1" exists + And user "user0" belongs to group "group1" + And user "user0" created a folder "merge-test-inside-group" + When folder "/merge-test-inside-group" of user "user0" is shared with group "group1" + Then as "user0" the folder "merge-test-inside-group" exists + And as "user0" the folder "merge-test-inside-group (2)" does not exist + + Scenario: Merging shares for recipient when shared from inside with two groups + Given As an "admin" + And user "user0" exists + And group "group1" exists + And group "group2" exists + And user "user0" belongs to group "group1" + And user "user0" belongs to group "group2" + And user "user0" created a folder "merge-test-inside-twogroups" + When folder "merge-test-inside-twogroups" of user "user0" is shared with group "group1" + And folder "merge-test-inside-twogroups" of user "user0" is shared with group "group2" + Then as "user0" the folder "merge-test-inside-twogroups" exists + And as "user0" the folder "merge-test-inside-twogroups (2)" does not exist + And as "user0" the folder "merge-test-inside-twogroups (3)" does not exist + + Scenario: Merging shares for recipient when shared from inside with group with less permissions + Given As an "admin" + And user "user0" exists + And group "group1" exists + And group "group2" exists + And user "user0" belongs to group "group1" + And user "user0" belongs to group "group2" + And user "user0" created a folder "merge-test-inside-twogroups-perms" + When folder "merge-test-inside-twogroups-perms" of user "user0" is shared with group "group1" + And folder "merge-test-inside-twogroups-perms" of user "user0" is shared with group "group2" + Then as "user0" gets properties of folder "merge-test-inside-twogroups-perms" with + |{http://owncloud.org/ns}permissions| + And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "RDNVCK" + And as "user0" the folder "merge-test-inside-twogroups-perms (2)" does not exist + And as "user0" the folder "merge-test-inside-twogroups-perms (3)" does not exist + + Scenario: Merging shares for recipient when shared from outside with group then user and recipient renames in between + Given As an "admin" + And user "user0" exists + And user "user1" exists + And group "group1" exists + And user "user1" belongs to group "group1" + And user "user0" created a folder "merge-test-outside-groups-renamebeforesecondshare" + When folder "merge-test-outside-groups-renamebeforesecondshare" of user "user0" is shared with group "group1" + And User "user1" moved folder "/merge-test-outside-groups-renamebeforesecondshare" to "/merge-test-outside-groups-renamebeforesecondshare-renamed" + And folder "merge-test-outside-groups-renamebeforesecondshare" of user "user0" is shared with user "user1" + Then as "user1" gets properties of folder "merge-test-outside-groups-renamebeforesecondshare-renamed" with + |{http://owncloud.org/ns}permissions| + And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "SRDNVCK" + And as "user1" the folder "merge-test-outside-groups-renamebeforesecondshare" does not exist + +# Scenario: Merging shares for recipient when shared from outside with user then group and recipient renames in between +# Given As an "admin" +# And user "user0" exists +# And user "user1" exists +# And group "group1" exists +# And user "user1" belongs to group "group1" +# And user "user0" created a folder "merge-test-outside-groups-renamebeforesecondshare" +# When folder "merge-test-outside-groups-renamebeforesecondshare" of user "user0" is shared with user "user1" +# And User "user1" moved folder "/merge-test-outside-groups-renamebeforesecondshare" to "/merge-test-outside-groups-renamebeforesecondshare-renamed" +# And folder "merge-test-outside-groups-renamebeforesecondshare" of user "user0" is shared with group "group1" +# Then as "user1" gets properties of folder "merge-test-outside-groups-renamebeforesecondshare-renamed" with +# |{http://owncloud.org/ns}permissions| +# And the single response should contain a property "{http://owncloud.org/ns}permissions" with value "SRDNVCK" +# And as "user1" the folder "merge-test-outside-groups-renamebeforesecondshare" does not exist diff --git a/build/integration/features/webdav-related.feature b/build/integration/features/webdav-related.feature index a135f077f71..c49db4f8a5d 100644 --- a/build/integration/features/webdav-related.feature +++ b/build/integration/features/webdav-related.feature @@ -12,7 +12,7 @@ Feature: webdav-related Scenario: download a file with range Given using dav path "remote.php/webdav" And As an "admin" - When Downloading file "/welcome.txt" with range "bytes=51-77" + When Downloading file "/welcome.txt" with range "bytes=52-78" Then Downloaded content should be "example file for developers" Scenario: Upload forbidden if quota is 0 @@ -39,7 +39,7 @@ Feature: webdav-related When user "user0" has a quota of "10 MB" Then as "user0" gets properties of folder "/" with |{DAV:}quota-available-bytes| - And the single response should contain a property "{DAV:}quota-available-bytes" with value "10485429" + And the single response should contain a property "{DAV:}quota-available-bytes" with value "10485421" Scenario: Retrieving folder quota of shared folder with quota when no quota is set for recipient Given using dav path "remote.php/webdav" @@ -57,7 +57,7 @@ Feature: webdav-related | shareWith | user0 | Then as "user0" gets properties of folder "/testquota" with |{DAV:}quota-available-bytes| - And the single response should contain a property "{DAV:}quota-available-bytes" with value "10485429" + And the single response should contain a property "{DAV:}quota-available-bytes" with value "10485421" Scenario: download a public shared file with range Given user "user0" exists @@ -65,7 +65,7 @@ Feature: webdav-related When creating a share with | path | welcome.txt | | shareType | 3 | - And Downloading last public shared file with range "bytes=51-77" + And Downloading last public shared file with range "bytes=52-78" Then Downloaded content should be "example file for developers" Scenario: download a public shared file inside a folder with range @@ -74,8 +74,8 @@ Feature: webdav-related When creating a share with | path | PARENT | | shareType | 3 | - And Downloading last public shared file inside a folder "/parent.txt" with range "bytes=1-7" - Then Downloaded content should be "wnCloud" + And Downloading last public shared file inside a folder "/parent.txt" with range "bytes=1-8" + Then Downloaded content should be "extcloud" Scenario: Downloading a file on the old endpoint should serve security headers Given using dav path "remote.php/webdav" @@ -90,18 +90,18 @@ Feature: webdav-related |X-Permitted-Cross-Domain-Policies|none| |X-Robots-Tag|none| |X-XSS-Protection|1; mode=block| - And Downloaded content should start with "Welcome to your ownCloud account!" + And Downloaded content should start with "Welcome to your Nextcloud account!" Scenario: Doing a GET with a web login should work without CSRF token on the old backend Given Logging in using web as "admin" When Sending a "GET" to "/remote.php/webdav/welcome.txt" without requesttoken - Then Downloaded content should start with "Welcome to your ownCloud account!" + Then Downloaded content should start with "Welcome to your Nextcloud account!" Then the HTTP status code should be "200" Scenario: Doing a GET with a web login should work with CSRF token on the old backend Given Logging in using web as "admin" When Sending a "GET" to "/remote.php/webdav/welcome.txt" with requesttoken - Then Downloaded content should start with "Welcome to your ownCloud account!" + Then Downloaded content should start with "Welcome to your Nextcloud account!" Then the HTTP status code should be "200" Scenario: Doing a PROPFIND with a web login should not work without CSRF token on the old backend diff --git a/config/config.sample.php b/config/config.sample.php index d761ae92c22..2b39e93aade 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -569,7 +569,7 @@ $CONFIG = array( * Setting this parameter to ``errorlog`` will use the PHP error_log function * for logging. */ -'log_type' => 'owncloud', +'log_type' => 'file', /** * Log file path for the Nextcloud logging type. diff --git a/core/Command/Db/ConvertType.php b/core/Command/Db/ConvertType.php index 6e15f9afbc7..ccf5c0685cb 100644 --- a/core/Command/Db/ConvertType.php +++ b/core/Command/Db/ConvertType.php @@ -61,7 +61,7 @@ class ConvertType extends Command { protected function configure() { $this ->setName('db:convert-type') - ->setDescription('Convert the ownCloud database to the newly configured one') + ->setDescription('Convert the Nextcloud database to the newly configured one') ->addArgument( 'type', InputArgument::REQUIRED, diff --git a/core/Command/Log/OwnCloud.php b/core/Command/Log/File.php index 391259f76b8..ec490237400 100644 --- a/core/Command/Log/OwnCloud.php +++ b/core/Command/Log/File.php @@ -31,7 +31,7 @@ use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; -class OwnCloud extends Command { +class File extends Command { /** @var IConfig */ protected $config; @@ -43,8 +43,8 @@ class OwnCloud extends Command { protected function configure() { $this - ->setName('log:owncloud') - ->setDescription('manipulate ownCloud logging backend') + ->setName('log:file') + ->setDescription('manipulate logging backend') ->addOption( 'enable', null, @@ -70,7 +70,7 @@ class OwnCloud extends Command { $toBeSet = []; if ($input->getOption('enable')) { - $toBeSet['log_type'] = 'owncloud'; + $toBeSet['log_type'] = 'file'; } if ($file = $input->getOption('file')) { @@ -89,12 +89,14 @@ class OwnCloud extends Command { } // display config - if ($this->config->getSystemValue('log_type', 'owncloud') === 'owncloud') { + // TODO: Drop backwards compatibility for config in the future + $logType = $this->config->getSystemValue('log_type', 'file'); + if ($logType === 'file' || $logType === 'owncloud') { $enabledText = 'enabled'; } else { $enabledText = 'disabled'; } - $output->writeln('Log backend ownCloud: '.$enabledText); + $output->writeln('Log backend file: '.$enabledText); $dataDir = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT.'/data'); $defaultLogFile = rtrim($dataDir, '/').'/nextcloud.log'; diff --git a/core/Command/Log/Manage.php b/core/Command/Log/Manage.php index 14d41170dca..554708dfa42 100644 --- a/core/Command/Log/Manage.php +++ b/core/Command/Log/Manage.php @@ -34,7 +34,7 @@ use Symfony\Component\Console\Output\OutputInterface; class Manage extends Command { - const DEFAULT_BACKEND = 'owncloud'; + const DEFAULT_BACKEND = 'file'; const DEFAULT_LOG_LEVEL = 2; const DEFAULT_TIMEZONE = 'UTC'; @@ -54,7 +54,7 @@ class Manage extends Command { 'backend', null, InputOption::VALUE_REQUIRED, - 'set the logging backend [owncloud, syslog, errorlog]' + 'set the logging backend [file, syslog, errorlog]' ) ->addOption( 'level', diff --git a/core/Command/Maintenance/Install.php b/core/Command/Maintenance/Install.php index c8a7e889121..4e84becf770 100644 --- a/core/Command/Maintenance/Install.php +++ b/core/Command/Maintenance/Install.php @@ -50,7 +50,7 @@ class Install extends Command { protected function configure() { $this ->setName('maintenance:install') - ->setDescription('install ownCloud') + ->setDescription('install Nextcloud') ->addOption('database', null, InputOption::VALUE_REQUIRED, 'Supported database type', 'sqlite') ->addOption('database-name', null, InputOption::VALUE_REQUIRED, 'Name of the database') ->addOption('database-host', null, InputOption::VALUE_REQUIRED, 'Hostname of the database', 'localhost') @@ -77,7 +77,7 @@ class Install extends Command { // ignore the OS X setup warning if(count($errors) !== 1 || - (string)($errors[0]['error']) !== 'Mac OS X is not supported and ownCloud will not work properly on this platform. Use it at your own risk! ') { + (string)($errors[0]['error']) !== 'Mac OS X is not supported and Nextcloud will not work properly on this platform. Use it at your own risk! ') { return 1; } } @@ -91,7 +91,7 @@ class Install extends Command { $this->printErrors($output, $errors); return 1; } - $output->writeln("ownCloud was successfully installed"); + $output->writeln("Nextcloud was successfully installed"); return 0; } diff --git a/core/Command/Upgrade.php b/core/Command/Upgrade.php index 952034fd222..69354272de8 100644 --- a/core/Command/Upgrade.php +++ b/core/Command/Upgrade.php @@ -47,7 +47,7 @@ class Upgrade extends Command { const ERROR_SUCCESS = 0; const ERROR_NOT_INSTALLED = 1; const ERROR_MAINTENANCE_MODE = 2; - const ERROR_UP_TO_DATE = 3; + const ERROR_UP_TO_DATE = 0; const ERROR_INVALID_ARGUMENTS = 4; const ERROR_FAILURE = 5; @@ -250,10 +250,10 @@ class Upgrade extends Command { $output->writeln('<info>Checked database schema update</info>'); }); $updater->listen('\OC\Updater', 'incompatibleAppDisabled', function ($app) use($output) { - $output->writeln('<info>Disabled incompatible app: ' . $app . '</info>'); + $output->writeln('<comment>Disabled incompatible app: ' . $app . '</comment>'); }); $updater->listen('\OC\Updater', 'thirdPartyAppDisabled', function ($app) use ($output) { - $output->writeln('<info>Disabled 3rd-party app: ' . $app . '</info>'); + $output->writeln('<comment>Disabled 3rd-party app: ' . $app . '</comment>'); }); $updater->listen('\OC\Updater', 'upgradeAppStoreApp', function ($app) use($output) { $output->writeln('<info>Update 3rd-party app: ' . $app . '</info>'); @@ -299,8 +299,8 @@ class Upgrade extends Command { return self::ERROR_SUCCESS; } else if($this->config->getSystemValue('maintenance', false)) { - //Possible scenario: ownCloud core is updated but an app failed - $output->writeln('<warning>ownCloud is in maintenance mode</warning>'); + //Possible scenario: Nextcloud core is updated but an app failed + $output->writeln('<warning>Nextcloud is in maintenance mode</warning>'); $output->write('<comment>Maybe an upgrade is already in process. Please check the ' . 'logfile (data/nextcloud.log). If you want to re-run the ' . 'upgrade procedure, remove the "maintenance mode" from ' @@ -308,7 +308,7 @@ class Upgrade extends Command { , true); return self::ERROR_MAINTENANCE_MODE; } else { - $output->writeln('<info>ownCloud is already latest version</info>'); + $output->writeln('<info>Nextcloud is already latest version</info>'); return self::ERROR_UP_TO_DATE; } } diff --git a/core/Controller/LoginController.php b/core/Controller/LoginController.php index 44635cc709b..91f7fa0b25a 100644 --- a/core/Controller/LoginController.php +++ b/core/Controller/LoginController.php @@ -231,7 +231,7 @@ class LoginController extends Controller { return new RedirectResponse($location); } } - return new RedirectResponse($this->urlGenerator->linkToRoute('files.view.index')); + return new RedirectResponse(OC_Util::getDefaultPageUrl()); } } diff --git a/core/Controller/SetupController.php b/core/Controller/SetupController.php index fc1efe4c11b..bb7c8c4969d 100644 --- a/core/Controller/SetupController.php +++ b/core/Controller/SetupController.php @@ -40,7 +40,7 @@ class SetupController { * @param Setup $setupHelper */ function __construct(Setup $setupHelper) { - $this->autoConfigFile = \OC::$SERVERROOT.'/config/autoconfig.php'; + $this->autoConfigFile = \OC::$configDir.'autoconfig.php'; $this->setupHelper = $setupHelper; } diff --git a/core/css/apps.css b/core/css/apps.css index 3ffa7d87098..0ccdb8a0398 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -550,6 +550,7 @@ h2 { font-size: 20px; font-weight: 300; margin-bottom: 12px; + line-height: 140%; } h3 { font-size: 15px; diff --git a/core/css/header.css b/core/css/header.css index 91c6639deec..5a2b8009b15 100644 --- a/core/css/header.css +++ b/core/css/header.css @@ -71,7 +71,7 @@ background-image: url('../img/logo-icon.svg'); background-repeat: no-repeat; background-size: 175px; - background-position: center 30px; + background-position: center; width: 252px; height: 120px; margin: 0 auto; @@ -82,6 +82,7 @@ display: inline-block; background-image: url('../img/logo-icon.svg'); background-repeat: no-repeat; + background-position: center center; width: 62px; height: 34px; } @@ -150,7 +151,7 @@ max-height: 85%; margin-top: 0; padding-bottom: 10px; - background-color: rgba(0, 0, 0, .97); + background-color: rgba(255, 255, 255, .97); box-shadow: 0 1px 10px rgba(50, 50, 50, .7); border-radius: 3px; border-top-left-radius: 0; @@ -170,7 +171,7 @@ position: absolute; pointer-events: none; border-color: rgba(0, 0, 0, 0); - border-bottom-color: rgba(0, 0, 0, .97); + border-bottom-color: rgba(255, 255, 255, .97); border-width: 10px; margin-left: -10px; } @@ -203,25 +204,31 @@ padding-left: 0; width: 80px; text-align: center; - color: #fff; + color: #000; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } /* icon opacity and hover effect */ - #navigation a img, + #navigation a svg, #navigation a span { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - opacity: .7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: .5; } - #navigation a:hover img, - #navigation a:focus img, + #navigation a:hover svg, + #navigation a:focus svg, #navigation a:hover span, #navigation a:focus span, - #navigation a.active img, - #navigation a.active span { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - opacity: 1; + #navigation a.active svg, + #navigation a.active span, + #apps-management a:hover svg, + #apps-management a:focus svg, + #apps-management a.active svg, + #apps-management a:hover span, + #apps-management a:focus span, + #apps-management a.active span { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; + opacity: .75; } #navigation .app-icon { @@ -233,12 +240,15 @@ /* Apps management */ #apps-management { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; - opacity: .6; min-height: initial; height: initial; margin: 0; } +#apps-management a svg, +#apps-management a span { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; + opacity: .3; +} /* loading feedback for apps */ @@ -251,8 +261,8 @@ height: 32px; } #navigation .app-loading .app-icon { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; - opacity: .1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; } #apps { @@ -350,8 +360,8 @@ height: 40px; color: #000; padding: 4px 12px 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - opacity: .7; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + opacity: .5; box-sizing: border-box; } #expanddiv a img { @@ -362,8 +372,8 @@ #expanddiv a:focus, #expanddiv a:active, #expanddiv a.active { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; + opacity: .75; } /* do not show display name when profile picture is present */ diff --git a/core/css/inputs.css b/core/css/inputs.css index cad627ac311..ebde986d584 100644 --- a/core/css/inputs.css +++ b/core/css/inputs.css @@ -93,7 +93,6 @@ input[type="checkbox"].checkbox + label:before { vertical-align: middle; background: url('../img/actions/checkbox.svg') left top no-repeat; - opacity: 0.7; } input[type="checkbox"].checkbox:disabled +label:before { opacity: .6; } @@ -167,7 +166,6 @@ input[type="radio"].radio + label:before { vertical-align: middle; background: url('../img/actions/radio.svg') left top no-repeat; - opacity: 0.7; } input[type="radio"].radio:checked + label:before { @@ -187,7 +185,7 @@ input[type="radio"].radio--white + label:before { } input[type="radio"].radio--white:checked + label:before { - background-image: url('../img/actions/radio-checked.svg'); + background-image: url('../img/actions/radio-checked-white.svg'); } input[type="radio"].radio--white:disabled + label:before { @@ -312,3 +310,17 @@ input:disabled+label, input:disabled:hover+label, input:disabled:focus+label { background-color: #00a2e9; color: #bbb; } + +@keyframes shake { + 0% { transform: translate(-5px, 0); } + 20% { transform: translate(5px, 0); } + 40% { transform: translate(-5px, 0); } + 60% { transform: translate(5px, 0); } + 80% { transform: translate(-5px, 0); } + 100% { transform: translate(5px, 0); } +} +.shake { + animation-name: shake; + animation-duration: .3s; + animation-timing-function: ease-out; +} diff --git a/core/css/styles.css b/core/css/styles.css index c1bd76acbcf..7f4f7896c94 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -118,7 +118,7 @@ a.two-factor-cancel { width: 155px; max-width: 50%; cursor: text; - background-color: transparent; + background-color: #0082c9; border: 1px solid rgba(255, 255, 255, .5); } @@ -242,7 +242,7 @@ a.two-factor-cancel { } #body-login .update h2 { - margin: 12px 0 20px; + margin: 0 0 20px; } #body-login .update a { diff --git a/core/css/update.css b/core/css/update.css index b1e086af3fd..12cda3d5bbd 100644 --- a/core/css/update.css +++ b/core/css/update.css @@ -4,6 +4,12 @@ background-size: 32px; } +#update-progress-message-error, +#update-progress-message-warnings { + font-weight: 600; + margin-bottom: 10px; +} + #update-progress-message { margin-bottom: 10px; } @@ -11,6 +17,7 @@ .update-show-detailed { padding: 13px; display: block; + opacity: .75; } #body-login .update a.update-show-detailed { @@ -23,4 +30,4 @@ #body-login .warning.hidden { display: none; -}
\ No newline at end of file +} diff --git a/core/img/actions/checkmark-white.svg b/core/img/actions/checkmark-white.svg index 964624a9ce4..b294cb02941 100644 --- a/core/img/actions/checkmark-white.svg +++ b/core/img/actions/checkmark-white.svg @@ -1,4 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="16px" viewBox="-0.5 -0.5 16 16" width="16px" version="1.1" y="0px" x="0px" xmlns:cc="http://creativecommons.org/ns#" enable-background="new -0.5 -0.5 16 16" overflow="visible" xmlns:dc="http://purl.org/dc/elements/1.1/"> -<path fill="#fff" transform="translate(-.5 -.5)" d="m12.438 3.6875c-0.363 0-0.726 0.1314-1 0.4063l-4.5005 4.5-1.9687-2c-0.5498-0.5484-1.4489-0.5498-2 0l-0.5 0.5c-0.5512 0.5496-0.5512 1.4502 0 2l2.9687 2.9682c0.0063 0.007-0.0065 0.025 0 0.032l0.5 0.5c0.5497 0.55 1.4503 0.55 2 0l0.5-0.5 0.1875-0.219 5.313-5.2812c0.549-0.5498 0.549-1.4503 0-2l-0.5-0.5c-0.275-0.2749-0.638-0.4063-1-0.4063z"/> -</svg> +<svg xmlns="http://www.w3.org/2000/svg" height="16" viewBox="-0.5 -0.5 16 16" width="16" overflow="visible"><path d="M6.089 12.5l-4.95-4.95 1.414-1.414L6.09 9.671l6.345-6.383 1.433 1.434z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/img/actions/radio-checked-white.svg b/core/img/actions/radio-checked-white.svg new file mode 100644 index 00000000000..d024c91ff19 --- /dev/null +++ b/core/img/actions/radio-checked-white.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M8 1a7 7 0 0 0-7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0-7-7zm0 1a6 6 0 0 1 6 6 6 6 0 0 1-6 6 6 6 0 0 1-6-6 6 6 0 0 1 6-6zm0 2a4 4 0 1 0 0 8 4 4 0 0 0 0-8z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/core/js/apps.js b/core/js/apps.js index d8f4bfdf1c5..a2d3460c907 100644 --- a/core/js/apps.js +++ b/core/js/apps.js @@ -27,9 +27,9 @@ */ exports.Apps.showAppSidebar = function($el) { var $appSidebar = $el || $('#app-sidebar'); - $appSidebar.removeClass('disappear'); - $('#app-content').addClass('with-app-sidebar').trigger(new $.Event('appresized')); - + $appSidebar.removeClass('disappear') + .show('slide', { direction: 'right' }, 200); + $('#app-content').addClass('with-app-sidebar', 200).trigger(new $.Event('appresized')); }; /** @@ -40,8 +40,11 @@ */ exports.Apps.hideAppSidebar = function($el) { var $appSidebar = $el || $('#app-sidebar'); - $appSidebar.addClass('disappear'); - $('#app-content').removeClass('with-app-sidebar').trigger(new $.Event('appresized')); + $appSidebar.hide('slide', { direction: 'right' }, 100, + function() { + $appSidebar.addClass('disappear'); + }); + $('#app-content').removeClass('with-app-sidebar', 100).trigger(new $.Event('appresized')); }; /** diff --git a/core/js/files/client.js b/core/js/files/client.js index 0bf5a69e19c..a195258afbb 100644 --- a/core/js/files/client.js +++ b/core/js/files/client.js @@ -47,7 +47,8 @@ baseUrl: this._baseUrl, xmlNamespaces: { 'DAV:': 'd', - 'http://owncloud.org/ns': 'oc' + 'http://owncloud.org/ns': 'oc', + 'http://nextcloud.org/ns': 'nc' } }; if (options.userName) { @@ -61,6 +62,7 @@ }; Client.NS_OWNCLOUD = 'http://owncloud.org/ns'; + Client.NS_NEXTCLOUD = 'http://nextcloud.org/ns'; Client.NS_DAV = 'DAV:'; Client._PROPFIND_PROPERTIES = [ /** @@ -95,7 +97,11 @@ /** * File sizes */ - [Client.NS_DAV, 'getcontentlength'] + [Client.NS_DAV, 'getcontentlength'], + /** + * Preview availability + */ + [Client.NS_NEXTCLOUD, 'has-preview'] ]; /** @@ -274,6 +280,13 @@ data.size = parseInt(sizeProp, 10); } + var hasPreviewProp = props['{' + Client.NS_NEXTCLOUD + '}has-preview']; + if (!_.isUndefined(hasPreviewProp)) { + data.hasPreview = hasPreviewProp === 'true'; + } else { + data.hasPreview = true; + } + var contentType = props['{' + Client.NS_DAV + '}getcontenttype']; if (!_.isUndefined(contentType)) { data.mimetype = contentType; diff --git a/core/js/files/fileinfo.js b/core/js/files/fileinfo.js index 3bf68d88b15..1fc239da47a 100644 --- a/core/js/files/fileinfo.js +++ b/core/js/files/fileinfo.js @@ -127,7 +127,12 @@ * * @type string */ - mountType: null + mountType: null, + + /** + * @type boolean + */ + hasPreview: true }; if (!OC.Files) { diff --git a/core/js/sharedialogexpirationview.js b/core/js/sharedialogexpirationview.js index fa5c0c00986..1770bdd5a7b 100644 --- a/core/js/sharedialogexpirationview.js +++ b/core/js/sharedialogexpirationview.js @@ -96,6 +96,8 @@ this.model.saveLinkShare({ expireDate: '' }); + } else { + this.$el.find('#expirationDate').focus(); } }, diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index 8ea0bf28b38..00c1212fa79 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -598,6 +598,33 @@ } }, + /** + * Group reshares into a single super share element. + * Does this by finding the most precise share and + * combines the permissions to be the most permissive. + * + * @param {Array} reshares + * @return {Object} reshare + */ + _groupReshares: function(reshares) { + if (!reshares || !reshares.length) { + return false; + } + + var superShare = reshares.shift(); + var combinedPermissions = superShare.permissions; + _.each(reshares, function(reshare) { + // use share have higher priority than group share + if (reshare.share_type === OC.Share.SHARE_TYPE_USER && superShare.share_type === OC.Share.SHARE_TYPE_GROUP) { + superShare = reshare; + } + combinedPermissions |= reshare.permissions; + }); + + superShare.permissions = combinedPermissions; + return superShare; + }, + fetch: function() { var model = this; this.trigger('request', this); @@ -615,7 +642,7 @@ var reshare = false; if (data2[0].ocs.data.length) { - reshare = data2[0].ocs.data[0]; + reshare = model._groupReshares(data2[0].ocs.data); } model.set(model.parse({ diff --git a/core/js/tests/specs/appsSpec.js b/core/js/tests/specs/appsSpec.js index 536d41c7f10..c3352e3e4a9 100644 --- a/core/js/tests/specs/appsSpec.js +++ b/core/js/tests/specs/appsSpec.js @@ -23,6 +23,10 @@ describe('Apps base tests', function() { describe('Sidebar utility functions', function() { beforeEach(function() { $('#testArea').append('<div id="app-content">Content</div><div id="app-sidebar">The sidebar</div>'); + jQuery.fx.off = true; + }); + afterEach(function() { + jQuery.fx.off = false; }); it('shows sidebar', function() { var $el = $('#app-sidebar'); diff --git a/core/js/tests/specs/shareitemmodelSpec.js b/core/js/tests/specs/shareitemmodelSpec.js index 8c9560d2646..9d9001dc9e8 100644 --- a/core/js/tests/specs/shareitemmodelSpec.js +++ b/core/js/tests/specs/shareitemmodelSpec.js @@ -181,6 +181,48 @@ describe('OC.Share.ShareItemModel', function() { // TODO: check more attributes }); + it('groups reshare info into a single item', function() { + /* jshint camelcase: false */ + fetchReshareDeferred.resolve(makeOcsResponse([ + { + id: '1', + share_type: OC.Share.SHARE_TYPE_USER, + uid_owner: 'owner', + displayname_owner: 'Owner', + share_with: 'root', + permissions: 1 + }, + { + id: '2', + share_type: OC.Share.SHARE_TYPE_GROUP, + uid_owner: 'owner', + displayname_owner: 'Owner', + share_with: 'group1', + permissions: 15 + }, + { + id: '3', + share_type: OC.Share.SHARE_TYPE_GROUP, + uid_owner: 'owner', + displayname_owner: 'Owner', + share_with: 'group1', + permissions: 17 + } + ])); + fetchSharesDeferred.resolve(makeOcsResponse([])); + + OC.currentUser = 'root'; + + model.fetch(); + + var reshare = model.get('reshare'); + // max permissions + expect(reshare.permissions).toEqual(31); + // user share has higher priority + expect(reshare.share_type).toEqual(OC.Share.SHARE_TYPE_USER); + expect(reshare.share_with).toEqual('root'); + expect(reshare.id).toEqual('1'); + }); it('does not parse link share when for a different file', function() { /* jshint camelcase: false */ fetchReshareDeferred.resolve(makeOcsResponse([])); diff --git a/core/js/update.js b/core/js/update.js index e692a7312b8..32cf2ce5ecc 100644 --- a/core/js/update.js +++ b/core/js/update.js @@ -13,7 +13,7 @@ _started : false, /** - * Start the upgrade process. + * Start the update process. * * @param $el progress list element */ @@ -31,12 +31,12 @@ var self = this; $(window).on('beforeunload.inprogress', function () { - return t('core', 'The upgrade is in progress, leaving this page might interrupt the process in some environments.'); + return t('core', 'The update is in progress, leaving this page might interrupt the process in some environments.'); }); $('#update-progress-title').html(t( 'core', - 'Updating to {version}', { + 'Update to {version}', { version: options.version }) ); @@ -91,17 +91,15 @@ if (hasWarnings) { $el.find('.update-show-detailed').before( - $('<span>') - .append('<br />') - .append(t('core', 'The update was successful. There were warnings.')) + $('<input type="button" class="update-continue" value="'+t('core', 'Continue to Nextcloud')+'">').on('click', function() { + window.location.reload(); + }) ); - var message = t('core', 'Please reload the page.'); - $('<span>').append(message).append('<br />').appendTo($el); } else { // FIXME: use product name - $('<span>') - .append(t('core', 'The update was successful. Redirecting you to Nextcloud now.')) - .appendTo($el); + $el.find('.update-show-detailed').before( + $('<p>'+t('core', 'The update was successful. Redirecting you to Nextcloud now.')+'</p>') + ); setTimeout(function () { OC.redirect(OC.webroot + '/'); }, 3000); @@ -127,7 +125,7 @@ .append(message) .append($('<br>')); }, - + setErrorMessage: function (message) { $('#update-progress-message-error') .show() diff --git a/core/l10n/ca.js b/core/l10n/ca.js index a3a0f6761ad..65fc867d2ca 100644 --- a/core/l10n/ca.js +++ b/core/l10n/ca.js @@ -167,7 +167,6 @@ OC.L10N.register( "Hello {name}" : "Hola {name}", "_download %n file_::_download %n files_" : ["descarregar l'arxiu %n","descarregar arxius %n "], "Please reload the page." : "Carregueu la pàgina de nou.", - "The update was successful. There were warnings." : "La actualització ha estat exitosa. Hi ha alertes.", "Searching other places" : "Buscant altres ubicacions", "Personal" : "Personal", "Users" : "Usuaris", diff --git a/core/l10n/ca.json b/core/l10n/ca.json index 45c8a138ef4..2495e5baad1 100644 --- a/core/l10n/ca.json +++ b/core/l10n/ca.json @@ -165,7 +165,6 @@ "Hello {name}" : "Hola {name}", "_download %n file_::_download %n files_" : ["descarregar l'arxiu %n","descarregar arxius %n "], "Please reload the page." : "Carregueu la pàgina de nou.", - "The update was successful. There were warnings." : "La actualització ha estat exitosa. Hi ha alertes.", "Searching other places" : "Buscant altres ubicacions", "Personal" : "Personal", "Users" : "Usuaris", diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js index 732d842b27f..9ce8dbb58b4 100644 --- a/core/l10n/cs_CZ.js +++ b/core/l10n/cs_CZ.js @@ -218,13 +218,10 @@ OC.L10N.register( "Hello {name}" : "Vítej, {name}", "new" : "nový", "_download %n file_::_download %n files_" : ["stáhnout %n soubor","stáhnout %n soubory","stáhnout %n souborů"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Probíhá aktualizace, opuštění této stránky může v některých prostředích přerušit proces.", - "Updating to {version}" : "Aktualizace na {version}", "An error occurred." : "Došlo k chybě.", "Please reload the page." : "Načtěte stránku znovu, prosím.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizace nebyla úspěšná. Pro více informací si <a href=\"{url}\">přečtěte komentáře ve fóru</a> pojednávající o tomto problému.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizace byla neúspěšná. Nahlaste prosím problém <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitě Nextcloudu</a>", - "The update was successful. There were warnings." : "Aktualizace byla úspěšná. Zachycen výskyt varování.", "The update was successful. Redirecting you to Nextcloud now." : "Aktualizace byla úspěšná. Probíhá přesměrování na Nexcloud.", "Searching other places" : "Prohledávání ostatních umístění", "No search results in other folders" : "V ostatních adresářích nebylo nic nalezeno", diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json index a50984fe95a..d671415cfde 100644 --- a/core/l10n/cs_CZ.json +++ b/core/l10n/cs_CZ.json @@ -216,13 +216,10 @@ "Hello {name}" : "Vítej, {name}", "new" : "nový", "_download %n file_::_download %n files_" : ["stáhnout %n soubor","stáhnout %n soubory","stáhnout %n souborů"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Probíhá aktualizace, opuštění této stránky může v některých prostředích přerušit proces.", - "Updating to {version}" : "Aktualizace na {version}", "An error occurred." : "Došlo k chybě.", "Please reload the page." : "Načtěte stránku znovu, prosím.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizace nebyla úspěšná. Pro více informací si <a href=\"{url}\">přečtěte komentáře ve fóru</a> pojednávající o tomto problému.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizace byla neúspěšná. Nahlaste prosím problém <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitě Nextcloudu</a>", - "The update was successful. There were warnings." : "Aktualizace byla úspěšná. Zachycen výskyt varování.", "The update was successful. Redirecting you to Nextcloud now." : "Aktualizace byla úspěšná. Probíhá přesměrování na Nexcloud.", "Searching other places" : "Prohledávání ostatních umístění", "No search results in other folders" : "V ostatních adresářích nebylo nic nalezeno", diff --git a/core/l10n/da.js b/core/l10n/da.js index 43d12a76761..112082f94aa 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -205,13 +205,10 @@ OC.L10N.register( "Hello {name}" : "Hej {name}", "new" : "ny", "_download %n file_::_download %n files_" : ["hent %n fil","hent %n filer"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Opgraderingen er i gang, forlader du denne side kan det afbryde processen.", - "Updating to {version}" : "Opdaterer til {version}", "An error occurred." : "Der opstod en fejl.", "Please reload the page." : "Genindlæs venligst siden", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Opdateringen blev ikke udført korrekt. For mere information <a href=\"{url}\">tjek vores indlæg på forumet</a>, som dækker dette problem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Opdateringen blev ikke udført korrekt. Rapporter venligst problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud fællesskabet</a>.", - "The update was successful. There were warnings." : "Opdateringen blev gennemført. Der fremkom advarsler.", "The update was successful. Redirecting you to Nextcloud now." : "Opdateringen blev udført korrekt. Du bliver nu viderestillet til Nextcloud.", "Searching other places" : "Søger på andre steder", "No search results in other folders" : "Søgning gav ingen resultater in andre mapper", diff --git a/core/l10n/da.json b/core/l10n/da.json index 52df363c387..346712a15c0 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -203,13 +203,10 @@ "Hello {name}" : "Hej {name}", "new" : "ny", "_download %n file_::_download %n files_" : ["hent %n fil","hent %n filer"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Opgraderingen er i gang, forlader du denne side kan det afbryde processen.", - "Updating to {version}" : "Opdaterer til {version}", "An error occurred." : "Der opstod en fejl.", "Please reload the page." : "Genindlæs venligst siden", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Opdateringen blev ikke udført korrekt. For mere information <a href=\"{url}\">tjek vores indlæg på forumet</a>, som dækker dette problem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Opdateringen blev ikke udført korrekt. Rapporter venligst problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud fællesskabet</a>.", - "The update was successful. There were warnings." : "Opdateringen blev gennemført. Der fremkom advarsler.", "The update was successful. Redirecting you to Nextcloud now." : "Opdateringen blev udført korrekt. Du bliver nu viderestillet til Nextcloud.", "Searching other places" : "Søger på andre steder", "No search results in other folders" : "Søgning gav ingen resultater in andre mapper", diff --git a/core/l10n/de.js b/core/l10n/de.js index d19f758e4ab..96e78831c24 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -131,6 +131,7 @@ OC.L10N.register( "Strong password" : "Starkes Passwort", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich nicht funktioniert.", "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>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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." : "Dieser Server hat keine funktionierende Internetverbindung: Mehrere Ziele konnten nicht erreicht werden. Dies bedeutet, dass einige Funktionen, wie das Einhängen exernen Speichers, Benachrichtigungen über Updates oder die Installation von Drittanbieter-Apps nicht funktionieren. \nDer Zugriff auf entfernte Dateien und das Senden von E-Mail-Benachrichtigungen wird wahrscheinlich ebenfalls nicht funktionieren.\nEs wird empfohlen, die Internet-Verbindung für diesen Server zu aktivieren, wenn Du alle Funktionen nutzen möchtest.", "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>." : "Es wurde kein PHP Memory Cache konfiguriert. Zur Erhöhung der Leistungsfähigkeit kann ein Memory-Cache konfiguriert werden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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 hat keine Leserechte auf /dev/urandom wovon aus Sicherheitsgründen höchst abzuraten ist. Weitere Informationen sind in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a> zu finden.", "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." : "Du verwendest derzeit PHP {version}. Wir empfehlen ein Upgrade deiner PHP-Version, um die <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP-Gruppe bereitgestellt werden</a>, sobald diese deine Distribution unterstützt.", @@ -153,6 +154,10 @@ OC.L10N.register( "Expiration" : "Ablaufdatum", "Expiration date" : "Ablaufdatum", "Choose a password for the public link" : "Wähle ein Passwort für den öffentlichen Link", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "Zum Kopieren ⌘-C drücken.", + "Press Ctrl-C to copy." : "Zum Kopieren Strg-C drücken.", "Resharing is not allowed" : "Weiterverteilen ist nicht erlaubt", "Share link" : "Link teilen", "Link" : "Link", @@ -200,13 +205,13 @@ OC.L10N.register( "({scope})" : "({scope})", "Delete" : "Löschen", "Rename" : "Umbenennen", - "Collaborative tags" : "Gemeinschaftliche Tags", + "Collaborative tags" : "Zusammenarbeits-Tags", "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Enter new" : "Neuen eingeben", "Add" : "Hinzufügen", - "Edit tags" : "Schlagwörter bearbeiten", + "Edit tags" : "Tags bearbeiten", "Error loading dialog template: {error}" : "Fehler beim Laden der Dialogvorlage: {error}", - "No tags selected for deletion." : "Es wurden keine Schlagwörter zum Löschen ausgewählt.", + "No tags selected for deletion." : "Keine Tags zum Löschen ausgewählt.", "unknown text" : "Unbekannter Text", "Hello world!" : "Hallo Welt!", "sunny" : "sonnig", @@ -214,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Hallo {name}", "new" : "neu", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.", - "Updating to {version}" : "Aktualisierung auf {version}", "An error occurred." : "Es ist ein Fehler aufgetreten.", "Please reload the page." : "Bitte lade die Seite neu.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für weitere Informationen <a href=\"{url}\"> schaue bitte in unser Forum </a> um das Problem zu lösen.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melde dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.", - "The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.", "The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Weiterleitung zu Nextcloud.", "Searching other places" : "Andere Orte durchsuchen", "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern", @@ -250,7 +252,7 @@ OC.L10N.register( "File: %s" : "Datei: %s", "Line: %s" : "Zeile: %s", "Trace" : "Spur", - "Security warning" : "Sicherheitshinweis", + "Security warning" : "Sicherheitswarnung", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Informationen zum richtigen Konfigurieren deines Servers kannst du der <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">Dokumentation</a> entnehmen.", "Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen", @@ -292,7 +294,7 @@ OC.L10N.register( "New password" : "Neues Passwort", "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", - "This Nextcloud instance is currently in single user mode." : "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.", + "This Nextcloud instance is currently in single user mode." : "Diese Nextcloud-Instanz befindet sich derzeit im Einzelbenutzermodus.", "This means only administrators can use the instance." : "Dies bedeutet, dass diese Instanz nur von Administratoren genutzt werden kann.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktiere deinen Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.", "Thank you for your patience." : "Vielen Dank für Ihre Geduld.", diff --git a/core/l10n/de.json b/core/l10n/de.json index ac4de63d70a..c5373cb7ebc 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -129,6 +129,7 @@ "Strong password" : "Starkes Passwort", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich nicht funktioniert.", "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>." : "Dein Web-Server ist nicht richtig eingerichtet um die folgende URL richtig aufzulösen \"{url}\". Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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." : "Dieser Server hat keine funktionierende Internetverbindung: Mehrere Ziele konnten nicht erreicht werden. Dies bedeutet, dass einige Funktionen, wie das Einhängen exernen Speichers, Benachrichtigungen über Updates oder die Installation von Drittanbieter-Apps nicht funktionieren. \nDer Zugriff auf entfernte Dateien und das Senden von E-Mail-Benachrichtigungen wird wahrscheinlich ebenfalls nicht funktionieren.\nEs wird empfohlen, die Internet-Verbindung für diesen Server zu aktivieren, wenn Du alle Funktionen nutzen möchtest.", "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>." : "Es wurde kein PHP Memory Cache konfiguriert. Zur Erhöhung der Leistungsfähigkeit kann ein Memory-Cache konfiguriert werden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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 hat keine Leserechte auf /dev/urandom wovon aus Sicherheitsgründen höchst abzuraten ist. Weitere Informationen sind in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a> zu finden.", "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." : "Du verwendest derzeit PHP {version}. Wir empfehlen ein Upgrade deiner PHP-Version, um die <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP-Gruppe bereitgestellt werden</a>, sobald diese deine Distribution unterstützt.", @@ -151,6 +152,10 @@ "Expiration" : "Ablaufdatum", "Expiration date" : "Ablaufdatum", "Choose a password for the public link" : "Wähle ein Passwort für den öffentlichen Link", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "Zum Kopieren ⌘-C drücken.", + "Press Ctrl-C to copy." : "Zum Kopieren Strg-C drücken.", "Resharing is not allowed" : "Weiterverteilen ist nicht erlaubt", "Share link" : "Link teilen", "Link" : "Link", @@ -198,13 +203,13 @@ "({scope})" : "({scope})", "Delete" : "Löschen", "Rename" : "Umbenennen", - "Collaborative tags" : "Gemeinschaftliche Tags", + "Collaborative tags" : "Zusammenarbeits-Tags", "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Enter new" : "Neuen eingeben", "Add" : "Hinzufügen", - "Edit tags" : "Schlagwörter bearbeiten", + "Edit tags" : "Tags bearbeiten", "Error loading dialog template: {error}" : "Fehler beim Laden der Dialogvorlage: {error}", - "No tags selected for deletion." : "Es wurden keine Schlagwörter zum Löschen ausgewählt.", + "No tags selected for deletion." : "Keine Tags zum Löschen ausgewählt.", "unknown text" : "Unbekannter Text", "Hello world!" : "Hallo Welt!", "sunny" : "sonnig", @@ -212,13 +217,10 @@ "Hello {name}" : "Hallo {name}", "new" : "neu", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Update läuft gerade. Das Verlassen dieser Seite könnte den Update Prozess in einigen Umgebungen unterbrechen.", - "Updating to {version}" : "Aktualisierung auf {version}", "An error occurred." : "Es ist ein Fehler aufgetreten.", "Please reload the page." : "Bitte lade die Seite neu.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für weitere Informationen <a href=\"{url}\"> schaue bitte in unser Forum </a> um das Problem zu lösen.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melde dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.", - "The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.", "The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Weiterleitung zu Nextcloud.", "Searching other places" : "Andere Orte durchsuchen", "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern", @@ -248,7 +250,7 @@ "File: %s" : "Datei: %s", "Line: %s" : "Zeile: %s", "Trace" : "Spur", - "Security warning" : "Sicherheitshinweis", + "Security warning" : "Sicherheitswarnung", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Informationen zum richtigen Konfigurieren deines Servers kannst du der <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">Dokumentation</a> entnehmen.", "Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen", @@ -290,7 +292,7 @@ "New password" : "Neues Passwort", "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", - "This Nextcloud instance is currently in single user mode." : "Diese ownClound-Instanz befindet sich derzeit im Einzelbenutzermodus.", + "This Nextcloud instance is currently in single user mode." : "Diese Nextcloud-Instanz befindet sich derzeit im Einzelbenutzermodus.", "This means only administrators can use the instance." : "Dies bedeutet, dass diese Instanz nur von Administratoren genutzt werden kann.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontaktiere deinen Systemadministrator, wenn diese Meldung dauerhaft oder unerwartet erscheint.", "Thank you for your patience." : "Vielen Dank für Ihre Geduld.", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index bacb0bacc4d..bb6d29e0252 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -129,13 +129,14 @@ OC.L10N.register( "So-so password" : "Passables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", - "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", - "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>." : "Dein Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in unserer a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert. Die WebDAV-Schnittstelle ist vermutlich defekt.", + "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>." : "Ihr Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in unserer a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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." : "Dieser Server hat keine funktionierende Internetverbindung: Mehrere Ziele konnten nicht erreicht werden. Dies bedeutet, dass einige Funktionen, wie das Einhängen exernen Speichers, Benachrichtigungen über Updates oder die Installation von Drittanbieter-Apps nicht funktionieren. \nDer Zugriff auf entfernte Dateien und das Senden von E-Mail-Benachrichtigungen wird wahrscheinlich ebenfalls nicht funktionieren.\nEs wird empfohlen, die Internet-Verbindung für diesen Server zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", "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>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfigurieren Sie zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald diese ihre Distribution diese unterstützt.", + "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." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fäschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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>." : "Memcache ist als verteilter Cache konfiguriert, aber das falsche PHP Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nud \"memcached\" und nicht \"memcache\". Siehe <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached Wiki über beide Module</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>." : "Memcache ist als verteilter Cache konfiguriert, aber das falsche PHP Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" und nicht \"memcache\". Siehe <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached Wiki über beide Module</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>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu behen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</a>)", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "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." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.", @@ -150,10 +151,14 @@ OC.L10N.register( "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", "The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen", "Set expiration date" : "Ein Ablaufdatum setzen", - "Expiration" : "Ablaufdatum", + "Expiration" : "Ablauf", "Expiration date" : "Ablaufdatum", "Choose a password for the public link" : "Wählen Sie ein Passwort für den öffentlichen Link", - "Resharing is not allowed" : "Das Weiterverteilen ist nicht erlaubt", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "Zum Kopieren ⌘-C drücken.", + "Press Ctrl-C to copy." : "Zum Kopieren Strg-C drücken.", + "Resharing is not allowed" : "Das Weiterteilen ist nicht erlaubt", "Share link" : "Link teilen", "Link" : "Link", "Password protect" : "Passwortschutz", @@ -174,7 +179,7 @@ OC.L10N.register( "can share" : "kann teilen", "can edit" : "kann bearbeiten", "create" : "erstellen", - "change" : "Ändern", + "change" : "ändern", "delete" : "löschen", "access control" : "Zugriffskontrolle", "Could not unshare" : "Freigabe konnte nicht aufgehoben werden", @@ -200,7 +205,7 @@ OC.L10N.register( "({scope})" : "({scope})", "Delete" : "Löschen", "Rename" : "Umbenennen", - "Collaborative tags" : "Gemeinschaftliche Tags", + "Collaborative tags" : "Zusammenarbeits-Tags", "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Enter new" : "Neuen eingeben", "Add" : "Hinzufügen", @@ -214,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Hallo {name}", "new" : "Neu", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Upgrade läuft noch , diese Seite zu verlassen könnte das Verfahren in einigen Umgebungen unterbrechen.", - "Updating to {version}" : "Aktualisierung auf {version}", "An error occurred." : "Ein Fehler ist aufgetreten.", - "Please reload the page." : "Bitte laden Sie die Seite neu.", + "Please reload the page." : "Bitte die Seite neu laden.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für mehr Informationen <a href=\"{url}\">lesen Sie unseren Forenbeitrag</a> zu diesem Thema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.", - "The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.", "The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Sie werden nun zu Nextcloud weitergeleitet.", "Searching other places" : "Andere Orte durchsuchen", "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern", @@ -240,7 +242,7 @@ OC.L10N.register( "Internal Server Error" : "Interner Serverfehler", "The server encountered an internal error and was unable to complete your request." : "Der Server hat einen internen Fehler und konnte Ihre Anfrage nicht vervollständigen.", "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Bitte wenden Sie sich an den Serveradministrator, wenn dieser Fehler mehrfach auftritt, geben Sie bitte die, unten stehenden, technischen Details in Ihrem Bericht mit an.", - "More details can be found in the server log." : "Weitere Details können im Serverprotokoll gefunden werden.", + "More details can be found in the server log." : "Weitere Details können im Server-Protokoll gefunden werden.", "Technical details" : "Technische Details", "Remote Address: %s" : "Entfernte Adresse: %s", "Request ID: %s" : "Anfragekennung: %s", @@ -305,7 +307,7 @@ OC.L10N.register( "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." : "Bitte kontaktieren Sie Ihren Administrator. Wenn Sie Administrator dieser Instanz sind, konfigurieren Sie bitte die „trusted_domain“-Einstellung in config/config.php. Eine Beispielkonfiguration wird unter config/config.sample.php bereitgestellt.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Wenn es Ihre Konfiguration zulässt, können Sie als Administrator gegebenenfalls den Button unten benutzen, um diese Domain als vertrauenswürdig einzustufen.", "Add \"%s\" as trusted domain" : "„%s“ als vertrauenswürdige Domain hinzufügen", - "App update required" : "App-Update notwendig", + "App update required" : "App-Aktualisierung notwendig", "%s will be updated to version %s" : "%s wird auf Version %s aktualisiert", "These apps will be updated:" : "Diese Apps werden aktualisiert:", "These incompatible apps will be disabled:" : "Diese inkompatiblen Apps werden deaktiviert:", @@ -313,8 +315,8 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Stellen Sie vor dem Fortsetzen bitte sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurden.", "Start update" : "Aktualisierung starten", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Zur Vermeidung von Zeitüberschreitungen bei größeren Installationen können Sie stattdessen den folgenden Befehl in Ihrem Installationsverzeichnis ausführen:", - "Detailed logs" : "Detaillierte Fehlermeldungen", - "Update needed" : "Update erforderlich", + "Detailed logs" : "Detaillierte Protokollmeldungen", + "Update needed" : "Aktualisierung erforderlich", "Please use the command line updater because you have a big instance." : "Da Sie eine große Instanz von Nextcloud besitzen, wird die Benutzung des Aktualisierungsprogrammes über die Kommandozeile empfohlen.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Für weitere Hilfen, schauen Sie bitte in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Diese %s-Instanz befindet sich gerade im Wartungsmodus, was eine Weile dauern kann.", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index 635a2ddce03..1920f2370e3 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -127,13 +127,14 @@ "So-so password" : "Passables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", - "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", - "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>." : "Dein Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in unserer a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>.", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert. Die WebDAV-Schnittstelle ist vermutlich defekt.", + "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>." : "Ihr Webserver ist nicht richtig konfiguriert um \"{url}\" aufzulösen. Weitere Informationen hierzu finden Sie in unserer a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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." : "Dieser Server hat keine funktionierende Internetverbindung: Mehrere Ziele konnten nicht erreicht werden. Dies bedeutet, dass einige Funktionen, wie das Einhängen exernen Speichers, Benachrichtigungen über Updates oder die Installation von Drittanbieter-Apps nicht funktionieren. \nDer Zugriff auf entfernte Dateien und das Senden von E-Mail-Benachrichtigungen wird wahrscheinlich ebenfalls nicht funktionieren.\nEs wird empfohlen, die Internet-Verbindung für diesen Server zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", "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>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfigurieren Sie zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald diese ihre Distribution diese unterstützt.", + "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." : "Sie verwenden im Moment PHP {version}. Wir empfehlen ein Upgrade ihrer PHP Version, um die <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">Geschwindigkeits- und Sicherheitsupdates zu nutzen, welche von der PHP Gruppe bereitgestellt werden</a>, sobald ihre Distribution diese unterstützt.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Der REVERSE PROXY HEADER ist falsch, oder Sie greifen auf die Nextcloud von einem vertrauenswürdigen Proxy zu. Wenn Sie auf die Nextcloud nicht von einem vertrauenswürdigen Proxy zugreifen, dann liegt ein Sicherheitsproblem vor, das einem Angreifer ermöglichen könnte, die für Nextcloud sichtbare IP-Adresse zu fäschen. Weitere Informationen hierzu finden Sie in der <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</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>." : "Memcache ist als verteilter Cache konfiguriert, aber das falsche PHP Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nud \"memcached\" und nicht \"memcache\". Siehe <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached Wiki über beide Module</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>." : "Memcache ist als verteilter Cache konfiguriert, aber das falsche PHP Modul \"memcache\" ist installiert. \\OC\\Memcache\\Memcached unterstützt nur \"memcached\" und nicht \"memcache\". Siehe <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached Wiki über beide Module</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>)" : "Manche Dateien haben die Integritätsprüfung nicht bestanden. Weitere Informationen um den Fehler zu behen finden Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Dokumentation</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Liste der ungültigen Dateien...</a> / <a href=\"{rescanEndpoint}\">Erneut scannen…</a>)", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", "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." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.", @@ -148,10 +149,14 @@ "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", "The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen", "Set expiration date" : "Ein Ablaufdatum setzen", - "Expiration" : "Ablaufdatum", + "Expiration" : "Ablauf", "Expiration date" : "Ablaufdatum", "Choose a password for the public link" : "Wählen Sie ein Passwort für den öffentlichen Link", - "Resharing is not allowed" : "Das Weiterverteilen ist nicht erlaubt", + "Copied!" : "Kopiert!", + "Not supported!" : "Nicht unterstützt!", + "Press ⌘-C to copy." : "Zum Kopieren ⌘-C drücken.", + "Press Ctrl-C to copy." : "Zum Kopieren Strg-C drücken.", + "Resharing is not allowed" : "Das Weiterteilen ist nicht erlaubt", "Share link" : "Link teilen", "Link" : "Link", "Password protect" : "Passwortschutz", @@ -172,7 +177,7 @@ "can share" : "kann teilen", "can edit" : "kann bearbeiten", "create" : "erstellen", - "change" : "Ändern", + "change" : "ändern", "delete" : "löschen", "access control" : "Zugriffskontrolle", "Could not unshare" : "Freigabe konnte nicht aufgehoben werden", @@ -198,7 +203,7 @@ "({scope})" : "({scope})", "Delete" : "Löschen", "Rename" : "Umbenennen", - "Collaborative tags" : "Gemeinschaftliche Tags", + "Collaborative tags" : "Zusammenarbeits-Tags", "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Enter new" : "Neuen eingeben", "Add" : "Hinzufügen", @@ -212,13 +217,10 @@ "Hello {name}" : "Hallo {name}", "new" : "Neu", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Das Upgrade läuft noch , diese Seite zu verlassen könnte das Verfahren in einigen Umgebungen unterbrechen.", - "Updating to {version}" : "Aktualisierung auf {version}", "An error occurred." : "Ein Fehler ist aufgetreten.", - "Please reload the page." : "Bitte laden Sie die Seite neu.", + "Please reload the page." : "Bitte die Seite neu laden.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Das Update war nicht erfolgreich. Für mehr Informationen <a href=\"{url}\">lesen Sie unseren Forenbeitrag</a> zu diesem Thema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud Community</a>.", - "The update was successful. There were warnings." : "Das Update war erfolgreich. Warnungen wurden ausgegeben.", "The update was successful. Redirecting you to Nextcloud now." : "Das Update war erfolgreich. Sie werden nun zu Nextcloud weitergeleitet.", "Searching other places" : "Andere Orte durchsuchen", "No search results in other folders" : "Keine Suchergebnisse in anderen Ordnern", @@ -238,7 +240,7 @@ "Internal Server Error" : "Interner Serverfehler", "The server encountered an internal error and was unable to complete your request." : "Der Server hat einen internen Fehler und konnte Ihre Anfrage nicht vervollständigen.", "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Bitte wenden Sie sich an den Serveradministrator, wenn dieser Fehler mehrfach auftritt, geben Sie bitte die, unten stehenden, technischen Details in Ihrem Bericht mit an.", - "More details can be found in the server log." : "Weitere Details können im Serverprotokoll gefunden werden.", + "More details can be found in the server log." : "Weitere Details können im Server-Protokoll gefunden werden.", "Technical details" : "Technische Details", "Remote Address: %s" : "Entfernte Adresse: %s", "Request ID: %s" : "Anfragekennung: %s", @@ -303,7 +305,7 @@ "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." : "Bitte kontaktieren Sie Ihren Administrator. Wenn Sie Administrator dieser Instanz sind, konfigurieren Sie bitte die „trusted_domain“-Einstellung in config/config.php. Eine Beispielkonfiguration wird unter config/config.sample.php bereitgestellt.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Wenn es Ihre Konfiguration zulässt, können Sie als Administrator gegebenenfalls den Button unten benutzen, um diese Domain als vertrauenswürdig einzustufen.", "Add \"%s\" as trusted domain" : "„%s“ als vertrauenswürdige Domain hinzufügen", - "App update required" : "App-Update notwendig", + "App update required" : "App-Aktualisierung notwendig", "%s will be updated to version %s" : "%s wird auf Version %s aktualisiert", "These apps will be updated:" : "Diese Apps werden aktualisiert:", "These incompatible apps will be disabled:" : "Diese inkompatiblen Apps werden deaktiviert:", @@ -311,8 +313,8 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Stellen Sie vor dem Fortsetzen bitte sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurden.", "Start update" : "Aktualisierung starten", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Zur Vermeidung von Zeitüberschreitungen bei größeren Installationen können Sie stattdessen den folgenden Befehl in Ihrem Installationsverzeichnis ausführen:", - "Detailed logs" : "Detaillierte Fehlermeldungen", - "Update needed" : "Update erforderlich", + "Detailed logs" : "Detaillierte Protokollmeldungen", + "Update needed" : "Aktualisierung erforderlich", "Please use the command line updater because you have a big instance." : "Da Sie eine große Instanz von Nextcloud besitzen, wird die Benutzung des Aktualisierungsprogrammes über die Kommandozeile empfohlen.", "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Für weitere Hilfen, schauen Sie bitte in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Diese %s-Instanz befindet sich gerade im Wartungsmodus, was eine Weile dauern kann.", diff --git a/core/l10n/el.js b/core/l10n/el.js index 955c2916aae..edfba6237b2 100644 --- a/core/l10n/el.js +++ b/core/l10n/el.js @@ -145,6 +145,7 @@ OC.L10N.register( "Send" : "Αποστολή", "Sending ..." : "Αποστολή...", "Email sent" : "Το Email απεστάλη ", + "Send link via email" : "Αποστολή συνδέσμου μέσω email", "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", "Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}", "group" : "ομάδα", @@ -176,10 +177,8 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}", "Hello {name}" : "Γεια σου {name}", "_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Η αναβάθμιση είναι σε εξέλιξη, αν φύγετε από αυτή τη σελίδα μπορεί να διακοπεί η διαδικασία σε ορισμένα περιβάλλοντα χρήσης.", "An error occurred." : "Παρουσιάστηκε σφάλμα", "Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.", - "The update was successful. There were warnings." : "Η ενημέρωση ήταν επιτυχής. Υπήρχαν προειδοποιήσεις.", "Searching other places" : "Έρευνα σε άλλα σημεία.", "No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} αποτέλεσμα αναζήτησης σε άλλο φάκελο","{count} αποτελέσματα αναζήτησης σε άλλους φακέλους"], @@ -238,8 +237,10 @@ OC.L10N.register( "Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!", "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.", "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.", + "Username or email" : "Όνομα χρήστη ή email", "Log in" : "Είσοδος", "Wrong password. Reset it?" : "Λάθος Κωδικός. Επαναφορά;", + "Wrong password." : "Λανθασμένο συνθηματικό.", "Stay logged in" : "Μείνετε συνδεδεμένος", "Alternative Logins" : "Εναλλακτικές Συνδέσεις", "Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}", @@ -262,6 +263,8 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Παρακαλώ βεβαιωθείτε ότι έχουν ληψθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.", "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 η εγκατάσταση είναι σε κατάσταση συντήρησης, η οποία μπορεί να πάρει κάποιο χρόνο.", "This page will refresh itself when the %s instance is available again." : "Αυτή η σελίδα θα ανανεωθεί από μόνη της όταν η %s εγκατάσταση είναι διαθέσιμη ξανά." }, diff --git a/core/l10n/el.json b/core/l10n/el.json index 4df4fb4f44c..a1a0503bdc3 100644 --- a/core/l10n/el.json +++ b/core/l10n/el.json @@ -143,6 +143,7 @@ "Send" : "Αποστολή", "Sending ..." : "Αποστολή...", "Email sent" : "Το Email απεστάλη ", + "Send link via email" : "Αποστολή συνδέσμου μέσω email", "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", "Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}", "group" : "ομάδα", @@ -174,10 +175,8 @@ "Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}", "Hello {name}" : "Γεια σου {name}", "_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Η αναβάθμιση είναι σε εξέλιξη, αν φύγετε από αυτή τη σελίδα μπορεί να διακοπεί η διαδικασία σε ορισμένα περιβάλλοντα χρήσης.", "An error occurred." : "Παρουσιάστηκε σφάλμα", "Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.", - "The update was successful. There were warnings." : "Η ενημέρωση ήταν επιτυχής. Υπήρχαν προειδοποιήσεις.", "Searching other places" : "Έρευνα σε άλλα σημεία.", "No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} αποτέλεσμα αναζήτησης σε άλλο φάκελο","{count} αποτελέσματα αναζήτησης σε άλλους φακέλους"], @@ -236,8 +235,10 @@ "Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!", "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.", "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.", + "Username or email" : "Όνομα χρήστη ή email", "Log in" : "Είσοδος", "Wrong password. Reset it?" : "Λάθος Κωδικός. Επαναφορά;", + "Wrong password." : "Λανθασμένο συνθηματικό.", "Stay logged in" : "Μείνετε συνδεδεμένος", "Alternative Logins" : "Εναλλακτικές Συνδέσεις", "Use the following link to reset your password: {link}" : "Χρησιμοποιήστε τον ακόλουθο σύνδεσμο για να επανεκδόσετε τον κωδικό: {link}", @@ -260,6 +261,8 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Παρακαλώ βεβαιωθείτε ότι έχουν ληψθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.", "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 η εγκατάσταση είναι σε κατάσταση συντήρησης, η οποία μπορεί να πάρει κάποιο χρόνο.", "This page will refresh itself when the %s instance is available again." : "Αυτή η σελίδα θα ανανεωθεί από μόνη της όταν η %s εγκατάσταση είναι διαθέσιμη ξανά." },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js index 414d643664e..7d38eb05970 100644 --- a/core/l10n/en_GB.js +++ b/core/l10n/en_GB.js @@ -214,13 +214,10 @@ OC.L10N.register( "Hello {name}" : "Hello {name}", "new" : "new", "_download %n file_::_download %n files_" : ["download %n file","download %n files"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "The upgrade is in progress, leaving this page might interrupt the process in some environments.", - "Updating to {version}" : "Updating to {version}", "An error occurred." : "An error occurred.", "Please reload the page." : "Please reload the page.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", - "The update was successful. There were warnings." : "The update was successful. There were warnings.", "The update was successful. Redirecting you to Nextcloud now." : "The update was successful. Redirecting you to Nextcloud.", "Searching other places" : "Searching other places", "No search results in other folders" : "No search results in other folders", diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json index 21452c437db..cdd0ed8e7c3 100644 --- a/core/l10n/en_GB.json +++ b/core/l10n/en_GB.json @@ -212,13 +212,10 @@ "Hello {name}" : "Hello {name}", "new" : "new", "_download %n file_::_download %n files_" : ["download %n file","download %n files"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "The upgrade is in progress, leaving this page might interrupt the process in some environments.", - "Updating to {version}" : "Updating to {version}", "An error occurred." : "An error occurred.", "Please reload the page." : "Please reload the page.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", - "The update was successful. There were warnings." : "The update was successful. There were warnings.", "The update was successful. Redirecting you to Nextcloud now." : "The update was successful. Redirecting you to Nextcloud.", "Searching other places" : "Searching other places", "No search results in other folders" : "No search results in other folders", diff --git a/core/l10n/es.js b/core/l10n/es.js index 399a6fbe8cc..b55d67d2cfc 100644 --- a/core/l10n/es.js +++ b/core/l10n/es.js @@ -131,6 +131,7 @@ OC.L10N.register( "Strong password" : "Contraseña muy buena", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.", "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>." : "Su servidor no ha sido correctamente configurado para resolver \"{url}\". Puede encontrar más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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." : "Este servidor no tiene una conexión a internet. No se pudo establecer varias conexiones. Esto significa que varias funcionalidades, como montar discos externos, notificaciones sobre actualizaciones o la instalación de aplicaciones de terceros no funcionarán. Podría no ser posible acceder a archivos remotamente o enviar emails de notificación. Sugerimos activar el acceso a Internet para este servidor si se quiere acceder a todas esas funcionalidades.", "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>." : "La memoria caché no ha sido configurada. Para mejorar su desempeño, por favor, configure la memcache si está disponible. Puede encontrar más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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 no tiene acceso a /dev/urandom lo cual es desaconsejable por razones de seguridad. Puede encontrar más información en nuestra our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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." : "Actualmente utiliza PHP {version}. Le aconsejamos que actualice su versión de PHP para beneficiarse de <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">mejoras de desempeño y seguridad que aporta PHP Group</a> en cuanto su distribución lo soporte.", @@ -153,6 +154,10 @@ OC.L10N.register( "Expiration" : "Expira en:", "Expiration date" : "Fecha de caducidad", "Choose a password for the public link" : "Elija una contraseña para el enlace publico", + "Copied!" : "¡Copiado!", + "Not supported!" : "¡No se puede!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", "Resharing is not allowed" : "No se permite compartir de nuevo", "Share link" : "Enlace compartido", "Link" : "Enlace", @@ -214,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Hola {name}", "new" : "Nuevo", "_download %n file_::_download %n files_" : ["descargar %n ficheros","descargar %n archivos"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, salir de esta página podrían interrumpir el proceso en algunos entornos.", - "Updating to {version}" : "Actualizando a {version}", "An error occurred." : "Ocurrió un error.", "Please reload the page." : "Recargue/Actualice la página", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización tuvo un problema. Para más información <a href=\"{url}\">consulta nuestro artículo del foro</a> para arreglar este problema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización falló. Por favor, informa de este problema en la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidad de Nextcloud</a>.", - "The update was successful. There were warnings." : "La actualización fue exitosa. Había advertencias.", "The update was successful. Redirecting you to Nextcloud now." : "Actualización completada con éxito. Redirigiendo a Nextcloud.", "Searching other places" : "Buscando en otros lugares", "No search results in other folders" : "Ningún resultado de búsqueda en otras carpetas", diff --git a/core/l10n/es.json b/core/l10n/es.json index 0af3c04afcb..1dbdaeb94a7 100644 --- a/core/l10n/es.json +++ b/core/l10n/es.json @@ -129,6 +129,7 @@ "Strong password" : "Contraseña muy buena", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.", "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>." : "Su servidor no ha sido correctamente configurado para resolver \"{url}\". Puede encontrar más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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." : "Este servidor no tiene una conexión a internet. No se pudo establecer varias conexiones. Esto significa que varias funcionalidades, como montar discos externos, notificaciones sobre actualizaciones o la instalación de aplicaciones de terceros no funcionarán. Podría no ser posible acceder a archivos remotamente o enviar emails de notificación. Sugerimos activar el acceso a Internet para este servidor si se quiere acceder a todas esas funcionalidades.", "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>." : "La memoria caché no ha sido configurada. Para mejorar su desempeño, por favor, configure la memcache si está disponible. Puede encontrar más información en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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 no tiene acceso a /dev/urandom lo cual es desaconsejable por razones de seguridad. Puede encontrar más información en nuestra our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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." : "Actualmente utiliza PHP {version}. Le aconsejamos que actualice su versión de PHP para beneficiarse de <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">mejoras de desempeño y seguridad que aporta PHP Group</a> en cuanto su distribución lo soporte.", @@ -151,6 +152,10 @@ "Expiration" : "Expira en:", "Expiration date" : "Fecha de caducidad", "Choose a password for the public link" : "Elija una contraseña para el enlace publico", + "Copied!" : "¡Copiado!", + "Not supported!" : "¡No se puede!", + "Press ⌘-C to copy." : "Presiona ⌘-C para copiar.", + "Press Ctrl-C to copy." : "Presiona Ctrl-C para copiar.", "Resharing is not allowed" : "No se permite compartir de nuevo", "Share link" : "Enlace compartido", "Link" : "Enlace", @@ -212,13 +217,10 @@ "Hello {name}" : "Hola {name}", "new" : "Nuevo", "_download %n file_::_download %n files_" : ["descargar %n ficheros","descargar %n archivos"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, salir de esta página podrían interrumpir el proceso en algunos entornos.", - "Updating to {version}" : "Actualizando a {version}", "An error occurred." : "Ocurrió un error.", "Please reload the page." : "Recargue/Actualice la página", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La actualización tuvo un problema. Para más información <a href=\"{url}\">consulta nuestro artículo del foro</a> para arreglar este problema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La actualización falló. Por favor, informa de este problema en la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidad de Nextcloud</a>.", - "The update was successful. There were warnings." : "La actualización fue exitosa. Había advertencias.", "The update was successful. Redirecting you to Nextcloud now." : "Actualización completada con éxito. Redirigiendo a Nextcloud.", "Searching other places" : "Buscando en otros lugares", "No search results in other folders" : "Ningún resultado de búsqueda en otras carpetas", diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js index fc7e0482614..64e69da3eb8 100644 --- a/core/l10n/et_EE.js +++ b/core/l10n/et_EE.js @@ -172,10 +172,8 @@ OC.L10N.register( "Hello {name}" : "Tere, {name}", "new" : "uus", "_download %n file_::_download %n files_" : ["laadi alla %n fail","laadi alla %n faili"], - "Updating to {version}" : "Uuendamine versioonile {version}", "An error occurred." : "Tekkis tõrge.", "Please reload the page." : "Palun laadi see uuesti.", - "The update was successful. There were warnings." : "Uuendamine läks kenasti. hoiatusi polnud.", "Searching other places" : "Otsi teistest kohtadest", "Personal" : "Isiklik", "Users" : "Kasutajad", diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json index b8c258d54bc..a63f15477b1 100644 --- a/core/l10n/et_EE.json +++ b/core/l10n/et_EE.json @@ -170,10 +170,8 @@ "Hello {name}" : "Tere, {name}", "new" : "uus", "_download %n file_::_download %n files_" : ["laadi alla %n fail","laadi alla %n faili"], - "Updating to {version}" : "Uuendamine versioonile {version}", "An error occurred." : "Tekkis tõrge.", "Please reload the page." : "Palun laadi see uuesti.", - "The update was successful. There were warnings." : "Uuendamine läks kenasti. hoiatusi polnud.", "Searching other places" : "Otsi teistest kohtadest", "Personal" : "Isiklik", "Users" : "Kasutajad", diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js index 24e33f86710..9de205fe01f 100644 --- a/core/l10n/fi_FI.js +++ b/core/l10n/fi_FI.js @@ -205,12 +205,9 @@ OC.L10N.register( "Hello {name}" : "Hei {name}", "new" : "uusi", "_download %n file_::_download %n files_" : ["lataa %n tiedosto","lataa %n tiedostoa"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Päivitys on meneillään. Poistuminen tältä sivulta saattaa keskeyttää toimenpiteen joissain käyttöympäristöissä.", - "Updating to {version}" : "Päivitetään versioon {version}", "An error occurred." : "Tapahtui virhe.", "Please reload the page." : "Päivitä sivu.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Päivitys epäonnistui. Katso lisätietoja tähän ongelmaan liittyen <a href=\"{url}\">keskustelupalstan viestistä</a>.", - "The update was successful. There were warnings." : "Päivitys onnistui, tosin ilmeni varoituksia.", "Searching other places" : "Etsitään muista paikoista", "No search results in other folders" : "Ei hakutuloksia muissa kansioissa", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} hakutulos muussa kansiossa","{count} hakutulosta muissa kansioissa"], diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json index b6bcd6cc6ec..c53c4973621 100644 --- a/core/l10n/fi_FI.json +++ b/core/l10n/fi_FI.json @@ -203,12 +203,9 @@ "Hello {name}" : "Hei {name}", "new" : "uusi", "_download %n file_::_download %n files_" : ["lataa %n tiedosto","lataa %n tiedostoa"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Päivitys on meneillään. Poistuminen tältä sivulta saattaa keskeyttää toimenpiteen joissain käyttöympäristöissä.", - "Updating to {version}" : "Päivitetään versioon {version}", "An error occurred." : "Tapahtui virhe.", "Please reload the page." : "Päivitä sivu.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Päivitys epäonnistui. Katso lisätietoja tähän ongelmaan liittyen <a href=\"{url}\">keskustelupalstan viestistä</a>.", - "The update was successful. There were warnings." : "Päivitys onnistui, tosin ilmeni varoituksia.", "Searching other places" : "Etsitään muista paikoista", "No search results in other folders" : "Ei hakutuloksia muissa kansioissa", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} hakutulos muussa kansiossa","{count} hakutulosta muissa kansioissa"], diff --git a/core/l10n/fr.js b/core/l10n/fr.js index f6c96e82d44..de66161b63d 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -8,12 +8,12 @@ OC.L10N.register( "Unknown filetype" : "Type de fichier inconnu", "Invalid image" : "Image non valable", "An error occurred. Please contact your admin." : "Une erreur est survenue. Veuillez contacter votre administrateur.", - "No temporary profile picture available, try again" : "Aucune image temporaire disponible pour le profil. Essayez à nouveau.", + "No temporary profile picture available, try again" : "Auncune image de profil temporaire disponible, essayez à nouveau", "No crop data provided" : "Aucune donnée de recadrage fournie", "No valid crop data provided" : "Données de recadrage non valides", "Crop is not square" : "Le recadrage n'est pas carré", - "Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable.", - "Couldn't reset password because the token is expired" : "Impossible de réinitialiser le mot de passe car le jeton a expiré.", + "Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable", + "Couldn't reset password because the token is expired" : "Impossible de réinitialiser le mot de passe car le jeton a expiré", "Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.", "%s password reset" : "Réinitialisation de votre mot de passe %s", @@ -131,6 +131,7 @@ OC.L10N.register( "Strong password" : "Mot de passe fort", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.", "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>." : "La configuration du serveur web ne permet pas d'atteindre \"{url}\". Consultez la <a target=\"_blank\" ref=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.", + "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." : "Ce serveur ne peut se connecter à internet: Plusieurs point finaux ne peuvent être atteins. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que l'envoie de notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", "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>." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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>." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.", "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." : "Vous utilisez actuellement PHP {version}. Nous vous encourageons à mettre à jour votre version de PHP afin de tirer avantage des amélioration liées à <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">la performance et la sécurité fournies par le PHP Group</a>, dès que votre distribution le supportera.", @@ -218,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Hello {name}", "new" : "Nouveau ", "_download %n file_::_download %n files_" : ["Télécharger %n fichier","Télécharger %n fichiers"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "La mise à jour est en cours. Selon la configuration, le fait de quitter cette page peut entraîner l'interruption de la procédure.", - "Updating to {version}" : "En cours de mise à jour vers la version {version}", "An error occurred." : "Une erreur est survenue.", "Please reload the page." : "Veuillez recharger la page.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La mise à jour a échoué. Pour plus d'informations <a href=\"{url}\">consultez notre publication sur le forum</a> à propos de ce problème.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La mise à jour a échoué. Veuillez reporter le problème à la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">communauté Nextcloud</a>.", - "The update was successful. There were warnings." : "La mise à jour a réussi, mais il y a eu des avertissements", "The update was successful. Redirecting you to Nextcloud now." : "La mise à jour a réussi. Vous allez être redirigé vers votre Nextcloud.", "Searching other places" : "Recherche en cours dans d'autres emplacements", "No search results in other folders" : "Aucun résultat dans d'autres dossiers", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 43f74eab03b..b3bd4f04628 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -6,12 +6,12 @@ "Unknown filetype" : "Type de fichier inconnu", "Invalid image" : "Image non valable", "An error occurred. Please contact your admin." : "Une erreur est survenue. Veuillez contacter votre administrateur.", - "No temporary profile picture available, try again" : "Aucune image temporaire disponible pour le profil. Essayez à nouveau.", + "No temporary profile picture available, try again" : "Auncune image de profil temporaire disponible, essayez à nouveau", "No crop data provided" : "Aucune donnée de recadrage fournie", "No valid crop data provided" : "Données de recadrage non valides", "Crop is not square" : "Le recadrage n'est pas carré", - "Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable.", - "Couldn't reset password because the token is expired" : "Impossible de réinitialiser le mot de passe car le jeton a expiré.", + "Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable", + "Couldn't reset password because the token is expired" : "Impossible de réinitialiser le mot de passe car le jeton a expiré", "Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.", "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.", "%s password reset" : "Réinitialisation de votre mot de passe %s", @@ -129,6 +129,7 @@ "Strong password" : "Mot de passe fort", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.", "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>." : "La configuration du serveur web ne permet pas d'atteindre \"{url}\". Consultez la <a target=\"_blank\" ref=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.", + "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." : "Ce serveur ne peut se connecter à internet: Plusieurs point finaux ne peuvent être atteins. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que l'envoie de notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", "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>." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</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>." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a> pour avoir plus d'informations à ce sujet.", "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." : "Vous utilisez actuellement PHP {version}. Nous vous encourageons à mettre à jour votre version de PHP afin de tirer avantage des amélioration liées à <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">la performance et la sécurité fournies par le PHP Group</a>, dès que votre distribution le supportera.", @@ -216,13 +217,10 @@ "Hello {name}" : "Hello {name}", "new" : "Nouveau ", "_download %n file_::_download %n files_" : ["Télécharger %n fichier","Télécharger %n fichiers"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "La mise à jour est en cours. Selon la configuration, le fait de quitter cette page peut entraîner l'interruption de la procédure.", - "Updating to {version}" : "En cours de mise à jour vers la version {version}", "An error occurred." : "Une erreur est survenue.", "Please reload the page." : "Veuillez recharger la page.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "La mise à jour a échoué. Pour plus d'informations <a href=\"{url}\">consultez notre publication sur le forum</a> à propos de ce problème.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "La mise à jour a échoué. Veuillez reporter le problème à la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">communauté Nextcloud</a>.", - "The update was successful. There were warnings." : "La mise à jour a réussi, mais il y a eu des avertissements", "The update was successful. Redirecting you to Nextcloud now." : "La mise à jour a réussi. Vous allez être redirigé vers votre Nextcloud.", "Searching other places" : "Recherche en cours dans d'autres emplacements", "No search results in other folders" : "Aucun résultat dans d'autres dossiers", diff --git a/core/l10n/he.js b/core/l10n/he.js index b53fb45105d..cccc644f47f 100644 --- a/core/l10n/he.js +++ b/core/l10n/he.js @@ -213,12 +213,9 @@ OC.L10N.register( "Hello {name}" : "שלום {name}", "new" : "חדש", "_download %n file_::_download %n files_" : ["הורד %n קובץ","הורדו %n קבצים"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "מתבצע עכשיו שדרוג, מעבר מדף זה עלול לפגוע בתהליך בסביבות הפעלה מסויימות.", - "Updating to {version}" : "מעדכן ל- {version}", "An error occurred." : "אירעה שגיאה.", "Please reload the page." : "יש להעלות מחדש דף זה.", "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 successful. There were warnings." : "העדכון בוצע בהצלחה. היו הזהרות.", "Searching other places" : "מחפש במקומות אחרים", "No search results in other folders" : "אין תוצאות חיפוש בתיקיות אחרות", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} תוצאת חיפוש בתיקייה אחרות","{count} תוצאות חיפוש בתיקיות אחרות"], diff --git a/core/l10n/he.json b/core/l10n/he.json index f9599d10052..a4d3b261f1e 100644 --- a/core/l10n/he.json +++ b/core/l10n/he.json @@ -211,12 +211,9 @@ "Hello {name}" : "שלום {name}", "new" : "חדש", "_download %n file_::_download %n files_" : ["הורד %n קובץ","הורדו %n קבצים"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "מתבצע עכשיו שדרוג, מעבר מדף זה עלול לפגוע בתהליך בסביבות הפעלה מסויימות.", - "Updating to {version}" : "מעדכן ל- {version}", "An error occurred." : "אירעה שגיאה.", "Please reload the page." : "יש להעלות מחדש דף זה.", "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 successful. There were warnings." : "העדכון בוצע בהצלחה. היו הזהרות.", "Searching other places" : "מחפש במקומות אחרים", "No search results in other folders" : "אין תוצאות חיפוש בתיקיות אחרות", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} תוצאת חיפוש בתיקייה אחרות","{count} תוצאות חיפוש בתיקיות אחרות"], diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js index aa06f80b386..7a88e4f2cff 100644 --- a/core/l10n/hu_HU.js +++ b/core/l10n/hu_HU.js @@ -212,12 +212,9 @@ OC.L10N.register( "Hello {name}" : "Üdv {name}!", "new" : "új", "_download %n file_::_download %n files_" : ["%n fájl letöltése","%n fájl letöltése"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A frissítés folyamatban van, az oldal elhagyása néhány környezetben lehet, hogy megszakítja a folyamatot.", - "Updating to {version}" : "Frissítés erre a verzióra: {version}", "An error occurred." : "Hiba történt.", "Please reload the page." : "Kérjük frissítse az oldalt!", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Frissítés sikertelen. Bővebb információért <a href=\"{url}\">keresse fel a fórumunkat</a> a probléma lefedéséért.", - "The update was successful. There were warnings." : "A frissítés sikerült. Figyelmeztetések találhatók.", "Searching other places" : "Keresés más helyeken", "No search results in other folders" : "Nincs keresési eredmény a másik könyvtárakban", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} keresési eredmény egy másik könyvtárban","{count} keresési eredmény más könyvtárakban"], diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json index 97e4dc60110..0673dcceace 100644 --- a/core/l10n/hu_HU.json +++ b/core/l10n/hu_HU.json @@ -210,12 +210,9 @@ "Hello {name}" : "Üdv {name}!", "new" : "új", "_download %n file_::_download %n files_" : ["%n fájl letöltése","%n fájl letöltése"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A frissítés folyamatban van, az oldal elhagyása néhány környezetben lehet, hogy megszakítja a folyamatot.", - "Updating to {version}" : "Frissítés erre a verzióra: {version}", "An error occurred." : "Hiba történt.", "Please reload the page." : "Kérjük frissítse az oldalt!", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Frissítés sikertelen. Bővebb információért <a href=\"{url}\">keresse fel a fórumunkat</a> a probléma lefedéséért.", - "The update was successful. There were warnings." : "A frissítés sikerült. Figyelmeztetések találhatók.", "Searching other places" : "Keresés más helyeken", "No search results in other folders" : "Nincs keresési eredmény a másik könyvtárakban", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} keresési eredmény egy másik könyvtárban","{count} keresési eredmény más könyvtárakban"], diff --git a/core/l10n/id.js b/core/l10n/id.js index cae7fdc0019..782a958cc7f 100644 --- a/core/l10n/id.js +++ b/core/l10n/id.js @@ -1,6 +1,7 @@ OC.L10N.register( "core", { + "Please select a file." : "Pilih berkas", "File is too big" : "Berkas terlalu besar", "Invalid file provided" : "Berkas yang diberikan tidak sah", "No image or file provided" : "Tidak ada gambar atau berkas yang disediakan", @@ -14,6 +15,7 @@ OC.L10N.register( "Couldn't reset password because the token is invalid" : "Tidak dapat menyetel ulang sandi karena token tidak sah", "Couldn't reset password because the token is expired" : "Tidak dapat menyetel ulang sandi karena token telah kadaluarsa", "Couldn't send reset email. Please make sure your username is correct." : "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Tidak dapat mengirim email karena tidak ada alamat email untuk nama pengguna ini. Silahkan hubungi administrator Anda.", "%s password reset" : "%s sandi disetel ulang", "Couldn't send reset email. Please contact your administrator." : "Tidak dapat mengirim email setel ulang. Silakan hubungi administrator Anda.", "Error loading tags" : "Kesalahan saat saat memuat tag", @@ -25,8 +27,11 @@ OC.L10N.register( "Error unfavoriting" : "Kesalahan saat menghapus sebagai favorit", "Couldn't send mail to following users: %s " : "Tidak dapat mengirim Email ke pengguna berikut: %s", "Preparing update" : "Mempersiapkan pembaruan", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Peringatan perbaikan:", "Repair error: " : "Kesalahan perbaikan:", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Gunakan pembaruan di command line karena pembaruan otomatis di nonaktifkan di config.php. ", + "[%d / %d]: Checking table %s" : "[%d / %d]: Mengecek tabel %s", "Turned on maintenance mode" : "Hidupkan mode perawatan", "Turned off maintenance mode" : "Matikan mode perawatan", "Maintenance mode is kept active" : "Mode Pemeliharaan masih aktif", @@ -38,6 +43,10 @@ OC.L10N.register( "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Memeriksa apakah skema untuk %s dapat diperbarui (dapat memerlukan waktu yang lama tergantung pada ukuran basis data)", "Checked database schema update for apps" : "Pembaruan skema basis data terperiksa untuk aplikasi", "Updated \"%s\" to %s" : "Terbaru \"%s\" sampai %s", + "Set log level to debug" : "Atur log level ke debug", + "Reset log level" : "Atur ulang log level", + "Starting code integrity check" : "Memulai pengecekan integritas kode", + "Finished code integrity check" : "Pengecekan integritas kode selesai", "%s (3rdparty)" : "%s (pihak ke-3)", "%s (incompatible)" : "%s (tidak kompatibel)", "Following apps have been disabled: %s" : "Aplikasi berikut telah dinonaktifkan: %s", @@ -87,7 +96,9 @@ OC.L10N.register( "Oct." : "Okt.", "Nov." : "Nov.", "Dec." : "Des.", + "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Ada permasalahan dengan pengecekan integrasi kode. Informasi selanjutnya…</a>", "Settings" : "Pengaturan", + "Problem loading page, reloading in 5 seconds" : "Terjadi masalah dalam memuat laman, mencoba lagi dalam 5 detik", "Saving..." : "Menyimpan...", "Dismiss" : "Buang", "seconds ago" : "beberapa detik yang lalu", @@ -119,9 +130,18 @@ OC.L10N.register( "Good password" : "Sandi baik", "Strong password" : "Sandi kuat", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Server web Anda belum diatur dengan benar untuk mengizinkan sinkronisasi berkas karena antarmuka WebDAV nampaknya rusak.", + "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>." : "Server web Anda tidak diatur secara baik untuk menyelesaikan \"{url}\". Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", + "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." : "Server ini tidak tersambung ke internet: Banyak endpoint tidak bisa dicapai. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", + "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>." : "Tidak ada memory cache telah dikonfigurasi. Untuk meningkatkan kinerja, mohon mengkonfigurasi memcache jika tersedia. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", + "/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>." : "/dev/urandom tidak bisa dibaca oleh PHP dan sangat tidak disarankan untuk alasan keamanan. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", + "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." : "Anda sekarang menjalankan PHP {version}. Kami menyarankan Anda untuk perbarui versi PHP Anda untuk memanfaatkan <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performa dan pembaruan keamanan yang disediakan oleh PHP Group</a> saat distribusi Anda mendukungnya.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses ownCloud dari proxy terpercaya. Apabila Anda tidak mengakses ownCloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke ownCloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", + "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 terkonfigurasi sebagai cache terdistribusi, tetapi modul PHP \"memcache\" yang salah terpasang. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" dan bukan \"memcache\". Lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki memcached tentang kedua modul</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>)" : "Beberapa berkas tidak lulus cek integritas. Informasi lebih lanjut tentang cara mengatasi masalah ini dapat ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami. (<a href=\"{codeIntegrityDownloadEndpoint}\">Daftar berkas yang tidak valid…</a> / <a href=\"{rescanEndpoint}\">Pindai ulang…</a>)", "Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server", "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." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.", "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." : "Header HTTP \"{header}\" tidak dikonfigurasi sama dengan \"{expected}\". Hal ini berpotensi pada resiko keamanan dan privasi. Kami sarankan untuk menyesuaikan pengaturan ini.", + "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>." : "Header \"Strict-Transport-Security\" HTTP tidak terkonfigurasi ke setidaknya \"{seconds}\" detik. Untuk meningkatkan kemanan kami merekomendasikan mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\" rel=\"noreferrer\">saran keamanan</a> kami.", "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>." : "Anda mengakses situs ini via HTTP. Kami sangat menyarankan Anda untuk mengatur server Anda menggunakan HTTPS yang dibahas di <a href=\"{docUrl}\">tips keamanan</a> kami.", "Shared" : "Dibagikan", "Shared with {recipients}" : "Dibagikan dengan {recipients}", @@ -134,16 +154,22 @@ OC.L10N.register( "Expiration" : "Kedaluwarsa", "Expiration date" : "Tanggal kedaluwarsa", "Choose a password for the public link" : "Tetapkan sandi untuk tautan publik", + "Copied!" : "Tersalin!", + "Not supported!" : "Tidak didukung!", + "Press ⌘-C to copy." : "Tekan ⌘-C untuk menyalin.", + "Press Ctrl-C to copy." : "Tekan Ctrl-C untuk menyalin.", "Resharing is not allowed" : "Berbagi ulang tidak diizinkan", "Share link" : "Bagikan tautan", "Link" : "Tautan", "Password protect" : "Lindungi dengan sandi", "Password" : "Sandi", "Allow editing" : "Izinkan penyuntingan", + "Hide file listing" : "Sembunyikan pendaftaran berkas", "Email link to person" : "Emailkan tautan ini ke orang", "Send" : "Kirim", "Sending ..." : "Mengirim ...", "Email sent" : "Email terkirim", + "Send link via email" : "Kirim pranala melalui email", "Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}", "Shared with you by {owner}" : "Dibagikan dengan anda oleh {owner}", "group" : "grup", @@ -156,13 +182,30 @@ OC.L10N.register( "change" : "ubah", "delete" : "hapus", "access control" : "kontrol akses", + "Could not unshare" : "Tidak dapat membatalkan pembagian", "Share details could not be loaded for this item." : "Rincian berbagi tidak dapat dimuat untuk item ini.", + "No users or groups found for {search}" : "Tidak ada pengguna atau grup ditemukan untuk {search}", + "No users found for {search}" : "Tidak ada pengguna ditemukan untuk {search}", + "An error occurred. Please try again" : "Terjadi kesalahan. Silakan coba lagi", + "{sharee} (group)" : "{sharee} (grup)", + "{sharee} (at {server})" : "{sharee} (di {server})", + "{sharee} (remote)" : "{sharee} (remote)", "Share" : "Bagikan", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Bagikan dengan orang lain di ownCloud menggunakan sintaks username@example.com/owncloud", + "Share with users…" : "Bagikan kepada pengguna...", + "Share with users, groups or remote users…" : "Bagikan kepada pengguna, grup atau remote...", + "Share with users or groups…" : "Bagikan kepada pengguna atau grup...", + "Share with users or remote users…" : "Bagikan kepada pengguna atau remote...", + "Error removing share" : "Terjadi kesalahan saat menghapus pembagian", "Warning" : "Peringatan", "Error while sending notification" : "Kesalahan ketika mengirim notifikasi", + "Non-existing tag #{tag}" : "Tag tidak ada #{tag}", + "restricted" : "terbatas", + "invisible" : "tersembunyi", + "({scope})" : "({scope})", "Delete" : "Hapus", "Rename" : "Ubah nama", + "Collaborative tags" : "Tag kolaboratif", "The object type is not specified." : "Tipe objek tidak ditentukan.", "Enter new" : "Masukkan baru", "Add" : "Tambah", @@ -170,15 +213,17 @@ OC.L10N.register( "Error loading dialog template: {error}" : "Kesalahan saat memuat templat dialog: {error}", "No tags selected for deletion." : "Tidak ada label yang dipilih untuk dihapus.", "unknown text" : "teks tidak diketahui", - "Hello world!" : "Hello world!", + "Hello world!" : "Halo dunia!", "sunny" : "cerah", - "Hello {name}, the weather is {weather}" : "Helo {name}, jepang {weather}", - "Hello {name}" : "Helo {name}", + "Hello {name}, the weather is {weather}" : "Halo {name}, saat ini {weather}", + "Hello {name}" : "Halo {name}", + "new" : "baru", "_download %n file_::_download %n files_" : ["unduh %n berkas"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Pembaruan sedang dalam proses, meninggalkan halaman ini mungkin dapat mengganggu proses di beberapa lingkungan.", "An error occurred." : "Terjadi kesalahan.", "Please reload the page." : "Silakan muat ulang halaman.", - "The update was successful. There were warnings." : "Pembaruan telah berhasil. Terdapat peringatan.", + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Pembaruan gagal. Untuk informasi berikutnya <a href=\"{url}\">cek posting di forum</a> yang mencakup masalah kami.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Pembaruan gagal. Laporkan masalah ini ke <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitas Nextcloud</a>.", + "The update was successful. Redirecting you to Nextcloud now." : "Pembaruan berhasil. Mengarahkan Anda ke Nextcloud.", "Searching other places" : "Mencari tempat lainnya", "No search results in other folders" : "Tidak ada hasil penelusuran didalam folder yang lain", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} hasil pencarian di folder lain"], @@ -209,6 +254,7 @@ OC.L10N.register( "Trace" : "Jejak", "Security warning" : "Peringatan keamanan", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Untuk informasi bagaimana menkonfigurasi server Anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\" rel=\"norefferer\">dokumentasi</a>.", "Create an <strong>admin account</strong>" : "Buat sebuah <strong>akun admin</strong>", "Username" : "Nama pengguna", "Storage & database" : "Penyimpanan & Basis data", @@ -236,9 +282,12 @@ OC.L10N.register( "Search" : "Cari", "Server side authentication failed!" : "Otentikasi dari sisi server gagal!", "Please contact your administrator." : "Silahkan hubungi administrator anda.", + "An internal error occurred." : "Terjadi kesalahan internal.", "Please try again or contact your administrator." : "Mohon coba lagi atau hubungi administrator Anda.", + "Username or email" : "Nama pengguna atau email", "Log in" : "Masuk", "Wrong password. Reset it?" : "Sandi salah. Atur ulang?", + "Wrong password." : "Sandi salah.", "Stay logged in" : "Tetap masuk", "Alternative Logins" : "Cara Alternatif untuk Masuk", "Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}", @@ -249,7 +298,13 @@ OC.L10N.register( "This means only administrators can use the instance." : "Ini berarti hanya administrator yang dapat menggunakan ownCloud.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Hubungi administrator sistem anda jika pesan ini terus muncul atau muncul tiba-tiba.", "Thank you for your patience." : "Terima kasih atas kesabaran anda.", + "Two-step verification" : "Otentikasi ganda", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Peningkatan keamanan delah diaktifkan untuk akun Anda. Mohon otentikasi menggunakan faktor kedua.", + "Cancel login" : "Batalkan log masuk", + "Please authenticate using the selected factor." : "Mohon lakukan otentikasi dengan faktor ke dua.", + "An error occured while verifying the token" : "Terjadi kesalahan saat memverifikasi token", "You are accessing the server from an untrusted domain." : "Anda mengakses server dari domain yang tidak terpercaya.", + "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." : "Silakan hubungi administrator Anda. Apabila Anda adalah administrator dari instansi ini, konfigurasikan aturan \"trusted_domains\" di config/config.php. Contoh konfigurasi disediakan di 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." : "Tergantung pada konfigurasi Anda, sebagai seorang administrator Anda kemungkinan dapat menggunakan tombol bawah untuk mempercayai domain ini.", "Add \"%s\" as trusted domain" : "tambahkan \"%s\" sebagai domain terpercaya", "App update required" : "Diperlukan perbarui aplikasi", @@ -260,6 +315,10 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Pastikan bahwa basis data, folder konfig, dan folder data telah dicadangkan sebelum melanjutkan.", "Start update" : "Jalankan pembaruan", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Untuk menghindari waktu habis dengan instalasi yang lebih besar, Anda bisa menjalankan perintah berikut dari direktori instalasi Anda:", + "Detailed logs" : "Log detail", + "Update needed" : "Pembaruan dibutuhkan", + "Please use the command line updater because you have a big instance." : "Gunakan pembaruan command-line karena Anda mempunyai instansi yang besar.", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Untuk bantuan, lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Instansi %s ini sedang dalam modus pemeliharaan, mungkin memerlukan beberapa saat.", "This page will refresh itself when the %s instance is available again." : "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali." }, diff --git a/core/l10n/id.json b/core/l10n/id.json index aa2537a5c91..093ea64c99c 100644 --- a/core/l10n/id.json +++ b/core/l10n/id.json @@ -1,4 +1,5 @@ { "translations": { + "Please select a file." : "Pilih berkas", "File is too big" : "Berkas terlalu besar", "Invalid file provided" : "Berkas yang diberikan tidak sah", "No image or file provided" : "Tidak ada gambar atau berkas yang disediakan", @@ -12,6 +13,7 @@ "Couldn't reset password because the token is invalid" : "Tidak dapat menyetel ulang sandi karena token tidak sah", "Couldn't reset password because the token is expired" : "Tidak dapat menyetel ulang sandi karena token telah kadaluarsa", "Couldn't send reset email. Please make sure your username is correct." : "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Tidak dapat mengirim email karena tidak ada alamat email untuk nama pengguna ini. Silahkan hubungi administrator Anda.", "%s password reset" : "%s sandi disetel ulang", "Couldn't send reset email. Please contact your administrator." : "Tidak dapat mengirim email setel ulang. Silakan hubungi administrator Anda.", "Error loading tags" : "Kesalahan saat saat memuat tag", @@ -23,8 +25,11 @@ "Error unfavoriting" : "Kesalahan saat menghapus sebagai favorit", "Couldn't send mail to following users: %s " : "Tidak dapat mengirim Email ke pengguna berikut: %s", "Preparing update" : "Mempersiapkan pembaruan", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Peringatan perbaikan:", "Repair error: " : "Kesalahan perbaikan:", + "Please use the command line updater because automatic updating is disabled in the config.php." : "Gunakan pembaruan di command line karena pembaruan otomatis di nonaktifkan di config.php. ", + "[%d / %d]: Checking table %s" : "[%d / %d]: Mengecek tabel %s", "Turned on maintenance mode" : "Hidupkan mode perawatan", "Turned off maintenance mode" : "Matikan mode perawatan", "Maintenance mode is kept active" : "Mode Pemeliharaan masih aktif", @@ -36,6 +41,10 @@ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Memeriksa apakah skema untuk %s dapat diperbarui (dapat memerlukan waktu yang lama tergantung pada ukuran basis data)", "Checked database schema update for apps" : "Pembaruan skema basis data terperiksa untuk aplikasi", "Updated \"%s\" to %s" : "Terbaru \"%s\" sampai %s", + "Set log level to debug" : "Atur log level ke debug", + "Reset log level" : "Atur ulang log level", + "Starting code integrity check" : "Memulai pengecekan integritas kode", + "Finished code integrity check" : "Pengecekan integritas kode selesai", "%s (3rdparty)" : "%s (pihak ke-3)", "%s (incompatible)" : "%s (tidak kompatibel)", "Following apps have been disabled: %s" : "Aplikasi berikut telah dinonaktifkan: %s", @@ -85,7 +94,9 @@ "Oct." : "Okt.", "Nov." : "Nov.", "Dec." : "Des.", + "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Ada permasalahan dengan pengecekan integrasi kode. Informasi selanjutnya…</a>", "Settings" : "Pengaturan", + "Problem loading page, reloading in 5 seconds" : "Terjadi masalah dalam memuat laman, mencoba lagi dalam 5 detik", "Saving..." : "Menyimpan...", "Dismiss" : "Buang", "seconds ago" : "beberapa detik yang lalu", @@ -117,9 +128,18 @@ "Good password" : "Sandi baik", "Strong password" : "Sandi kuat", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Server web Anda belum diatur dengan benar untuk mengizinkan sinkronisasi berkas karena antarmuka WebDAV nampaknya rusak.", + "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>." : "Server web Anda tidak diatur secara baik untuk menyelesaikan \"{url}\". Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", + "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." : "Server ini tidak tersambung ke internet: Banyak endpoint tidak bisa dicapai. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", + "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>." : "Tidak ada memory cache telah dikonfigurasi. Untuk meningkatkan kinerja, mohon mengkonfigurasi memcache jika tersedia. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", + "/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>." : "/dev/urandom tidak bisa dibaca oleh PHP dan sangat tidak disarankan untuk alasan keamanan. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", + "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." : "Anda sekarang menjalankan PHP {version}. Kami menyarankan Anda untuk perbarui versi PHP Anda untuk memanfaatkan <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performa dan pembaruan keamanan yang disediakan oleh PHP Group</a> saat distribusi Anda mendukungnya.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Konfigurasi proxy header terbalik salah, atau Anda mengakses ownCloud dari proxy terpercaya. Apabila Anda tidak mengakses ownCloud dari proxy terpercaya, ini adalah masalah keamanan dan penyerang dapat memalsukan alamat IP mereka ke ownCloud. Informasi selanjutnya bisa ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami.", + "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 terkonfigurasi sebagai cache terdistribusi, tetapi modul PHP \"memcache\" yang salah terpasang. \\OC\\Memcache\\Memcached hanya mendukung \"memcached\" dan bukan \"memcache\". Lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki memcached tentang kedua modul</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>)" : "Beberapa berkas tidak lulus cek integritas. Informasi lebih lanjut tentang cara mengatasi masalah ini dapat ditemukan di <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasi</a> kami. (<a href=\"{codeIntegrityDownloadEndpoint}\">Daftar berkas yang tidak valid…</a> / <a href=\"{rescanEndpoint}\">Pindai ulang…</a>)", "Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server", "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." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.", "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." : "Header HTTP \"{header}\" tidak dikonfigurasi sama dengan \"{expected}\". Hal ini berpotensi pada resiko keamanan dan privasi. Kami sarankan untuk menyesuaikan pengaturan ini.", + "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>." : "Header \"Strict-Transport-Security\" HTTP tidak terkonfigurasi ke setidaknya \"{seconds}\" detik. Untuk meningkatkan kemanan kami merekomendasikan mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\" rel=\"noreferrer\">saran keamanan</a> kami.", "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>." : "Anda mengakses situs ini via HTTP. Kami sangat menyarankan Anda untuk mengatur server Anda menggunakan HTTPS yang dibahas di <a href=\"{docUrl}\">tips keamanan</a> kami.", "Shared" : "Dibagikan", "Shared with {recipients}" : "Dibagikan dengan {recipients}", @@ -132,16 +152,22 @@ "Expiration" : "Kedaluwarsa", "Expiration date" : "Tanggal kedaluwarsa", "Choose a password for the public link" : "Tetapkan sandi untuk tautan publik", + "Copied!" : "Tersalin!", + "Not supported!" : "Tidak didukung!", + "Press ⌘-C to copy." : "Tekan ⌘-C untuk menyalin.", + "Press Ctrl-C to copy." : "Tekan Ctrl-C untuk menyalin.", "Resharing is not allowed" : "Berbagi ulang tidak diizinkan", "Share link" : "Bagikan tautan", "Link" : "Tautan", "Password protect" : "Lindungi dengan sandi", "Password" : "Sandi", "Allow editing" : "Izinkan penyuntingan", + "Hide file listing" : "Sembunyikan pendaftaran berkas", "Email link to person" : "Emailkan tautan ini ke orang", "Send" : "Kirim", "Sending ..." : "Mengirim ...", "Email sent" : "Email terkirim", + "Send link via email" : "Kirim pranala melalui email", "Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}", "Shared with you by {owner}" : "Dibagikan dengan anda oleh {owner}", "group" : "grup", @@ -154,13 +180,30 @@ "change" : "ubah", "delete" : "hapus", "access control" : "kontrol akses", + "Could not unshare" : "Tidak dapat membatalkan pembagian", "Share details could not be loaded for this item." : "Rincian berbagi tidak dapat dimuat untuk item ini.", + "No users or groups found for {search}" : "Tidak ada pengguna atau grup ditemukan untuk {search}", + "No users found for {search}" : "Tidak ada pengguna ditemukan untuk {search}", + "An error occurred. Please try again" : "Terjadi kesalahan. Silakan coba lagi", + "{sharee} (group)" : "{sharee} (grup)", + "{sharee} (at {server})" : "{sharee} (di {server})", + "{sharee} (remote)" : "{sharee} (remote)", "Share" : "Bagikan", "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Bagikan dengan orang lain di ownCloud menggunakan sintaks username@example.com/owncloud", + "Share with users…" : "Bagikan kepada pengguna...", + "Share with users, groups or remote users…" : "Bagikan kepada pengguna, grup atau remote...", + "Share with users or groups…" : "Bagikan kepada pengguna atau grup...", + "Share with users or remote users…" : "Bagikan kepada pengguna atau remote...", + "Error removing share" : "Terjadi kesalahan saat menghapus pembagian", "Warning" : "Peringatan", "Error while sending notification" : "Kesalahan ketika mengirim notifikasi", + "Non-existing tag #{tag}" : "Tag tidak ada #{tag}", + "restricted" : "terbatas", + "invisible" : "tersembunyi", + "({scope})" : "({scope})", "Delete" : "Hapus", "Rename" : "Ubah nama", + "Collaborative tags" : "Tag kolaboratif", "The object type is not specified." : "Tipe objek tidak ditentukan.", "Enter new" : "Masukkan baru", "Add" : "Tambah", @@ -168,15 +211,17 @@ "Error loading dialog template: {error}" : "Kesalahan saat memuat templat dialog: {error}", "No tags selected for deletion." : "Tidak ada label yang dipilih untuk dihapus.", "unknown text" : "teks tidak diketahui", - "Hello world!" : "Hello world!", + "Hello world!" : "Halo dunia!", "sunny" : "cerah", - "Hello {name}, the weather is {weather}" : "Helo {name}, jepang {weather}", - "Hello {name}" : "Helo {name}", + "Hello {name}, the weather is {weather}" : "Halo {name}, saat ini {weather}", + "Hello {name}" : "Halo {name}", + "new" : "baru", "_download %n file_::_download %n files_" : ["unduh %n berkas"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Pembaruan sedang dalam proses, meninggalkan halaman ini mungkin dapat mengganggu proses di beberapa lingkungan.", "An error occurred." : "Terjadi kesalahan.", "Please reload the page." : "Silakan muat ulang halaman.", - "The update was successful. There were warnings." : "Pembaruan telah berhasil. Terdapat peringatan.", + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Pembaruan gagal. Untuk informasi berikutnya <a href=\"{url}\">cek posting di forum</a> yang mencakup masalah kami.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Pembaruan gagal. Laporkan masalah ini ke <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">komunitas Nextcloud</a>.", + "The update was successful. Redirecting you to Nextcloud now." : "Pembaruan berhasil. Mengarahkan Anda ke Nextcloud.", "Searching other places" : "Mencari tempat lainnya", "No search results in other folders" : "Tidak ada hasil penelusuran didalam folder yang lain", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} hasil pencarian di folder lain"], @@ -207,6 +252,7 @@ "Trace" : "Jejak", "Security warning" : "Peringatan keamanan", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Untuk informasi bagaimana menkonfigurasi server Anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\" rel=\"norefferer\">dokumentasi</a>.", "Create an <strong>admin account</strong>" : "Buat sebuah <strong>akun admin</strong>", "Username" : "Nama pengguna", "Storage & database" : "Penyimpanan & Basis data", @@ -234,9 +280,12 @@ "Search" : "Cari", "Server side authentication failed!" : "Otentikasi dari sisi server gagal!", "Please contact your administrator." : "Silahkan hubungi administrator anda.", + "An internal error occurred." : "Terjadi kesalahan internal.", "Please try again or contact your administrator." : "Mohon coba lagi atau hubungi administrator Anda.", + "Username or email" : "Nama pengguna atau email", "Log in" : "Masuk", "Wrong password. Reset it?" : "Sandi salah. Atur ulang?", + "Wrong password." : "Sandi salah.", "Stay logged in" : "Tetap masuk", "Alternative Logins" : "Cara Alternatif untuk Masuk", "Use the following link to reset your password: {link}" : "Gunakan tautan berikut untuk menyetel ulang sandi Anda: {link}", @@ -247,7 +296,13 @@ "This means only administrators can use the instance." : "Ini berarti hanya administrator yang dapat menggunakan ownCloud.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Hubungi administrator sistem anda jika pesan ini terus muncul atau muncul tiba-tiba.", "Thank you for your patience." : "Terima kasih atas kesabaran anda.", + "Two-step verification" : "Otentikasi ganda", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Peningkatan keamanan delah diaktifkan untuk akun Anda. Mohon otentikasi menggunakan faktor kedua.", + "Cancel login" : "Batalkan log masuk", + "Please authenticate using the selected factor." : "Mohon lakukan otentikasi dengan faktor ke dua.", + "An error occured while verifying the token" : "Terjadi kesalahan saat memverifikasi token", "You are accessing the server from an untrusted domain." : "Anda mengakses server dari domain yang tidak terpercaya.", + "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." : "Silakan hubungi administrator Anda. Apabila Anda adalah administrator dari instansi ini, konfigurasikan aturan \"trusted_domains\" di config/config.php. Contoh konfigurasi disediakan di 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." : "Tergantung pada konfigurasi Anda, sebagai seorang administrator Anda kemungkinan dapat menggunakan tombol bawah untuk mempercayai domain ini.", "Add \"%s\" as trusted domain" : "tambahkan \"%s\" sebagai domain terpercaya", "App update required" : "Diperlukan perbarui aplikasi", @@ -258,6 +313,10 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Pastikan bahwa basis data, folder konfig, dan folder data telah dicadangkan sebelum melanjutkan.", "Start update" : "Jalankan pembaruan", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Untuk menghindari waktu habis dengan instalasi yang lebih besar, Anda bisa menjalankan perintah berikut dari direktori instalasi Anda:", + "Detailed logs" : "Log detail", + "Update needed" : "Pembaruan dibutuhkan", + "Please use the command line updater because you have a big instance." : "Gunakan pembaruan command-line karena Anda mempunyai instansi yang besar.", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Untuk bantuan, lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Instansi %s ini sedang dalam modus pemeliharaan, mungkin memerlukan beberapa saat.", "This page will refresh itself when the %s instance is available again." : "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali." },"pluralForm" :"nplurals=1; plural=0;" diff --git a/core/l10n/is.js b/core/l10n/is.js index eef09b06171..5d678bb125a 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -27,8 +27,10 @@ OC.L10N.register( "Error unfavoriting" : "Villa við afmá bókmerkingu", "Couldn't send mail to following users: %s " : "Gat ekki sent póst á eftirfarandi notendur: %s", "Preparing update" : "Undirbý uppfærslu", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Viðvörun vegna viðgerðar: ", "Repair error: " : "Villa í viðgerð:", + "[%d / %d]: Checking table %s" : "[%d / %d]: Athuga töflu %s", "Turned on maintenance mode" : "Kveikt á viðhaldsham", "Turned off maintenance mode" : "Slökkt á viðhaldsham", "Maintenance mode is kept active" : "Viðhaldsham er haldið virkum", @@ -95,6 +97,7 @@ OC.L10N.register( "Dec." : "Des.", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Það komu upp vandamál með athugun á áreiðanleika kóða. Nánari upplýsingar…</a>", "Settings" : "Stillingar", + "Problem loading page, reloading in 5 seconds" : "Vandamál við að hlaða inn síðu, endurhleð eftir 5 sekúndur", "Saving..." : "Er að vista ...", "Dismiss" : "Hafna", "seconds ago" : "sekúndum síðan", @@ -126,9 +129,18 @@ OC.L10N.register( "Good password" : "Gott lykilorð", "Strong password" : "Sterkt lykilorð", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vefþjónninn er ekki enn sett upp á réttan hátt til að leyfa skráasamstillingu því WebDAV viðmótið virðist vera skemmt.", + "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>." : "Vefþjónninn þinn er ekki uppsettur þannig að hann geti leyst \"{url}\". Frekari upplýsingar er að finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "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." : "Þessi þjónn er ekki með virka nettengingu: ekki náðis tenging við fjölmarga endapunkta. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.", + "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>." : "Ekkert skyndiminni (cache) hefur verið stillt. Til að auka afköst ættirðu að setja upp skyndiminni (með memcache) ef það er tiltækt. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "/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>." : "/dev/urandom er ekki lesanlegt af PHP sem er mjög óráðlegt af öryggisástæðum. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "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." : "Þú ert að keyra PHP {version}. Við hvetjum þig til að uppfæra PHP útgáfuna til að njóta <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">afkastaaukningar og öryggisuppfærslna frá PHP Group</a> um leið og dreifingin þín styður það.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni. Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "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 er sett upp sem dreift skyndiminni, en hinsvegar er ranga PHP-einingin \"memcache\" uppsett. \\OC\\Memcache\\Memcached styður einungis \"memcached\" en ekki \"memcache\". Skoðaðu <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki-síðurnar um báðar einingarnar</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>)" : "Sumar skrár hafa ekki staðist áreiðanleikaprófun. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listi yfir ógildar skrár…</a> / <a href=\"{rescanEndpoint}\">Endurskanna…</a>)", "Error occurred while checking server setup" : "Villa kom upp við athugun á uppsetningu þjóns", "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." : "Gagnamappan og skrárnar þínar eru líklega aðgengilegar öllum af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjóninn þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir skjalarót vefþjóns.", "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." : "\"{header}\" HTTP-haus er ekki stilltur til jafns við \"{expected}\". Þetta er möguleg áhætta varðandi öryggi og gagnaleynd, við mælum með því að laga þessa stillingu.", + "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-hausinn er ekki stilltur á að minnsa kosti \"{seconds}\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\"{docUrl}\" rel=\"noreferrer\">öryggisleiðbeiningum</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>." : " Þú ert að tengjast þessu vefsvæði með HTTP. Við mælum eindregið með að þú stillir þjóninn á að krefjast HTTPS í staðinn eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningunum</a> okkar.", "Shared" : "Deilt", "Shared with {recipients}" : "Deilt með {recipients}", @@ -141,16 +153,22 @@ OC.L10N.register( "Expiration" : "Rennur út", "Expiration date" : "Gildir til", "Choose a password for the public link" : "Veldu þér lykilorð fyrir almenningstengil", + "Copied!" : "Afritað!", + "Not supported!" : "Óstutt!", + "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", + "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", "Resharing is not allowed" : "Endurdeiling er ekki leyfð", "Share link" : "Deila tengli", "Link" : "Tengill", "Password protect" : "Verja með lykilorði", "Password" : "Lykilorð", "Allow editing" : "Leyfa breytingar", + "Hide file listing" : "Fela skráalista", "Email link to person" : "Senda veftengil í tölvupósti til notanda", "Send" : "Senda", "Sending ..." : "Sendi ...", "Email sent" : "Tölvupóstur sendur", + "Send link via email" : "Senda tengil með tölvupósti", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", "Shared with you by {owner}" : "Deilt með þér af {owner}", "group" : "hópur", @@ -167,11 +185,12 @@ OC.L10N.register( "Share details could not be loaded for this item." : "Ekki tókst að hlaða inn upplýsingum um sameign varðandi þetta atriði.", "No users or groups found for {search}" : "Engir notendur eða hópar fundust í {search}", "No users found for {search}" : "Engir notendur fundust með {search}", + "An error occurred. Please try again" : "Villa kom upp. Endilega reyndu aftur", "{sharee} (group)" : "{sharee} (hópur)", "{sharee} (at {server})" : "{sharee} (á {server})", "{sharee} (remote)" : "{sharee} (fjartengdur)", "Share" : "Deila", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólki í öðrum ownCloud-skýjum með skipuninni notandanafn@dæmi.is/owncloud", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólki í öðrum Nextcloud-skýjum með skipuninni notandanafn@dæmi.is/nextcloud", "Share with users…" : "Deila með notendum...", "Share with users, groups or remote users…" : "Deila með notendum, hópa eða fjartengdum notendum...", "Share with users or groups…" : "Deila með notendum eða hópum...", @@ -180,6 +199,7 @@ OC.L10N.register( "Warning" : "Aðvörun", "Error while sending notification" : "Villa við að senda tilkynningu", "Non-existing tag #{tag}" : "Merki sem er ekki til #{tag}", + "restricted" : "takmarkaður aðgangur", "invisible" : "ósýnilegt", "({scope})" : "({scope})", "Delete" : "Eyða", @@ -198,11 +218,11 @@ OC.L10N.register( "Hello {name}" : "Halló {name}", "new" : "nýtt", "_download %n file_::_download %n files_" : ["sækja %n skrá","sækja %n skrár"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Uppfærslan er í gangi, ef farið er af þessari síðu gæti það truflað ferlið á sumum kerfum.", "An error occurred." : "Villa átti sér stað.", "Please reload the page." : "Þú ættir að hlaða síðunni aftur inn.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Uppfærslan tókst ekki. Til að fá frekari upplýsingar <a href=\"{url}\">skoðaðu færslu á spjallsvæðinu okkar</a> sem fjallar um þetta mál.", - "The update was successful. There were warnings." : "Uppfærslan tókst. Það voru viðvaranir.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Uppfærslan tókst ekki. Skoðaðu annálana á kerfisstjórnunarsíðunni og sendu inn tilkynningu um vandamálið til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud samfélagsins</a>.", + "The update was successful. Redirecting you to Nextcloud now." : "Uppfærslan heppnaðist. Beini þér til Nextcloud nú.", "Searching other places" : "Leitað á öðrum stöðum", "No search results in other folders" : "Engar leitarniðurstöður í öðrum möppum", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} leitarniðurstöður í annarri möppu","{count} leitarniðurstöður í öðrum möppum"], @@ -233,6 +253,7 @@ OC.L10N.register( "Trace" : "Rekja", "Security warning" : "Öryggisviðvörun", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Gagnamappan og skrárnar eru líklega aðgengilegar af internetinu vegna þess að .htaccess skrá er ekki virk.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Til að fá upplýsingar hvernig á að stilla miðlara almennilega, skaltu skoða <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">hjálparskjölin</a>.", "Create an <strong>admin account</strong>" : "Útbúa <strong>kerfisstjóraaðgang</strong>", "Username" : "Notandanafn", "Storage & database" : "Geymsla & gagnagrunnur", @@ -260,7 +281,9 @@ OC.L10N.register( "Search" : "Leita", "Server side authentication failed!" : "Auðkenning af hálfu þjóns tókst ekki!", "Please contact your administrator." : "Hafðu samband við kerfisstjóra.", + "An internal error occurred." : "Innri villa kom upp.", "Please try again or contact your administrator." : "Reyndu aftur eða hafðu samband við kerfisstjóra.", + "Username or email" : "Notandanafn eða tölvupóstur", "Log in" : "Skrá inn", "Wrong password. Reset it?" : "Rangt lykilorð. Endursetja?", "Wrong password." : "Rangt lykilorð.", @@ -274,6 +297,8 @@ OC.L10N.register( "This means only administrators can use the instance." : "Þetta þýðir aðeins stjórnendur geta notað eintakið.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Hafðu samband við kerfisstjóra ef þessi skilaboð eru viðvarandi eða birtust óvænt.", "Thank you for your patience." : "Þakka þér fyrir biðlundina.", + "Two-step verification" : "Tveggja þrepa sannvottun", + "Cancel login" : "Hætta við innskráningu", "You are accessing the server from an untrusted domain." : "Þú ert að tengjast þjóninum frá ótreystu léni.", "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." : "Hafðu samband við kerfisstjóra. Ef þú ert stjórnandi á þessu tilviki, stilltu \"trusted_domains\" setninguna í config/config.php. Dæmi um stillingar má sjá í 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." : "Það fer eftir stillingum þínum, sem stjórnandi þá gætir þú einnig notað hnappinn hér fyrir neðan til að treysta þessu léni.", @@ -286,6 +311,9 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Gakktu úr skugga um að gagnagrunnurinn, config mappan og gagnamappan hafi verið öryggisafritaðar áður en lengra er haldið.", "Start update" : "Hefja uppfærslu", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Til að forðast að falla á tímamörkum með stærri uppsetningar, getur þú í staðinn keyrt eftirfarandi skipun úr uppsetningarmöppunni:", + "Detailed logs" : "Ítarlegir annálar", + "Update needed" : "Þarfnast uppfærslu", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Til að fá hjálp er best að skoða fyrst <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjölin</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Þessi %s er nú í viðhaldsham, sem getur tekið smá stund.", "This page will refresh itself when the %s instance is available again." : "Þessi síða mun uppfæra sig þegar %s er í boði á ný." }, diff --git a/core/l10n/is.json b/core/l10n/is.json index 32830f1f359..79943968ebf 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -25,8 +25,10 @@ "Error unfavoriting" : "Villa við afmá bókmerkingu", "Couldn't send mail to following users: %s " : "Gat ekki sent póst á eftirfarandi notendur: %s", "Preparing update" : "Undirbý uppfærslu", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "Viðvörun vegna viðgerðar: ", "Repair error: " : "Villa í viðgerð:", + "[%d / %d]: Checking table %s" : "[%d / %d]: Athuga töflu %s", "Turned on maintenance mode" : "Kveikt á viðhaldsham", "Turned off maintenance mode" : "Slökkt á viðhaldsham", "Maintenance mode is kept active" : "Viðhaldsham er haldið virkum", @@ -93,6 +95,7 @@ "Dec." : "Des.", "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Það komu upp vandamál með athugun á áreiðanleika kóða. Nánari upplýsingar…</a>", "Settings" : "Stillingar", + "Problem loading page, reloading in 5 seconds" : "Vandamál við að hlaða inn síðu, endurhleð eftir 5 sekúndur", "Saving..." : "Er að vista ...", "Dismiss" : "Hafna", "seconds ago" : "sekúndum síðan", @@ -124,9 +127,18 @@ "Good password" : "Gott lykilorð", "Strong password" : "Sterkt lykilorð", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vefþjónninn er ekki enn sett upp á réttan hátt til að leyfa skráasamstillingu því WebDAV viðmótið virðist vera skemmt.", + "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>." : "Vefþjónninn þinn er ekki uppsettur þannig að hann geti leyst \"{url}\". Frekari upplýsingar er að finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "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." : "Þessi þjónn er ekki með virka nettengingu: ekki náðis tenging við fjölmarga endapunkta. Þetta þýðir að sumir eiginleikar eins og að virkja ytri gagnageymslu, tilkynningar um uppfærslur eða uppsetningu á forritum þriðja aðila, mun ekki virka. Fjartengdur aðgangur að skrám og sending tilkynninga í tölvupósti virka líklega ekki heldur. Við leggjum til að internettenging sé virkjuð fyrir þennan vefþjón ef þú vilt hafa alla eiginleika tiltæka.", + "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>." : "Ekkert skyndiminni (cache) hefur verið stillt. Til að auka afköst ættirðu að setja upp skyndiminni (með memcache) ef það er tiltækt. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "/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>." : "/dev/urandom er ekki lesanlegt af PHP sem er mjög óráðlegt af öryggisástæðum. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "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." : "Þú ert að keyra PHP {version}. Við hvetjum þig til að uppfæra PHP útgáfuna til að njóta <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">afkastaaukningar og öryggisuppfærslna frá PHP Group</a> um leið og dreifingin þín styður það.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Uppsetning gagnstæðs milliþjónshauss (reverse proxy header) er röng, eða að þú ert að tengjast Nextcloud frá treystum milliþjóni. Ef þú ert ekki að tengjast Nextcloud frá treystum milliþjóni, þá er þetta er öryggisvandamál og getur leyft árásaraðilum að dulbúa IP-vistfang þeirra sem sýnilegt Nextcloud. Nánari upplýsingar má finna í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar.", + "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 er sett upp sem dreift skyndiminni, en hinsvegar er ranga PHP-einingin \"memcache\" uppsett. \\OC\\Memcache\\Memcached styður einungis \"memcached\" en ekki \"memcache\". Skoðaðu <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki-síðurnar um báðar einingarnar</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>)" : "Sumar skrár hafa ekki staðist áreiðanleikaprófun. Hægt er að finna nánari upplýsingar um þetta í <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">hjálparskjölum</a> okkar. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listi yfir ógildar skrár…</a> / <a href=\"{rescanEndpoint}\">Endurskanna…</a>)", "Error occurred while checking server setup" : "Villa kom upp við athugun á uppsetningu þjóns", "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." : "Gagnamappan og skrárnar þínar eru líklega aðgengilegar öllum af internetinu vegna þess að .htaccess skrá er ekki virk. Við mælum eindregið með að þú stillir vefþjóninn þinn á þann hátt að gagnamappa er ekki lengur aðgengileg eða þú færir gagnamöppu út fyrir skjalarót vefþjóns.", "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." : "\"{header}\" HTTP-haus er ekki stilltur til jafns við \"{expected}\". Þetta er möguleg áhætta varðandi öryggi og gagnaleynd, við mælum með því að laga þessa stillingu.", + "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-hausinn er ekki stilltur á að minnsa kosti \"{seconds}\" sekúndur. Fyrir aukið öryggi mælum við með því að virkja HSTS eins og lýst er í <a href=\"{docUrl}\" rel=\"noreferrer\">öryggisleiðbeiningum</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>." : " Þú ert að tengjast þessu vefsvæði með HTTP. Við mælum eindregið með að þú stillir þjóninn á að krefjast HTTPS í staðinn eins og lýst er í <a href=\"{docUrl}\">öryggisleiðbeiningunum</a> okkar.", "Shared" : "Deilt", "Shared with {recipients}" : "Deilt með {recipients}", @@ -139,16 +151,22 @@ "Expiration" : "Rennur út", "Expiration date" : "Gildir til", "Choose a password for the public link" : "Veldu þér lykilorð fyrir almenningstengil", + "Copied!" : "Afritað!", + "Not supported!" : "Óstutt!", + "Press ⌘-C to copy." : "Ýttu á ⌘-C til að afrita.", + "Press Ctrl-C to copy." : "Ýttu á Ctrl-C til að afrita.", "Resharing is not allowed" : "Endurdeiling er ekki leyfð", "Share link" : "Deila tengli", "Link" : "Tengill", "Password protect" : "Verja með lykilorði", "Password" : "Lykilorð", "Allow editing" : "Leyfa breytingar", + "Hide file listing" : "Fela skráalista", "Email link to person" : "Senda veftengil í tölvupósti til notanda", "Send" : "Senda", "Sending ..." : "Sendi ...", "Email sent" : "Tölvupóstur sendur", + "Send link via email" : "Senda tengil með tölvupósti", "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", "Shared with you by {owner}" : "Deilt með þér af {owner}", "group" : "hópur", @@ -165,11 +183,12 @@ "Share details could not be loaded for this item." : "Ekki tókst að hlaða inn upplýsingum um sameign varðandi þetta atriði.", "No users or groups found for {search}" : "Engir notendur eða hópar fundust í {search}", "No users found for {search}" : "Engir notendur fundust með {search}", + "An error occurred. Please try again" : "Villa kom upp. Endilega reyndu aftur", "{sharee} (group)" : "{sharee} (hópur)", "{sharee} (at {server})" : "{sharee} (á {server})", "{sharee} (remote)" : "{sharee} (fjartengdur)", "Share" : "Deila", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólki í öðrum ownCloud-skýjum með skipuninni notandanafn@dæmi.is/owncloud", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólki í öðrum Nextcloud-skýjum með skipuninni notandanafn@dæmi.is/nextcloud", "Share with users…" : "Deila með notendum...", "Share with users, groups or remote users…" : "Deila með notendum, hópa eða fjartengdum notendum...", "Share with users or groups…" : "Deila með notendum eða hópum...", @@ -178,6 +197,7 @@ "Warning" : "Aðvörun", "Error while sending notification" : "Villa við að senda tilkynningu", "Non-existing tag #{tag}" : "Merki sem er ekki til #{tag}", + "restricted" : "takmarkaður aðgangur", "invisible" : "ósýnilegt", "({scope})" : "({scope})", "Delete" : "Eyða", @@ -196,11 +216,11 @@ "Hello {name}" : "Halló {name}", "new" : "nýtt", "_download %n file_::_download %n files_" : ["sækja %n skrá","sækja %n skrár"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Uppfærslan er í gangi, ef farið er af þessari síðu gæti það truflað ferlið á sumum kerfum.", "An error occurred." : "Villa átti sér stað.", "Please reload the page." : "Þú ættir að hlaða síðunni aftur inn.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Uppfærslan tókst ekki. Til að fá frekari upplýsingar <a href=\"{url}\">skoðaðu færslu á spjallsvæðinu okkar</a> sem fjallar um þetta mál.", - "The update was successful. There were warnings." : "Uppfærslan tókst. Það voru viðvaranir.", + "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Uppfærslan tókst ekki. Skoðaðu annálana á kerfisstjórnunarsíðunni og sendu inn tilkynningu um vandamálið til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud samfélagsins</a>.", + "The update was successful. Redirecting you to Nextcloud now." : "Uppfærslan heppnaðist. Beini þér til Nextcloud nú.", "Searching other places" : "Leitað á öðrum stöðum", "No search results in other folders" : "Engar leitarniðurstöður í öðrum möppum", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} leitarniðurstöður í annarri möppu","{count} leitarniðurstöður í öðrum möppum"], @@ -231,6 +251,7 @@ "Trace" : "Rekja", "Security warning" : "Öryggisviðvörun", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Gagnamappan og skrárnar eru líklega aðgengilegar af internetinu vegna þess að .htaccess skrá er ekki virk.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Til að fá upplýsingar hvernig á að stilla miðlara almennilega, skaltu skoða <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">hjálparskjölin</a>.", "Create an <strong>admin account</strong>" : "Útbúa <strong>kerfisstjóraaðgang</strong>", "Username" : "Notandanafn", "Storage & database" : "Geymsla & gagnagrunnur", @@ -258,7 +279,9 @@ "Search" : "Leita", "Server side authentication failed!" : "Auðkenning af hálfu þjóns tókst ekki!", "Please contact your administrator." : "Hafðu samband við kerfisstjóra.", + "An internal error occurred." : "Innri villa kom upp.", "Please try again or contact your administrator." : "Reyndu aftur eða hafðu samband við kerfisstjóra.", + "Username or email" : "Notandanafn eða tölvupóstur", "Log in" : "Skrá inn", "Wrong password. Reset it?" : "Rangt lykilorð. Endursetja?", "Wrong password." : "Rangt lykilorð.", @@ -272,6 +295,8 @@ "This means only administrators can use the instance." : "Þetta þýðir aðeins stjórnendur geta notað eintakið.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Hafðu samband við kerfisstjóra ef þessi skilaboð eru viðvarandi eða birtust óvænt.", "Thank you for your patience." : "Þakka þér fyrir biðlundina.", + "Two-step verification" : "Tveggja þrepa sannvottun", + "Cancel login" : "Hætta við innskráningu", "You are accessing the server from an untrusted domain." : "Þú ert að tengjast þjóninum frá ótreystu léni.", "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." : "Hafðu samband við kerfisstjóra. Ef þú ert stjórnandi á þessu tilviki, stilltu \"trusted_domains\" setninguna í config/config.php. Dæmi um stillingar má sjá í 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." : "Það fer eftir stillingum þínum, sem stjórnandi þá gætir þú einnig notað hnappinn hér fyrir neðan til að treysta þessu léni.", @@ -284,6 +309,9 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Gakktu úr skugga um að gagnagrunnurinn, config mappan og gagnamappan hafi verið öryggisafritaðar áður en lengra er haldið.", "Start update" : "Hefja uppfærslu", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Til að forðast að falla á tímamörkum með stærri uppsetningar, getur þú í staðinn keyrt eftirfarandi skipun úr uppsetningarmöppunni:", + "Detailed logs" : "Ítarlegir annálar", + "Update needed" : "Þarfnast uppfærslu", + "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Til að fá hjálp er best að skoða fyrst <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">hjálparskjölin</a>.", "This %s instance is currently in maintenance mode, which may take a while." : "Þessi %s er nú í viðhaldsham, sem getur tekið smá stund.", "This page will refresh itself when the %s instance is available again." : "Þessi síða mun uppfæra sig þegar %s er í boði á ný." },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" diff --git a/core/l10n/it.js b/core/l10n/it.js index 880fe9f151b..e02f22836d2 100644 --- a/core/l10n/it.js +++ b/core/l10n/it.js @@ -131,6 +131,7 @@ OC.L10N.register( "Strong password" : "Password forte", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.", "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>." : "Il tuo server web non è configurato correttamente per risolvere \"{url}\". Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</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." : "Questo server non ha una connessione a Internet funzionante: diversi dispositivi finali non sono raggiungibili. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.", "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>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</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>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</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." : "Stai eseguendo attualmente PHP {version}. Ti esortiamo ad aggiornare la tua versione di PHP per trarre vantaggio dagli aggiornamenti in termini di <a target=\"_blank\" rel=\"noreferrer\" ref=\"{phpLink}\">prestazioni e sicurezza forniti dal PHP Group</a> non appena la tua distribuzione la supporta.", @@ -153,6 +154,10 @@ OC.L10N.register( "Expiration" : "Scadenza", "Expiration date" : "Data di scadenza", "Choose a password for the public link" : "Scegli una password per il collegamento pubblico", + "Copied!" : "Copiati!", + "Not supported!" : "Non supportato!", + "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", + "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", "Resharing is not allowed" : "La ri-condivisione non è consentita", "Share link" : "Condividi collegamento", "Link" : "Collegamento", @@ -214,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Ciao {name}", "new" : "nuovo", "_download %n file_::_download %n files_" : ["scarica %n file","scarica %s file"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "L'aggiornamento è in corso, l'abbandono di questa pagina potrebbe interrompere il processo in alcuni ambienti.", - "Updating to {version}" : "Aggiornamento a {version}", "An error occurred." : "Si è verificato un errore.", "Please reload the page." : "Ricarica la pagina.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "L'aggiornamento non è riuscito. Per ulteriori informazioni <a href=\"{url}\">controlla l'articolo del nostro forum</a> che riguarda questo problema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "L'aggiornamento non è riuscito. Segnala il problema alla <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunità di Nextcloud </a>.", - "The update was successful. There were warnings." : "L'aggiornamento è stato effettuato correttamente. Ci sono degli avvisi.", "The update was successful. Redirecting you to Nextcloud now." : "L'aggiornamento è stato effettuato correttamente. Reindirizzamento immediato a Nextcloud.", "Searching other places" : "Ricerca in altre posizioni", "No search results in other folders" : "Nessun risultato di ricerca in altre cartelle", diff --git a/core/l10n/it.json b/core/l10n/it.json index 608791b5b4d..1dd8803d534 100644 --- a/core/l10n/it.json +++ b/core/l10n/it.json @@ -129,6 +129,7 @@ "Strong password" : "Password forte", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.", "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>." : "Il tuo server web non è configurato correttamente per risolvere \"{url}\". Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</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." : "Questo server non ha una connessione a Internet funzionante: diversi dispositivi finali non sono raggiungibili. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.", "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>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</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>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentazione</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." : "Stai eseguendo attualmente PHP {version}. Ti esortiamo ad aggiornare la tua versione di PHP per trarre vantaggio dagli aggiornamenti in termini di <a target=\"_blank\" rel=\"noreferrer\" ref=\"{phpLink}\">prestazioni e sicurezza forniti dal PHP Group</a> non appena la tua distribuzione la supporta.", @@ -151,6 +152,10 @@ "Expiration" : "Scadenza", "Expiration date" : "Data di scadenza", "Choose a password for the public link" : "Scegli una password per il collegamento pubblico", + "Copied!" : "Copiati!", + "Not supported!" : "Non supportato!", + "Press ⌘-C to copy." : "Premi ⌘-C per copiare.", + "Press Ctrl-C to copy." : "Premi Ctrl-C per copiare.", "Resharing is not allowed" : "La ri-condivisione non è consentita", "Share link" : "Condividi collegamento", "Link" : "Collegamento", @@ -212,13 +217,10 @@ "Hello {name}" : "Ciao {name}", "new" : "nuovo", "_download %n file_::_download %n files_" : ["scarica %n file","scarica %s file"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "L'aggiornamento è in corso, l'abbandono di questa pagina potrebbe interrompere il processo in alcuni ambienti.", - "Updating to {version}" : "Aggiornamento a {version}", "An error occurred." : "Si è verificato un errore.", "Please reload the page." : "Ricarica la pagina.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "L'aggiornamento non è riuscito. Per ulteriori informazioni <a href=\"{url}\">controlla l'articolo del nostro forum</a> che riguarda questo problema.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "L'aggiornamento non è riuscito. Segnala il problema alla <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunità di Nextcloud </a>.", - "The update was successful. There were warnings." : "L'aggiornamento è stato effettuato correttamente. Ci sono degli avvisi.", "The update was successful. Redirecting you to Nextcloud now." : "L'aggiornamento è stato effettuato correttamente. Reindirizzamento immediato a Nextcloud.", "Searching other places" : "Ricerca in altre posizioni", "No search results in other folders" : "Nessun risultato di ricerca in altre cartelle", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index 649a4583283..1f5dca8fcbb 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -214,13 +214,10 @@ OC.L10N.register( "Hello {name}" : " {name}さん、こんにちは", "new" : "新規", "_download %n file_::_download %n files_" : ["%n個のファイルをダウンロード"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "アップグレード実行中です。このページを離れると、一部の環境では処理が中断されてしまうことがあります。", - "Updating to {version}" : "{version} にアップデート", "An error occurred." : "エラーが発生しました。", "Please reload the page." : "ページをリロードしてください。", "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\">Nextcloud コミュニティ</a> に問題を報告してください。", - "The update was successful. There were warnings." : "アップデートは成功しました。警告がありました。", "The update was successful. Redirecting you to Nextcloud now." : "アップデート成功。Nextcloud にリダイレクトします。", "Searching other places" : "他の場所の検索", "No search results in other folders" : "他のフォルダーの検索結果はありません", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index e1833a1a9de..a7ada87a0d4 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -212,13 +212,10 @@ "Hello {name}" : " {name}さん、こんにちは", "new" : "新規", "_download %n file_::_download %n files_" : ["%n個のファイルをダウンロード"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "アップグレード実行中です。このページを離れると、一部の環境では処理が中断されてしまうことがあります。", - "Updating to {version}" : "{version} にアップデート", "An error occurred." : "エラーが発生しました。", "Please reload the page." : "ページをリロードしてください。", "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\">Nextcloud コミュニティ</a> に問題を報告してください。", - "The update was successful. There were warnings." : "アップデートは成功しました。警告がありました。", "The update was successful. Redirecting you to Nextcloud now." : "アップデート成功。Nextcloud にリダイレクトします。", "Searching other places" : "他の場所の検索", "No search results in other folders" : "他のフォルダーの検索結果はありません", diff --git a/core/l10n/ko.js b/core/l10n/ko.js index c6b99d1b379..957daa1da15 100644 --- a/core/l10n/ko.js +++ b/core/l10n/ko.js @@ -193,11 +193,9 @@ OC.L10N.register( "Hello {name}" : "{name} 님 안녕하세요", "new" : "새로운 항목", "_download %n file_::_download %n files_" : ["파일 %n개 다운로드"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "업그레이드 중입니다. 이 페이지를 열어 두면 일부 환경에서 진행 과정을 중단시킬 수 있습니다.", "An error occurred." : "오류가 발생했습니다.", "Please reload the page." : "페이지를 새로 고치십시오.", "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 successful. There were warnings." : "업데이트가 성공했습니다. 일부 경고가 있습니다.", "Searching other places" : "다른 장소 찾는 중", "No search results in other folders" : "다른 폴더에 검색 결과 없음", "_{count} search result in another folder_::_{count} search results in other folders_" : ["다른 폴더의 검색 결과 {count}개"], diff --git a/core/l10n/ko.json b/core/l10n/ko.json index 21686679885..6f4319d5885 100644 --- a/core/l10n/ko.json +++ b/core/l10n/ko.json @@ -191,11 +191,9 @@ "Hello {name}" : "{name} 님 안녕하세요", "new" : "새로운 항목", "_download %n file_::_download %n files_" : ["파일 %n개 다운로드"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "업그레이드 중입니다. 이 페이지를 열어 두면 일부 환경에서 진행 과정을 중단시킬 수 있습니다.", "An error occurred." : "오류가 발생했습니다.", "Please reload the page." : "페이지를 새로 고치십시오.", "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 successful. There were warnings." : "업데이트가 성공했습니다. 일부 경고가 있습니다.", "Searching other places" : "다른 장소 찾는 중", "No search results in other folders" : "다른 폴더에 검색 결과 없음", "_{count} search result in another folder_::_{count} search results in other folders_" : ["다른 폴더의 검색 결과 {count}개"], diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js index ac12ad916c4..dccd547dc04 100644 --- a/core/l10n/nb_NO.js +++ b/core/l10n/nb_NO.js @@ -193,11 +193,9 @@ OC.L10N.register( "Hello {name}" : "Hallo {name}", "new" : "ny", "_download %n file_::_download %n files_" : ["last ned %n fil","last ned %n filer"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "En oppdatering foregår, lukking av denne siden kan forstyrre prosessen for enkelte systemer.", "An error occurred." : "En feil oppstod.", "Please reload the page." : "Vennligst last siden på nytt.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Oppdateringen var mislykket. For mer informasjon <a href=\"{url}\">se vår forum-artikkel</a> som beskriver dette problemet.", - "The update was successful. There were warnings." : "Oppdateringen var vellykket. Det oppstod advarsler.", "Searching other places" : "Søker andre steder", "No search results in other folders" : "Ingen søkeresultater i andre mapper", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} søkeresultat i en annen mappe","{count} søkeresultater i andre mapper"], diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json index 5c155330a0f..b9e935f07fa 100644 --- a/core/l10n/nb_NO.json +++ b/core/l10n/nb_NO.json @@ -191,11 +191,9 @@ "Hello {name}" : "Hallo {name}", "new" : "ny", "_download %n file_::_download %n files_" : ["last ned %n fil","last ned %n filer"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "En oppdatering foregår, lukking av denne siden kan forstyrre prosessen for enkelte systemer.", "An error occurred." : "En feil oppstod.", "Please reload the page." : "Vennligst last siden på nytt.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Oppdateringen var mislykket. For mer informasjon <a href=\"{url}\">se vår forum-artikkel</a> som beskriver dette problemet.", - "The update was successful. There were warnings." : "Oppdateringen var vellykket. Det oppstod advarsler.", "Searching other places" : "Søker andre steder", "No search results in other folders" : "Ingen søkeresultater i andre mapper", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} søkeresultat i en annen mappe","{count} søkeresultater i andre mapper"], diff --git a/core/l10n/nl.js b/core/l10n/nl.js index 786fa6f08de..bf3ded6efe8 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -15,7 +15,7 @@ OC.L10N.register( "Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is", "Couldn't reset password because the token is expired" : "Kon het wachtwoord niet herstellen, omdat het token verlopen is", "Couldn't send reset email. Please make sure your username is correct." : "Kon e-mail niet versturen. Verifieer of je gebruikersnaam correct is.", - "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met uw beheerder.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met je beheerder.", "%s password reset" : "%s wachtwoord reset", "Couldn't send reset email. Please contact your administrator." : "Kon herstel e-mail niet versturen. Neem contact op met je beheerder.", "Error loading tags" : "Fout bij laden tags", @@ -35,13 +35,13 @@ OC.L10N.register( "Turned on maintenance mode" : "Onderhoudsmodus ingeschakeld", "Turned off maintenance mode" : "Onderhoudsmodus uitgeschakeld", "Maintenance mode is kept active" : "Onderhoudsmodus blijft actief", - "Updating database schema" : "Database schema aan het updaten", + "Updating database schema" : "Databaseschema aan het bijwerken", "Updated database" : "Database bijgewerkt", - "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Controleert of het database schema geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de de database)", + "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Controleert of het databaseschema geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de de database)", "Checked database schema update" : "Database schema-update gecontroleerd", "Checking updates of apps" : "Controleert of er updates voor apps zijn", - "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Controleert of het database schema voor %s geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de database)", - "Checked database schema update for apps" : "Database schema-update voor apps gecontroleerd", + "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Controleert of het databaseschema voor %s geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de database)", + "Checked database schema update for apps" : "Databaseschema update voor apps gecontroleerd", "Updated \"%s\" to %s" : "Bijgewerkt \"%s\" naar %s", "Set log level to debug" : "Logniveau instellen op debug", "Reset log level" : "Terugzetten logniveau", @@ -102,7 +102,7 @@ OC.L10N.register( "Saving..." : "Opslaan", "Dismiss" : "Terzijde leggen", "seconds ago" : "seconden geleden", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "De link om uw wachtwoord te herstellen is per e-mail naar u verstuurd. Als u dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan uw spammap. <br>Als het daar niet in zit, neem dan contact op met uw beheerder.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "De link om je wachtwoord te herstellen is per e-mail naar je verstuurd. Als je dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan je spammap. <br>Als het daar niet in zit, neem dan contact op met je beheerder.", "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?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?", "I know what I'm doing" : "Ik weet wat ik doe", "Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.", @@ -117,7 +117,7 @@ OC.L10N.register( "One file conflict" : "Een bestandsconflict", "New Files" : "Nieuwe bestanden", "Already existing files" : "Al aanwezige bestanden", - "Which files do you want to keep?" : "Welke bestanden wilt u bewaren?", + "Which files do you want to keep?" : "Welke bestanden wil je bewaren?", "If you select both versions, the copied file will have a number added to its name." : "Als je beide versies selecteerde, zal het gekopieerde bestand een nummer aan de naam toegevoegd krijgen.", "Cancel" : "Annuleer", "Continue" : "Verder", @@ -129,11 +129,12 @@ OC.L10N.register( "So-so password" : "Matig wachtwoord", "Good password" : "Goed wachtwoord", "Strong password" : "Sterk wachtwoord", - "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie, omdat de WebDAV interface verstoord lijkt.", - "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>." : "Uw webserver is niet goed ingesteld om \"{url}\" te vinden. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.", - "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>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Je webserver is nog niet goed ingesteld voor bestandssynchronisatie, omdat de WebDAV interface verstoord lijkt.", + "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>." : "Je webserver is niet goed ingesteld om \"{url}\" te vinden. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</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." : "Deze server heeft geen actieve internetverbinding: meerdere endpoints kunnen niet worden bereikt. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van derde partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie e-mails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.", + "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>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kun je de memcache configureren als die beschikbaar is. Meer informatie vind je in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</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>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</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." : "Je draait momenteel PHP {version}. We adviseren je om zo gauw je distributie dat biedt, je PHP versie bij te werken voor betere <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">prestaties en beveiliging geleverd door de PHP Group</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." : "Je draait momenteel PHP {version}. We adviseren je om, zo gauw je distributie dat biedt, je PHP versie bij te werken voor betere <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">prestaties en beveiliging geleverd door de PHP Group</a>.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</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 is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki over beide modules</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>)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lijst met ongeldige bestanden…</a> / <a href=\"{rescanEndpoint}\">Opnieuw…</a>)", @@ -218,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Hallo {name}", "new" : "nieuw", "_download %n file_::_download %n files_" : ["download %n bestand","download %n bestanden"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "De update is bezig, deze pagina verlaten kan het updateproces in sommige omgevingen onderbreken.", - "Updating to {version}" : "Aan het bijwerken naar {version}", "An error occurred." : "Er heeft zich een fout voorgedaan.", "Please reload the page." : "Herlaad deze pagina.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "De update was niet succesvol. Voor meer informatie <a href=\"{url}\">zie ons bericht op het forum</a> over dit probleem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "De update is mislukt. Meld dit probleem aan de <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", - "The update was successful. There were warnings." : "De update is geslaagd. Er zijn wel waarschuwingen.", "The update was successful. Redirecting you to Nextcloud now." : "De update is geslaagd. Je wordt nu doorgeleid naar Nextcloud.", "Searching other places" : "Zoeken op andere plaatsen", "No search results in other folders" : "Geen zoekresultaten in andere mappen", @@ -255,8 +253,8 @@ OC.L10N.register( "Line: %s" : "Regel: %s", "Trace" : "Trace", "Security warning" : "Beveiligingswaarschuwing", - "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet, omdat het .htaccess-bestand niet functioneert.", - "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentatie</a> voor Informatie over het correct configureren van uw server.", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Je gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet, omdat het .htaccess-bestand niet functioneert.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentatie</a> voor Informatie over het correct configureren van je server.", "Create an <strong>admin account</strong>" : "Maak een <strong>beheerdersaccount</strong> aan", "Username" : "Gebruikersnaam", "Storage & database" : "Opslag & database", @@ -285,7 +283,7 @@ OC.L10N.register( "Server side authentication failed!" : "Authenticatie bij de server mislukte!", "Please contact your administrator." : "Neem contact op met je systeembeheerder.", "An internal error occurred." : "Er heeft zich een interne fout voorgedaan.", - "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met uw beheerder.", + "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met je beheerder.", "Username or email" : "Gebruikersnaam of e-mail", "Log in" : "Meld u aan", "Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index 085f67f624a..c6f2dce325a 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -13,7 +13,7 @@ "Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is", "Couldn't reset password because the token is expired" : "Kon het wachtwoord niet herstellen, omdat het token verlopen is", "Couldn't send reset email. Please make sure your username is correct." : "Kon e-mail niet versturen. Verifieer of je gebruikersnaam correct is.", - "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met uw beheerder.", + "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Kon geen herstel e-mail versturen, omdat er geen e-mailadres bekend is bij deze gebruikersnaam. Neem contact op met je beheerder.", "%s password reset" : "%s wachtwoord reset", "Couldn't send reset email. Please contact your administrator." : "Kon herstel e-mail niet versturen. Neem contact op met je beheerder.", "Error loading tags" : "Fout bij laden tags", @@ -33,13 +33,13 @@ "Turned on maintenance mode" : "Onderhoudsmodus ingeschakeld", "Turned off maintenance mode" : "Onderhoudsmodus uitgeschakeld", "Maintenance mode is kept active" : "Onderhoudsmodus blijft actief", - "Updating database schema" : "Database schema aan het updaten", + "Updating database schema" : "Databaseschema aan het bijwerken", "Updated database" : "Database bijgewerkt", - "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Controleert of het database schema geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de de database)", + "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Controleert of het databaseschema geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de de database)", "Checked database schema update" : "Database schema-update gecontroleerd", "Checking updates of apps" : "Controleert of er updates voor apps zijn", - "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Controleert of het database schema voor %s geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de database)", - "Checked database schema update for apps" : "Database schema-update voor apps gecontroleerd", + "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Controleert of het databaseschema voor %s geüpdatet kan worden (dit kan lang duren afhankelijk van de grootte van de database)", + "Checked database schema update for apps" : "Databaseschema update voor apps gecontroleerd", "Updated \"%s\" to %s" : "Bijgewerkt \"%s\" naar %s", "Set log level to debug" : "Logniveau instellen op debug", "Reset log level" : "Terugzetten logniveau", @@ -100,7 +100,7 @@ "Saving..." : "Opslaan", "Dismiss" : "Terzijde leggen", "seconds ago" : "seconden geleden", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "De link om uw wachtwoord te herstellen is per e-mail naar u verstuurd. Als u dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan uw spammap. <br>Als het daar niet in zit, neem dan contact op met uw beheerder.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "De link om je wachtwoord te herstellen is per e-mail naar je verstuurd. Als je dit bericht niet binnen redelijke tijd hebt ontvangen, controleer dan je spammap. <br>Als het daar niet in zit, neem dan contact op met je beheerder.", "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?" : "Je bestanden zijn versleuteld. Als je de herstelsleutel niet hebt geactiveerd, is het niet mogelijk om je gegevens terug te krijgen nadat je wachtwoord is hersteld. <br>Als je niet weet wat je moet doen, neem dan eerst contact op met je beheerder. <br>Wil je echt verder gaan?", "I know what I'm doing" : "Ik weet wat ik doe", "Password can not be changed. Please contact your administrator." : "Het wachtwoord kan niet worden gewijzigd. Neem contact op met uw beheerder.", @@ -115,7 +115,7 @@ "One file conflict" : "Een bestandsconflict", "New Files" : "Nieuwe bestanden", "Already existing files" : "Al aanwezige bestanden", - "Which files do you want to keep?" : "Welke bestanden wilt u bewaren?", + "Which files do you want to keep?" : "Welke bestanden wil je bewaren?", "If you select both versions, the copied file will have a number added to its name." : "Als je beide versies selecteerde, zal het gekopieerde bestand een nummer aan de naam toegevoegd krijgen.", "Cancel" : "Annuleer", "Continue" : "Verder", @@ -127,11 +127,12 @@ "So-so password" : "Matig wachtwoord", "Good password" : "Goed wachtwoord", "Strong password" : "Sterk wachtwoord", - "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie, omdat de WebDAV interface verstoord lijkt.", - "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>." : "Uw webserver is niet goed ingesteld om \"{url}\" te vinden. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.", - "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>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>.", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Je webserver is nog niet goed ingesteld voor bestandssynchronisatie, omdat de WebDAV interface verstoord lijkt.", + "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>." : "Je webserver is niet goed ingesteld om \"{url}\" te vinden. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</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." : "Deze server heeft geen actieve internetverbinding: meerdere endpoints kunnen niet worden bereikt. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van derde partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie e-mails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.", + "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>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kun je de memcache configureren als die beschikbaar is. Meer informatie vind je in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</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>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</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." : "Je draait momenteel PHP {version}. We adviseren je om zo gauw je distributie dat biedt, je PHP versie bij te werken voor betere <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">prestaties en beveiliging geleverd door de PHP Group</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." : "Je draait momenteel PHP {version}. We adviseren je om, zo gauw je distributie dat biedt, je PHP versie bij te werken voor betere <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">prestaties en beveiliging geleverd door de PHP Group</a>.", "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "De reverse proxy headerconfiguratie is onjuist, of je hebt toegang tot Nextcloud via een vertrouwde proxy. Als je Nextcloud niet via een vertrouwde proxy benadert, dan levert dan een beveiligingsrisico op, waardoor een aanvaller het IP-adres dat Nextcloud ziet kan vervalsen. Meer informatie is te vinden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</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 is geconfigureerd als gedistribueerde cache, maar de verkeerde PHP module \"memcache\" is geïnstalleerd. \\OC\\Memcache\\Memcached ondersteunt alleen \"memcached\" en niet \"memcache\". Zie de <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wiki over beide modules</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>)" : "Sommige bestanden kwamen niet door de code betrouwbaarheidscontrole. Meer informatie over het oplossen van dit probleem kan worden gevonden in onze <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentatie</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Lijst met ongeldige bestanden…</a> / <a href=\"{rescanEndpoint}\">Opnieuw…</a>)", @@ -216,13 +217,10 @@ "Hello {name}" : "Hallo {name}", "new" : "nieuw", "_download %n file_::_download %n files_" : ["download %n bestand","download %n bestanden"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "De update is bezig, deze pagina verlaten kan het updateproces in sommige omgevingen onderbreken.", - "Updating to {version}" : "Aan het bijwerken naar {version}", "An error occurred." : "Er heeft zich een fout voorgedaan.", "Please reload the page." : "Herlaad deze pagina.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "De update was niet succesvol. Voor meer informatie <a href=\"{url}\">zie ons bericht op het forum</a> over dit probleem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "De update is mislukt. Meld dit probleem aan de <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", - "The update was successful. There were warnings." : "De update is geslaagd. Er zijn wel waarschuwingen.", "The update was successful. Redirecting you to Nextcloud now." : "De update is geslaagd. Je wordt nu doorgeleid naar Nextcloud.", "Searching other places" : "Zoeken op andere plaatsen", "No search results in other folders" : "Geen zoekresultaten in andere mappen", @@ -253,8 +251,8 @@ "Line: %s" : "Regel: %s", "Trace" : "Trace", "Security warning" : "Beveiligingswaarschuwing", - "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet, omdat het .htaccess-bestand niet functioneert.", - "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentatie</a> voor Informatie over het correct configureren van uw server.", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Je gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet, omdat het .htaccess-bestand niet functioneert.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentatie</a> voor Informatie over het correct configureren van je server.", "Create an <strong>admin account</strong>" : "Maak een <strong>beheerdersaccount</strong> aan", "Username" : "Gebruikersnaam", "Storage & database" : "Opslag & database", @@ -283,7 +281,7 @@ "Server side authentication failed!" : "Authenticatie bij de server mislukte!", "Please contact your administrator." : "Neem contact op met je systeembeheerder.", "An internal error occurred." : "Er heeft zich een interne fout voorgedaan.", - "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met uw beheerder.", + "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met je beheerder.", "Username or email" : "Gebruikersnaam of e-mail", "Log in" : "Meld u aan", "Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index cfa55827633..4eaa8b9c343 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -201,13 +201,10 @@ OC.L10N.register( "Hello {name}" : "Witaj {name}", "new" : "nowy", "_download %n file_::_download %n files_" : ["pobrano %n plik","pobrano %n plików","pobrano %n plików"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Trwa aktualizacja. W niektórych przypadkach, opuszczenie tej strony może przerwać ten proces.", - "Updating to {version}" : "Uaktualnianie do {version}", "An error occurred." : "Wystąpił błąd", "Please reload the page." : "Proszę przeładować stronę", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizacja nie powiodła się. Aby uzyskać więcej informacji prosimy o <a href=\"{url}\">sprawdzenie naszego forum</a> które omawia ten problem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizacja nie powiodła się. Prosimy o poinformowanie o tym problemie <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">społeczności Nextcloud</a>.", - "The update was successful. There were warnings." : "Aktualizacja przebiegła pomyślnie. Pojawiły się ostrzeżenia.", "The update was successful. Redirecting you to Nextcloud now." : "Aktualizacja przebiegła pomyślnie. Trwa przekierowywanie do Nextcloud.", "Searching other places" : "Przeszukaj inne miejsca", "No search results in other folders" : "Brak wyników wyszukiwania w innych folderach", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index fabb3deed20..731e4275c93 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -199,13 +199,10 @@ "Hello {name}" : "Witaj {name}", "new" : "nowy", "_download %n file_::_download %n files_" : ["pobrano %n plik","pobrano %n plików","pobrano %n plików"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Trwa aktualizacja. W niektórych przypadkach, opuszczenie tej strony może przerwać ten proces.", - "Updating to {version}" : "Uaktualnianie do {version}", "An error occurred." : "Wystąpił błąd", "Please reload the page." : "Proszę przeładować stronę", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizacja nie powiodła się. Aby uzyskać więcej informacji prosimy o <a href=\"{url}\">sprawdzenie naszego forum</a> które omawia ten problem.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Aktualizacja nie powiodła się. Prosimy o poinformowanie o tym problemie <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">społeczności Nextcloud</a>.", - "The update was successful. There were warnings." : "Aktualizacja przebiegła pomyślnie. Pojawiły się ostrzeżenia.", "The update was successful. Redirecting you to Nextcloud now." : "Aktualizacja przebiegła pomyślnie. Trwa przekierowywanie do Nextcloud.", "Searching other places" : "Przeszukaj inne miejsca", "No search results in other folders" : "Brak wyników wyszukiwania w innych folderach", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 20549d22ae9..4bd931efc1c 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -102,8 +102,8 @@ OC.L10N.register( "Saving..." : "Salvando...", "Dismiss" : "Dispensar", "seconds ago" : "segundos atrás", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviada para o seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo. <br> Se ele não estiver lá, pergunte ao administrador do local.", - "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?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida. <br/> Se você não tem certeza do que fazer, por favor, contate o administrador antes de continuar. <br/> Você realmente deseja continuar?", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviado para seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo.<br> Se ele não estiver lá, pergunte ao administrador do local.", + "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?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?", "I know what I'm doing" : "Eu sei o que estou fazendo", "Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.", "No" : "Não", @@ -131,6 +131,7 @@ OC.L10N.register( "Strong password" : "Senha forte", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.", "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>." : "Seu servidor web não está configurado corretamente para resolver \"{url}\". Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</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." : "Este servidor não tem nenhuma conexão com a Internet: Vários terminações finais não podem ser encontrados. Isso significa que alguns dos recursos como montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acesso à arquivos remotamente e envio de e-mails de notificação podem não funcionar também. Sugerimos habilitar a conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.", "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>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um memcached se disponível. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</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>." : "/dev/urandom não pode ser lido pelo PHP e é altamente desencorajado por razões de segurança. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</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." : "Você stá atualmente em executando PHP {version}. Nós o incentivamos a atualizar sua versão do PHP para aproveitar<a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">atualizações de segurança e desempenho proporcionados pelo Grupo PHP</a> assim que sua distribuição suportar.", @@ -218,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Olá {name}", "new" : "novo", "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A atualização está em andamento, deixando esta página pode haver interrupção do processo em alguns ambientes.", - "Updating to {version}" : "Atualizando para {version}", "An error occurred." : "Ocorreu um erro.", "Please reload the page." : "Por favor recarregue a página", - "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização não foi bem sucedida. Para mais informações <a href=\"{url}\">verificar o nosso post no fórum</a> que abrange esta questão.", + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização não foi realizada com sucesso. Para mais informações <a href=\"{url}\">verifique o nosso post no fórum</a> que abrange esta questão.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Atualizado com sucesso. Por favor, informe este problema para a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidade Nextcloud</a>.", - "The update was successful. There were warnings." : "A atualização foi bem sucedida. Havia advertências.", "The update was successful. Redirecting you to Nextcloud now." : "Atualizado com sucesso. Redirecionando para Nextcloud.", "Searching other places" : "Pesquisando em outros lugares", "No search results in other folders" : "Nenhum resultado de pesquisa em outras pastas", @@ -294,7 +292,7 @@ OC.L10N.register( "Alternative Logins" : "Logins Alternativos", "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}", "New password" : "Nova senha", - "New Password" : "Nova Senha", + "New Password" : "Nova senha", "Reset password" : "Redefinir senha", "This Nextcloud instance is currently in single user mode." : "Nesta instância Nextcloud está em modo de usuário único.", "This means only administrators can use the instance." : "Isso significa que apenas os administradores podem usar esta instância.", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index 12548324d7d..49370b740af 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -100,8 +100,8 @@ "Saving..." : "Salvando...", "Dismiss" : "Dispensar", "seconds ago" : "segundos atrás", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviada para o seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo. <br> Se ele não estiver lá, pergunte ao administrador do local.", - "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?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida. <br/> Se você não tem certeza do que fazer, por favor, contate o administrador antes de continuar. <br/> Você realmente deseja continuar?", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "O link para redefinir sua senha foi enviado para seu e-mail. Se você não recebê-lo dentro de um período razoável de tempo, verifique suas pastas de spam/lixo.<br> Se ele não estiver lá, pergunte ao administrador do local.", + "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?" : "Seus arquivos são criptografados. Se você não ativou a chave de recuperação, não haverá maneira de obter seus dados de volta após a sua senha ser redefinida.<br/>Se não tiver certeza do que deve fazer, contate o administrador antes de continuar. <br/>Deseja realmente continuar?", "I know what I'm doing" : "Eu sei o que estou fazendo", "Password can not be changed. Please contact your administrator." : "A senha não pode ser alterada. Por favor, contate o administrador.", "No" : "Não", @@ -129,6 +129,7 @@ "Strong password" : "Senha forte", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.", "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>." : "Seu servidor web não está configurado corretamente para resolver \"{url}\". Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</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." : "Este servidor não tem nenhuma conexão com a Internet: Vários terminações finais não podem ser encontrados. Isso significa que alguns dos recursos como montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acesso à arquivos remotamente e envio de e-mails de notificação podem não funcionar também. Sugerimos habilitar a conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.", "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>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um memcached se disponível. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</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>." : "/dev/urandom não pode ser lido pelo PHP e é altamente desencorajado por razões de segurança. Mais informação pode ser encontrada na nossa <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentação</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." : "Você stá atualmente em executando PHP {version}. Nós o incentivamos a atualizar sua versão do PHP para aproveitar<a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">atualizações de segurança e desempenho proporcionados pelo Grupo PHP</a> assim que sua distribuição suportar.", @@ -216,13 +217,10 @@ "Hello {name}" : "Olá {name}", "new" : "novo", "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A atualização está em andamento, deixando esta página pode haver interrupção do processo em alguns ambientes.", - "Updating to {version}" : "Atualizando para {version}", "An error occurred." : "Ocorreu um erro.", "Please reload the page." : "Por favor recarregue a página", - "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização não foi bem sucedida. Para mais informações <a href=\"{url}\">verificar o nosso post no fórum</a> que abrange esta questão.", + "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização não foi realizada com sucesso. Para mais informações <a href=\"{url}\">verifique o nosso post no fórum</a> que abrange esta questão.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Atualizado com sucesso. Por favor, informe este problema para a <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">comunidade Nextcloud</a>.", - "The update was successful. There were warnings." : "A atualização foi bem sucedida. Havia advertências.", "The update was successful. Redirecting you to Nextcloud now." : "Atualizado com sucesso. Redirecionando para Nextcloud.", "Searching other places" : "Pesquisando em outros lugares", "No search results in other folders" : "Nenhum resultado de pesquisa em outras pastas", @@ -292,7 +290,7 @@ "Alternative Logins" : "Logins Alternativos", "Use the following link to reset your password: {link}" : "Use o seguinte link para redefinir sua senha: {link}", "New password" : "Nova senha", - "New Password" : "Nova Senha", + "New Password" : "Nova senha", "Reset password" : "Redefinir senha", "This Nextcloud instance is currently in single user mode." : "Nesta instância Nextcloud está em modo de usuário único.", "This means only administrators can use the instance." : "Isso significa que apenas os administradores podem usar esta instância.", diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js index fc5d33c77a0..ab476443ec1 100644 --- a/core/l10n/pt_PT.js +++ b/core/l10n/pt_PT.js @@ -213,12 +213,9 @@ OC.L10N.register( "Hello {name}" : "Olá {name}", "new" : "novo", "_download %n file_::_download %n files_" : ["transferir %n ficheiro","transferir %n ficheiros"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A atualização está em curso. Se deixar esta página agora poderá interromper o processo em alguns ambientes.", - "Updating to {version}" : "A atualizar para {version}", "An error occurred." : "Ocorreu um erro.", "Please reload the page." : "Por favor, recarregue a página.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização falhou. Para mais informação <a href=\"{url}\">verifique o nosso fórum</a> sobre como resolver este problema.", - "The update was successful. There were warnings." : "A atualização foi bem sucedida. Tem alguns avisos.", "Searching other places" : "A pesquisar noutros lugares", "No search results in other folders" : "Sem resultados de procura nas outras pastas", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado de pesquisa noutra pasta","{count} resultados de pesquisa noutras pastas"], diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json index bc798b9173e..fc6a81560a4 100644 --- a/core/l10n/pt_PT.json +++ b/core/l10n/pt_PT.json @@ -211,12 +211,9 @@ "Hello {name}" : "Olá {name}", "new" : "novo", "_download %n file_::_download %n files_" : ["transferir %n ficheiro","transferir %n ficheiros"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "A atualização está em curso. Se deixar esta página agora poderá interromper o processo em alguns ambientes.", - "Updating to {version}" : "A atualizar para {version}", "An error occurred." : "Ocorreu um erro.", "Please reload the page." : "Por favor, recarregue a página.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "A atualização falhou. Para mais informação <a href=\"{url}\">verifique o nosso fórum</a> sobre como resolver este problema.", - "The update was successful. There were warnings." : "A atualização foi bem sucedida. Tem alguns avisos.", "Searching other places" : "A pesquisar noutros lugares", "No search results in other folders" : "Sem resultados de procura nas outras pastas", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado de pesquisa noutra pasta","{count} resultados de pesquisa noutras pastas"], diff --git a/core/l10n/ro.js b/core/l10n/ro.js index c332051ef6f..3499092142a 100644 --- a/core/l10n/ro.js +++ b/core/l10n/ro.js @@ -184,11 +184,8 @@ OC.L10N.register( "Hello {name}" : "Salut {name}", "new" : "nou", "_download %n file_::_download %n files_" : ["descarcă %n fișier","descarcă %n fișiere","descarcă %n fișiere"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Actualizarea este în progres, părăsirea acestei pagini ar putea duce la întreruperea procesului în unele medii.", - "Updating to {version}" : "Actualizare la {version}", "An error occurred." : "A apărut o eroare.", "Please reload the page." : "Te rugăm să reîncarci pagina.", - "The update was successful. There were warnings." : "Actualizarea nu a avut loc cu succes. Au existat avertismente.", "Searching other places" : "Se caută în alte locuri", "No search results in other folders" : "Nu există rezultate ale căutării în alte directoare", "Personal" : "Personal", diff --git a/core/l10n/ro.json b/core/l10n/ro.json index cbd63462757..58c0fcda531 100644 --- a/core/l10n/ro.json +++ b/core/l10n/ro.json @@ -182,11 +182,8 @@ "Hello {name}" : "Salut {name}", "new" : "nou", "_download %n file_::_download %n files_" : ["descarcă %n fișier","descarcă %n fișiere","descarcă %n fișiere"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Actualizarea este în progres, părăsirea acestei pagini ar putea duce la întreruperea procesului în unele medii.", - "Updating to {version}" : "Actualizare la {version}", "An error occurred." : "A apărut o eroare.", "Please reload the page." : "Te rugăm să reîncarci pagina.", - "The update was successful. There were warnings." : "Actualizarea nu a avut loc cu succes. Au existat avertismente.", "Searching other places" : "Se caută în alte locuri", "No search results in other folders" : "Nu există rezultate ale căutării în alte directoare", "Personal" : "Personal", diff --git a/core/l10n/ru.js b/core/l10n/ru.js index d5f1b1375ec..92246d344fa 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -131,6 +131,7 @@ 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." : "Ваш веб-сервер еще не настроен должным образом чтобы позволить синхронизацию файлов, потому что интерфейс WebDAV, кажется, испорчен.", "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>." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информация в нашей <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\" 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." : "Вы используете PHP {version}. Рекомендуется обновить версию PHP, чтобы воспользоваться <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">улучшениями производительности и безопасности, внедрёнными PHP Group</a> как только новая версия будет доступна в Вашем дистрибутиве. ", @@ -153,12 +154,17 @@ OC.L10N.register( "Expiration" : "Срок действия", "Expiration date" : "Дата окончания", "Choose a password for the public link" : "Укажите пароль для публичной ссылки", + "Copied!" : "Скопировано!", + "Not supported!" : "Не поддерживается!", + "Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.", + "Press Ctrl-C to copy." : "Нажмите Ctrl-C для копирования.", "Resharing is not allowed" : "Повторное открытие доступа запрещено", "Share link" : "Поделиться ссылкой", "Link" : "Ссылка", "Password protect" : "Защитить паролем", "Password" : "Пароль", "Allow editing" : "Разрешить редактирование", + "Hide file listing" : "Скрыть список файлов", "Email link to person" : "Отправить ссылку по электронной почте", "Send" : "Отправить", "Sending ..." : "Отправляется ...", @@ -213,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Здравствуйте {name}", "new" : "новый", "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов","скачать %n файлов"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Идет обновление. Покидая эту страницу, вы можете прервать процесс обновления.", - "Updating to {version}" : "Обновляем до {version}", "An error occurred." : "Произошла ошибка.", "Please reload the page." : "Пожалуйста, обновите страницу.", "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\">сообществу Nextcloud</a>.", - "The update was successful. There were warnings." : "Обновление прошло успешно. Были предупреждения.", "The update was successful. Redirecting you to Nextcloud now." : "Обновление прошло успешно. Перенаправляем вас на Nextcloud прямо сейчас.", "Searching other places" : "Идет поиск в других местах", "No search results in other folders" : "В других папках ничего не найдено", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index cfcaa1eb101..a22f6640946 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -129,6 +129,7 @@ "Strong password" : "Устойчивый к взлому пароль", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер еще не настроен должным образом чтобы позволить синхронизацию файлов, потому что интерфейс WebDAV, кажется, испорчен.", "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>." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информация в нашей <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\" 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." : "Вы используете PHP {version}. Рекомендуется обновить версию PHP, чтобы воспользоваться <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">улучшениями производительности и безопасности, внедрёнными PHP Group</a> как только новая версия будет доступна в Вашем дистрибутиве. ", @@ -151,12 +152,17 @@ "Expiration" : "Срок действия", "Expiration date" : "Дата окончания", "Choose a password for the public link" : "Укажите пароль для публичной ссылки", + "Copied!" : "Скопировано!", + "Not supported!" : "Не поддерживается!", + "Press ⌘-C to copy." : "Нажмите ⌘-C для копирования.", + "Press Ctrl-C to copy." : "Нажмите Ctrl-C для копирования.", "Resharing is not allowed" : "Повторное открытие доступа запрещено", "Share link" : "Поделиться ссылкой", "Link" : "Ссылка", "Password protect" : "Защитить паролем", "Password" : "Пароль", "Allow editing" : "Разрешить редактирование", + "Hide file listing" : "Скрыть список файлов", "Email link to person" : "Отправить ссылку по электронной почте", "Send" : "Отправить", "Sending ..." : "Отправляется ...", @@ -211,13 +217,10 @@ "Hello {name}" : "Здравствуйте {name}", "new" : "новый", "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов","скачать %n файлов"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Идет обновление. Покидая эту страницу, вы можете прервать процесс обновления.", - "Updating to {version}" : "Обновляем до {version}", "An error occurred." : "Произошла ошибка.", "Please reload the page." : "Пожалуйста, обновите страницу.", "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\">сообществу Nextcloud</a>.", - "The update was successful. There were warnings." : "Обновление прошло успешно. Были предупреждения.", "The update was successful. Redirecting you to Nextcloud now." : "Обновление прошло успешно. Перенаправляем вас на Nextcloud прямо сейчас.", "Searching other places" : "Идет поиск в других местах", "No search results in other folders" : "В других папках ничего не найдено", diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js index 4895c7b6173..f7300a0ce17 100644 --- a/core/l10n/sk_SK.js +++ b/core/l10n/sk_SK.js @@ -192,12 +192,9 @@ OC.L10N.register( "Hello {name}" : "Vitaj {name}", "new" : "nový", "_download %n file_::_download %n files_" : ["stiahnuť %n súbor","stiahnuť %n súbory","stiahnuť %n súborov"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Aktualizácie prebieha. V niektorých prostrediach môže opustenie tejto stránky spôsobiť prerušenie aktualizácie.", - "Updating to {version}" : "Aktualizuje sa na {version}", "An error occurred." : "Vyskytla sa chyba.", "Please reload the page." : "Obnovte prosím stránku.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizácia neprebehla úspešne. Pre viac informácií <a href=\"{url}\">navštívte príspevok na našom fóre</a>, ktorý pokrýva tento problém.", - "The update was successful. There were warnings." : "Aktualizácia bola úspešná. Vyskytli sa upozornenia.", "Searching other places" : "Prehľadanie ostatných umiestnení", "No search results in other folders" : "Žiadne výsledky vyhľadávania v ostatných priečinkoch", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} výsledok vyhľadávania v ostatných priečinkoch","{count} výsledky vyhľadávania v ostatných priečinkoch","{count} výsledkov vyhľadávania v ostatných priečinkoch"], diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json index 33025ebfce5..af3165beec8 100644 --- a/core/l10n/sk_SK.json +++ b/core/l10n/sk_SK.json @@ -190,12 +190,9 @@ "Hello {name}" : "Vitaj {name}", "new" : "nový", "_download %n file_::_download %n files_" : ["stiahnuť %n súbor","stiahnuť %n súbory","stiahnuť %n súborov"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Aktualizácie prebieha. V niektorých prostrediach môže opustenie tejto stránky spôsobiť prerušenie aktualizácie.", - "Updating to {version}" : "Aktualizuje sa na {version}", "An error occurred." : "Vyskytla sa chyba.", "Please reload the page." : "Obnovte prosím stránku.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Aktualizácia neprebehla úspešne. Pre viac informácií <a href=\"{url}\">navštívte príspevok na našom fóre</a>, ktorý pokrýva tento problém.", - "The update was successful. There were warnings." : "Aktualizácia bola úspešná. Vyskytli sa upozornenia.", "Searching other places" : "Prehľadanie ostatných umiestnení", "No search results in other folders" : "Žiadne výsledky vyhľadávania v ostatných priečinkoch", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} výsledok vyhľadávania v ostatných priečinkoch","{count} výsledky vyhľadávania v ostatných priečinkoch","{count} výsledkov vyhľadávania v ostatných priečinkoch"], diff --git a/core/l10n/sl.js b/core/l10n/sl.js index 8e49dd74e26..783219ecb2d 100644 --- a/core/l10n/sl.js +++ b/core/l10n/sl.js @@ -212,13 +212,10 @@ OC.L10N.register( "Hello {name}" : "Pozdravljeni, {name}", "new" : "novo", "_download %n file_::_download %n files_" : ["prejmi %n datoteko","prejmi %n datoteki","prejmi %n datoteke","prejmi %n datotek"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Trenutno se izvaja posodobitev sistema. Priporočljivo je počakati, saj se lahko opravilo, če stran zapustite, prekine.", - "Updating to {version}" : "Posodabljanje na različico {version}", "An error occurred." : "Prišlo je do napake.", "Please reload the page." : "Stran je treba ponovno naložiti", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Posodobitev je spodletela. Za več podrobnosti o napaki je <a href=\"{url}\">objavljenih na forumu</a>.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Posodobitev ni bila uspešna. Prosimo, prijavite to situacijo na <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud skupnost</a>.", - "The update was successful. There were warnings." : "Posodobitev je uspešno končana, vendar z nekaj opozorili.", "The update was successful. Redirecting you to Nextcloud now." : "Posodobitev je bila uspešna. Stran bo preusmerjena na NextCloud", "Searching other places" : "Iskanje drugih mest", "No search results in other folders" : "Iskanje po drugih mapah ni vrnilo rezultata", diff --git a/core/l10n/sl.json b/core/l10n/sl.json index be6cb3b1ff7..a729279cec9 100644 --- a/core/l10n/sl.json +++ b/core/l10n/sl.json @@ -210,13 +210,10 @@ "Hello {name}" : "Pozdravljeni, {name}", "new" : "novo", "_download %n file_::_download %n files_" : ["prejmi %n datoteko","prejmi %n datoteki","prejmi %n datoteke","prejmi %n datotek"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Trenutno se izvaja posodobitev sistema. Priporočljivo je počakati, saj se lahko opravilo, če stran zapustite, prekine.", - "Updating to {version}" : "Posodabljanje na različico {version}", "An error occurred." : "Prišlo je do napake.", "Please reload the page." : "Stran je treba ponovno naložiti", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Posodobitev je spodletela. Za več podrobnosti o napaki je <a href=\"{url}\">objavljenih na forumu</a>.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Posodobitev ni bila uspešna. Prosimo, prijavite to situacijo na <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud skupnost</a>.", - "The update was successful. There were warnings." : "Posodobitev je uspešno končana, vendar z nekaj opozorili.", "The update was successful. Redirecting you to Nextcloud now." : "Posodobitev je bila uspešna. Stran bo preusmerjena na NextCloud", "Searching other places" : "Iskanje drugih mest", "No search results in other folders" : "Iskanje po drugih mapah ni vrnilo rezultata", diff --git a/core/l10n/sq.js b/core/l10n/sq.js index 8159b693197..22cae8d3631 100644 --- a/core/l10n/sq.js +++ b/core/l10n/sq.js @@ -213,12 +213,9 @@ OC.L10N.register( "Hello {name}" : "Tungjatjeta {name}", "new" : "re", "_download %n file_::_download %n files_" : ["shkarko %n kartelë","shkarko %n kartela"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Përmirësimi po kryhet, braktisja e kësaj faqeje mund ta ndërpresë procesin në disa mjedise.", - "Updating to {version}" : "Po përditësohet me {version}", "An error occurred." : "Ndodhi një gabim.", "Please reload the page." : "Ju lutemi, ringarkoni faqen.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Përditësimi qe i pasuksesshëm. Për më tepër të dhëna <a href=\"{url}\">shihni postimin te forumi ynë</a> lidhur me këtë çështje.", - "The update was successful. There were warnings." : "Përditësimi qe i suksesshëm. Pati sinjalizime.", "Searching other places" : "Po kërkohet në vende të tjera", "No search results in other folders" : "S’u gjetën përfundime në dosje të tjera", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} përfundim kërkimi në një tjetër dosje","{count} përfundime kërkimi në dosje të tjera"], diff --git a/core/l10n/sq.json b/core/l10n/sq.json index b9a9f9da4d4..65bc90d1893 100644 --- a/core/l10n/sq.json +++ b/core/l10n/sq.json @@ -211,12 +211,9 @@ "Hello {name}" : "Tungjatjeta {name}", "new" : "re", "_download %n file_::_download %n files_" : ["shkarko %n kartelë","shkarko %n kartela"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Përmirësimi po kryhet, braktisja e kësaj faqeje mund ta ndërpresë procesin në disa mjedise.", - "Updating to {version}" : "Po përditësohet me {version}", "An error occurred." : "Ndodhi një gabim.", "Please reload the page." : "Ju lutemi, ringarkoni faqen.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Përditësimi qe i pasuksesshëm. Për më tepër të dhëna <a href=\"{url}\">shihni postimin te forumi ynë</a> lidhur me këtë çështje.", - "The update was successful. There were warnings." : "Përditësimi qe i suksesshëm. Pati sinjalizime.", "Searching other places" : "Po kërkohet në vende të tjera", "No search results in other folders" : "S’u gjetën përfundime në dosje të tjera", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} përfundim kërkimi në një tjetër dosje","{count} përfundime kërkimi në dosje të tjera"], diff --git a/core/l10n/sv.js b/core/l10n/sv.js index 5263654a281..1ca343ab901 100644 --- a/core/l10n/sv.js +++ b/core/l10n/sv.js @@ -214,13 +214,10 @@ OC.L10N.register( "Hello {name}" : "Hej {name}", "new" : "ny", "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ner %n filer"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Uppgradering pågår, att lämna denna sidan kan störa processen i vissa miljöer", - "Updating to {version}" : "Uppdaterar till {version}", "An error occurred." : "Ett fel inträffade.", "Please reload the page." : "Vänligen ladda om sidan.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Uppdateringen misslyckades. För mer information <a href=\"{url}\">kolla vår forum post</a> angående problemet.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Uppdateringen misslyckades. Vänligen rapportera felet till <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", - "The update was successful. There were warnings." : "Uppdateringen lyckades. Det finns varningar.", "The update was successful. Redirecting you to Nextcloud now." : "Uppdateringen lyckades. Omdirigerar nu till Nextcloud.", "Searching other places" : "Söker på andra platser", "No search results in other folders" : "Inga sökresultat i andra mappar", diff --git a/core/l10n/sv.json b/core/l10n/sv.json index d108b247141..a87b9d57b64 100644 --- a/core/l10n/sv.json +++ b/core/l10n/sv.json @@ -212,13 +212,10 @@ "Hello {name}" : "Hej {name}", "new" : "ny", "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ner %n filer"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Uppgradering pågår, att lämna denna sidan kan störa processen i vissa miljöer", - "Updating to {version}" : "Uppdaterar till {version}", "An error occurred." : "Ett fel inträffade.", "Please reload the page." : "Vänligen ladda om sidan.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Uppdateringen misslyckades. För mer information <a href=\"{url}\">kolla vår forum post</a> angående problemet.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Uppdateringen misslyckades. Vänligen rapportera felet till <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>.", - "The update was successful. There were warnings." : "Uppdateringen lyckades. Det finns varningar.", "The update was successful. Redirecting you to Nextcloud now." : "Uppdateringen lyckades. Omdirigerar nu till Nextcloud.", "Searching other places" : "Söker på andra platser", "No search results in other folders" : "Inga sökresultat i andra mappar", diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js index 6b10304f72d..60197e7d446 100644 --- a/core/l10n/th_TH.js +++ b/core/l10n/th_TH.js @@ -195,11 +195,8 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "สวัสดี {name} สภาพอากาศวันนี้มี {weather}", "Hello {name}" : "สวัสดี {name}", "_download %n file_::_download %n files_" : ["ดาวน์โหลด %n ไฟล์"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "กำลังดำเนินการอัพเกรด หากออกจากหน้านี้ ณ เวลานี้อาจเกิดปัญหาในภายหลัง", - "Updating to {version}" : "กำลังอัพเดทเป็นรุ่น {version}", "An error occurred." : "เกิดข้อผิดพลาด", "Please reload the page." : "โปรดโหลดหน้าเว็บใหม่", - "The update was successful. There were warnings." : "การอัพเดทสำเร็จ แต่มีคำเตือนอยู่", "Searching other places" : "กำลังค้นหาสถานที่อื่นๆ", "No search results in other folders" : "ไม่พบผลลัพธ์การค้นหาในโฟลเดอร์อื่นๆ", "_{count} search result in another folder_::_{count} search results in other folders_" : ["ค้นหาพบ {count} ผลลัพธ์ในโฟลเดอร์อื่นๆ"], diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json index 4880e76edf1..b18060ddae9 100644 --- a/core/l10n/th_TH.json +++ b/core/l10n/th_TH.json @@ -193,11 +193,8 @@ "Hello {name}, the weather is {weather}" : "สวัสดี {name} สภาพอากาศวันนี้มี {weather}", "Hello {name}" : "สวัสดี {name}", "_download %n file_::_download %n files_" : ["ดาวน์โหลด %n ไฟล์"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "กำลังดำเนินการอัพเกรด หากออกจากหน้านี้ ณ เวลานี้อาจเกิดปัญหาในภายหลัง", - "Updating to {version}" : "กำลังอัพเดทเป็นรุ่น {version}", "An error occurred." : "เกิดข้อผิดพลาด", "Please reload the page." : "โปรดโหลดหน้าเว็บใหม่", - "The update was successful. There were warnings." : "การอัพเดทสำเร็จ แต่มีคำเตือนอยู่", "Searching other places" : "กำลังค้นหาสถานที่อื่นๆ", "No search results in other folders" : "ไม่พบผลลัพธ์การค้นหาในโฟลเดอร์อื่นๆ", "_{count} search result in another folder_::_{count} search results in other folders_" : ["ค้นหาพบ {count} ผลลัพธ์ในโฟลเดอร์อื่นๆ"], diff --git a/core/l10n/tr.js b/core/l10n/tr.js index 2ed9f0f00f1..bda6b0321b3 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -130,9 +130,18 @@ OC.L10N.register( "Good password" : "İyi parola", "Strong password" : "Güçlü parola", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.", + "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>." : "Web sunucunuz \"{url}\" adresini çözümleyecek şekilde uygun yapılandırılmamış. Daha fazla bilgi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulunabilir.", + "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." : "Bu sunucunun çalışan bir İnternet bağlantısı yok. Birden fazla uç noktaya ulaşılamıyor. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya üçüncü parti uygulama kurma gibi bazı özellikler çalışmayacak demektir. Uzak dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için İnternet bağlantısını etkinleştirmenizi öneriyoruz.", + "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>." : "Hafıza önbelleği yapılandırılmamış. İmkanı varsa performansı iyileştirmek için bir önbellek yapılandırması yapın. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", + "/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>." : "Güvenlik nedeniyle çokça önerilen /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", + "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." : "Halen PHP {version} kullanıyorsunuz. Dağıtımınız destekler desteklemez PHP sürümünüzü güncelleyerek <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performans ve güvenlik geliştirmelerinden</a> faydalanmanızı öneriyoruz.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırmanız hatalı veya ownCloud'a güvenilen bir vekil sunucudan erişiyorsunuz. Eğer erişiminiz güvenilen bir vekil sunucu aracılığıyla gerçekleşmiyorsa bu bir güvenlik sorunudur ve bir saldırganın IP adresini farklıymış gibi göstermesine neden olabilir. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", + "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 dağıtık bellek olarak yapılandırılmış ama hatalı PHP \"memcache\" modülü kurulmuş. \\OC\\Memcache\\Memcached sadece \"memcached\" modülünü destekler, \"memcache\"i değil. <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wikisinde iki modül hakkında da</a> bilgi bulabilirsiniz.", + "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>)" : "Bazı dosyalar bütünlük kontrolünü geçemedi. Bu sorunun üstesinden nasıl geleceğinizi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz. (<a href=\"{codeIntegrityDownloadEndpoint}\">Geçersiz dosyaların listesi…</a> / <a href=\"{rescanEndpoint}\">Tekrar tara…</a>)", "Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu", "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." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.", "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." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.", + "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 başlığı en azından\"{seconds}\" saniyedir yapılandırılmamış. Gelişmiş güvenlik için <a href=\"{docUrl}\" rel=\"noreferrer\">güvenlik ipuçlarında</a> tarif edildiği gibi HSTS'nin etkinleştirilmesini öneririz.", "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>." : "Bu siteye HTTP aracılığıyla erişiyorsunuz. Sunucunuzu <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> gösterildiği şekilde HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.", "Shared" : "Paylaşılan", "Shared with {recipients}" : "{recipients} ile paylaşılmış", @@ -145,6 +154,10 @@ OC.L10N.register( "Expiration" : "Bitiş", "Expiration date" : "Son kullanım tarihi", "Choose a password for the public link" : "Herkese açık bağlantı için bir parola seçin", + "Copied!" : "Kopyalandı!", + "Not supported!" : "Desteklenmiyor!", + "Press ⌘-C to copy." : "Kopyalamak için ⌘-C kullanın.", + "Press Ctrl-C to copy." : "Kopyalamak için Ctrl-C kullanın.", "Resharing is not allowed" : "Tekrar paylaşmaya izin verilmiyor", "Share link" : "Paylaşma bağlantısı", "Link" : "Bağlantı", @@ -192,6 +205,7 @@ OC.L10N.register( "({scope})" : "({scope})", "Delete" : "Sil", "Rename" : "Yeniden adlandır", + "Collaborative tags" : "İşbirlikçi etiketler", "The object type is not specified." : "Nesne türü belirtilmemiş.", "Enter new" : "Yeni girin", "Add" : "Ekle", @@ -205,13 +219,10 @@ OC.L10N.register( "Hello {name}" : "Merhaba {name}", "new" : "Yeni", "_download %n file_::_download %n files_" : ["%n dosya indir","%n dosya indir"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Güncelleme yapılıyor, sayfadan ayrılmak bazı işlemleri kesebilir.", - "Updating to {version}" : "{version} sürümüne güncelleniyor", "An error occurred." : "Bir hata oluştu", "Please reload the page." : "Lütfen sayfayı yeniden yükleyin.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Güncelleme başarısız oldu. Daha fazla bilgi için bu sorunu kapsayan <a href=\"{url}\">forum gönderimize</a> bakın.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Güncelleme işlemi maalesef başarısızlığa uğradı. Lütfen bu surunu <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud topluluğu</a>na bildirin. ", - "The update was successful. There were warnings." : "Güncelleme başarılı. Uyarılar mevcut.", "The update was successful. Redirecting you to Nextcloud now." : "Güncelleme başarılı oldu. Nextcloud'a yönlendiriliyorsunuz.", "Searching other places" : "Diğer konumlarda aranıyor", "No search results in other folders" : "Diğer klasörlerde arama sonucu yok", @@ -243,6 +254,7 @@ OC.L10N.register( "Trace" : "İz", "Security warning" : "Güvenlik uyarısı", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Sunucunuzu nasıl yapılandıracağınız hakkında bilgi almak için <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">belgelendirmeye</a> bakabilirsiniz.", "Create an <strong>admin account</strong>" : "Bir <strong>yönetici hesabı</strong> oluşturun", "Username" : "Kullanıcı Adı", "Storage & database" : "Depolama ve veritabanı", @@ -287,7 +299,9 @@ OC.L10N.register( "Contact your system administrator if this message persists or appeared unexpectedly." : "Eğer bu ileti görünmeye devam ederse veya beklenmedik şekilde ortaya çıkmışsa sistem yöneticinizle iletişime geçin.", "Thank you for your patience." : "Sabrınız için teşekkür ederiz.", "Two-step verification" : "2 adımlı doğrulama", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Hesabınız için gelişmiş güvenlik etkinleştirildi. Lütfen ikinci etkeni kullanarak kimlik doğrulaması yapın.", "Cancel login" : "Girişi iptal et", + "Please authenticate using the selected factor." : "Lütfen seçilen etkeni kullanarak kimlik doğrulaması yapın.", "An error occured while verifying the token" : "Anahtarı(token) doğrularken bir hata oluştu", "You are accessing the server from an untrusted domain." : "Sunucuya güvenilmeyen bir alan adından ulaşıyorsunuz.", "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." : "Lütfen yöneticiniz ile iletişime geçin. Eğer bu örneğin bir yöneticisi iseniz, config/config.php dosyası içerisindeki \"trusted_domain\" ayarını yapılandırın. Bu yapılandırmanın bir örneği config/config.sample.php dosyasında verilmiştir.", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index cb97780f029..f97747cbc4b 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -128,9 +128,18 @@ "Good password" : "İyi parola", "Strong password" : "Güçlü parola", "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.", + "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>." : "Web sunucunuz \"{url}\" adresini çözümleyecek şekilde uygun yapılandırılmamış. Daha fazla bilgi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulunabilir.", + "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." : "Bu sunucunun çalışan bir İnternet bağlantısı yok. Birden fazla uç noktaya ulaşılamıyor. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya üçüncü parti uygulama kurma gibi bazı özellikler çalışmayacak demektir. Uzak dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için İnternet bağlantısını etkinleştirmenizi öneriyoruz.", + "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>." : "Hafıza önbelleği yapılandırılmamış. İmkanı varsa performansı iyileştirmek için bir önbellek yapılandırması yapın. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", + "/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>." : "Güvenlik nedeniyle çokça önerilen /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", + "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." : "Halen PHP {version} kullanıyorsunuz. Dağıtımınız destekler desteklemez PHP sürümünüzü güncelleyerek <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">performans ve güvenlik geliştirmelerinden</a> faydalanmanızı öneriyoruz.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırmanız hatalı veya ownCloud'a güvenilen bir vekil sunucudan erişiyorsunuz. Eğer erişiminiz güvenilen bir vekil sunucu aracılığıyla gerçekleşmiyorsa bu bir güvenlik sorunudur ve bir saldırganın IP adresini farklıymış gibi göstermesine neden olabilir. Daha fazla bilgiyi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", + "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 dağıtık bellek olarak yapılandırılmış ama hatalı PHP \"memcache\" modülü kurulmuş. \\OC\\Memcache\\Memcached sadece \"memcached\" modülünü destekler, \"memcache\"i değil. <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">memcached wikisinde iki modül hakkında da</a> bilgi bulabilirsiniz.", + "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>)" : "Bazı dosyalar bütünlük kontrolünü geçemedi. Bu sorunun üstesinden nasıl geleceğinizi <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz. (<a href=\"{codeIntegrityDownloadEndpoint}\">Geçersiz dosyaların listesi…</a> / <a href=\"{rescanEndpoint}\">Tekrar tara…</a>)", "Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu", "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." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.", "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." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.", + "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 başlığı en azından\"{seconds}\" saniyedir yapılandırılmamış. Gelişmiş güvenlik için <a href=\"{docUrl}\" rel=\"noreferrer\">güvenlik ipuçlarında</a> tarif edildiği gibi HSTS'nin etkinleştirilmesini öneririz.", "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>." : "Bu siteye HTTP aracılığıyla erişiyorsunuz. Sunucunuzu <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> gösterildiği şekilde HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.", "Shared" : "Paylaşılan", "Shared with {recipients}" : "{recipients} ile paylaşılmış", @@ -143,6 +152,10 @@ "Expiration" : "Bitiş", "Expiration date" : "Son kullanım tarihi", "Choose a password for the public link" : "Herkese açık bağlantı için bir parola seçin", + "Copied!" : "Kopyalandı!", + "Not supported!" : "Desteklenmiyor!", + "Press ⌘-C to copy." : "Kopyalamak için ⌘-C kullanın.", + "Press Ctrl-C to copy." : "Kopyalamak için Ctrl-C kullanın.", "Resharing is not allowed" : "Tekrar paylaşmaya izin verilmiyor", "Share link" : "Paylaşma bağlantısı", "Link" : "Bağlantı", @@ -190,6 +203,7 @@ "({scope})" : "({scope})", "Delete" : "Sil", "Rename" : "Yeniden adlandır", + "Collaborative tags" : "İşbirlikçi etiketler", "The object type is not specified." : "Nesne türü belirtilmemiş.", "Enter new" : "Yeni girin", "Add" : "Ekle", @@ -203,13 +217,10 @@ "Hello {name}" : "Merhaba {name}", "new" : "Yeni", "_download %n file_::_download %n files_" : ["%n dosya indir","%n dosya indir"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Güncelleme yapılıyor, sayfadan ayrılmak bazı işlemleri kesebilir.", - "Updating to {version}" : "{version} sürümüne güncelleniyor", "An error occurred." : "Bir hata oluştu", "Please reload the page." : "Lütfen sayfayı yeniden yükleyin.", "The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Güncelleme başarısız oldu. Daha fazla bilgi için bu sorunu kapsayan <a href=\"{url}\">forum gönderimize</a> bakın.", "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Güncelleme işlemi maalesef başarısızlığa uğradı. Lütfen bu surunu <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud topluluğu</a>na bildirin. ", - "The update was successful. There were warnings." : "Güncelleme başarılı. Uyarılar mevcut.", "The update was successful. Redirecting you to Nextcloud now." : "Güncelleme başarılı oldu. Nextcloud'a yönlendiriliyorsunuz.", "Searching other places" : "Diğer konumlarda aranıyor", "No search results in other folders" : "Diğer klasörlerde arama sonucu yok", @@ -241,6 +252,7 @@ "Trace" : "İz", "Security warning" : "Güvenlik uyarısı", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Sunucunuzu nasıl yapılandıracağınız hakkında bilgi almak için <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">belgelendirmeye</a> bakabilirsiniz.", "Create an <strong>admin account</strong>" : "Bir <strong>yönetici hesabı</strong> oluşturun", "Username" : "Kullanıcı Adı", "Storage & database" : "Depolama ve veritabanı", @@ -285,7 +297,9 @@ "Contact your system administrator if this message persists or appeared unexpectedly." : "Eğer bu ileti görünmeye devam ederse veya beklenmedik şekilde ortaya çıkmışsa sistem yöneticinizle iletişime geçin.", "Thank you for your patience." : "Sabrınız için teşekkür ederiz.", "Two-step verification" : "2 adımlı doğrulama", + "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Hesabınız için gelişmiş güvenlik etkinleştirildi. Lütfen ikinci etkeni kullanarak kimlik doğrulaması yapın.", "Cancel login" : "Girişi iptal et", + "Please authenticate using the selected factor." : "Lütfen seçilen etkeni kullanarak kimlik doğrulaması yapın.", "An error occured while verifying the token" : "Anahtarı(token) doğrularken bir hata oluştu", "You are accessing the server from an untrusted domain." : "Sunucuya güvenilmeyen bir alan adından ulaşıyorsunuz.", "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." : "Lütfen yöneticiniz ile iletişime geçin. Eğer bu örneğin bir yöneticisi iseniz, config/config.php dosyası içerisindeki \"trusted_domain\" ayarını yapılandırın. Bu yapılandırmanın bir örneği config/config.sample.php dosyasında verilmiştir.", diff --git a/core/l10n/uk.js b/core/l10n/uk.js index 238ef056d7d..7c4d5dfa9a0 100644 --- a/core/l10n/uk.js +++ b/core/l10n/uk.js @@ -203,12 +203,9 @@ OC.L10N.register( "Hello {name}" : "Привіт {name}", "new" : "новий", "_download %n file_::_download %n files_" : ["завантаження %n файлу","завантаження %n файлів","завантаження %n файлів"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Триває оновлення, якщо ви покинете сторінку, це може перервати процес в деяких оточеннях.", - "Updating to {version}" : "Оновлення до {version}", "An error occurred." : "Виникла помилка.", "Please reload the page." : "Будь ласка, перезавантажте сторінку.", "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 successful. There were warnings." : "Оновлення виконалось успішно, але були попередження.", "Searching other places" : "Йде пошук в інших місцях", "No search results in other folders" : "В інших теках нічого не знайдено", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} результат пошуку в інших теках","{count} результатів пошуку в інших теках","{count} результатів пошуку в інших теках"], diff --git a/core/l10n/uk.json b/core/l10n/uk.json index 0545e9e449e..4a4106d9190 100644 --- a/core/l10n/uk.json +++ b/core/l10n/uk.json @@ -201,12 +201,9 @@ "Hello {name}" : "Привіт {name}", "new" : "новий", "_download %n file_::_download %n files_" : ["завантаження %n файлу","завантаження %n файлів","завантаження %n файлів"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Триває оновлення, якщо ви покинете сторінку, це може перервати процес в деяких оточеннях.", - "Updating to {version}" : "Оновлення до {version}", "An error occurred." : "Виникла помилка.", "Please reload the page." : "Будь ласка, перезавантажте сторінку.", "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 successful. There were warnings." : "Оновлення виконалось успішно, але були попередження.", "Searching other places" : "Йде пошук в інших місцях", "No search results in other folders" : "В інших теках нічого не знайдено", "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} результат пошуку в інших теках","{count} результатів пошуку в інших теках","{count} результатів пошуку в інших теках"], diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index 35cff0331d2..9f0b2c151b5 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -213,12 +213,9 @@ OC.L10N.register( "Hello {name}" : "你好 {name}", "new" : "新建", "_download %n file_::_download %n files_" : ["下载 %n 个文件"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "升级正在进行,在某些环境中离开此网页可能中断该过程。", - "Updating to {version}" : "正在升级到 {version}", "An error occurred." : "发生了一个错误", "Please reload the page." : "请重新加载页面。", "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 successful. There were warnings." : "更新成功。有警告。", "Searching other places" : "搜索其他地方", "No search results in other folders" : "在其他文件夹中没有得到任何搜索结果", "_{count} search result in another folder_::_{count} search results in other folders_" : ["在其他文件夹中找到 {count} 条搜索结果"], diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index f42b5c3bd50..e045dd7f1a8 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -211,12 +211,9 @@ "Hello {name}" : "你好 {name}", "new" : "新建", "_download %n file_::_download %n files_" : ["下载 %n 个文件"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "升级正在进行,在某些环境中离开此网页可能中断该过程。", - "Updating to {version}" : "正在升级到 {version}", "An error occurred." : "发生了一个错误", "Please reload the page." : "请重新加载页面。", "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 successful. There were warnings." : "更新成功。有警告。", "Searching other places" : "搜索其他地方", "No search results in other folders" : "在其他文件夹中没有得到任何搜索结果", "_{count} search result in another folder_::_{count} search results in other folders_" : ["在其他文件夹中找到 {count} 条搜索结果"], diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js index 33f73a90f23..4d2b11d4aef 100644 --- a/core/l10n/zh_TW.js +++ b/core/l10n/zh_TW.js @@ -27,6 +27,7 @@ OC.L10N.register( "Error unfavoriting" : "從最愛移除出錯", "Couldn't send mail to following users: %s " : "無法寄送郵件給這些使用者:%s", "Preparing update" : "準備更新", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "修復警告:", "Repair error: " : "修復錯誤", "Turned on maintenance mode" : "已啓用維護模式", @@ -197,11 +198,9 @@ OC.L10N.register( "Hello {name}" : "哈囉 {name}", "new" : "新", "_download %n file_::_download %n files_" : ["下載 %n 個檔案"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "正在更新,在某些狀況下,離開本頁面可能會導致更新中斷", "An error occurred." : "發生錯誤", "Please reload the page." : "請重新整理頁面", "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 successful. There were warnings." : "更新成功,有警告訊息", "Searching other places" : "搜尋其他位置", "No search results in other folders" : "在其他資料夾中沒有找到", "_{count} search result in another folder_::_{count} search results in other folders_" : ["在其他資料夾中有 {count} 比結果"], diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json index e3d2cdc36ca..73db28210fd 100644 --- a/core/l10n/zh_TW.json +++ b/core/l10n/zh_TW.json @@ -25,6 +25,7 @@ "Error unfavoriting" : "從最愛移除出錯", "Couldn't send mail to following users: %s " : "無法寄送郵件給這些使用者:%s", "Preparing update" : "準備更新", + "[%d / %d]: %s" : "[%d / %d]: %s", "Repair warning: " : "修復警告:", "Repair error: " : "修復錯誤", "Turned on maintenance mode" : "已啓用維護模式", @@ -195,11 +196,9 @@ "Hello {name}" : "哈囉 {name}", "new" : "新", "_download %n file_::_download %n files_" : ["下載 %n 個檔案"], - "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "正在更新,在某些狀況下,離開本頁面可能會導致更新中斷", "An error occurred." : "發生錯誤", "Please reload the page." : "請重新整理頁面", "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 successful. There were warnings." : "更新成功,有警告訊息", "Searching other places" : "搜尋其他位置", "No search results in other folders" : "在其他資料夾中沒有找到", "_{count} search result in another folder_::_{count} search results in other folders_" : ["在其他資料夾中有 {count} 比結果"], diff --git a/core/register_command.php b/core/register_command.php index 6f20769fa70..6a220c22b3f 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -99,7 +99,7 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { ); $application->add(new OC\Core\Command\Log\Manage(\OC::$server->getConfig())); - $application->add(new OC\Core\Command\Log\OwnCloud(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Log\File(\OC::$server->getConfig())); $view = new \OC\Files\View(); $util = new \OC\Encryption\Util( diff --git a/core/shipped.json b/core/shipped.json index da48d14dc0b..f944d9d4c11 100644 --- a/core/shipped.json +++ b/core/shipped.json @@ -9,8 +9,11 @@ "federatedfilesharing", "federation", "files", + "files_accesscontrol", + "files_automatedtagging", "files_external", "files_pdfviewer", + "files_retention", "files_sharing", "files_texteditor", "files_trashbin", @@ -21,17 +24,21 @@ "notifications", "password_policy", "provisioning_api", + "serverinfo", + "survey_client", "systemtags", "templateeditor", "theming", "updatenotification", "user_external", "user_ldap", - "user_saml" + "user_saml", + "workflowengine" ], "alwaysEnabled": [ "files", "dav", - "federatedfilesharing" + "federatedfilesharing", + "workflowengine" ] } diff --git a/core/skeleton/welcome.txt b/core/skeleton/welcome.txt index c86eaf91bbe..52927111416 100644 --- a/core/skeleton/welcome.txt +++ b/core/skeleton/welcome.txt @@ -1,4 +1,4 @@ -Welcome to your ownCloud account! +Welcome to your Nextcloud account! This is just an example file for developers and git users. The packaged and released versions will come with better examples. diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index b3b492ecac4..be5c769ab76 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -113,7 +113,10 @@ <li data-id="<?php p($entry['id']); ?>"> <a href="<?php print_unescaped($entry['href']); ?>" tabindex="3" <?php if( $entry['active'] ): ?> class="active"<?php endif; ?>> - <img class="app-icon" alt="" src="<?php print_unescaped($entry['icon']); ?>"> + <svg width="32" height="32" viewBox="0 0 32 32"> + <defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs> + <image x="0" y="0" width="32" height="32" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="<?php print_unescaped($entry['icon']); ?>" class="app-icon"/> + </svg> <div class="icon-loading-dark" style="display:none;"></div> <span> <?php p($entry['name']); ?> @@ -128,7 +131,10 @@ <li id="apps-management"> <a href="<?php print_unescaped(\OC::$server->getURLGenerator()->linkToRoute('settings.AppSettings.viewApps')); ?>" tabindex="4" <?php if( $_['appsmanagement_active'] ): ?> class="active"<?php endif; ?>> - <img class="app-icon" alt="" src="<?php print_unescaped(image_path('settings', 'apps.svg')); ?>"> + <svg width="32" height="32" viewBox="0 0 32 32" class="app-icon"> + <defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs> + <image x="0" y="0" width="32" height="32" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="<?php print_unescaped(image_path('settings', 'apps.svg')); ?>"/> + </svg> <div class="icon-loading-dark" style="display:none;"></div> <span> <?php p($l->t('Apps')); ?> diff --git a/core/templates/login.php b/core/templates/login.php index 95c5a423c3d..c5453c34497 100644 --- a/core/templates/login.php +++ b/core/templates/login.php @@ -38,7 +38,7 @@ script('core', [ <!-- the following div ensures that the spinner is always inside the #message div --> <div style="clear: both;"></div> </div> - <p class="grouptop"> + <p class="grouptop<?php if (!empty($_['invalidpassword'])) { ?> shake<?php } ?>"> <input type="text" name="user" id="user" placeholder="<?php p($l->t('Username or email')); ?>" value="<?php p($_['loginName']); ?>" @@ -47,7 +47,7 @@ script('core', [ <label for="user" class="infield"><?php p($l->t('Username or email')); ?></label> </p> - <p class="groupbottom"> + <p class="groupbottom<?php if (!empty($_['invalidpassword'])) { ?> shake<?php } ?>"> <input type="password" name="password" id="password" value="" placeholder="<?php p($l->t('Password')); ?>" <?php p($_['user_autofocus'] ? '' : 'autofocus'); ?> diff --git a/core/templates/update.admin.php b/core/templates/update.admin.php index 87f93967d91..aaeacea993b 100644 --- a/core/templates/update.admin.php +++ b/core/templates/update.admin.php @@ -36,18 +36,20 @@ </div> <input class="updateButton" type="button" value="<?php p($l->t('Start update')) ?>"> <div class="infogroup"> + <em> <?php p($l->t('To avoid timeouts with larger installations, you can instead run the following command from your installation directory:')) ?> <pre>./occ upgrade</pre> + </em> </div> </div> <div class="update-progress hidden"> <h2 id="update-progress-title"></h2> <div id="update-progress-icon" class="icon-loading-dark"></div> - <p id="update-progress-message-error" class="warning hidden"></p> - <ul id="update-progress-message-warnings" class="warning hidden"></ul> + <p id="update-progress-message-error" class="hidden"></p> + <ul id="update-progress-message-warnings" class="hidden"></ul> <p id="update-progress-message"></p> <a class="update-show-detailed"><?php p($l->t( 'Detailed logs' )); ?> <img src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>" /></a> - <div id="update-progress-detailed" class="hidden warning"></div> + <div id="update-progress-detailed" class="hidden"></div> </div> </div> @@ -90,7 +90,7 @@ try { exit(0); } $user = posix_getpwuid(posix_getuid()); - $configUser = posix_getpwuid(fileowner(OC::$SERVERROOT . '/config/config.php')); + $configUser = posix_getpwuid(fileowner(OC::$configDir . 'config.php')); if ($user['name'] !== $configUser['name']) { echo "Console has to be executed with the same user as the web server is operated" . PHP_EOL; echo "Current user: " . $user['name'] . PHP_EOL; @@ -117,9 +117,9 @@ try { break; } - $logger->debug('Run job with ID ' . $job->getId(), ['app' => 'cron']); + $logger->debug('Run ' . get_class($job) . ' job with ID ' . $job->getId(), ['app' => 'cron']); $job->execute($jobList, $logger); - $logger->debug('Finished job with ID ' . $job->getId(), ['app' => 'cron']); + $logger->debug('Finished ' . get_class($job) . ' job with ID ' . $job->getId(), ['app' => 'cron']); $jobList->setLastJob($job); $executedJobs[$job->getId()] = true; diff --git a/lib/base.php b/lib/base.php index d22490ca5dc..3457a74e989 100644 --- a/lib/base.php +++ b/lib/base.php @@ -123,6 +123,8 @@ class OC { self::$configDir = OC::$SERVERROOT . '/' . PHPUNIT_CONFIG_DIR . '/'; } elseif(defined('PHPUNIT_RUN') and PHPUNIT_RUN and is_dir(OC::$SERVERROOT . '/tests/config/')) { self::$configDir = OC::$SERVERROOT . '/tests/config/'; + } elseif($dir = getenv('NEXTCLOUD_CONFIG_DIR')) { + self::$configDir = rtrim($dir, '/') . '/'; } else { self::$configDir = OC::$SERVERROOT . '/config/'; } @@ -216,7 +218,7 @@ class OC { // set the right include path set_include_path( OC::$SERVERROOT . '/lib/private' . PATH_SEPARATOR . - OC::$SERVERROOT . '/config' . PATH_SEPARATOR . + self::$configDir . PATH_SEPARATOR . OC::$SERVERROOT . '/3rdparty' . PATH_SEPARATOR . implode(PATH_SEPARATOR, $paths) . PATH_SEPARATOR . get_include_path() . PATH_SEPARATOR . @@ -359,7 +361,7 @@ class OC { // render error page $template = new OC_Template('', 'update.use-cli', 'guest'); - $template->assign('productName', 'owncloud'); // for now + $template->assign('productName', 'nextcloud'); // for now $template->assign('version', OC_Util::getVersionString()); $template->assign('tooBig', $tooBig); @@ -390,7 +392,7 @@ class OC { $ocVersion = \OCP\Util::getVersion(); $tmpl->assign('appsToUpgrade', $appManager->getAppsNeedingUpgrade($ocVersion)); $tmpl->assign('incompatibleAppsList', $appManager->getIncompatibleApps($ocVersion)); - $tmpl->assign('productName', 'ownCloud'); // for now + $tmpl->assign('productName', 'Nextcloud'); // for now $tmpl->assign('oldTheme', $oldTheme); $tmpl->printPage(); } diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js index f6e4fe6f099..2a5faddedaf 100644 --- a/lib/l10n/cs_CZ.js +++ b/lib/l10n/cs_CZ.js @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "Uživatelské jméno je již využíváno", "Login canceled by app" : "Přihlášení zrušeno aplikací", "User disabled" : "Uživatel zakázán", + "Help" : "Nápověda", "Personal" : "Osobní", "Users" : "Uživatelé", "Admin" : "Administrace", diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json index ead413190b1..9b964100551 100644 --- a/lib/l10n/cs_CZ.json +++ b/lib/l10n/cs_CZ.json @@ -113,6 +113,7 @@ "The username is already being used" : "Uživatelské jméno je již využíváno", "Login canceled by app" : "Přihlášení zrušeno aplikací", "User disabled" : "Uživatel zakázán", + "Help" : "Nápověda", "Personal" : "Osobní", "Users" : "Uživatelé", "Admin" : "Administrace", diff --git a/lib/l10n/de.js b/lib/l10n/de.js index 227c7c4ab48..48a6ad427fc 100644 --- a/lib/l10n/de.js +++ b/lib/l10n/de.js @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "Dieser Benutzername existiert bereits", "Login canceled by app" : "Anmeldung durch die App abgebrochen", "User disabled" : "Nutzer deaktiviert", + "Help" : "Hilfe", "Personal" : "Persönlich", "Users" : "Benutzer", "Admin" : "Administration", @@ -123,6 +124,7 @@ OC.L10N.register( "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, da die folgenden Abhängigkeiten nicht erfüllt sind: %s", "No app name specified" : "Es wurde kein App-Name angegeben", + "App '%s' could not be installed!" : "'%s' - App konnte nicht installiert werden!", "a safe home for all your data" : "ein sicherer Ort für all deine Daten", "File is currently busy, please try again later" : "Die Datei ist zur Zeit in Benutzung, bitte versuche es später noch einmal", "Can't read file" : "Datei kann nicht gelesen werden", diff --git a/lib/l10n/de.json b/lib/l10n/de.json index 96c684f48cf..8f806af36c6 100644 --- a/lib/l10n/de.json +++ b/lib/l10n/de.json @@ -113,6 +113,7 @@ "The username is already being used" : "Dieser Benutzername existiert bereits", "Login canceled by app" : "Anmeldung durch die App abgebrochen", "User disabled" : "Nutzer deaktiviert", + "Help" : "Hilfe", "Personal" : "Persönlich", "Users" : "Benutzer", "Admin" : "Administration", @@ -121,6 +122,7 @@ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, da die folgenden Abhängigkeiten nicht erfüllt sind: %s", "No app name specified" : "Es wurde kein App-Name angegeben", + "App '%s' could not be installed!" : "'%s' - App konnte nicht installiert werden!", "a safe home for all your data" : "ein sicherer Ort für all deine Daten", "File is currently busy, please try again later" : "Die Datei ist zur Zeit in Benutzung, bitte versuche es später noch einmal", "Can't read file" : "Datei kann nicht gelesen werden", diff --git a/lib/l10n/de_DE.js b/lib/l10n/de_DE.js index 52c30cab0bf..333f3a8981a 100644 --- a/lib/l10n/de_DE.js +++ b/lib/l10n/de_DE.js @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "Der Benutzername existiert bereits", "Login canceled by app" : "Anmeldung durch die App abgebrochen", "User disabled" : "Nutzer deaktiviert", + "Help" : "Hilfe", "Personal" : "Persönlich", "Users" : "Benutzer", "Admin" : "Administrator", @@ -123,6 +124,7 @@ OC.L10N.register( "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, da die folgenden Abhängigkeiten nicht erfüllt sind: %s", "No app name specified" : "Es wurde kein App-Name angegeben", + "App '%s' could not be installed!" : "'%s' - App konnte nicht installiert werden!", "a safe home for all your data" : "ein sicherer Ort für all Ihre Daten", "File is currently busy, please try again later" : "Die Datei ist zur Zeit in Benutzung, bitte versuchen Sie es später noch einmal", "Can't read file" : "Datei kann nicht gelesen werden", diff --git a/lib/l10n/de_DE.json b/lib/l10n/de_DE.json index 317284274a0..2fe0f17e051 100644 --- a/lib/l10n/de_DE.json +++ b/lib/l10n/de_DE.json @@ -113,6 +113,7 @@ "The username is already being used" : "Der Benutzername existiert bereits", "Login canceled by app" : "Anmeldung durch die App abgebrochen", "User disabled" : "Nutzer deaktiviert", + "Help" : "Hilfe", "Personal" : "Persönlich", "Users" : "Benutzer", "Admin" : "Administrator", @@ -121,6 +122,7 @@ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Die App \"%s\" kann nicht installiert werden, da sie mit dieser Serverversion nicht kompatibel ist.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Die App „%s“ kann nicht installiert werden, da die folgenden Abhängigkeiten nicht erfüllt sind: %s", "No app name specified" : "Es wurde kein App-Name angegeben", + "App '%s' could not be installed!" : "'%s' - App konnte nicht installiert werden!", "a safe home for all your data" : "ein sicherer Ort für all Ihre Daten", "File is currently busy, please try again later" : "Die Datei ist zur Zeit in Benutzung, bitte versuchen Sie es später noch einmal", "Can't read file" : "Datei kann nicht gelesen werden", diff --git a/lib/l10n/es.js b/lib/l10n/es.js index 5a630b1a1fc..00a47468903 100644 --- a/lib/l10n/es.js +++ b/lib/l10n/es.js @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "El nombre de usuario ya está en uso", "Login canceled by app" : "Login cancelado por la app", "User disabled" : "Usuario deshabilitado", + "Help" : "Ayuda", "Personal" : "Personal", "Users" : "Usuarios", "Admin" : "Administración", @@ -123,6 +124,7 @@ OC.L10N.register( "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no se puede instalar porque no es compatible con esta versión del servidor.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La app \"%s\" no puede instalarse porque las siguientes dependencias no están cumplimentadas: %s", "No app name specified" : "No se ha especificado nombre de la aplicación", + "App '%s' could not be installed!" : "¡No se pudo instalar la app '%s'!", "a safe home for all your data" : "un hogar seguro para todos tus datos", "File is currently busy, please try again later" : "Archivo se encuentra actualmente ocupado, por favor inténtelo de nuevo más tarde", "Can't read file" : "No se puede leer archivo", diff --git a/lib/l10n/es.json b/lib/l10n/es.json index 1ee4027ccb0..fc0f223ef37 100644 --- a/lib/l10n/es.json +++ b/lib/l10n/es.json @@ -113,6 +113,7 @@ "The username is already being used" : "El nombre de usuario ya está en uso", "Login canceled by app" : "Login cancelado por la app", "User disabled" : "Usuario deshabilitado", + "Help" : "Ayuda", "Personal" : "Personal", "Users" : "Usuarios", "Admin" : "Administración", @@ -121,6 +122,7 @@ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no se puede instalar porque no es compatible con esta versión del servidor.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La app \"%s\" no puede instalarse porque las siguientes dependencias no están cumplimentadas: %s", "No app name specified" : "No se ha especificado nombre de la aplicación", + "App '%s' could not be installed!" : "¡No se pudo instalar la app '%s'!", "a safe home for all your data" : "un hogar seguro para todos tus datos", "File is currently busy, please try again later" : "Archivo se encuentra actualmente ocupado, por favor inténtelo de nuevo más tarde", "Can't read file" : "No se puede leer archivo", diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index c66d65709e9..61107d4df83 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "Ce nom d'utilisateur est déjà utilisé", "Login canceled by app" : "L'authentification a été annulé par l'application", "User disabled" : "Utilisateur désactivé", + "Help" : "Aide", "Personal" : "Personnel", "Users" : "Utilisateurs", "Admin" : "Administration", diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index 6e3d2c70a2f..197862d6561 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -113,6 +113,7 @@ "The username is already being used" : "Ce nom d'utilisateur est déjà utilisé", "Login canceled by app" : "L'authentification a été annulé par l'application", "User disabled" : "Utilisateur désactivé", + "Help" : "Aide", "Personal" : "Personnel", "Users" : "Utilisateurs", "Admin" : "Administration", diff --git a/lib/l10n/id.js b/lib/l10n/id.js index 37bc819315b..c45e3d90a87 100644 --- a/lib/l10n/id.js +++ b/lib/l10n/id.js @@ -9,12 +9,15 @@ OC.L10N.register( "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" : "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php", "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.", "PHP with a version lower than %s is required." : "Diperlukan PHP dengan versi yang lebh rendah dari %s.", + "%sbit or higher PHP required." : "PHP %sbit atau yang lebih tinggi diperlukan.", "Following databases are supported: %s" : "Berikut adalah basis data yang didukung: %s", "The command line tool %s could not be found" : "Alat baris perintah %s tidak ditemukan", "The library %s is not available." : "Pustaka %s tidak tersedia.", "Library %s with a version higher than %s is required - available version %s." : "Diperlukan pustaka %s dengan versi yang lebih tinggi dari %s - versi yang tersedia %s.", "Library %s with a version lower than %s is required - available version %s." : "Diperlukan pustaka %s dengan versi yang lebih rendah dari %s - versi yang tersedia %s.", "Following platforms are supported: %s" : "Berikut adalah platform yang didukung: %s", + "Server version %s or higher is required." : "Server versi %s atau yang lebih tinggi diperlukan.", + "Server version %s or lower is required." : "Server versi %s atau yang lebih rendah diperlukan.", "Unknown filetype" : "Tipe berkas tak dikenal", "Invalid image" : "Gambar tidak sah", "today" : "hari ini", @@ -34,17 +37,22 @@ OC.L10N.register( "File name is a reserved word" : "Nama berkas merupakan kata yang disediakan", "File name contains at least one invalid character" : "Nama berkas berisi setidaknya satu karakter yang tidak sah.", "File name is too long" : "Nama berkas terlalu panjang", - "App directory already exists" : "Direktori Apl sudah ada", - "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s", + "App directory already exists" : "Direktori Aplikasi sudah ada", + "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder Aplikasi. Silakan perbaiki perizinan. %s", "Archive does not contain a directory named %s" : "Arsip tidak berisi direktori yang bernama %s", - "No source specified when installing app" : "Tidak ada sumber yang ditentukan saat menginstal apl", - "No href specified when installing app from http" : "Href tidak ditentukan saat menginstal apl dari http", - "No path specified when installing app from local file" : "Lokasi tidak ditentukan saat menginstal apl dari berkas lokal", + "No source specified when installing app" : "Tidak ada sumber yang ditentukan saat menginstal Aplikasi", + "No href specified when installing app from http" : "Href tidak ditentukan saat menginstal Aplikasi dari http", + "No path specified when installing app from local file" : "Lokasi tidak ditentukan saat menginstal Aplikasi dari berkas lokal", "Archives of type %s are not supported" : "Arsip dengan tipe %s tidak didukung", - "Failed to open archive when installing app" : "Gagal membuka arsip saat menginstal apl", - "App does not provide an info.xml file" : "Apl tidak menyediakan berkas info.xml", - "App can't be installed because of not allowed code in the App" : "Apl tidak dapat diinstal karena terdapat kode yang tidak diizinkan didalam Apl", - "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Apl tidak dapat diinstal karena mengandung tag <shipped>true</shipped> yang tidak diizinkan untuk apl yang bukan bawaan.", + "Failed to open archive when installing app" : "Gagal membuka arsip saat menginstal Aplikasi", + "App does not provide an info.xml file" : "Aplikasi tidak menyediakan berkas info.xml", + "App cannot be installed because appinfo file cannot be read." : "Aplikasi tidak dapat dipasang karena berkas appinfo tidak dapat dibaca.", + "Signature could not get checked. Please contact the app developer and check your admin screen." : "Tandatangan tidak dapat dicek. Hubungi pengembang Aplikasi dan cek layar admin Anda.", + "App can't be installed because of not allowed code in the App" : "Aplikasi tidak dapat dipasang karena terdapat kode yang tidak diizinkan didalam Aplikasi", + "App can't be installed because it is not compatible with this version of the server" : "Aplikasi tidak dapat dipasang karena tidak kompatibel dengan versi server ini", + "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikasi tidak dapat dipasang karena mengandung tag <shipped>true</shipped> yang tidak diizinkan untuk Aplikasi yang bukan bawaan.", + "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikasi tidak dapat dipasang karena versi dalam info.xml tidak sama dengan versi yang ada dari toko aplikasi", + "%s enter the database username and name." : "%s masukkan nama pengguna database dan nama database.", "%s enter the database username." : "%s masukkan nama pengguna basis data.", "%s enter the database name." : "%s masukkan nama basis data.", "%s you may not use dots in the database name" : "%s anda tidak boleh menggunakan karakter titik pada nama basis data", @@ -77,6 +85,7 @@ OC.L10N.register( "Sharing %s failed, because %s is not a member of the group %s" : "Gagal membagikan %s, karena %s bukan anggota dari grup %s", "You need to provide a password to create a public link, only protected links are allowed" : "Anda perlu memberikan sandi untuk membuat tautan publik, hanya tautan yang terlindungi yang diizinkan", "Sharing %s failed, because sharing with links is not allowed" : "Gagal membagikan %s, karena berbag dengan tautan tidak diizinkan", + "Not allowed to create a federated share with the same user" : "Tidak diizinkan membuat pembagian terfederasi dengan pengguna yang sama", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Berbagi %s gagal, tidak menemukan %s, kemungkinan saat ini server tidak dapat dijangkau.", "Share type %s is not valid for %s" : "Barbagi tipe %s tidak sah untuk %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Pengaturan perizinan untuk %s gagal, karena karena izin melebihi izin yang diberikan untuk %s", @@ -92,37 +101,56 @@ OC.L10N.register( "Sharing %s failed, because resharing is not allowed" : "Gagal berbagi %s, karena membagikan ulang tidak diizinkan", "Sharing %s failed, because the sharing backend for %s could not find its source" : "Berbagi %s gagal, karena backend berbagi untuk %s tidak menemukan sumbernya", "Sharing %s failed, because the file could not be found in the file cache" : "Gagal berbagi %s, karena berkas tidak ditemukan di berkas cache", + "Cannot increase permissions of %s" : "Tidak dapat menambah izin %s", + "Files can't be shared with delete permissions" : "Berkas tidak dapat dibagikan dengan izin penghapusan", + "Files can't be shared with create permissions" : "Berkas tidak dapat dibagikan dengan izin pembuatan", + "Expiration date is in the past" : "Tanggal kedaluwarsa sudah lewat", + "Cannot set expiration date more than %s days in the future" : "Tidak dapat menyetel tanggal kedaluwarsa lebih dari %s hari di masa depan", "Could not find category \"%s\"" : "Tidak menemukan kategori \"%s\"", - "Apps" : "Aplikasi", + "Apps" : "aplikasi", + "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Hanya karakter ini yang diizinkan dalam nama pengguna: \"a-z\", \"A-Z\", \"0-9\", dan \"_.@-'\"", "A valid username must be provided" : "Tuliskan nama pengguna yang valid", + "Username contains whitespace at the beginning or at the end" : "Nama pengguna mengandung spasi di depan atau di belakang.", "A valid password must be provided" : "Tuliskan sandi yang valid", "The username is already being used" : "Nama pengguna ini telah digunakan", + "Login canceled by app" : "Log masuk dibatalkan oleh aplikasi", + "User disabled" : "Pengguna dinonaktifkan", + "Help" : "Bantuan", "Personal" : "Pribadi", "Users" : "Pengguna", "Admin" : "Admin", "Recommended" : "Direkomendasikan", - "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikasi \"%s\" tidak dapat diinstal karena dependensi berikut belum terpenuhi: %s", - "No app name specified" : "Tidak ada nama apl yang ditentukan", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikasi \"%s\" tidak dapat dipasang karena berkas appinfo tidak dapat dibaca.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikasi \"%s\" tidak dapat dipasang karena tidak kompatibel dengan versi server ini", + "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "aplikasi \"%s\" tidak dapat dipasang karena dependensi berikut belum terpenuhi: %s", + "No app name specified" : "Tidak ada nama Aplikasi yang ditentukan", + "App '%s' could not be installed!" : "Aplikasi '%s' tidak dapat dipasang!", + "a safe home for all your data" : "rumah yang aman untuk semua datamu", "File is currently busy, please try again later" : "Berkas sedang sibuk, mohon coba lagi nanti", "Can't read file" : "Tidak dapat membaca berkas", - "Application is not enabled" : "Aplikasi tidak diaktifkan", + "Application is not enabled" : "aplikasi tidak diaktifkan", "Authentication error" : "Galat saat otentikasi", "Token expired. Please reload page." : "Token sudah kedaluwarsa. Silakan muat ulang halaman.", "Unknown user" : "Pengguna tidak dikenal", "No database drivers (sqlite, mysql, or postgresql) installed." : "Tidak ada driver (sqlite, mysql, or postgresql) yang terinstal.", "Microsoft Windows Platform is not supported" : "Platform Microsoft Windows tidak didukung", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Menjalankan Nextcloud Server pada platform Microsoft Windows tidak didukung. Kami menyarankan Anda menggunakan server Linux di mesin virtual jika Anda tidak memiliki pilihan untuk migrasi server itu sendiri.", "Cannot write into \"config\" directory" : "Tidak dapat menulis kedalam direktori \"config\"", "Cannot write into \"apps\" directory" : "Tidak dapat menulis kedalam direktori \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori apps atau menonaktifkan toko aplikasi didalam berkas config.", "Cannot create \"data\" directory (%s)" : "Tidak dapat membuat direktori (%s) \"data\"", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Perizinan biasanya dapat diperbaiki dengan <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">memberikan akses tulis bagi situs web ke direktori root</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Perizinan biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori root.", "Setting locale to %s failed" : "Pengaturan lokal ke %s gagal", "Please install one of these locales on your system and restart your webserver." : "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.", "Please ask your server administrator to install the module." : "Mohon tanyakan administrator Anda untuk menginstal module.", "PHP module %s not installed." : "Module PHP %s tidak terinstal.", "PHP setting \"%s\" is not set to \"%s\"." : "Pengaturan PHP \"%s\" tidak diatur ke \"%s\".", + "Adjusting this setting in php.ini will make Nextcloud run again" : "Menyesuaikan pengaturan ini di php.ini akan membuat Nextcloud berjalan kembali", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload diatur menjadi \"%s\" bukan nilai yang diharapkan \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Untuk memperbaiki masalah ini, atur <code>mbstring.func_overload</code> menjadi <code>0</code> pada berkas php.ini Anda", + "libxml2 2.7.0 is at least required. Currently %s is installed." : "Setidaknya libxml2 2.7.0 dibutuhkan. Saat ini %s dipasang.", + "To fix this issue update your libxml2 version and restart your web server." : "Untuk mengatasi masalah ini, perbarui versi libxml2 Anda dan mulai-ulang server web Anda.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Tampaknya PHP diatur untuk memotong inline doc blocks. Hal ini akan menyebabkan beberapa aplikasi inti menjadi tidak dapat diakses.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?", @@ -136,6 +164,10 @@ OC.L10N.register( "Data directory (%s) is invalid" : "Direktori data (%s) tidak sah", "Please check that the data directory contains a file \".ocdata\" in its root." : "Mohon periksa apakah direktori data berisi sebuah berkas \".ocdata\" di direktori induknya.", "Could not obtain lock type %d on \"%s\"." : "Tidak bisa memperoleh jenis kunci %d pada \"%s\".", - "Storage not available" : "Penyimpanan tidak tersedia" + "Storage unauthorized. %s" : "Penyimpanan tidak terotorisasi. %s", + "Storage incomplete configuration. %s" : "Konfigurasi penyimpanan tidak terselesaikan. %s", + "Storage connection error. %s" : "Koneksi penyimpanan bermasalah. %s", + "Storage not available" : "Penyimpanan tidak tersedia", + "Storage connection timeout. %s" : "Koneksi penyimpanan waktu-habis. %s" }, "nplurals=1; plural=0;"); diff --git a/lib/l10n/id.json b/lib/l10n/id.json index 797d2382171..da6d1f848e6 100644 --- a/lib/l10n/id.json +++ b/lib/l10n/id.json @@ -7,12 +7,15 @@ "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" : "Ditemukan bahwa konfigurasi sampel telah disalin. Hal ini dapat merusak instalasi Anda dan tidak didukung. Silahkan baca dokumentasi sebelum melakukan perubahan pada config.php", "PHP %s or higher is required." : "Diperlukan PHP %s atau yang lebih tinggi.", "PHP with a version lower than %s is required." : "Diperlukan PHP dengan versi yang lebh rendah dari %s.", + "%sbit or higher PHP required." : "PHP %sbit atau yang lebih tinggi diperlukan.", "Following databases are supported: %s" : "Berikut adalah basis data yang didukung: %s", "The command line tool %s could not be found" : "Alat baris perintah %s tidak ditemukan", "The library %s is not available." : "Pustaka %s tidak tersedia.", "Library %s with a version higher than %s is required - available version %s." : "Diperlukan pustaka %s dengan versi yang lebih tinggi dari %s - versi yang tersedia %s.", "Library %s with a version lower than %s is required - available version %s." : "Diperlukan pustaka %s dengan versi yang lebih rendah dari %s - versi yang tersedia %s.", "Following platforms are supported: %s" : "Berikut adalah platform yang didukung: %s", + "Server version %s or higher is required." : "Server versi %s atau yang lebih tinggi diperlukan.", + "Server version %s or lower is required." : "Server versi %s atau yang lebih rendah diperlukan.", "Unknown filetype" : "Tipe berkas tak dikenal", "Invalid image" : "Gambar tidak sah", "today" : "hari ini", @@ -32,17 +35,22 @@ "File name is a reserved word" : "Nama berkas merupakan kata yang disediakan", "File name contains at least one invalid character" : "Nama berkas berisi setidaknya satu karakter yang tidak sah.", "File name is too long" : "Nama berkas terlalu panjang", - "App directory already exists" : "Direktori Apl sudah ada", - "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s", + "App directory already exists" : "Direktori Aplikasi sudah ada", + "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder Aplikasi. Silakan perbaiki perizinan. %s", "Archive does not contain a directory named %s" : "Arsip tidak berisi direktori yang bernama %s", - "No source specified when installing app" : "Tidak ada sumber yang ditentukan saat menginstal apl", - "No href specified when installing app from http" : "Href tidak ditentukan saat menginstal apl dari http", - "No path specified when installing app from local file" : "Lokasi tidak ditentukan saat menginstal apl dari berkas lokal", + "No source specified when installing app" : "Tidak ada sumber yang ditentukan saat menginstal Aplikasi", + "No href specified when installing app from http" : "Href tidak ditentukan saat menginstal Aplikasi dari http", + "No path specified when installing app from local file" : "Lokasi tidak ditentukan saat menginstal Aplikasi dari berkas lokal", "Archives of type %s are not supported" : "Arsip dengan tipe %s tidak didukung", - "Failed to open archive when installing app" : "Gagal membuka arsip saat menginstal apl", - "App does not provide an info.xml file" : "Apl tidak menyediakan berkas info.xml", - "App can't be installed because of not allowed code in the App" : "Apl tidak dapat diinstal karena terdapat kode yang tidak diizinkan didalam Apl", - "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Apl tidak dapat diinstal karena mengandung tag <shipped>true</shipped> yang tidak diizinkan untuk apl yang bukan bawaan.", + "Failed to open archive when installing app" : "Gagal membuka arsip saat menginstal Aplikasi", + "App does not provide an info.xml file" : "Aplikasi tidak menyediakan berkas info.xml", + "App cannot be installed because appinfo file cannot be read." : "Aplikasi tidak dapat dipasang karena berkas appinfo tidak dapat dibaca.", + "Signature could not get checked. Please contact the app developer and check your admin screen." : "Tandatangan tidak dapat dicek. Hubungi pengembang Aplikasi dan cek layar admin Anda.", + "App can't be installed because of not allowed code in the App" : "Aplikasi tidak dapat dipasang karena terdapat kode yang tidak diizinkan didalam Aplikasi", + "App can't be installed because it is not compatible with this version of the server" : "Aplikasi tidak dapat dipasang karena tidak kompatibel dengan versi server ini", + "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Aplikasi tidak dapat dipasang karena mengandung tag <shipped>true</shipped> yang tidak diizinkan untuk Aplikasi yang bukan bawaan.", + "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Aplikasi tidak dapat dipasang karena versi dalam info.xml tidak sama dengan versi yang ada dari toko aplikasi", + "%s enter the database username and name." : "%s masukkan nama pengguna database dan nama database.", "%s enter the database username." : "%s masukkan nama pengguna basis data.", "%s enter the database name." : "%s masukkan nama basis data.", "%s you may not use dots in the database name" : "%s anda tidak boleh menggunakan karakter titik pada nama basis data", @@ -75,6 +83,7 @@ "Sharing %s failed, because %s is not a member of the group %s" : "Gagal membagikan %s, karena %s bukan anggota dari grup %s", "You need to provide a password to create a public link, only protected links are allowed" : "Anda perlu memberikan sandi untuk membuat tautan publik, hanya tautan yang terlindungi yang diizinkan", "Sharing %s failed, because sharing with links is not allowed" : "Gagal membagikan %s, karena berbag dengan tautan tidak diizinkan", + "Not allowed to create a federated share with the same user" : "Tidak diizinkan membuat pembagian terfederasi dengan pengguna yang sama", "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Berbagi %s gagal, tidak menemukan %s, kemungkinan saat ini server tidak dapat dijangkau.", "Share type %s is not valid for %s" : "Barbagi tipe %s tidak sah untuk %s", "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Pengaturan perizinan untuk %s gagal, karena karena izin melebihi izin yang diberikan untuk %s", @@ -90,37 +99,56 @@ "Sharing %s failed, because resharing is not allowed" : "Gagal berbagi %s, karena membagikan ulang tidak diizinkan", "Sharing %s failed, because the sharing backend for %s could not find its source" : "Berbagi %s gagal, karena backend berbagi untuk %s tidak menemukan sumbernya", "Sharing %s failed, because the file could not be found in the file cache" : "Gagal berbagi %s, karena berkas tidak ditemukan di berkas cache", + "Cannot increase permissions of %s" : "Tidak dapat menambah izin %s", + "Files can't be shared with delete permissions" : "Berkas tidak dapat dibagikan dengan izin penghapusan", + "Files can't be shared with create permissions" : "Berkas tidak dapat dibagikan dengan izin pembuatan", + "Expiration date is in the past" : "Tanggal kedaluwarsa sudah lewat", + "Cannot set expiration date more than %s days in the future" : "Tidak dapat menyetel tanggal kedaluwarsa lebih dari %s hari di masa depan", "Could not find category \"%s\"" : "Tidak menemukan kategori \"%s\"", - "Apps" : "Aplikasi", + "Apps" : "aplikasi", + "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Hanya karakter ini yang diizinkan dalam nama pengguna: \"a-z\", \"A-Z\", \"0-9\", dan \"_.@-'\"", "A valid username must be provided" : "Tuliskan nama pengguna yang valid", + "Username contains whitespace at the beginning or at the end" : "Nama pengguna mengandung spasi di depan atau di belakang.", "A valid password must be provided" : "Tuliskan sandi yang valid", "The username is already being used" : "Nama pengguna ini telah digunakan", + "Login canceled by app" : "Log masuk dibatalkan oleh aplikasi", + "User disabled" : "Pengguna dinonaktifkan", + "Help" : "Bantuan", "Personal" : "Pribadi", "Users" : "Pengguna", "Admin" : "Admin", "Recommended" : "Direkomendasikan", - "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Aplikasi \"%s\" tidak dapat diinstal karena dependensi berikut belum terpenuhi: %s", - "No app name specified" : "Tidak ada nama apl yang ditentukan", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "Aplikasi \"%s\" tidak dapat dipasang karena berkas appinfo tidak dapat dibaca.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Aplikasi \"%s\" tidak dapat dipasang karena tidak kompatibel dengan versi server ini", + "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "aplikasi \"%s\" tidak dapat dipasang karena dependensi berikut belum terpenuhi: %s", + "No app name specified" : "Tidak ada nama Aplikasi yang ditentukan", + "App '%s' could not be installed!" : "Aplikasi '%s' tidak dapat dipasang!", + "a safe home for all your data" : "rumah yang aman untuk semua datamu", "File is currently busy, please try again later" : "Berkas sedang sibuk, mohon coba lagi nanti", "Can't read file" : "Tidak dapat membaca berkas", - "Application is not enabled" : "Aplikasi tidak diaktifkan", + "Application is not enabled" : "aplikasi tidak diaktifkan", "Authentication error" : "Galat saat otentikasi", "Token expired. Please reload page." : "Token sudah kedaluwarsa. Silakan muat ulang halaman.", "Unknown user" : "Pengguna tidak dikenal", "No database drivers (sqlite, mysql, or postgresql) installed." : "Tidak ada driver (sqlite, mysql, or postgresql) yang terinstal.", "Microsoft Windows Platform is not supported" : "Platform Microsoft Windows tidak didukung", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Menjalankan Nextcloud Server pada platform Microsoft Windows tidak didukung. Kami menyarankan Anda menggunakan server Linux di mesin virtual jika Anda tidak memiliki pilihan untuk migrasi server itu sendiri.", "Cannot write into \"config\" directory" : "Tidak dapat menulis kedalam direktori \"config\"", "Cannot write into \"apps\" directory" : "Tidak dapat menulis kedalam direktori \"apps\"", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Hal ini biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori apps atau menonaktifkan toko aplikasi didalam berkas config.", "Cannot create \"data\" directory (%s)" : "Tidak dapat membuat direktori (%s) \"data\"", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Perizinan biasanya dapat diperbaiki dengan <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">memberikan akses tulis bagi situs web ke direktori root</a>.", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Perizinan biasanya dapat diperbaiki dengan %s memberikan akses tulis bagi situs web ke %s direktori root.", "Setting locale to %s failed" : "Pengaturan lokal ke %s gagal", "Please install one of these locales on your system and restart your webserver." : "Mohon instal paling tidak satu lokal pada sistem Anda dan jalankan ulang server web.", "Please ask your server administrator to install the module." : "Mohon tanyakan administrator Anda untuk menginstal module.", "PHP module %s not installed." : "Module PHP %s tidak terinstal.", "PHP setting \"%s\" is not set to \"%s\"." : "Pengaturan PHP \"%s\" tidak diatur ke \"%s\".", + "Adjusting this setting in php.ini will make Nextcloud run again" : "Menyesuaikan pengaturan ini di php.ini akan membuat Nextcloud berjalan kembali", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload diatur menjadi \"%s\" bukan nilai yang diharapkan \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Untuk memperbaiki masalah ini, atur <code>mbstring.func_overload</code> menjadi <code>0</code> pada berkas php.ini Anda", + "libxml2 2.7.0 is at least required. Currently %s is installed." : "Setidaknya libxml2 2.7.0 dibutuhkan. Saat ini %s dipasang.", + "To fix this issue update your libxml2 version and restart your web server." : "Untuk mengatasi masalah ini, perbarui versi libxml2 Anda dan mulai-ulang server web Anda.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Tampaknya PHP diatur untuk memotong inline doc blocks. Hal ini akan menyebabkan beberapa aplikasi inti menjadi tidak dapat diakses.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "Modul PHP telah terinstal, tetapi mereka terlihat tidak ada?", @@ -134,6 +162,10 @@ "Data directory (%s) is invalid" : "Direktori data (%s) tidak sah", "Please check that the data directory contains a file \".ocdata\" in its root." : "Mohon periksa apakah direktori data berisi sebuah berkas \".ocdata\" di direktori induknya.", "Could not obtain lock type %d on \"%s\"." : "Tidak bisa memperoleh jenis kunci %d pada \"%s\".", - "Storage not available" : "Penyimpanan tidak tersedia" + "Storage unauthorized. %s" : "Penyimpanan tidak terotorisasi. %s", + "Storage incomplete configuration. %s" : "Konfigurasi penyimpanan tidak terselesaikan. %s", + "Storage connection error. %s" : "Koneksi penyimpanan bermasalah. %s", + "Storage not available" : "Penyimpanan tidak tersedia", + "Storage connection timeout. %s" : "Koneksi penyimpanan waktu-habis. %s" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/lib/l10n/it.js b/lib/l10n/it.js index bf042a58286..9be3da55090 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "Il nome utente è già utilizzato", "Login canceled by app" : "Accesso annullato dall'applicazione", "User disabled" : "Utente disabilitato", + "Help" : "Aiuto", "Personal" : "Personale", "Users" : "Utenti", "Admin" : "Admin", @@ -123,6 +124,7 @@ OC.L10N.register( "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'applicazione \"%s\" non può essere installata perché non è compatibile con questa versione del server.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "L'applicazione \"%s\" non può essere installata poiché le seguenti dipendenze non sono soddisfatte: %s", "No app name specified" : "Il nome dell'applicazione non è specificato", + "App '%s' could not be installed!" : "L'applicazione '%s' non può essere installata!", "a safe home for all your data" : "un posto sicuro per tutti i tuoi dati", "File is currently busy, please try again later" : "Il file è attualmente occupato, riprova più tardi", "Can't read file" : "Impossibile leggere il file", diff --git a/lib/l10n/it.json b/lib/l10n/it.json index 5e04cc1003e..20bc25cb21d 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -113,6 +113,7 @@ "The username is already being used" : "Il nome utente è già utilizzato", "Login canceled by app" : "Accesso annullato dall'applicazione", "User disabled" : "Utente disabilitato", + "Help" : "Aiuto", "Personal" : "Personale", "Users" : "Utenti", "Admin" : "Admin", @@ -121,6 +122,7 @@ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "L'applicazione \"%s\" non può essere installata perché non è compatibile con questa versione del server.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "L'applicazione \"%s\" non può essere installata poiché le seguenti dipendenze non sono soddisfatte: %s", "No app name specified" : "Il nome dell'applicazione non è specificato", + "App '%s' could not be installed!" : "L'applicazione '%s' non può essere installata!", "a safe home for all your data" : "un posto sicuro per tutti i tuoi dati", "File is currently busy, please try again later" : "Il file è attualmente occupato, riprova più tardi", "Can't read file" : "Impossibile leggere il file", diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js index c35b5554267..623a6e58af6 100644 --- a/lib/l10n/nl.js +++ b/lib/l10n/nl.js @@ -35,7 +35,7 @@ OC.L10N.register( "Dot files are not allowed" : "Punt bestanden zijn niet toegestaan", "4-byte characters are not supported in file names" : "4-byte tekens in bestandsnamen worden niet ondersteund", "File name is a reserved word" : "Bestandsnaam is een gereserveerd woord", - "File name contains at least one invalid character" : "De bestandsnaam bevat ten minste één verboden teken", + "File name contains at least one invalid character" : "De bestandsnaam bevat in ieder geval één verboden teken", "File name is too long" : "De bestandsnaam is te lang", "App directory already exists" : "App directory bestaat al", "Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s", @@ -71,11 +71,11 @@ OC.L10N.register( "Set an admin password." : "Stel een beheerderswachtwoord in.", "Can't create or write into the data directory %s" : "Kan niets creëren of wegschrijven in datadirectory %s", "Invalid Federated Cloud ID" : "Ongeldige Federated Cloud ID", - "%s shared »%s« with you" : "%s deelde »%s« met u", + "%s shared »%s« with you" : "%s deelde »%s« met jou", "%s via %s" : "%s via %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Delen van %s is mislukt, omdat de share-backend niet toestaat om type %i te delen", "Sharing %s failed, because the file does not exist" : "Delen van %s is mislukt, omdat het bestand niet bestaat", - "You are not allowed to share %s" : "U bent niet bevoegd om %s te delen", + "You are not allowed to share %s" : "Je bent niet bevoegd om %s te delen", "Sharing %s failed, because you can not share with yourself" : "Delen van %s is mislukt, omdat je niet met jezelf kan delen", "Sharing %s failed, because the user %s does not exist" : "Delen van %s is mislukt, omdat gebruiker %s niet bestaat", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Delen van %s is mislukt, omdat gebruiker %s geen lid is van een groep waar %s lid van is", @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "De gebruikersnaam bestaat al", "Login canceled by app" : "Inloggen geannuleerd door app", "User disabled" : "Gebruiker gedeactiveerd", + "Help" : "Help", "Personal" : "Persoonlijk", "Users" : "Gebruikers", "Admin" : "Beheerder", @@ -149,17 +150,17 @@ OC.L10N.register( "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload is ingesteld op \"%s\" in plaats van op de verwachte waarde \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Om dit op te lossen stel <code>mbstring.func_overload</code> in op <code>0</code> in uw php.ini", "libxml2 2.7.0 is at least required. Currently %s is installed." : "De laagste toegestane libxml2 versie is 2.7.0. Momenteel is %s is geïnstalleerd.", - "To fix this issue update your libxml2 version and restart your web server." : "Om dit te herstellen, moet u de libxml2 versie bijwerken en uw webserver herstarten.", + "To fix this issue update your libxml2 version and restart your web server." : "Om dit te herstellen, moet je de libxml2 versie bijwerken en je webserver herstarten.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP modules zijn geïnstalleerd, maar worden ze nog steeds als ontbrekend aangegeven?", - "Please ask your server administrator to restart the web server." : "Vraag uw beheerder de webserver opnieuw op te starten.", + "Please ask your server administrator to restart the web server." : "Vraag je beheerder de webserver opnieuw op te starten.", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 vereist", - "Please upgrade your database version" : "Werk uw database versie bij", + "Please upgrade your database version" : "Werk je databaseversie bij", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Wijzig de permissies in 0770 zodat de directory niet door anderen bekeken kan worden.", "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers", "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben", - "Check the value of \"datadirectory\" in your configuration" : "Controleer de waarde van \"datadirectory\" in uw configuratie", + "Check the value of \"datadirectory\" in your configuration" : "Controleer de waarde van \"datadirectory\" in je configuratie", "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifieer dat de data directory een bestand \".ocdata\" in de hoofdmap heeft.", "Could not obtain lock type %d on \"%s\"." : "Kon geen lock type %d krijgen op \"%s\".", diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json index f5906e1e75e..854613ef33f 100644 --- a/lib/l10n/nl.json +++ b/lib/l10n/nl.json @@ -33,7 +33,7 @@ "Dot files are not allowed" : "Punt bestanden zijn niet toegestaan", "4-byte characters are not supported in file names" : "4-byte tekens in bestandsnamen worden niet ondersteund", "File name is a reserved word" : "Bestandsnaam is een gereserveerd woord", - "File name contains at least one invalid character" : "De bestandsnaam bevat ten minste één verboden teken", + "File name contains at least one invalid character" : "De bestandsnaam bevat in ieder geval één verboden teken", "File name is too long" : "De bestandsnaam is te lang", "App directory already exists" : "App directory bestaat al", "Can't create app folder. Please fix permissions. %s" : "Kan de app map niet aanmaken, Herstel de permissies. %s", @@ -69,11 +69,11 @@ "Set an admin password." : "Stel een beheerderswachtwoord in.", "Can't create or write into the data directory %s" : "Kan niets creëren of wegschrijven in datadirectory %s", "Invalid Federated Cloud ID" : "Ongeldige Federated Cloud ID", - "%s shared »%s« with you" : "%s deelde »%s« met u", + "%s shared »%s« with you" : "%s deelde »%s« met jou", "%s via %s" : "%s via %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Delen van %s is mislukt, omdat de share-backend niet toestaat om type %i te delen", "Sharing %s failed, because the file does not exist" : "Delen van %s is mislukt, omdat het bestand niet bestaat", - "You are not allowed to share %s" : "U bent niet bevoegd om %s te delen", + "You are not allowed to share %s" : "Je bent niet bevoegd om %s te delen", "Sharing %s failed, because you can not share with yourself" : "Delen van %s is mislukt, omdat je niet met jezelf kan delen", "Sharing %s failed, because the user %s does not exist" : "Delen van %s is mislukt, omdat gebruiker %s niet bestaat", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Delen van %s is mislukt, omdat gebruiker %s geen lid is van een groep waar %s lid van is", @@ -113,6 +113,7 @@ "The username is already being used" : "De gebruikersnaam bestaat al", "Login canceled by app" : "Inloggen geannuleerd door app", "User disabled" : "Gebruiker gedeactiveerd", + "Help" : "Help", "Personal" : "Persoonlijk", "Users" : "Gebruikers", "Admin" : "Beheerder", @@ -147,17 +148,17 @@ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload is ingesteld op \"%s\" in plaats van op de verwachte waarde \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Om dit op te lossen stel <code>mbstring.func_overload</code> in op <code>0</code> in uw php.ini", "libxml2 2.7.0 is at least required. Currently %s is installed." : "De laagste toegestane libxml2 versie is 2.7.0. Momenteel is %s is geïnstalleerd.", - "To fix this issue update your libxml2 version and restart your web server." : "Om dit te herstellen, moet u de libxml2 versie bijwerken en uw webserver herstarten.", + "To fix this issue update your libxml2 version and restart your web server." : "Om dit te herstellen, moet je de libxml2 versie bijwerken en je webserver herstarten.", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.", "PHP modules have been installed, but they are still listed as missing?" : "PHP modules zijn geïnstalleerd, maar worden ze nog steeds als ontbrekend aangegeven?", - "Please ask your server administrator to restart the web server." : "Vraag uw beheerder de webserver opnieuw op te starten.", + "Please ask your server administrator to restart the web server." : "Vraag je beheerder de webserver opnieuw op te starten.", "PostgreSQL >= 9 required" : "PostgreSQL >= 9 vereist", - "Please upgrade your database version" : "Werk uw database versie bij", + "Please upgrade your database version" : "Werk je databaseversie bij", "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Wijzig de permissies in 0770 zodat de directory niet door anderen bekeken kan worden.", "Data directory (%s) is readable by other users" : "De datadirectory (%s) is leesbaar voor andere gebruikers", "Data directory (%s) must be an absolute path" : "De datadirectory (%s) moet een absoluut pad hebben", - "Check the value of \"datadirectory\" in your configuration" : "Controleer de waarde van \"datadirectory\" in uw configuratie", + "Check the value of \"datadirectory\" in your configuration" : "Controleer de waarde van \"datadirectory\" in je configuratie", "Data directory (%s) is invalid" : "Data directory (%s) is ongeldig", "Please check that the data directory contains a file \".ocdata\" in its root." : "Verifieer dat de data directory een bestand \".ocdata\" in de hoofdmap heeft.", "Could not obtain lock type %d on \"%s\"." : "Kon geen lock type %d krijgen op \"%s\".", diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js index 439ca4360c5..2321fb82da2 100644 --- a/lib/l10n/pt_BR.js +++ b/lib/l10n/pt_BR.js @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "Este nome de usuário já está sendo usado", "Login canceled by app" : "Login cancelado pelo aplicativo", "User disabled" : "Usuário desativado", + "Help" : "Ajuda", "Personal" : "Pessoal", "Users" : "Usuários", "Admin" : "Admin", diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json index 3806bdb4c3f..980756257ff 100644 --- a/lib/l10n/pt_BR.json +++ b/lib/l10n/pt_BR.json @@ -113,6 +113,7 @@ "The username is already being used" : "Este nome de usuário já está sendo usado", "Login canceled by app" : "Login cancelado pelo aplicativo", "User disabled" : "Usuário desativado", + "Help" : "Ajuda", "Personal" : "Pessoal", "Users" : "Usuários", "Admin" : "Admin", diff --git a/lib/l10n/ru.js b/lib/l10n/ru.js index 7b34d758c49..0ea76e4ba6f 100644 --- a/lib/l10n/ru.js +++ b/lib/l10n/ru.js @@ -115,6 +115,7 @@ OC.L10N.register( "The username is already being used" : "Имя пользователя уже используется", "Login canceled by app" : "Вход отменен приложением", "User disabled" : "Пользователь отключен", + "Help" : "Помощь", "Personal" : "Личное", "Users" : "Пользователи", "Admin" : "Администрирование", @@ -123,6 +124,7 @@ OC.L10N.register( "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Приложение \"%s\" не может быть установлено, потому что оно несовместимо с этой версией сервера", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Приложение \"%s\" не может быть установлено, так как следующие зависимости не выполнены: %s", "No app name specified" : "Не указано имя приложения", + "App '%s' could not be installed!" : "Приложение '%s' не может быть установлено!", "a safe home for all your data" : "надежный дом для ваших файлов", "File is currently busy, please try again later" : "Файл в данный момент используется, повторите попытку позже.", "Can't read file" : "Не удается прочитать файл", @@ -144,6 +146,7 @@ OC.L10N.register( "Please ask your server administrator to install the module." : "Пожалуйста, попростите администратора сервера установить модуль.", "PHP module %s not installed." : "Не установлен PHP-модуль %s.", "PHP setting \"%s\" is not set to \"%s\"." : "Параметр PHP \"%s\" не установлен в \"%s\".", + "Adjusting this setting in php.ini will make Nextcloud run again" : "Настройка этого параметра в php.ini поможет Nextcloud работать снова", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload установлен в \"%s\", при этом требуется \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Чтобы исправить эту проблему установите параметр <code>mbstring.func_overload</code> в значение <code>0</code> в php.ini", "libxml2 2.7.0 is at least required. Currently %s is installed." : "Требуется как минимум libxml2 версии 2.7.0. На данный момент установлена %s.", diff --git a/lib/l10n/ru.json b/lib/l10n/ru.json index 3e3c860e72a..210146675d9 100644 --- a/lib/l10n/ru.json +++ b/lib/l10n/ru.json @@ -113,6 +113,7 @@ "The username is already being used" : "Имя пользователя уже используется", "Login canceled by app" : "Вход отменен приложением", "User disabled" : "Пользователь отключен", + "Help" : "Помощь", "Personal" : "Личное", "Users" : "Пользователи", "Admin" : "Администрирование", @@ -121,6 +122,7 @@ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Приложение \"%s\" не может быть установлено, потому что оно несовместимо с этой версией сервера", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "Приложение \"%s\" не может быть установлено, так как следующие зависимости не выполнены: %s", "No app name specified" : "Не указано имя приложения", + "App '%s' could not be installed!" : "Приложение '%s' не может быть установлено!", "a safe home for all your data" : "надежный дом для ваших файлов", "File is currently busy, please try again later" : "Файл в данный момент используется, повторите попытку позже.", "Can't read file" : "Не удается прочитать файл", @@ -142,6 +144,7 @@ "Please ask your server administrator to install the module." : "Пожалуйста, попростите администратора сервера установить модуль.", "PHP module %s not installed." : "Не установлен PHP-модуль %s.", "PHP setting \"%s\" is not set to \"%s\"." : "Параметр PHP \"%s\" не установлен в \"%s\".", + "Adjusting this setting in php.ini will make Nextcloud run again" : "Настройка этого параметра в php.ini поможет Nextcloud работать снова", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload установлен в \"%s\", при этом требуется \"0\"", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Чтобы исправить эту проблему установите параметр <code>mbstring.func_overload</code> в значение <code>0</code> в php.ini", "libxml2 2.7.0 is at least required. Currently %s is installed." : "Требуется как минимум libxml2 версии 2.7.0. На данный момент установлена %s.", diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js index f255cd9fa25..8697ebc8bdb 100644 --- a/lib/l10n/tr.js +++ b/lib/l10n/tr.js @@ -9,12 +9,15 @@ OC.L10N.register( "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" : "Örnek yapılandırmanın kopyalanmış olabileceği tespit edildi. Bu kurulumunuzu bozabilir ve desteklenmemektedir. Lütfen config.php dosyasında değişiklik yapmadan önce belgelendirmeyi okuyun", "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.", "PHP with a version lower than %s is required." : "PHP'nin %s sürümü öncesi gerekli.", + "%sbit or higher PHP required." : "%sbit veya daha üzeri PHP sürümü gereklidir.", "Following databases are supported: %s" : "Şu veritabanları desteklenmekte: %s", "The command line tool %s could not be found" : "Komut satırı aracı %s bulunamadı", "The library %s is not available." : "%s kütüphanesi mevcut değil.", "Library %s with a version higher than %s is required - available version %s." : "%s kütüphanesinin %s sürümünden daha yüksek sürümü gerekli - kullanılabilir sürüm %s.", "Library %s with a version lower than %s is required - available version %s." : "%s kütüphanesinin %s sürümünden daha düşük sürümü gerekli - kullanılabilir sürüm %s.", "Following platforms are supported: %s" : "Aşağıdaki platformlar destekleniyor: %s", + "Server version %s or higher is required." : "Sunucu sürümü %s veya daha üzeri olmalıdır.", + "Server version %s or lower is required." : "Sunucu sürümü %s veya daha altı olmalıdır.", "Unknown filetype" : "Bilinmeyen dosya türü", "Invalid image" : "Geçersiz resim", "today" : "bugün", @@ -46,6 +49,7 @@ OC.L10N.register( "App cannot be installed because appinfo file cannot be read." : "uygulama yüklenemiyor çünkü appinfo dosyası okunamıyor.", "Signature could not get checked. Please contact the app developer and check your admin screen." : "İmza denetlenemedi. Lütfen uygulama yöneticisi ile iletişime geçin ve yönetici ekranınıza bakın.", "App can't be installed because of not allowed code in the App" : "Uygulama, izin verilmeyen kodlar barındırdığından kurulamıyor", + "App can't be installed because it is not compatible with this version of the server" : "Sunucu sürümüyle uyumlu olmadığından uygulama yüklenemez.", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Uygulama, birlikte gelmeyen uygulama olmasına rağmen <shipped>true</shipped> etiketi içerdiği için kurulamıyor", "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Uygulama info.xml içindeki sürüm ile uygulama marketinde belirtilen sürüm aynı olmadığından kurulamıyor", "%s enter the database username and name." : "%s veritabanı adı ve kullanıcı adını girin.", @@ -98,6 +102,8 @@ OC.L10N.register( "Sharing %s failed, because the sharing backend for %s could not find its source" : "%s paylaşımı, %s için arka ucun kaynağını bulamamasından dolayı başarısız oldu", "Sharing %s failed, because the file could not be found in the file cache" : "%s paylaşımı, dosyanın dosya önbelleğinde bulunamamasınndan dolayı başarısız oldu", "Cannot increase permissions of %s" : "%s izinleri yükseltilemiyor", + "Files can't be shared with delete permissions" : "Dosyalar silme izniyle paylaşılamaz", + "Files can't be shared with create permissions" : "Dosyalar oluşturma izniyle paylaşılamaz", "Expiration date is in the past" : "Son kullanma tarihi geçmişte", "Cannot set expiration date more than %s days in the future" : "Paylaşımların son kullanım süreleri, gelecekte %s günden fazla olamaz", "Could not find category \"%s\"" : "\"%s\" kategorisi bulunamadı", @@ -107,12 +113,19 @@ OC.L10N.register( "Username contains whitespace at the beginning or at the end" : "Kullanıcı adı başlangıç veya sonda boşluk içeriyor", "A valid password must be provided" : "Geçerli bir parola mutlaka sağlanmalı", "The username is already being used" : "Bu kullanıcı adı zaten kullanımda", + "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi", + "User disabled" : "Kullanıcı devre dışı", + "Help" : "Yardım", "Personal" : "Kişisel", "Users" : "Kullanıcılar", "Admin" : "Yönetici", "Recommended" : "Önerilen", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "\"%s\" uygulaması yüklenemiyor çünkü appinfo dosyası okunamıyor.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Sunucu sürümüyle uyumlu olmadığından \"%s\" uygulaması yüklenemez.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu bağımlılıklar sağlanmadığı için yüklenemiyor: %s", "No app name specified" : "Uygulama adı belirtilmedi", + "App '%s' could not be installed!" : "'%s' uygulaması kurulamadı!", + "a safe home for all your data" : "tüm verileriniz için güvenli bir yer", "File is currently busy, please try again later" : "Dosya şu anda meşgul, lütfen daha sonra deneyin", "Can't read file" : "Dosya okunamıyor", "Application is not enabled" : "Uygulama etkin değil", @@ -121,6 +134,7 @@ OC.L10N.register( "Unknown user" : "Bilinmeyen kullanıcı", "No database drivers (sqlite, mysql, or postgresql) installed." : "Yüklü veritabanı sürücüsü (sqlite, mysql veya postgresql) yok.", "Microsoft Windows Platform is not supported" : "Microsoft Windows Platformu desteklenmiyor", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Nextcloud Sunucusunu Microsoft Windows platformunda çalıştırmak desteklenmiyor. Sunucunun kendisini değiştiremiyorsanız üzerinde bir Linux sanal makine kullanmanızı öneririz.", "Cannot write into \"config\" directory" : "\"config\" dizinine yazılamıyor", "Cannot write into \"apps\" directory" : "\"apps\" dizinine yazılamıyor", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Bu genellikle, %sweb sunucusuna apps dizinine yazma erişimi verilerek%s veya yapılandırma dosyasında appstore (uygulama mağazası) devre dışı bırakılarak çözülebilir.", @@ -132,6 +146,7 @@ OC.L10N.register( "Please ask your server administrator to install the module." : "Lütfen modülün kurulması için sunucu yöneticinize danışın.", "PHP module %s not installed." : "PHP modülü %s yüklü değil.", "PHP setting \"%s\" is not set to \"%s\"." : "PHP ayarı \"%s\", \"%s\" olarak ayarlanmamış.", + "Adjusting this setting in php.ini will make Nextcloud run again" : "Bu ayarı php.ini dosyasında yapmak Nextcloud'u yeniden çalıştıracaktır", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload, beklenen \"0\" değerinin aksine \"%s\" olarak ayarlanmış", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Bu hatayı düzeltmek için php.ini içerisindeki <code>mbstring.func_overload</code> ayarını <code>0</code> olarak ayarlayın", "libxml2 2.7.0 is at least required. Currently %s is installed." : "En düşük libxml2 2.7.0 gerekli. Şu anda %s kurulu.", diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json index 365b8ddc6c4..1ab48d38080 100644 --- a/lib/l10n/tr.json +++ b/lib/l10n/tr.json @@ -7,12 +7,15 @@ "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" : "Örnek yapılandırmanın kopyalanmış olabileceği tespit edildi. Bu kurulumunuzu bozabilir ve desteklenmemektedir. Lütfen config.php dosyasında değişiklik yapmadan önce belgelendirmeyi okuyun", "PHP %s or higher is required." : "PHP %s veya daha üst sürümü gerekli.", "PHP with a version lower than %s is required." : "PHP'nin %s sürümü öncesi gerekli.", + "%sbit or higher PHP required." : "%sbit veya daha üzeri PHP sürümü gereklidir.", "Following databases are supported: %s" : "Şu veritabanları desteklenmekte: %s", "The command line tool %s could not be found" : "Komut satırı aracı %s bulunamadı", "The library %s is not available." : "%s kütüphanesi mevcut değil.", "Library %s with a version higher than %s is required - available version %s." : "%s kütüphanesinin %s sürümünden daha yüksek sürümü gerekli - kullanılabilir sürüm %s.", "Library %s with a version lower than %s is required - available version %s." : "%s kütüphanesinin %s sürümünden daha düşük sürümü gerekli - kullanılabilir sürüm %s.", "Following platforms are supported: %s" : "Aşağıdaki platformlar destekleniyor: %s", + "Server version %s or higher is required." : "Sunucu sürümü %s veya daha üzeri olmalıdır.", + "Server version %s or lower is required." : "Sunucu sürümü %s veya daha altı olmalıdır.", "Unknown filetype" : "Bilinmeyen dosya türü", "Invalid image" : "Geçersiz resim", "today" : "bugün", @@ -44,6 +47,7 @@ "App cannot be installed because appinfo file cannot be read." : "uygulama yüklenemiyor çünkü appinfo dosyası okunamıyor.", "Signature could not get checked. Please contact the app developer and check your admin screen." : "İmza denetlenemedi. Lütfen uygulama yöneticisi ile iletişime geçin ve yönetici ekranınıza bakın.", "App can't be installed because of not allowed code in the App" : "Uygulama, izin verilmeyen kodlar barındırdığından kurulamıyor", + "App can't be installed because it is not compatible with this version of the server" : "Sunucu sürümüyle uyumlu olmadığından uygulama yüklenemez.", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Uygulama, birlikte gelmeyen uygulama olmasına rağmen <shipped>true</shipped> etiketi içerdiği için kurulamıyor", "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Uygulama info.xml içindeki sürüm ile uygulama marketinde belirtilen sürüm aynı olmadığından kurulamıyor", "%s enter the database username and name." : "%s veritabanı adı ve kullanıcı adını girin.", @@ -96,6 +100,8 @@ "Sharing %s failed, because the sharing backend for %s could not find its source" : "%s paylaşımı, %s için arka ucun kaynağını bulamamasından dolayı başarısız oldu", "Sharing %s failed, because the file could not be found in the file cache" : "%s paylaşımı, dosyanın dosya önbelleğinde bulunamamasınndan dolayı başarısız oldu", "Cannot increase permissions of %s" : "%s izinleri yükseltilemiyor", + "Files can't be shared with delete permissions" : "Dosyalar silme izniyle paylaşılamaz", + "Files can't be shared with create permissions" : "Dosyalar oluşturma izniyle paylaşılamaz", "Expiration date is in the past" : "Son kullanma tarihi geçmişte", "Cannot set expiration date more than %s days in the future" : "Paylaşımların son kullanım süreleri, gelecekte %s günden fazla olamaz", "Could not find category \"%s\"" : "\"%s\" kategorisi bulunamadı", @@ -105,12 +111,19 @@ "Username contains whitespace at the beginning or at the end" : "Kullanıcı adı başlangıç veya sonda boşluk içeriyor", "A valid password must be provided" : "Geçerli bir parola mutlaka sağlanmalı", "The username is already being used" : "Bu kullanıcı adı zaten kullanımda", + "Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi", + "User disabled" : "Kullanıcı devre dışı", + "Help" : "Yardım", "Personal" : "Kişisel", "Users" : "Kullanıcılar", "Admin" : "Yönetici", "Recommended" : "Önerilen", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "\"%s\" uygulaması yüklenemiyor çünkü appinfo dosyası okunamıyor.", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Sunucu sürümüyle uyumlu olmadığından \"%s\" uygulaması yüklenemez.", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu bağımlılıklar sağlanmadığı için yüklenemiyor: %s", "No app name specified" : "Uygulama adı belirtilmedi", + "App '%s' could not be installed!" : "'%s' uygulaması kurulamadı!", + "a safe home for all your data" : "tüm verileriniz için güvenli bir yer", "File is currently busy, please try again later" : "Dosya şu anda meşgul, lütfen daha sonra deneyin", "Can't read file" : "Dosya okunamıyor", "Application is not enabled" : "Uygulama etkin değil", @@ -119,6 +132,7 @@ "Unknown user" : "Bilinmeyen kullanıcı", "No database drivers (sqlite, mysql, or postgresql) installed." : "Yüklü veritabanı sürücüsü (sqlite, mysql veya postgresql) yok.", "Microsoft Windows Platform is not supported" : "Microsoft Windows Platformu desteklenmiyor", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Nextcloud Sunucusunu Microsoft Windows platformunda çalıştırmak desteklenmiyor. Sunucunun kendisini değiştiremiyorsanız üzerinde bir Linux sanal makine kullanmanızı öneririz.", "Cannot write into \"config\" directory" : "\"config\" dizinine yazılamıyor", "Cannot write into \"apps\" directory" : "\"apps\" dizinine yazılamıyor", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Bu genellikle, %sweb sunucusuna apps dizinine yazma erişimi verilerek%s veya yapılandırma dosyasında appstore (uygulama mağazası) devre dışı bırakılarak çözülebilir.", @@ -130,6 +144,7 @@ "Please ask your server administrator to install the module." : "Lütfen modülün kurulması için sunucu yöneticinize danışın.", "PHP module %s not installed." : "PHP modülü %s yüklü değil.", "PHP setting \"%s\" is not set to \"%s\"." : "PHP ayarı \"%s\", \"%s\" olarak ayarlanmamış.", + "Adjusting this setting in php.ini will make Nextcloud run again" : "Bu ayarı php.ini dosyasında yapmak Nextcloud'u yeniden çalıştıracaktır", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload, beklenen \"0\" değerinin aksine \"%s\" olarak ayarlanmış", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Bu hatayı düzeltmek için php.ini içerisindeki <code>mbstring.func_overload</code> ayarını <code>0</code> olarak ayarlayın", "libxml2 2.7.0 is at least required. Currently %s is installed." : "En düşük libxml2 2.7.0 gerekli. Şu anda %s kurulu.", diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js index 9f1661e813a..bf9f98219d9 100644 --- a/lib/l10n/zh_TW.js +++ b/lib/l10n/zh_TW.js @@ -9,12 +9,15 @@ OC.L10N.register( "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "看來您直接複製了範本設定來使用,這可能會毀掉你的安裝,請閱讀說明文件後對 config.php 進行適當的修改", "PHP %s or higher is required." : "需要 PHP %s 或更高版本", "PHP with a version lower than %s is required." : "需要 PHP 版本低於 %s ", + "%sbit or higher PHP required." : "%s 或需要更高階版本的php", "Following databases are supported: %s" : "這些資料庫支援: %s", "The command line tool %s could not be found" : "無法找到命令提示位元工具 %s", "The library %s is not available." : "套件庫 %s 無法使用", "Library %s with a version higher than %s is required - available version %s." : "需要套件庫 %s 版本高於 %s - 可使用的版本是 %s", "Library %s with a version lower than %s is required - available version %s." : "需要套件庫 %s 版本低於 %s - 可使用的版本是 %s", "Following platforms are supported: %s" : "這些平台支援: %s", + "Server version %s or higher is required." : "需要伺服器版本 %s 或更高階版本", + "Server version %s or lower is required." : "需要伺服器版本 %s 或更低階版本", "Unknown filetype" : "未知的檔案類型", "Invalid image" : "無效的圖片", "today" : "今天", @@ -36,15 +39,20 @@ OC.L10N.register( "File name is too long" : "檔案名稱太長", "App directory already exists" : "應用程式目錄已經存在", "Can't create app folder. Please fix permissions. %s" : "無法建立應用程式目錄,請檢查權限:%s", + "Archive does not contain a directory named %s" : "檔案文件未包含目錄名稱 %s", "No source specified when installing app" : "沒有指定應用程式安裝來源", "No href specified when installing app from http" : "從 http 安裝應用程式,找不到 href 屬性", "No path specified when installing app from local file" : "從本地檔案安裝應用程式時沒有指定路徑", "Archives of type %s are not supported" : "不支援 %s 格式的壓縮檔", "Failed to open archive when installing app" : "安裝應用程式時無法開啓壓縮檔", "App does not provide an info.xml file" : "應用程式沒有提供 info.xml 檔案", + "App cannot be installed because appinfo file cannot be read." : "程式無法安裝,因為無法讀取appinfo檔案。", "Signature could not get checked. Please contact the app developer and check your admin screen." : "無法驗證數位簽章,請聯絡 app 開發者,並檢查您的管理頁面", "App can't be installed because of not allowed code in the App" : "無法安裝應用程式因為在當中找到危險的代碼", + "App can't be installed because it is not compatible with this version of the server" : "程式無法安裝,因為伺服器版本不符。", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "無法安裝應用程式,因為它包含了 <shipped>true</shipped> 標籤,在未發行的應用程式當中這是不允許的", + "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "程式無法安裝,因為info.xml檔案中版本與app商店中要求不同。", + "%s enter the database username and name." : "%s 輸入資料庫名稱及使用者名稱", "%s enter the database username." : "%s 輸入資料庫使用者名稱。", "%s enter the database name." : "%s 輸入資料庫名稱。", "%s you may not use dots in the database name" : "%s 資料庫名稱不能包含小數點", @@ -94,6 +102,8 @@ OC.L10N.register( "Sharing %s failed, because the sharing backend for %s could not find its source" : "分享 %s 失敗,因為 %s 的分享後端找不到它的來源", "Sharing %s failed, because the file could not be found in the file cache" : "分享 %s 失敗,因為在快取中找不到該檔案", "Cannot increase permissions of %s" : "無法增加%s的權限", + "Files can't be shared with delete permissions" : "無法分享具有刪除權限的檔案", + "Files can't be shared with create permissions" : "無法分享具有新建權限的檔案", "Expiration date is in the past" : "到期日是之前的時間", "Cannot set expiration date more than %s days in the future" : "無法設定到期日超過未來%s天", "Could not find category \"%s\"" : "找不到分類:\"%s\"", @@ -103,12 +113,19 @@ OC.L10N.register( "Username contains whitespace at the beginning or at the end" : "使用者名詞的開頭或結尾有空白", "A valid password must be provided" : "一定要提供一個有效的密碼", "The username is already being used" : "這個使用者名稱已經有人使用了", + "Login canceled by app" : "程式取消登入", + "User disabled" : "使用者取消", + "Help" : "說明", "Personal" : "個人", "Users" : "使用者", "Admin" : "管理", "Recommended" : "建議", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "程式\"%s\"無法安裝,因為無法讀取appinfo檔案。", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "程式\"%s\"無法安裝,因為伺服器版本不符。", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "應用程式 \"%s\" 無法被安裝,下列的相依性並不是完整的: %s", "No app name specified" : "沒有指定應用程式名稱", + "App '%s' could not be installed!" : "程式\"%s\"無法安裝。", + "a safe home for all your data" : "您資料的安全屋", "File is currently busy, please try again later" : "檔案目前忙碌中,請稍候再試", "Can't read file" : "無法讀取檔案", "Application is not enabled" : "應用程式未啟用", @@ -117,18 +134,23 @@ OC.L10N.register( "Unknown user" : "未知的使用者", "No database drivers (sqlite, mysql, or postgresql) installed." : "沒有安裝資料庫驅動程式 (sqlite, mysql, 或 postgresql)", "Microsoft Windows Platform is not supported" : "不支援微軟Windows系統", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "微軟Windows不支援Nextcloud伺服器,如果您一定要使用,我們建議您在虛擬機中安裝Linux版本伺服器。", "Cannot write into \"config\" directory" : "無法寫入 config 目錄", "Cannot write into \"apps\" directory" : "無法寫入 apps 目錄", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "通常藉由%s開放網頁伺服器對 apps 目錄的權限%s或是在設定檔中關閉 appstore 就可以修正這個問題", "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "可試試修改<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">給予網頁伺服器寫入根目錄的權限。", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題", "Setting locale to %s failed" : "設定語系為 %s 失敗", "Please install one of these locales on your system and restart your webserver." : "請在系統中安裝這些語系的其中一個,然後重啓網頁伺服器", "Please ask your server administrator to install the module." : "請詢問系統管理員來安裝這些模組", "PHP module %s not installed." : "未安裝 PHP 模組 %s", "PHP setting \"%s\" is not set to \"%s\"." : "PHP設定值 \"%s\" 沒有被設定為 \"%s\"", + "Adjusting this setting in php.ini will make Nextcloud run again" : "調整php.ini中的設定,使Nextcloud重新運作。", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload 應該要被設定成 \"0\"而不是目前的設定 \"%s\" ", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "為了修正這個問題,請到php.ini將 <code>mbstring.func_overload</code> 的值改為 <code>0</code>", + "libxml2 2.7.0 is at least required. Currently %s is installed." : "libxml2版本最低需求為2.7.0。目前安裝版本為 %s 。", + "To fix this issue update your libxml2 version and restart your web server." : "修正方式為更新您的libxml2為2.7.0以上版本,再重啟網頁伺服器。", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 已經設定成「剪除 inline doc block」模式,這將會使幾個核心應用程式無法使用", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "這大概是由快取或是加速器像是 Zend OPcache, eAccelerator 造成的", "PHP modules have been installed, but they are still listed as missing?" : "你已經安裝了指定的 PHP 模組,可是還是顯示為找不到嗎?", diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json index 7ad8f180fb3..4383312af1e 100644 --- a/lib/l10n/zh_TW.json +++ b/lib/l10n/zh_TW.json @@ -7,12 +7,15 @@ "It has been detected that the sample configuration has been copied. This can break your installation and is unsupported. Please read the documentation before performing changes on config.php" : "看來您直接複製了範本設定來使用,這可能會毀掉你的安裝,請閱讀說明文件後對 config.php 進行適當的修改", "PHP %s or higher is required." : "需要 PHP %s 或更高版本", "PHP with a version lower than %s is required." : "需要 PHP 版本低於 %s ", + "%sbit or higher PHP required." : "%s 或需要更高階版本的php", "Following databases are supported: %s" : "這些資料庫支援: %s", "The command line tool %s could not be found" : "無法找到命令提示位元工具 %s", "The library %s is not available." : "套件庫 %s 無法使用", "Library %s with a version higher than %s is required - available version %s." : "需要套件庫 %s 版本高於 %s - 可使用的版本是 %s", "Library %s with a version lower than %s is required - available version %s." : "需要套件庫 %s 版本低於 %s - 可使用的版本是 %s", "Following platforms are supported: %s" : "這些平台支援: %s", + "Server version %s or higher is required." : "需要伺服器版本 %s 或更高階版本", + "Server version %s or lower is required." : "需要伺服器版本 %s 或更低階版本", "Unknown filetype" : "未知的檔案類型", "Invalid image" : "無效的圖片", "today" : "今天", @@ -34,15 +37,20 @@ "File name is too long" : "檔案名稱太長", "App directory already exists" : "應用程式目錄已經存在", "Can't create app folder. Please fix permissions. %s" : "無法建立應用程式目錄,請檢查權限:%s", + "Archive does not contain a directory named %s" : "檔案文件未包含目錄名稱 %s", "No source specified when installing app" : "沒有指定應用程式安裝來源", "No href specified when installing app from http" : "從 http 安裝應用程式,找不到 href 屬性", "No path specified when installing app from local file" : "從本地檔案安裝應用程式時沒有指定路徑", "Archives of type %s are not supported" : "不支援 %s 格式的壓縮檔", "Failed to open archive when installing app" : "安裝應用程式時無法開啓壓縮檔", "App does not provide an info.xml file" : "應用程式沒有提供 info.xml 檔案", + "App cannot be installed because appinfo file cannot be read." : "程式無法安裝,因為無法讀取appinfo檔案。", "Signature could not get checked. Please contact the app developer and check your admin screen." : "無法驗證數位簽章,請聯絡 app 開發者,並檢查您的管理頁面", "App can't be installed because of not allowed code in the App" : "無法安裝應用程式因為在當中找到危險的代碼", + "App can't be installed because it is not compatible with this version of the server" : "程式無法安裝,因為伺服器版本不符。", "App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "無法安裝應用程式,因為它包含了 <shipped>true</shipped> 標籤,在未發行的應用程式當中這是不允許的", + "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "程式無法安裝,因為info.xml檔案中版本與app商店中要求不同。", + "%s enter the database username and name." : "%s 輸入資料庫名稱及使用者名稱", "%s enter the database username." : "%s 輸入資料庫使用者名稱。", "%s enter the database name." : "%s 輸入資料庫名稱。", "%s you may not use dots in the database name" : "%s 資料庫名稱不能包含小數點", @@ -92,6 +100,8 @@ "Sharing %s failed, because the sharing backend for %s could not find its source" : "分享 %s 失敗,因為 %s 的分享後端找不到它的來源", "Sharing %s failed, because the file could not be found in the file cache" : "分享 %s 失敗,因為在快取中找不到該檔案", "Cannot increase permissions of %s" : "無法增加%s的權限", + "Files can't be shared with delete permissions" : "無法分享具有刪除權限的檔案", + "Files can't be shared with create permissions" : "無法分享具有新建權限的檔案", "Expiration date is in the past" : "到期日是之前的時間", "Cannot set expiration date more than %s days in the future" : "無法設定到期日超過未來%s天", "Could not find category \"%s\"" : "找不到分類:\"%s\"", @@ -101,12 +111,19 @@ "Username contains whitespace at the beginning or at the end" : "使用者名詞的開頭或結尾有空白", "A valid password must be provided" : "一定要提供一個有效的密碼", "The username is already being used" : "這個使用者名稱已經有人使用了", + "Login canceled by app" : "程式取消登入", + "User disabled" : "使用者取消", + "Help" : "說明", "Personal" : "個人", "Users" : "使用者", "Admin" : "管理", "Recommended" : "建議", + "App \"%s\" cannot be installed because appinfo file cannot be read." : "程式\"%s\"無法安裝,因為無法讀取appinfo檔案。", + "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "程式\"%s\"無法安裝,因為伺服器版本不符。", "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "應用程式 \"%s\" 無法被安裝,下列的相依性並不是完整的: %s", "No app name specified" : "沒有指定應用程式名稱", + "App '%s' could not be installed!" : "程式\"%s\"無法安裝。", + "a safe home for all your data" : "您資料的安全屋", "File is currently busy, please try again later" : "檔案目前忙碌中,請稍候再試", "Can't read file" : "無法讀取檔案", "Application is not enabled" : "應用程式未啟用", @@ -115,18 +132,23 @@ "Unknown user" : "未知的使用者", "No database drivers (sqlite, mysql, or postgresql) installed." : "沒有安裝資料庫驅動程式 (sqlite, mysql, 或 postgresql)", "Microsoft Windows Platform is not supported" : "不支援微軟Windows系統", + "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "微軟Windows不支援Nextcloud伺服器,如果您一定要使用,我們建議您在虛擬機中安裝Linux版本伺服器。", "Cannot write into \"config\" directory" : "無法寫入 config 目錄", "Cannot write into \"apps\" directory" : "無法寫入 apps 目錄", "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "通常藉由%s開放網頁伺服器對 apps 目錄的權限%s或是在設定檔中關閉 appstore 就可以修正這個問題", "Cannot create \"data\" directory (%s)" : "無法建立 data 目錄 (%s)", + "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "可試試修改<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">給予網頁伺服器寫入根目錄的權限。", "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "通常藉由%s開放網頁伺服器對根目錄的權限%s就可以修正權限問題", "Setting locale to %s failed" : "設定語系為 %s 失敗", "Please install one of these locales on your system and restart your webserver." : "請在系統中安裝這些語系的其中一個,然後重啓網頁伺服器", "Please ask your server administrator to install the module." : "請詢問系統管理員來安裝這些模組", "PHP module %s not installed." : "未安裝 PHP 模組 %s", "PHP setting \"%s\" is not set to \"%s\"." : "PHP設定值 \"%s\" 沒有被設定為 \"%s\"", + "Adjusting this setting in php.ini will make Nextcloud run again" : "調整php.ini中的設定,使Nextcloud重新運作。", "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload 應該要被設定成 \"0\"而不是目前的設定 \"%s\" ", "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "為了修正這個問題,請到php.ini將 <code>mbstring.func_overload</code> 的值改為 <code>0</code>", + "libxml2 2.7.0 is at least required. Currently %s is installed." : "libxml2版本最低需求為2.7.0。目前安裝版本為 %s 。", + "To fix this issue update your libxml2 version and restart your web server." : "修正方式為更新您的libxml2為2.7.0以上版本,再重啟網頁伺服器。", "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 已經設定成「剪除 inline doc block」模式,這將會使幾個核心應用程式無法使用", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "這大概是由快取或是加速器像是 Zend OPcache, eAccelerator 造成的", "PHP modules have been installed, but they are still listed as missing?" : "你已經安裝了指定的 PHP 模組,可是還是顯示為找不到嗎?", diff --git a/lib/private/App/DependencyAnalyzer.php b/lib/private/App/DependencyAnalyzer.php index 9ccc974e3a6..7adb5d1c574 100644 --- a/lib/private/App/DependencyAnalyzer.php +++ b/lib/private/App/DependencyAnalyzer.php @@ -304,18 +304,40 @@ class DependencyAnalyzer { if (!is_null($minVersion)) { if ($this->compareSmaller($this->platform->getOcVersion(), $minVersion)) { - $missing[] = (string)$this->l->t('Server version %s or higher is required.', $minVersion); + $missing[] = (string)$this->l->t('Server version %s or higher is required.', $this->toVisibleVersion($minVersion)); } } if (!is_null($maxVersion)) { if ($this->compareBigger($this->platform->getOcVersion(), $maxVersion)) { - $missing[] = (string)$this->l->t('Server version %s or lower is required.', $maxVersion); + $missing[] = (string)$this->l->t('Server version %s or lower is required.', $this->toVisibleVersion($maxVersion)); } } return $missing; } /** + * Map the internal version number to the Nextcloud version + * + * @param string $version + * @return string + */ + protected function toVisibleVersion($version) { + switch ($version) { + case '9.1': + return '10'; + case '9.2': + return '11'; + default: + if (strpos($version, '9.1.') === 0) { + $version = '10.0.' . substr($version, 4); + } else if (strpos($version, '9.2.') === 0) { + $version = '11.0.' . substr($version, 4); + } + return $version; + } + } + + /** * @param $element * @return mixed */ diff --git a/lib/private/AppFramework/App.php b/lib/private/AppFramework/App.php index 01844e4c2d5..c7670953b4e 100644 --- a/lib/private/AppFramework/App.php +++ b/lib/private/AppFramework/App.php @@ -93,7 +93,13 @@ class App { try { $controller = $container->query($controllerName); } catch(QueryException $e) { - $appNameSpace = self::buildAppNamespace($appName); + if ($appName === 'core') { + $appNameSpace = 'OC\\Core'; + } else if ($appName === 'settings') { + $appNameSpace = 'OC\\Settings'; + } else { + $appNameSpace = self::buildAppNamespace($appName); + } $controllerName = $appNameSpace . '\\Controller\\' . $controllerName; $controller = $container->query($controllerName); } diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index 59803d02bee..66ca59d26e2 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -289,6 +289,10 @@ class DIContainer extends SimpleContainer implements IAppContainer { return $this->getServer()->getEventDispatcher(); }); + $this->registerService('OCP\WorkflowEngine\IManager', function ($c) { + return $c->query('OCA\WorkflowEngine\Manager'); + }); + $this->registerService('OCP\\AppFramework\\IAppContainer', function ($c) { return $c; }); @@ -330,6 +334,12 @@ class DIContainer extends SimpleContainer implements IAppContainer { ); }); + /** + * App Framework default arguments + */ + $this->registerParameter('corsMethods', 'PUT, POST, GET, DELETE, PATCH'); + $this->registerParameter('corsAllowedHeaders', 'Authorization, Content-Type, Accept'); + $this->registerParameter('corsMaxAge', 1728000); /** * Middleware diff --git a/lib/private/AppFramework/Middleware/OCSMiddleware.php b/lib/private/AppFramework/Middleware/OCSMiddleware.php index 90355a39ef0..e07d100d8ac 100644 --- a/lib/private/AppFramework/Middleware/OCSMiddleware.php +++ b/lib/private/AppFramework/Middleware/OCSMiddleware.php @@ -56,7 +56,12 @@ class OCSMiddleware extends Middleware { if ($code === 0) { $code = Http::STATUS_INTERNAL_SERVER_ERROR; } - return new OCSResponse($format, $code, $exception->getMessage()); + $response = new OCSResponse($format, $code, $exception->getMessage()); + + if (substr_compare($this->request->getScriptName(), '/ocs/v2.php', -strlen('/ocs/v2.php')) === 0) { + $response->setStatus($code); + } + return $response; } throw $exception; diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php index daac36606f2..3bfef2df025 100644 --- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php +++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php @@ -42,6 +42,7 @@ use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Middleware; use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\JSONResponse; +use OCP\AppFramework\OCSController; use OCP\INavigationManager; use OCP\IURLGenerator; use OCP\IRequest; @@ -112,7 +113,7 @@ class SecurityMiddleware extends Middleware { * This runs all the security checks before a method call. The * security checks are determined by inspecting the controller method * annotations - * @param string $controller the controllername or string + * @param Controller $controller the controller * @param string $methodName the name of the method * @throws SecurityException when a security check fails */ @@ -145,7 +146,14 @@ class SecurityMiddleware extends Middleware { // CSRF check - also registers the CSRF token since the session may be closed later Util::callRegister(); if(!$this->reflector->hasAnnotation('NoCSRFRequired')) { - if(!$this->request->passesCSRFCheck()) { + /* + * Only allow the CSRF check to fail on OCS Requests. This kind of + * hacks around that we have no full token auth in place yet and we + * do want to offer CSRF checks for web requests. + */ + if(!$this->request->passesCSRFCheck() && !( + $controller instanceof OCSController && + $this->request->getHeader('OCS-APIREQUEST') === 'true')) { throw new CrossSiteRequestForgeryException(); } } diff --git a/lib/private/AppFramework/Routing/RouteConfig.php b/lib/private/AppFramework/Routing/RouteConfig.php index 066c0da1138..e94f2e50c1d 100644 --- a/lib/private/AppFramework/Routing/RouteConfig.php +++ b/lib/private/AppFramework/Routing/RouteConfig.php @@ -86,7 +86,13 @@ class RouteConfig { $postfix = $ocsRoute['postfix']; } - $url = $ocsRoute['url']; + if (isset($ocsRoute['root'])) { + $root = $ocsRoute['root']; + } else { + $root = '/apps/'.$this->appName; + } + + $url = $root . $ocsRoute['url']; $verb = isset($ocsRoute['verb']) ? strtoupper($ocsRoute['verb']) : 'GET'; $split = explode('#', $name, 2); diff --git a/lib/private/Authentication/Token/DefaultTokenCleanupJob.php b/lib/private/Authentication/Token/DefaultTokenCleanupJob.php index a0af822d986..389a25a9bba 100644 --- a/lib/private/Authentication/Token/DefaultTokenCleanupJob.php +++ b/lib/private/Authentication/Token/DefaultTokenCleanupJob.php @@ -28,9 +28,8 @@ use OC\BackgroundJob\Job; class DefaultTokenCleanupJob extends Job { protected function run($argument) { - /* @var $provider DefaultTokenProvider */ - // TODO: add OC\Authentication\Token\IProvider::invalidateOldTokens and query interface - $provider = OC::$server->query('OC\Authentication\Token\DefaultTokenProvider'); + /* @var $provider IProvider */ + $provider = OC::$server->query('OC\Authentication\Token\IProvider'); $provider->invalidateOldTokens(); } diff --git a/lib/private/Authentication/Token/IProvider.php b/lib/private/Authentication/Token/IProvider.php index 4fb2830c3ac..65b515960ea 100644 --- a/lib/private/Authentication/Token/IProvider.php +++ b/lib/private/Authentication/Token/IProvider.php @@ -66,6 +66,11 @@ interface IProvider { public function invalidateTokenById(IUser $user, $id); /** + * Invalidate (delete) old session tokens + */ + public function invalidateOldTokens(); + + /** * Save the updated token * * @param IToken $token diff --git a/lib/private/Authentication/TwoFactorAuth/Manager.php b/lib/private/Authentication/TwoFactorAuth/Manager.php index bca75263a71..66bcafbce71 100644 --- a/lib/private/Authentication/TwoFactorAuth/Manager.php +++ b/lib/private/Authentication/TwoFactorAuth/Manager.php @@ -109,15 +109,17 @@ class Manager { foreach ($allApps as $appId) { $info = $this->appManager->getAppInfo($appId); - $providerClasses = $info['two-factor-providers']; - foreach ($providerClasses as $class) { - try { - $this->loadTwoFactorApp($appId); - $provider = OC::$server->query($class); - $providers[$provider->getId()] = $provider; - } catch (QueryException $exc) { - // Provider class can not be resolved - throw new Exception("Could not load two-factor auth provider $class"); + if (isset($info['two-factor-providers'])) { + $providerClasses = $info['two-factor-providers']; + foreach ($providerClasses as $class) { + try { + $this->loadTwoFactorApp($appId); + $provider = OC::$server->query($class); + $providers[$provider->getId()] = $provider; + } catch (QueryException $exc) { + // Provider class can not be resolved + throw new Exception("Could not load two-factor auth provider $class"); + } } } } diff --git a/lib/private/Console/Application.php b/lib/private/Console/Application.php index b3e7003c82c..cad16a070c8 100644 --- a/lib/private/Console/Application.php +++ b/lib/private/Console/Application.php @@ -88,10 +88,10 @@ class Application { require_once __DIR__ . '/../../../core/register_command.php'; if ($this->config->getSystemValue('installed', false)) { if (\OCP\Util::needUpgrade()) { - $output->writeln("ownCloud or one of the apps require upgrade - only a limited number of commands are available"); + $output->writeln("Nextcloud or one of the apps require upgrade - only a limited number of commands are available"); $output->writeln("You may use your browser or the occ upgrade command to do the upgrade"); } elseif ($this->config->getSystemValue('maintenance', false)) { - $output->writeln("ownCloud is in maintenance mode - no app have been loaded"); + $output->writeln("Nextcloud is in maintenance mode - no app have been loaded"); } else { OC_App::loadApps(); foreach (\OC::$server->getAppManager()->getInstalledApps() as $app) { @@ -107,7 +107,7 @@ class Application { } } } else { - $output->writeln("ownCloud is not installed - only a limited number of commands are available"); + $output->writeln("Nextcloud is not installed - only a limited number of commands are available"); } $input = new ArgvInput(); if ($input->getFirstArgument() !== 'check') { diff --git a/lib/private/Files/Cache/Wrapper/CacheJail.php b/lib/private/Files/Cache/Wrapper/CacheJail.php index d121ee25361..1196c6b0760 100644 --- a/lib/private/Files/Cache/Wrapper/CacheJail.php +++ b/lib/private/Files/Cache/Wrapper/CacheJail.php @@ -59,6 +59,9 @@ class CacheJail extends CacheWrapper { * @return null|string the jailed path or null if the path is outside the jail */ protected function getJailedPath($path) { + if ($this->root === '') { + return $path; + } $rootLength = strlen($this->root) + 1; if ($path === $this->root) { return ''; diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index 8813b6c0775..e67e4817e2a 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -26,7 +26,10 @@ namespace OC\Files\Node; +use OC\DB\QueryBuilder\Literal; +use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\Files\FileInfo; +use OCP\Files\Mount\IMountPoint; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; @@ -358,4 +361,79 @@ class Folder extends Node implements \OCP\Files\Folder { $uniqueName = \OC_Helper::buildNotExistingFileNameForView($this->getPath(), $name, $this->view); return trim($this->getRelativePath($uniqueName), '/'); } + + /** + * @param int $limit + * @param int $offset + * @return \OCP\Files\Node[] + */ + public function getRecent($limit, $offset = 0) { + $mimetypeLoader = \OC::$server->getMimeTypeLoader(); + $mounts = $this->root->getMountsIn($this->path); + $mounts[] = $this->getMountPoint(); + + $mounts = array_filter($mounts, function (IMountPoint $mount) { + return $mount->getStorage(); + }); + $storageIds = array_map(function (IMountPoint $mount) { + return $mount->getStorage()->getCache()->getNumericStorageId(); + }, $mounts); + /** @var IMountPoint[] $mountMap */ + $mountMap = array_combine($storageIds, $mounts); + $folderMimetype = $mimetypeLoader->getId(FileInfo::MIMETYPE_FOLDER); + + //todo look into options of filtering path based on storage id (only search in files/ for home storage, filter by share root for shared, etc) + + $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $query = $builder + ->select('f.*') + ->from('filecache', 'f') + ->andWhere($builder->expr()->in('f.storage', $builder->createNamedParameter($storageIds, IQueryBuilder::PARAM_INT_ARRAY))) + ->andWhere($builder->expr()->orX( + // handle non empty folders separate + $builder->expr()->neq('f.mimetype', $builder->createNamedParameter($folderMimetype, IQueryBuilder::PARAM_INT)), + $builder->expr()->eq('f.size', new Literal(0)) + )) + ->orderBy('f.mtime', 'DESC') + ->setMaxResults($limit) + ->setFirstResult($offset); + + $result = $query->execute()->fetchAll(); + + $files = array_filter(array_map(function (array $entry) use ($mountMap, $mimetypeLoader) { + $mount = $mountMap[$entry['storage']]; + $entry['internalPath'] = $entry['path']; + $entry['mimetype'] = $mimetypeLoader->getMimetypeById($entry['mimetype']); + $entry['mimepart'] = $mimetypeLoader->getMimetypeById($entry['mimepart']); + $path = $this->getAbsolutePath($mount, $entry['path']); + if (is_null($path)) { + return null; + } + $fileInfo = new \OC\Files\FileInfo($path, $mount->getStorage(), $entry['internalPath'], $entry, $mount); + return $this->root->createNode($fileInfo->getPath(), $fileInfo); + }, $result)); + + return array_values(array_filter($files, function (Node $node) { + $relative = $this->getRelativePath($node->getPath()); + return $relative !== null && $relative !== '/'; + })); + } + + private function getAbsolutePath(IMountPoint $mount, $path) { + $storage = $mount->getStorage(); + if ($storage->instanceOfStorage('\OC\Files\Storage\Wrapper\Jail')) { + /** @var \OC\Files\Storage\Wrapper\Jail $storage */ + $jailRoot = $storage->getSourcePath(''); + $rootLength = strlen($jailRoot) + 1; + if ($path === $jailRoot) { + return $mount->getMountPoint(); + } else if (substr($path, 0, $rootLength) === $jailRoot . '/') { + return $mount->getMountPoint() . substr($path, $rootLength); + } else { + return null; + } + } else { + return $mount->getMountPoint() . $path; + } + } } diff --git a/lib/private/Files/Node/LazyRoot.php b/lib/private/Files/Node/LazyRoot.php index 1203fc4d162..317b8144653 100644 --- a/lib/private/Files/Node/LazyRoot.php +++ b/lib/private/Files/Node/LazyRoot.php @@ -471,5 +471,10 @@ class LazyRoot implements IRootFolder { return $this->__call(__FUNCTION__, func_get_args()); } - + /** + * @inheritDoc + */ + public function getRecent($limit, $offset = 0) { + return $this->__call(__FUNCTION__, func_get_args()); + } } diff --git a/lib/private/Files/Storage/Wrapper/Jail.php b/lib/private/Files/Storage/Wrapper/Jail.php index 80c75523748..5b9085799b9 100644 --- a/lib/private/Files/Storage/Wrapper/Jail.php +++ b/lib/private/Files/Storage/Wrapper/Jail.php @@ -377,7 +377,7 @@ class Jail extends Wrapper { */ public function getCache($path = '', $storage = null) { if (!$storage) { - $storage = $this; + $storage = $this->storage; } $sourceCache = $this->storage->getCache($this->getSourcePath($path), $storage); return new CacheJail($sourceCache, $this->rootPath); diff --git a/lib/private/Log.php b/lib/private/Log.php index 59233cf5c12..0a707f3d4ea 100644 --- a/lib/private/Log.php +++ b/lib/private/Log.php @@ -103,7 +103,12 @@ class Log implements ILogger { // FIXME: Add this for backwards compatibility, should be fixed at some point probably if($logger === null) { - $this->logger = 'OC\\Log\\'.ucfirst($this->config->getValue('log_type', 'owncloud')); + // TODO: Drop backwards compatibility for config in the future + $logType = $this->config->getValue('log_type', 'file'); + if($logType==='owncloud') { + $logType = 'file'; + } + $this->logger = 'OC\\Log\\'.ucfirst($logType); call_user_func(array($this->logger, 'init')); } else { $this->logger = $logger; diff --git a/lib/private/Log/Owncloud.php b/lib/private/Log/File.php index 2cc70015e3c..a406dd83952 100644 --- a/lib/private/Log/Owncloud.php +++ b/lib/private/Log/File.php @@ -39,7 +39,7 @@ namespace OC\Log; * Log is saved at data/nextcloud.log (on default) */ -class Owncloud { +class File { static protected $logFile; /** diff --git a/lib/private/Repair.php b/lib/private/Repair.php index 6c1eef5b9f6..cd23f5cb806 100644 --- a/lib/private/Repair.php +++ b/lib/private/Repair.php @@ -49,6 +49,7 @@ use OC\Repair\RepairMimeTypes; use OC\Repair\SearchLuceneTables; use OC\Repair\UpdateOutdatedOcsIds; use OC\Repair\RepairInvalidShares; +use OC\Repair\RepairUnmergedShares; use OCP\AppFramework\QueryException; use OCP\Migration\IOutput; use OCP\Migration\IRepairStep; @@ -140,6 +141,12 @@ class Repair implements IOutput{ new RemoveOldShares(\OC::$server->getDatabaseConnection()), new AvatarPermissions(\OC::$server->getDatabaseConnection()), new RemoveRootShares(\OC::$server->getDatabaseConnection(), \OC::$server->getUserManager(), \OC::$server->getLazyRootFolder()), + new RepairUnmergedShares( + \OC::$server->getConfig(), + \OC::$server->getDatabaseConnection(), + \OC::$server->getUserManager(), + \OC::$server->getGroupManager() + ), ]; } diff --git a/lib/private/Repair/RepairUnmergedShares.php b/lib/private/Repair/RepairUnmergedShares.php new file mode 100644 index 00000000000..353877bb873 --- /dev/null +++ b/lib/private/Repair/RepairUnmergedShares.php @@ -0,0 +1,328 @@ +<?php +/** + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @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 OC\Repair; + +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; +use OC\Share\Constants; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IUserManager; +use OCP\IUser; +use OCP\IGroupManager; +use OC\Share20\DefaultShareProvider; + +/** + * Repairs shares for which the received folder was not properly deduplicated. + * + * An unmerged share can for example happen when sharing a folder with the same + * user through multiple ways, like several groups and also directly, additionally + * to group shares. Since 9.0.0 these would create duplicate entries "folder (2)", + * one for every share. This repair step rearranges them so they only appear as a single + * folder. + */ +class RepairUnmergedShares implements IRepairStep { + + /** @var \OCP\IConfig */ + protected $config; + + /** @var \OCP\IDBConnection */ + protected $connection; + + /** @var IUserManager */ + protected $userManager; + + /** @var IGroupManager */ + protected $groupManager; + + /** @var IQueryBuilder */ + private $queryGetSharesWithUsers; + + /** @var IQueryBuilder */ + private $queryUpdateSharePermissionsAndTarget; + + /** @var IQueryBuilder */ + private $queryUpdateShareInBatch; + + /** + * @param \OCP\IConfig $config + * @param \OCP\IDBConnection $connection + */ + public function __construct( + IConfig $config, + IDBConnection $connection, + IUserManager $userManager, + IGroupManager $groupManager + ) { + $this->connection = $connection; + $this->config = $config; + $this->userManager = $userManager; + $this->groupManager = $groupManager; + } + + public function getName() { + return 'Repair unmerged shares'; + } + + /** + * Builds prepared queries for reuse + */ + private function buildPreparedQueries() { + /** + * Retrieve shares for a given user/group and share type + */ + $query = $this->connection->getQueryBuilder(); + $query + ->select('item_source', 'id', 'file_target', 'permissions', 'parent', 'share_type') + ->from('share') + ->where($query->expr()->eq('share_type', $query->createParameter('shareType'))) + ->andWhere($query->expr()->in('share_with', $query->createParameter('shareWiths'))) + ->andWhere($query->expr()->in('item_type', $query->createParameter('itemTypes'))) + ->orderBy('item_source', 'ASC') + ->addOrderBy('stime', 'ASC'); + + $this->queryGetSharesWithUsers = $query; + + /** + * Updates the file_target to the given value for all given share ids. + * + * This updates several shares in bulk which is faster than individually. + */ + $query = $this->connection->getQueryBuilder(); + $query->update('share') + ->set('file_target', $query->createParameter('file_target')) + ->where($query->expr()->in('id', $query->createParameter('ids'))); + + $this->queryUpdateShareInBatch = $query; + + /** + * Updates the share permissions and target path of a single share. + */ + $query = $this->connection->getQueryBuilder(); + $query->update('share') + ->set('permissions', $query->createParameter('permissions')) + ->set('file_target', $query->createParameter('file_target')) + ->where($query->expr()->eq('id', $query->createParameter('shareid'))); + + $this->queryUpdateSharePermissionsAndTarget = $query; + + } + + private function getSharesWithUser($shareType, $shareWiths) { + $groupedShares = []; + + $query = $this->queryGetSharesWithUsers; + $query->setParameter('shareWiths', $shareWiths, IQueryBuilder::PARAM_STR_ARRAY); + $query->setParameter('shareType', $shareType); + $query->setParameter('itemTypes', ['file', 'folder'], IQueryBuilder::PARAM_STR_ARRAY); + + $shares = $query->execute()->fetchAll(); + + // group by item_source + foreach ($shares as $share) { + if (!isset($groupedShares[$share['item_source']])) { + $groupedShares[$share['item_source']] = []; + } + $groupedShares[$share['item_source']][] = $share; + } + return $groupedShares; + } + + /** + * Fix the given received share represented by the set of group shares + * and matching sub shares + * + * @param array $groupShares group share entries + * @param array $subShares sub share entries + * + * @return boolean false if the share was not repaired, true if it was + */ + private function fixThisShare($groupShares, $subShares) { + if (empty($subShares)) { + return false; + } + + $groupSharesById = []; + foreach ($groupShares as $groupShare) { + $groupSharesById[$groupShare['id']] = $groupShare; + } + + if ($this->isThisShareValid($groupSharesById, $subShares)) { + return false; + } + + $targetPath = $groupShares[0]['file_target']; + + // check whether the user opted out completely of all subshares + $optedOut = true; + foreach ($subShares as $subShare) { + if ((int)$subShare['permissions'] !== 0) { + $optedOut = false; + break; + } + } + + $shareIds = []; + foreach ($subShares as $subShare) { + // only if the user deleted some subshares but not all, adjust the permissions of that subshare + if (!$optedOut && (int)$subShare['permissions'] === 0 && (int)$subShare['share_type'] === DefaultShareProvider::SHARE_TYPE_USERGROUP) { + // set permissions from parent group share + $permissions = $groupSharesById[$subShare['parent']]['permissions']; + + // fix permissions and target directly + $query = $this->queryUpdateSharePermissionsAndTarget; + $query->setParameter('shareid', $subShare['id']); + $query->setParameter('file_target', $targetPath); + $query->setParameter('permissions', $permissions); + $query->execute(); + } else { + // gather share ids for bulk target update + if ($subShare['file_target'] !== $targetPath) { + $shareIds[] = (int)$subShare['id']; + } + } + } + + if (!empty($shareIds)) { + $query = $this->queryUpdateShareInBatch; + $query->setParameter('ids', $shareIds, IQueryBuilder::PARAM_INT_ARRAY); + $query->setParameter('file_target', $targetPath); + $query->execute(); + } + + return true; + } + + /** + * Checks whether the number of group shares is balanced with the child subshares. + * If all group shares have exactly one subshare, and the target of every subshare + * is the same, then the share is valid. + * If however there is a group share entry that has no matching subshare, it means + * we're in the bogus situation and the whole share must be repaired + * + * @param array $groupSharesById + * @param array $subShares + * + * @return true if the share is valid, false if it needs repair + */ + private function isThisShareValid($groupSharesById, $subShares) { + $foundTargets = []; + + // every group share needs to have exactly one matching subshare + foreach ($subShares as $subShare) { + $foundTargets[$subShare['file_target']] = true; + if (count($foundTargets) > 1) { + // not all the same target path value => invalid + return false; + } + if (isset($groupSharesById[$subShare['parent']])) { + // remove it from the list as we found it + unset($groupSharesById[$subShare['parent']]); + } + } + + // if we found one subshare per group entry, the set will be empty. + // If not empty, it means that one of the group shares did not have + // a matching subshare entry. + return empty($groupSharesById); + } + + /** + * Detect unmerged received shares and merge them properly + */ + private function fixUnmergedShares(IOutput $out, IUser $user) { + $groups = $this->groupManager->getUserGroupIds($user); + if (empty($groups)) { + // user is in no groups, so can't have received group shares + return; + } + + // get all subshares grouped by item source + $subSharesByItemSource = $this->getSharesWithUser(DefaultShareProvider::SHARE_TYPE_USERGROUP, [$user->getUID()]); + + // because sometimes one wants to give the user more permissions than the group share + $userSharesByItemSource = $this->getSharesWithUser(Constants::SHARE_TYPE_USER, [$user->getUID()]); + + if (empty($subSharesByItemSource) && empty($userSharesByItemSource)) { + // nothing to repair for this user, no need to do extra queries + return; + } + + $groupSharesByItemSource = $this->getSharesWithUser(Constants::SHARE_TYPE_GROUP, $groups); + if (empty($groupSharesByItemSource) && empty($userSharesByItemSource)) { + // nothing to repair for this user + return; + } + + foreach ($groupSharesByItemSource as $itemSource => $groupShares) { + $subShares = []; + if (isset($subSharesByItemSource[$itemSource])) { + $subShares = $subSharesByItemSource[$itemSource]; + } + + if (isset($userSharesByItemSource[$itemSource])) { + // add it to the subshares to get a similar treatment + $subShares = array_merge($subShares, $userSharesByItemSource[$itemSource]); + } + + $this->fixThisShare($groupShares, $subShares); + } + } + + /** + * Count all the users + * + * @return int + */ + private function countUsers() { + $allCount = $this->userManager->countUsers(); + + $totalCount = 0; + foreach ($allCount as $backend => $count) { + $totalCount += $count; + } + + return $totalCount; + } + + public function run(IOutput $output) { + $ocVersionFromBeforeUpdate = $this->config->getSystemValue('version', '0.0.0'); + if (version_compare($ocVersionFromBeforeUpdate, '9.1.0.16', '<')) { + // this situation was only possible between 9.0.0 and 9.0.3 included + + $function = function(IUser $user) use ($output) { + $this->fixUnmergedShares($output, $user); + $output->advance(); + }; + + $this->buildPreparedQueries(); + + $userCount = $this->countUsers(); + $output->startProgress($userCount); + + $this->userManager->callForAllUsers($function); + + $output->finishProgress(); + } + } +} diff --git a/lib/private/Route/Router.php b/lib/private/Route/Router.php index ac42c4025c2..9df74184448 100644 --- a/lib/private/Route/Router.php +++ b/lib/private/Route/Router.php @@ -154,7 +154,7 @@ class Router implements IRouter { // Also add the OCS collection $collection = $this->getCollection($app.'.ocs'); - $collection->addPrefix('/ocsapp/apps/' . $app); + $collection->addPrefix('/ocsapp'); $this->root->addCollection($collection); } } diff --git a/lib/private/Server.php b/lib/private/Server.php index de2970d9bfa..d5808d7f17c 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -21,6 +21,7 @@ * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Thomas Tanghus <thomas@tanghus.net> * @author Vincent Petry <pvince81@owncloud.com> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -364,8 +365,9 @@ class Server extends ServerContainer implements IServerContainer { ); }); $this->registerService('Logger', function (Server $c) { - $logClass = $c->query('AllConfig')->getSystemValue('log_type', 'owncloud'); - $logger = 'OC\\Log\\' . ucfirst($logClass); + $logClass = $c->query('AllConfig')->getSystemValue('log_type', 'file'); + // TODO: Drop backwards compatibility for config in the future + $logger = 'OC\\Log\\' . ucfirst($logClass=='owncloud' ? 'file' : $logClass); call_user_func(array($logger, 'init')); return new Log($logger); @@ -583,6 +585,16 @@ class Server extends ServerContainer implements IServerContainer { $this->getLogger() ); }); + $this->registerService('LDAPProvider', function(Server $c) { + $config = $c->getConfig(); + $factoryClass = $config->getSystemValue('ldapProviderFactory', null); + if(is_null($factoryClass)) { + throw new \Exception('ldapProviderFactory not set'); + } + /** @var \OCP\LDAP\ILDAPProviderFactory $factory */ + $factory = new $factoryClass($this); + return $factory->getLDAPProvider(); + }); $this->registerService('LockingProvider', function (Server $c) { $ini = $c->getIniWrapper(); $config = $c->getConfig(); @@ -604,7 +616,7 @@ class Server extends ServerContainer implements IServerContainer { $this->registerService('MimeTypeDetector', function (Server $c) { return new \OC\Files\Type\Detection( $c->getURLGenerator(), - \OC::$SERVERROOT . '/config/', + \OC::$configDir, \OC::$SERVERROOT . '/resources/config/' ); }); @@ -631,7 +643,14 @@ class Server extends ServerContainer implements IServerContainer { return $factory->getManager(); }); $this->registerService('ThemingDefaults', function(Server $c) { - if(class_exists('OCA\Theming\Template', false) && $this->getConfig()->getSystemValue('installed', false) && $this->getAppManager()->isInstalled('theming')) { + try { + $classExists = class_exists('OCA\Theming\Template'); + } catch (\OCP\AutoloadNotAllowedException $e) { + // App disabled or in maintenance mode + $classExists = false; + } + + if ($classExists && $this->getConfig()->getSystemValue('installed', false) && $this->getAppManager()->isInstalled('theming')) { return new Template( $this->getConfig(), $this->getL10N('theming'), @@ -1398,4 +1417,12 @@ class Server extends ServerContainer implements IServerContainer { return $this->query('ShareManager'); } + /** + * Returns the LDAP Provider + * + * @return \OCP\LDAP\ILDAPProvider + */ + public function getLDAPProvider() { + return $this->query('LDAPProvider'); + } } diff --git a/lib/private/Setup/AbstractDatabase.php b/lib/private/Setup/AbstractDatabase.php index 65f6a8c5b7c..310f74d4c0c 100644 --- a/lib/private/Setup/AbstractDatabase.php +++ b/lib/private/Setup/AbstractDatabase.php @@ -108,18 +108,34 @@ abstract class AbstractDatabase { * @return \OC\DB\Connection */ protected function connect(array $configOverwrite = []) { - $systemConfig = $this->config->getSystemConfig(); - $cf = new ConnectionFactory(); - $connectionParams = $cf->createConnectionParams($systemConfig); - // we don't save username/password to the config immediately so this might not be set - if (!$connectionParams['user']) { - $connectionParams['user'] = $this->dbUser; - } - if (!$connectionParams['password']) { - $connectionParams['password'] = $this->dbPassword; + $connectionParams = array( + 'host' => $this->dbHost, + 'user' => $this->dbUser, + 'password' => $this->dbPassword, + 'tablePrefix' => $this->tablePrefix, + ); + + // adding port support through installer + if (!empty($this->dbPort)) { + if (ctype_digit($this->dbPort)) { + $connectionParams['port'] = $this->dbPort; + } else { + $connectionParams['unix_socket'] = $this->dbPort; + } + } else if (strpos($this->dbHost, ':')) { + // Host variable may carry a port or socket. + list($host, $portOrSocket) = explode(':', $this->dbHost, 2); + if (ctype_digit($portOrSocket)) { + $connectionParams['port'] = $portOrSocket; + } else { + $connectionParams['unix_socket'] = $portOrSocket; + } + $connectionParams['host'] = $host; } + $connectionParams = array_merge($connectionParams, $configOverwrite); - return $cf->getConnection($systemConfig->getValue('dbtype', 'sqlite'), $connectionParams); + $cf = new ConnectionFactory(); + return $cf->getConnection($this->config->getSystemValue('dbtype', 'sqlite'), $connectionParams); } /** diff --git a/lib/private/Setup/MySQL.php b/lib/private/Setup/MySQL.php index 817a6060608..4ad6926c2d7 100644 --- a/lib/private/Setup/MySQL.php +++ b/lib/private/Setup/MySQL.php @@ -61,12 +61,20 @@ class MySQL extends AbstractDatabase { //we can't use OC_BD functions here because we need to connect as the administrative user. $query = "CREATE DATABASE IF NOT EXISTS `$name` CHARACTER SET utf8 COLLATE utf8_bin;"; $connection->executeUpdate($query); + } catch (\Exception $ex) { + $this->logger->error('Database creation failed: {error}', [ + 'app' => 'mysql.setup', + 'error' => $ex->getMessage() + ]); + return; + } + try { //this query will fail if there aren't the right permissions, ignore the error $query="GRANT ALL PRIVILEGES ON `$name` . * TO '$user'"; $connection->executeUpdate($query); } catch (\Exception $ex) { - $this->logger->error('Database creation failed: {error}', [ + $this->logger->debug('Could not automatically grant privileges, this can be ignored if database user already had privileges: {error}', [ 'app' => 'mysql.setup', 'error' => $ex->getMessage() ]); diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php index fdc5818dbf7..9210dfd1fd1 100644 --- a/lib/private/Share/Share.php +++ b/lib/private/Share/Share.php @@ -2533,7 +2533,7 @@ class Share extends Constants { } } else { if ($fileDependent) { - if ($format == \OC_Share_Backend_File::FORMAT_GET_FOLDER_CONTENTS || $format == \OC_Share_Backend_File::FORMAT_FILE_APP_ROOT) { + if ($format == \OCA\Files_Sharing\ShareBackend\File::FORMAT_GET_FOLDER_CONTENTS || $format == \OCA\Files_Sharing\ShareBackend\File::FORMAT_FILE_APP_ROOT) { $select = '`*PREFIX*share`.`id`, `item_type`, `item_source`, `*PREFIX*share`.`parent`, `uid_owner`, ' . '`share_type`, `share_with`, `file_source`, `path`, `file_target`, `stime`, ' . '`*PREFIX*share`.`permissions`, `expiration`, `storage`, `*PREFIX*filecache`.`parent` as `file_parent`, ' diff --git a/lib/private/URLGenerator.php b/lib/private/URLGenerator.php index 0f3c60b1323..93517dc9f7e 100644 --- a/lib/private/URLGenerator.php +++ b/lib/private/URLGenerator.php @@ -30,7 +30,8 @@ */ namespace OC; -use OCP\Defaults; + + use OCP\ICacheFactory; use OCP\IConfig; use OCP\IURLGenerator; diff --git a/lib/private/User/Database.php b/lib/private/User/Database.php index 354609d0a98..e2cbebab2e4 100644 --- a/lib/private/User/Database.php +++ b/lib/private/User/Database.php @@ -83,6 +83,8 @@ class Database extends \OC\User\Backend implements \OCP\IUserBackend { */ public function createUser($uid, $password) { if (!$this->userExists($uid)) { + $event = new GenericEvent($password); + $this->eventDispatcher->dispatch('OCP\PasswordPolicy::validate', $event); $query = \OC_DB::prepare('INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )'); $result = $query->execute(array($uid, \OC::$server->getHasher()->hash($password))); diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index b0f28498ff7..2d5e5ba1932 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -169,7 +169,7 @@ class OC_App { // Register on PSR-4 composer autoloader $appNamespace = \OC\AppFramework\App::buildAppNamespace($app); \OC::$composerAutoloader->addPsr4($appNamespace . '\\', $path . '/lib/', true); - if (defined('PHPUNIT_RUN')) { + if (defined('PHPUNIT_RUN') || defined('CLI_TEST_RUN')) { \OC::$composerAutoloader->addPsr4($appNamespace . '\\Tests\\', $path . '/tests/', true); } diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php index f3a79311a18..83274f82792 100644 --- a/lib/private/legacy/util.php +++ b/lib/private/legacy/util.php @@ -833,9 +833,15 @@ class OC_Util { } if(function_exists('xml_parser_create') && - version_compare('2.7.0', LIBXML_DOTTED_VERSION) === 1) { + LIBXML_LOADED_VERSION < 20700 ) { + $version = LIBXML_LOADED_VERSION; + $major = floor($version/10000); + $version -= ($major * 10000); + $minor = floor($version/100); + $version -= ($minor * 100); + $patch = $version; $errors[] = array( - 'error' => $l->t('libxml2 2.7.0 is at least required. Currently %s is installed.', [LIBXML_DOTTED_VERSION]), + 'error' => $l->t('libxml2 2.7.0 is at least required. Currently %s is installed.', [$major . '.' . $minor . '.' . $patch]), 'hint' => $l->t('To fix this issue update your libxml2 version and restart your web server.') ); } diff --git a/lib/public/Files/FileInfo.php b/lib/public/Files/FileInfo.php index d61726c4217..04790d41556 100644 --- a/lib/public/Files/FileInfo.php +++ b/lib/public/Files/FileInfo.php @@ -59,6 +59,11 @@ interface FileInfo { const SPACE_UNLIMITED = -3; /** + * @since 9.1.0 + */ + const MIMETYPE_FOLDER = 'httpd/unix-directory'; + + /** * Get the Etag of the file or folder * * @return string diff --git a/lib/public/Files/Folder.php b/lib/public/Files/Folder.php index 9a2a338b559..8f8576d8503 100644 --- a/lib/public/Files/Folder.php +++ b/lib/public/Files/Folder.php @@ -175,4 +175,12 @@ interface Folder extends Node { * @since 8.1.0 */ public function getNonExistingName($name); + + /** + * @param int $limit + * @param int $offset + * @return \OCP\Files\Node[] + * @since 9.1.0 + */ + public function getRecent($limit, $offset = 0); } diff --git a/lib/public/LDAP/IDeletionFlagSupport.php b/lib/public/LDAP/IDeletionFlagSupport.php new file mode 100644 index 00000000000..5f7d3909195 --- /dev/null +++ b/lib/public/LDAP/IDeletionFlagSupport.php @@ -0,0 +1,45 @@ +<?php +/** + * + * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\LDAP; + +/** + * Interface IDeletionFlagSupport + * + * @package OCP\LDAP + * @since 9.2.0 + */ +interface IDeletionFlagSupport { + /** + * Flag record for deletion. + * @param string $uid user id + * @since 9.2.0 + */ + public function flagRecord($uid); + + /** + * Unflag record for deletion. + * @param string $uid user id + * @since 9.2.0 + */ + public function unflagRecord($uid); +} diff --git a/lib/public/LDAP/ILDAPProvider.php b/lib/public/LDAP/ILDAPProvider.php new file mode 100644 index 00000000000..473afb13885 --- /dev/null +++ b/lib/public/LDAP/ILDAPProvider.php @@ -0,0 +1,105 @@ +<?php +/** + * + * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\LDAP; + +/** + * Interface ILDAPProvider + * + * @package OCP\LDAP + * @since 9.2.0 + */ +interface ILDAPProvider { + /** + * Translate a user id to LDAP DN. + * @param string $uid user id + * @return string + * @since 9.2.0 + */ + public function getUserDN($uid); + + /** + * Translate a LDAP DN to an internal user name. + * @param string $dn LDAP DN + * @return string with the internal user name + * @throws \Exception if translation was unsuccessful + * @since 9.2.0 + */ + public function getUserName($dn); + + /** + * Convert a stored DN so it can be used as base parameter for LDAP queries. + * @param string $dn the DN + * @return string + * @since 9.2.0 + */ + public function DNasBaseParameter($dn); + + /** + * Sanitize a DN received from the LDAP server. + * @param array $dn the DN in question + * @return array the sanitized DN + * @since 9.2.0 + */ + public function sanitizeDN($dn); + + /** + * Return a new LDAP connection resource for the specified user. + * @param string $uid user id + * @return resource of the LDAP connection + * @since 9.2.0 + */ + public function getLDAPConnection($uid); + + /** + * Get the LDAP base for users. + * @param string $uid user id + * @return string the base for users + * @throws \Exception if user id was not found in LDAP + * @since 9.2.0 + */ + public function getLDAPBaseUsers($uid); + + /** + * Get the LDAP base for groups. + * @param string $uid user id + * @return string the base for groups + * @throws \Exception if user id was not found in LDAP + * @since 9.2.0 + */ + public function getLDAPBaseGroups($uid); + + /** + * Check whether a LDAP DN exists + * @param string $dn LDAP DN + * @return bool whether the DN exists + * @since 9.2.0 + */ + public function dnExists($dn); + + /** + * Clear the cache if a cache is used, otherwise do nothing. + * @param string $uid user id + * @since 9.2.0 + */ + public function clearCache($uid); +} diff --git a/lib/public/LDAP/ILDAPProviderFactory.php b/lib/public/LDAP/ILDAPProviderFactory.php new file mode 100644 index 00000000000..99e7b8d27ea --- /dev/null +++ b/lib/public/LDAP/ILDAPProviderFactory.php @@ -0,0 +1,53 @@ +<?php +/** + * + * @copyright Copyright (c) 2016, Roger Szabo (roger.szabo@web.de) + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\LDAP; + +use OCP\IServerContainer; + +/** + * Interface ILDAPProviderFactory + * + * This class is responsible for instantiating and returning an ILDAPProvider + * instance. + * + * @package OCP\LDAP + * @since 9.2.0 + */ +interface ILDAPProviderFactory { + + /** + * Constructor for the LDAP provider factory + * + * @param IServerContainer $serverContainer server container + * @since 9.2.0 + */ + public function __construct(IServerContainer $serverContainer); + + /** + * creates and returns an instance of the ILDAPProvider + * + * @return ILDAPProvider + * @since 9.2.0 + */ + public function getLDAPProvider(); +} diff --git a/lib/public/WorkflowEngine/ICheck.php b/lib/public/WorkflowEngine/ICheck.php new file mode 100644 index 00000000000..7e3d86caad9 --- /dev/null +++ b/lib/public/WorkflowEngine/ICheck.php @@ -0,0 +1,56 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\WorkflowEngine; + + +use OCP\Files\Storage\IStorage; + +/** + * Interface ICheck + * + * @package OCP\WorkflowEngine + * @since 9.1 + */ +interface ICheck { + /** + * @param IStorage $storage + * @param string $path + * @since 9.1 + */ + public function setFileInfo(IStorage $storage, $path); + + /** + * @param string $operator + * @param string $value + * @return bool + * @since 9.1 + */ + public function executeCheck($operator, $value); + + /** + * @param string $operator + * @param string $value + * @throws \UnexpectedValueException + * @since 9.1 + */ + public function validateCheck($operator, $value); +} diff --git a/lib/public/WorkflowEngine/IManager.php b/lib/public/WorkflowEngine/IManager.php new file mode 100644 index 00000000000..e53a06ec929 --- /dev/null +++ b/lib/public/WorkflowEngine/IManager.php @@ -0,0 +1,48 @@ +<?php +/** + * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\WorkflowEngine; + + +use OCP\Files\Storage\IStorage; + +/** + * Interface IManager + * + * @package OCP\WorkflowEngine + * @since 9.1 + */ +interface IManager { + /** + * @param IStorage $storage + * @param string $path + * @since 9.1 + */ + public function setFileInfo(IStorage $storage, $path); + + /** + * @param string $class + * @param bool $returnFirstMatchingOperationOnly + * @return array + * @since 9.1 + */ + public function getMatchingOperations($class, $returnFirstMatchingOperationOnly = true); +} diff --git a/settings/Application.php b/settings/Application.php index 657b3fe490a..6db5e2aabf6 100644 --- a/settings/Application.php +++ b/settings/Application.php @@ -174,7 +174,8 @@ class Application extends App { $c->query('URLGenerator'), $c->query('Util'), $c->query('L10N'), - $c->query('Checker') + $c->query('Checker'), + $c->query('Logger') ); }); diff --git a/settings/Controller/CheckSetupController.php b/settings/Controller/CheckSetupController.php index bfb83e91936..13e7e443621 100644 --- a/settings/Controller/CheckSetupController.php +++ b/settings/Controller/CheckSetupController.php @@ -36,6 +36,7 @@ use OCP\AppFramework\Http\RedirectResponse; use OCP\Http\Client\IClientService; use OCP\IConfig; use OCP\IL10N; +use OCP\ILogger; use OCP\IRequest; use OC_Util; use OCP\IURLGenerator; @@ -56,6 +57,8 @@ class CheckSetupController extends Controller { private $l10n; /** @var Checker */ private $checker; + /** @var ILogger */ + private $logger; /** * @param string $AppName @@ -66,6 +69,7 @@ class CheckSetupController extends Controller { * @param \OC_Util $util * @param IL10N $l10n * @param Checker $checker + * @param ILogger $logger */ public function __construct($AppName, IRequest $request, @@ -74,7 +78,8 @@ class CheckSetupController extends Controller { IURLGenerator $urlGenerator, \OC_Util $util, IL10N $l10n, - Checker $checker) { + Checker $checker, + ILogger $logger) { parent::__construct($AppName, $request); $this->config = $config; $this->clientService = $clientService; @@ -82,6 +87,7 @@ class CheckSetupController extends Controller { $this->urlGenerator = $urlGenerator; $this->l10n = $l10n; $this->checker = $checker; + $this->logger = $logger; } /** @@ -118,6 +124,7 @@ class CheckSetupController extends Controller { $client->get($httpSiteName); $client->get($httpsSiteName); } catch (\Exception $e) { + $this->logger->logException($e, ['app' => 'internet_connection_check']); return false; } return true; diff --git a/settings/Controller/LogSettingsController.php b/settings/Controller/LogSettingsController.php index ce4913c2478..23e0fba902a 100644 --- a/settings/Controller/LogSettingsController.php +++ b/settings/Controller/LogSettingsController.php @@ -93,8 +93,8 @@ class LogSettingsController extends Controller { */ public function getEntries($count=50, $offset=0) { return new JSONResponse([ - 'data' => \OC\Log\Owncloud::getEntries($count, $offset), - 'remain' => count(\OC\Log\Owncloud::getEntries(1, $offset + $count)) !== 0, + 'data' => \OC\Log\File::getEntries($count, $offset), + 'remain' => count(\OC\Log\File::getEntries(1, $offset + $count)) !== 0, ]); } @@ -106,7 +106,7 @@ class LogSettingsController extends Controller { * @return StreamResponse */ public function download() { - $resp = new StreamResponse(\OC\Log\Owncloud::getLogFilePath()); + $resp = new StreamResponse(\OC\Log\File::getLogFilePath()); $resp->addHeader('Content-Type', 'application/octet-stream'); $resp->addHeader('Content-Disposition', 'attachment; filename="nextcloud.log"'); return $resp; diff --git a/settings/admin.php b/settings/admin.php index 11d3a3f40db..a458c813c11 100644 --- a/settings/admin.php +++ b/settings/admin.php @@ -44,12 +44,13 @@ OC_Util::addScript('files', 'jquery.fileupload'); \OC::$server->getEventDispatcher()->dispatch('OC\Settings\Admin::loadAdditionalScripts'); -$showLog = (\OC::$server->getConfig()->getSystemValue('log_type', 'owncloud') === 'owncloud'); +$logType = \OC::$server->getConfig()->getSystemValue('log_type', 'file'); +$showLog = ($logType === 'file' || $logType === 'owncloud'); $numEntriesToLoad = 3; -$entries = \OC\Log\Owncloud::getEntries($numEntriesToLoad + 1); +$entries = \OC\Log\File::getEntries($numEntriesToLoad + 1); $entriesRemaining = count($entries) > $numEntriesToLoad; $entries = array_slice($entries, 0, $numEntriesToLoad); -$logFilePath = \OC\Log\Owncloud::getLogFilePath(); +$logFilePath = \OC\Log\File::getLogFilePath(); $doesLogFileExist = file_exists($logFilePath); $logFileSize = 0; if($doesLogFileExist) { diff --git a/settings/css/settings.css b/settings/css/settings.css index 4cd85598443..fe586205bdf 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -445,6 +445,9 @@ span.version { table.grid td.date{ white-space: nowrap; } +#log-section p { + margin-top:20px; +} /* ADMIN */ #security-warning li { diff --git a/settings/js/apps.js b/settings/js/apps.js index 55847162350..66c097e1257 100644 --- a/settings/js/apps.js +++ b/settings/js/apps.js @@ -396,7 +396,9 @@ OC.Settings.Apps = OC.Settings.Apps || { if(container.children('li[data-id="'+entry.id+'"]').length === 0){ var li=$('<li></li>'); li.attr('data-id', entry.id); - var img= $('<img class="app-icon"/>').attr({ src: entry.icon}); + var img = '<svg width="32" height="32" viewBox="0 0 32 32">'; + img += '<defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs>'; + img += '<image x="0" y="0" width="32" height="32" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="' + entry.icon + '" class="app-icon" /></svg>'; var a=$('<a></a>').attr('href', entry.href); var filename=$('<span></span>'); var loading = $('<div class="icon-loading-dark"></div>').css('display', 'none'); @@ -425,11 +427,6 @@ OC.Settings.Apps = OC.Settings.Apps || { .animate({opacity: 0.5}) .animate({opacity: 1}) .animate({opacity: 0.75}); - - if (!OC.Util.hasSVGSupport() && entry.icon.match(/\.svg$/i)) { - $(img).addClass('svg'); - OC.Util.replaceSVG(); - } } } diff --git a/settings/js/users/users.js b/settings/js/users/users.js index e0fdea64773..46c67fb8313 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -91,11 +91,11 @@ var UserList = { */ // make them look like the multiselect buttons // until they get time to really get initialized - groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" data-placehoder="Groups" title="' + t('settings', 'no group') + '"></select>') + groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" data-placehoder="Groups" title="' + t('settings', 'No group') + '"></select>') .data('username', user.name) .data('user-groups', user.groups); if ($tr.find('td.subadmins').length > 0) { - subAdminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'no group') + '">') + subAdminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'No group') + '">') .data('username', user.name) .data('user-groups', user.groups) .data('subadmin', user.subadmin); @@ -501,7 +501,7 @@ var UserList = { }; var label; if (oc_isadmin) { - label = t('settings', 'add group'); + label = t('settings', 'Add group'); } else { label = null; diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js index ec009e403a2..114e3d1fe78 100644 --- a/settings/l10n/cs_CZ.js +++ b/settings/l10n/cs_CZ.js @@ -117,10 +117,10 @@ OC.L10N.register( "A valid group name must be provided" : "Musíte zadat platný název skupiny", "deleted {groupName}" : "smazána {groupName}", "undo" : "vrátit zpět", - "no group" : "není ve skupině", + "No group" : "Žádná skupina", "never" : "nikdy", "deleted {userName}" : "smazán {userName}", - "add group" : "přidat skupinu", + "Add group" : "Přidat skupinu", "Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Změna hesla bude mít za následek ztrátu dat, protože jejich obnova není pro tohoto uživatele dostupná.", "A valid username must be provided" : "Musíte zadat platné uživatelské jméno", @@ -149,7 +149,6 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze neběží s úrovní izolace transakcí \"READ COMMITED\". Toto může způsobit problémy při paralelním spouštění více akcí současně.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Je nainstalován %1$s nižší verze než %2$s, z důvodu lepší stability a výkonu doporučujeme aktualizovat na novější verzi %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Schází PHP modul 'fileinfo'. Doporučujeme jej povolit pro nejlepší výsledky detekce typů MIME.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů je vypnuto, což může vést k problémům s \"race\" podmínkami. Pro zabránění těmto problémům povolte 'filelocking.enabled' v souboru config.php. Více informací lze nalézt v <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaci ↗</a>.", @@ -211,11 +210,11 @@ OC.L10N.register( "Store credentials" : "Ukládat přihlašovací údaje", "Test email settings" : "Test nastavení emailu", "Send email" : "Odeslat email", + "What to log" : "Co se má logovat", "Download logfile" : "Stáhnout soubor logu", "More" : "Více", "Less" : "Méně", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!", - "What to log" : "Co se má logovat", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Je použita databáze SQLite. Pro větší instalace doporučujeme přejít na robustnější databázi.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Pro migraci na jinou databázi použijte v příkazovém řádku nástroj: 'occ db:convert-type' nebo nahlédněte do <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentace ↗</a>.", @@ -281,6 +280,7 @@ OC.L10N.register( "Change password" : "Změnit heslo", "Language" : "Jazyk", "Help translate" : "Pomoci s překladem", + "Web, desktop and mobile clients currently logged in to your account." : "Weboví, desktopoví a mobilní klienti aktuálně přihlášeni k vašemu účtu.", "Device" : "Přístroj", "Last activity" : "Poslední aktivita", "Passcodes that give an app or device permissions to access your account." : "Přihlašovací údaj poskytující aplikaci nebo přístroji oprávnění pro přístup k tomuto účtu.", @@ -306,19 +306,17 @@ OC.L10N.register( "Create" : "Vytvořit", "Admin Recovery Password" : "Heslo obnovy správce", "Enter the recovery password in order to recover the users files during password change" : "Zadejte heslo obnovy pro obnovení souborů uživatele při změně hesla", - "Add Group" : "Přidat skupinu", "Group" : "Skupina", "Everyone" : "Všichni", "Admins" : "Administrátoři", - "Default Quota" : "Výchozí kvóta", + "Default quota" : "Výchozí kvóta", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Zvolte prosím kvótu pro úložiště (např. \"512 MB\" nebo \"12 GB\")", "Other" : "Jiný", - "Full Name" : "Celé jméno", - "Group Admin for" : "Správce skupiny ", + "Group admin for" : "Seskupit skupiny pro", "Quota" : "Kvóta", - "Storage Location" : "Umístění úložiště", - "User Backend" : "Uživatelská podpůrná vrstva", - "Last Login" : "Poslední přihlášení", + "Storage location" : "Umístění úložiště", + "User backend" : "Backend uživatelů", + "Last login" : "Poslední přihlášení", "change full name" : "změnit celé jméno", "set new password" : "nastavit nové heslo", "change email address" : "změnit emailovou adresu", diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json index 30dcc39d749..e026e0b5e1e 100644 --- a/settings/l10n/cs_CZ.json +++ b/settings/l10n/cs_CZ.json @@ -115,10 +115,10 @@ "A valid group name must be provided" : "Musíte zadat platný název skupiny", "deleted {groupName}" : "smazána {groupName}", "undo" : "vrátit zpět", - "no group" : "není ve skupině", + "No group" : "Žádná skupina", "never" : "nikdy", "deleted {userName}" : "smazán {userName}", - "add group" : "přidat skupinu", + "Add group" : "Přidat skupinu", "Invalid quota value \"{val}\"" : "Neplatná hodnota kvóty \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Změna hesla bude mít za následek ztrátu dat, protože jejich obnova není pro tohoto uživatele dostupná.", "A valid username must be provided" : "Musíte zadat platné uživatelské jméno", @@ -147,7 +147,6 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Vaše databáze neběží s úrovní izolace transakcí \"READ COMMITED\". Toto může způsobit problémy při paralelním spouštění více akcí současně.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Je nainstalován %1$s nižší verze než %2$s, z důvodu lepší stability a výkonu doporučujeme aktualizovat na novější verzi %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Schází PHP modul 'fileinfo'. Doporučujeme jej povolit pro nejlepší výsledky detekce typů MIME.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transakční uzamykání souborů je vypnuto, což může vést k problémům s \"race\" podmínkami. Pro zabránění těmto problémům povolte 'filelocking.enabled' v souboru config.php. Více informací lze nalézt v <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentaci ↗</a>.", @@ -209,11 +208,11 @@ "Store credentials" : "Ukládat přihlašovací údaje", "Test email settings" : "Test nastavení emailu", "Send email" : "Odeslat email", + "What to log" : "Co se má logovat", "Download logfile" : "Stáhnout soubor logu", "More" : "Více", "Less" : "Méně", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Soubor logu je větší než 100 MB. Jeho stažení zabere nějaký čas!", - "What to log" : "Co se má logovat", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Je použita databáze SQLite. Pro větší instalace doporučujeme přejít na robustnější databázi.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Pro migraci na jinou databázi použijte v příkazovém řádku nástroj: 'occ db:convert-type' nebo nahlédněte do <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentace ↗</a>.", @@ -279,6 +278,7 @@ "Change password" : "Změnit heslo", "Language" : "Jazyk", "Help translate" : "Pomoci s překladem", + "Web, desktop and mobile clients currently logged in to your account." : "Weboví, desktopoví a mobilní klienti aktuálně přihlášeni k vašemu účtu.", "Device" : "Přístroj", "Last activity" : "Poslední aktivita", "Passcodes that give an app or device permissions to access your account." : "Přihlašovací údaj poskytující aplikaci nebo přístroji oprávnění pro přístup k tomuto účtu.", @@ -304,19 +304,17 @@ "Create" : "Vytvořit", "Admin Recovery Password" : "Heslo obnovy správce", "Enter the recovery password in order to recover the users files during password change" : "Zadejte heslo obnovy pro obnovení souborů uživatele při změně hesla", - "Add Group" : "Přidat skupinu", "Group" : "Skupina", "Everyone" : "Všichni", "Admins" : "Administrátoři", - "Default Quota" : "Výchozí kvóta", + "Default quota" : "Výchozí kvóta", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Zvolte prosím kvótu pro úložiště (např. \"512 MB\" nebo \"12 GB\")", "Other" : "Jiný", - "Full Name" : "Celé jméno", - "Group Admin for" : "Správce skupiny ", + "Group admin for" : "Seskupit skupiny pro", "Quota" : "Kvóta", - "Storage Location" : "Umístění úložiště", - "User Backend" : "Uživatelská podpůrná vrstva", - "Last Login" : "Poslední přihlášení", + "Storage location" : "Umístění úložiště", + "User backend" : "Backend uživatelů", + "Last login" : "Poslední přihlášení", "change full name" : "změnit celé jméno", "set new password" : "nastavit nové heslo", "change email address" : "změnit emailovou adresu", diff --git a/settings/l10n/da.js b/settings/l10n/da.js index 129d0fdb0b4..15c64fb5f3c 100644 --- a/settings/l10n/da.js +++ b/settings/l10n/da.js @@ -92,10 +92,8 @@ OC.L10N.register( "A valid group name must be provided" : "Et gyldigt gruppenavn skal angives ", "deleted {groupName}" : "slettede {groupName}", "undo" : "fortryd", - "no group" : "ingen gruppe", "never" : "aldrig", "deleted {userName}" : "slettede {userName}", - "add group" : "Tilføj gruppe", "Changing the password will result in data loss, because data recovery is not available for this user" : "Ændring af kodeordet vil føre til datatab, fordi datagendannelse ikke er tilgængelig for denne bruger", "A valid username must be provided" : "Et gyldigt brugernavn skal angives", "A valid password must be provided" : "En gyldig adgangskode skal angives", @@ -247,19 +245,12 @@ OC.L10N.register( "Create" : "Ny", "Admin Recovery Password" : "Administrator gendannelse kodeord", "Enter the recovery password in order to recover the users files during password change" : "Indtast et gendannelse kodeord for, at kunne gendanne brugerens filer ved ændring af kodeord", - "Add Group" : "Tilføj Gruppe", "Group" : "Gruppe", "Everyone" : "Alle", "Admins" : "Administratore", - "Default Quota" : "Standard kvote", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Indtast venligst lagerkvote (f.eks. \"512 MB\" eller \"12 GB\")", "Other" : "Andet", - "Full Name" : "Fulde navn", - "Group Admin for" : "Gruppeadministrator for", "Quota" : "Kvote", - "Storage Location" : "Placering af lageret", - "User Backend" : "Bruger-backend", - "Last Login" : "Seneste login", "change full name" : "ændre fulde navn", "set new password" : "skift kodeord", "change email address" : "skift e-mailadresse", diff --git a/settings/l10n/da.json b/settings/l10n/da.json index 9f77ac337b3..359ef79fccc 100644 --- a/settings/l10n/da.json +++ b/settings/l10n/da.json @@ -90,10 +90,8 @@ "A valid group name must be provided" : "Et gyldigt gruppenavn skal angives ", "deleted {groupName}" : "slettede {groupName}", "undo" : "fortryd", - "no group" : "ingen gruppe", "never" : "aldrig", "deleted {userName}" : "slettede {userName}", - "add group" : "Tilføj gruppe", "Changing the password will result in data loss, because data recovery is not available for this user" : "Ændring af kodeordet vil føre til datatab, fordi datagendannelse ikke er tilgængelig for denne bruger", "A valid username must be provided" : "Et gyldigt brugernavn skal angives", "A valid password must be provided" : "En gyldig adgangskode skal angives", @@ -245,19 +243,12 @@ "Create" : "Ny", "Admin Recovery Password" : "Administrator gendannelse kodeord", "Enter the recovery password in order to recover the users files during password change" : "Indtast et gendannelse kodeord for, at kunne gendanne brugerens filer ved ændring af kodeord", - "Add Group" : "Tilføj Gruppe", "Group" : "Gruppe", "Everyone" : "Alle", "Admins" : "Administratore", - "Default Quota" : "Standard kvote", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Indtast venligst lagerkvote (f.eks. \"512 MB\" eller \"12 GB\")", "Other" : "Andet", - "Full Name" : "Fulde navn", - "Group Admin for" : "Gruppeadministrator for", "Quota" : "Kvote", - "Storage Location" : "Placering af lageret", - "User Backend" : "Bruger-backend", - "Last Login" : "Seneste login", "change full name" : "ændre fulde navn", "set new password" : "skift kodeord", "change email address" : "skift e-mailadresse", diff --git a/settings/l10n/de.js b/settings/l10n/de.js index 113e655f544..76ea414a09b 100644 --- a/settings/l10n/de.js +++ b/settings/l10n/de.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", - "No user supplied" : "Keinen Benutzer übermittelt", + "No user supplied" : "Kein Benutzer übermittelt", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password, otherwise all user data will be lost" : "Bitte gib ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen können", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut.", @@ -89,12 +89,15 @@ OC.L10N.register( "Disconnect" : "Trennen", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", + "Firefox" : "Firefox", "Google Chrome" : "Google Chrome", "Safari" : "Safari", "Google Chrome for Android" : "Google Chrome für Android", "iPhone" : "iPhone", "iOS Client" : "iOS Client", "Android Client" : "Android Client", + "Sync client - {os}" : "Synchronisationssoftware - {os}", + "This session" : "Diese Sitzung", "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", "Error while creating device token" : "Fehler beim Erstellen des Gerätetokens", "Error while deleting the token" : "Fehler beim Löschen des Gerätetokens", @@ -114,10 +117,10 @@ OC.L10N.register( "A valid group name must be provided" : "Ein gültiger Gruppenname muss angegeben werden", "deleted {groupName}" : "{groupName} gelöscht", "undo" : "rückgängig machen", - "no group" : "Keine Gruppe", + "No group" : "Keine Gruppe", "never" : "niemals", "deleted {userName}" : "{userName} gelöscht", - "add group" : "Gruppe hinzufügen", + "Add group" : "Gruppe hinzufügen", "Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Die Änderung des Passworts führt zu Datenverlust, weil die Datenwiederherstellung für diesen Benutzer nicht verfügbar ist", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", @@ -146,7 +149,7 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s ist in einer älteren Version als %2$s installiert. Aus Stabilitäts- und Performancegründen empfehlen wir eine Aktualisierung auf eine neuere %1$s-Version", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen dieses Modul zu aktivieren um die besten Resultate bei der Erkennung der Dateitypen zu erreichen.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. 'filelocking.enabled' in der config.php aktivieren, um diese Probleme zu vermeiden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.", @@ -208,11 +211,11 @@ OC.L10N.register( "Store credentials" : "Anmeldeinformationen speichern", "Test email settings" : "E-Mail-Einstellungen testen", "Send email" : "E-Mail senden", + "What to log" : "Was für ein Protokoll", "Download logfile" : "Logdatei herunterladen", "More" : "Mehr", "Less" : "Weniger", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", - "What to log" : "Was für ein Protokoll", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutze bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.", @@ -226,7 +229,7 @@ OC.L10N.register( "Developer documentation" : "Dokumentation für Entwickler", "Experimental applications ahead" : "Experimentelle Apps nachfolgend", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.", - "by %s" : "durch %s", + "by %s" : "von %s", "%s-licensed" : "%s-lizensiert", "Documentation:" : "Dokumentation:", "User documentation" : "Dokumentation für Benutzer", @@ -243,7 +246,7 @@ OC.L10N.register( "Uninstall App" : "App deinstallieren", "Enable experimental apps" : "Experimentelle Apps aktivieren", "SSL Root Certificates" : "SSL Root Zertifikate", - "Common Name" : "Common Name", + "Common Name" : "Allgemeiner Name", "Valid until" : "Gültig bis", "Issued By" : "Ausgestellt von:", "Valid until %s" : "Gültig bis %s", @@ -278,6 +281,10 @@ OC.L10N.register( "Change password" : "Passwort ändern", "Language" : "Sprache", "Help translate" : "Hilf bei der Übersetzung", + "Web, desktop and mobile clients currently logged in to your account." : "Aktuell in Deinem Konto eingeloggte Web-, Desktop- und Mobil-Clients.", + "Device" : "Gerät", + "Last activity" : "Letzte Aktivität", + "Passcodes that give an app or device permissions to access your account." : "PINs mit denen APPs oder Geräte auf Dein Konto zugreifen können.", "Name" : "Name", "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", @@ -300,19 +307,17 @@ OC.L10N.register( "Create" : "Anlegen", "Admin Recovery Password" : "Admin-Wiederherstellungspasswort", "Enter the recovery password in order to recover the users files during password change" : "Gib das Wiederherstellungspasswort ein, um die Benutzerdateien während der Passwortänderung wiederherzustellen", - "Add Group" : "Gruppe hinzufügen", "Group" : "Gruppe", "Everyone" : "Jeder", "Admins" : "Administratoren", - "Default Quota" : "Standard-Quota", + "Default quota" : "Standard Speicherplatzgröße", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z. B.: „512 MB“ oder „12 GB“)", "Other" : "Andere", - "Full Name" : "Vollständiger Name", - "Group Admin for" : "Gruppenadministrator für", + "Group admin for" : "Gruppenadministrator für", "Quota" : "Quota", - "Storage Location" : "Speicherort", - "User Backend" : "Benutzer-Backend", - "Last Login" : "Letzte Anmeldung", + "Storage location" : "Speicherort", + "User backend" : "Benutzer-Backend", + "Last login" : "Letztes Login", "change full name" : "Vollständigen Namen ändern", "set new password" : "Neues Passwort setzen", "change email address" : "E-Mail-Adresse ändern", diff --git a/settings/l10n/de.json b/settings/l10n/de.json index 7ef5f868f91..8e40adaa26d 100644 --- a/settings/l10n/de.json +++ b/settings/l10n/de.json @@ -1,7 +1,7 @@ { "translations": { "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", - "No user supplied" : "Keinen Benutzer übermittelt", + "No user supplied" : "Kein Benutzer übermittelt", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password, otherwise all user data will be lost" : "Bitte gib ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen können", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfe das Passwort und versuche es erneut.", @@ -87,12 +87,15 @@ "Disconnect" : "Trennen", "Internet Explorer" : "Internet Explorer", "Edge" : "Edge", + "Firefox" : "Firefox", "Google Chrome" : "Google Chrome", "Safari" : "Safari", "Google Chrome for Android" : "Google Chrome für Android", "iPhone" : "iPhone", "iOS Client" : "iOS Client", "Android Client" : "Android Client", + "Sync client - {os}" : "Synchronisationssoftware - {os}", + "This session" : "Diese Sitzung", "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", "Error while creating device token" : "Fehler beim Erstellen des Gerätetokens", "Error while deleting the token" : "Fehler beim Löschen des Gerätetokens", @@ -112,10 +115,10 @@ "A valid group name must be provided" : "Ein gültiger Gruppenname muss angegeben werden", "deleted {groupName}" : "{groupName} gelöscht", "undo" : "rückgängig machen", - "no group" : "Keine Gruppe", + "No group" : "Keine Gruppe", "never" : "niemals", "deleted {userName}" : "{userName} gelöscht", - "add group" : "Gruppe hinzufügen", + "Add group" : "Gruppe hinzufügen", "Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Die Änderung des Passworts führt zu Datenverlust, weil die Datenwiederherstellung für diesen Benutzer nicht verfügbar ist", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", @@ -144,7 +147,7 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Deine Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s ist in einer älteren Version als %2$s installiert. Aus Stabilitäts- und Performancegründen empfehlen wir eine Aktualisierung auf eine neuere %1$s-Version", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen dieses Modul zu aktivieren um die besten Resultate bei der Erkennung der Dateitypen zu erreichen.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. 'filelocking.enabled' in der config.php aktivieren, um diese Probleme zu vermeiden. Weitere Informationen findest du in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.", @@ -206,11 +209,11 @@ "Store credentials" : "Anmeldeinformationen speichern", "Test email settings" : "E-Mail-Einstellungen testen", "Send email" : "E-Mail senden", + "What to log" : "Was für ein Protokoll", "Download logfile" : "Logdatei herunterladen", "More" : "Mehr", "Less" : "Weniger", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", - "What to log" : "Was für ein Protokoll", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutze bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.", @@ -224,7 +227,7 @@ "Developer documentation" : "Dokumentation für Entwickler", "Experimental applications ahead" : "Experimentelle Apps nachfolgend", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.", - "by %s" : "durch %s", + "by %s" : "von %s", "%s-licensed" : "%s-lizensiert", "Documentation:" : "Dokumentation:", "User documentation" : "Dokumentation für Benutzer", @@ -241,7 +244,7 @@ "Uninstall App" : "App deinstallieren", "Enable experimental apps" : "Experimentelle Apps aktivieren", "SSL Root Certificates" : "SSL Root Zertifikate", - "Common Name" : "Common Name", + "Common Name" : "Allgemeiner Name", "Valid until" : "Gültig bis", "Issued By" : "Ausgestellt von:", "Valid until %s" : "Gültig bis %s", @@ -276,6 +279,10 @@ "Change password" : "Passwort ändern", "Language" : "Sprache", "Help translate" : "Hilf bei der Übersetzung", + "Web, desktop and mobile clients currently logged in to your account." : "Aktuell in Deinem Konto eingeloggte Web-, Desktop- und Mobil-Clients.", + "Device" : "Gerät", + "Last activity" : "Letzte Aktivität", + "Passcodes that give an app or device permissions to access your account." : "PINs mit denen APPs oder Geräte auf Dein Konto zugreifen können.", "Name" : "Name", "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", @@ -298,19 +305,17 @@ "Create" : "Anlegen", "Admin Recovery Password" : "Admin-Wiederherstellungspasswort", "Enter the recovery password in order to recover the users files during password change" : "Gib das Wiederherstellungspasswort ein, um die Benutzerdateien während der Passwortänderung wiederherzustellen", - "Add Group" : "Gruppe hinzufügen", "Group" : "Gruppe", "Everyone" : "Jeder", "Admins" : "Administratoren", - "Default Quota" : "Standard-Quota", + "Default quota" : "Standard Speicherplatzgröße", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z. B.: „512 MB“ oder „12 GB“)", "Other" : "Andere", - "Full Name" : "Vollständiger Name", - "Group Admin for" : "Gruppenadministrator für", + "Group admin for" : "Gruppenadministrator für", "Quota" : "Quota", - "Storage Location" : "Speicherort", - "User Backend" : "Benutzer-Backend", - "Last Login" : "Letzte Anmeldung", + "Storage location" : "Speicherort", + "User backend" : "Benutzer-Backend", + "Last login" : "Letztes Login", "change full name" : "Vollständigen Namen ändern", "set new password" : "Neues Passwort setzen", "change email address" : "E-Mail-Adresse ändern", diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js index d2dc857963b..4474c11a040 100644 --- a/settings/l10n/de_DE.js +++ b/settings/l10n/de_DE.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", - "No user supplied" : "Keinen Benutzer angegeben", + "No user supplied" : "Kein Benutzer angegeben", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password, otherwise all user data will be lost" : "Bitte geben Sie ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen können", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfen Sie das Passwort und versuchen Sie es erneut.", @@ -94,11 +94,13 @@ OC.L10N.register( "Safari" : "Safari", "Google Chrome for Android" : "Google Chrome für Android", "iPhone" : "iPhone", - "iOS Client" : "iOS Client", - "Android Client" : "Android Client", + "iOS Client" : "iOS-Client", + "Android Client" : "Android-Client", + "Sync client - {os}" : "Synchronisationssoftware - {os}", + "This session" : "Diese Sitzung", "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", - "Error while creating device token" : "Fehler beim Erstellen des Gerätetokens", - "Error while deleting the token" : "Fehler beim Löschen des Gerätetokens", + "Error while creating device token" : "Fehler beim Erstellen des Geräte-Tokens", + "Error while deleting the token" : "Fehler beim Löschen des Geräte-Tokens", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte laden Sie ein ASCII-kodiertes PEM-Zertifikat hoch.", "Valid until {date}" : "Gültig bis {date}", "Delete" : "Löschen", @@ -106,7 +108,7 @@ OC.L10N.register( "Select a profile picture" : "Wählen Sie ein Profilbild", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", - "So-so password" : "Passables Passwort", + "So-so password" : "Akzeptables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", "Groups" : "Gruppen", @@ -115,10 +117,10 @@ OC.L10N.register( "A valid group name must be provided" : "Ein gültiger Gruppenname muss angegeben werden", "deleted {groupName}" : "{groupName} gelöscht", "undo" : "rückgängig machen", - "no group" : "Keine Gruppe", + "No group" : "Keine Gruppe", "never" : "niemals", "deleted {userName}" : "{userName} gelöscht", - "add group" : "Gruppe hinzufügen", + "Add group" : "Gruppe hinzufügen", "Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Die Änderung des Passworts führt zu Datenverlust, weil die Datenwiederherstellung für diesen Benutzer nicht verfügbar ist", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", @@ -147,7 +149,7 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "ihre Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Ihre Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s ist in einer älteren Version als %2$s installiert. Aus Stabilitäts- und Performancegründen empfehlen wir eine Aktualisierung auf eine neuere %1$s-Version", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren, um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. Aktivieren Sie 'filelocking.enabled' in der config.php diese Probleme zu vermeiden. Weitere Informationen findest Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.", @@ -168,7 +170,7 @@ OC.L10N.register( "Expire after " : "Ablauf nach ", "days" : "Tagen", "Enforce expiration date" : "Ablaufdatum erzwingen", - "Allow resharing" : "Weiterverteilen erlauben", + "Allow resharing" : "Weiterteilen erlauben", "Allow sharing with groups" : "Mit Gruppen teilen erlauben", "Restrict users to only share with users in their groups" : "Benutzer auf das Teilen innerhalb ihrer Gruppen beschränken", "Allow users to send mail notification for shared files to other users" : "Benutzern erlauben, E-Mail-Benachrichtigungen für freigegebene Dateien an andere Benutzer zu senden", @@ -182,7 +184,7 @@ OC.L10N.register( "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutzen Sie den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", - "Please read carefully before activating server-side encryption: " : "Bitte lesen Sie ganz genau, bevor Sie die Serverseite Verschlüsselung aktivieren:", + "Please read carefully before activating server-side encryption: " : "Bitte lesen Sie ganz genau, bevor Sie die serverseitige Verschlüsselung aktivieren:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Wird die Verschlüsselung einmal aktiviert, so werden alle ab diesem Zeitpunkt hochgeladene Dateien verschlüsselt. Sie kann nur wieder deaktiviert werden, wenn das Verschlüsselungsmodul dies unterstützt und alle Voraussetzungen (wie das Setzen eines Wiederherstellungsschlüssels) im Vorhinein erfüllt wurden.", "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lese in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", "Be aware that encryption always increases the file size." : "Bedenke das durch die Verschlüsselung die Dateigröße zunimmt. ", @@ -204,20 +206,20 @@ OC.L10N.register( "Server address" : "Serveradresse", "Port" : "Port", "Credentials" : "Zugangsdaten", - "SMTP Username" : "SMTP Benutzername", - "SMTP Password" : "SMTP Passwort", + "SMTP Username" : "SMTP-Benutzername", + "SMTP Password" : "SMTP-Passwort", "Store credentials" : "Anmeldeinformationen speichern", "Test email settings" : "E-Mail-Einstellungen testen", "Send email" : "E-Mail senden", + "What to log" : "Was geloggt wird", "Download logfile" : "Logdatei herunterladen", "More" : "Mehr", "Less" : "Weniger", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", - "What to log" : "Was geloggt wird", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutzen Sie bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.", - "How to do backups" : "Wie man Backups anlegt", + "How to do backups" : "Wie man Datensicherungen anlegt", "Advanced monitoring" : "Erweitertes Monitoring", "Performance tuning" : "Leistungsoptimierung", "Improving the config.php" : "Die config.php optimieren", @@ -227,7 +229,7 @@ OC.L10N.register( "Developer documentation" : "Dokumentation für Entwickler", "Experimental applications ahead" : "Experimentelle Apps nachfolgend", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.", - "by %s" : "durch %s", + "by %s" : "von %s", "%s-licensed" : "%s-Lizensiert", "Documentation:" : "Dokumentation:", "User documentation" : "Dokumentation für Benutzer", @@ -244,7 +246,7 @@ OC.L10N.register( "Uninstall App" : "App deinstallieren", "Enable experimental apps" : "Experimentelle Apps aktivieren", "SSL Root Certificates" : "SSL Root Zertifikate", - "Common Name" : "Common Name", + "Common Name" : "Allgemeiner Name", "Valid until" : "Gültig bis", "Issued By" : "Ausgestellt von:", "Valid until %s" : "Gültig bis %s", @@ -279,6 +281,10 @@ OC.L10N.register( "Change password" : "Passwort ändern", "Language" : "Sprache", "Help translate" : "Helfen Sie bei der Übersetzung", + "Web, desktop and mobile clients currently logged in to your account." : "Aktuell in Ihrem Konto eingeloggte Web-, Desktop- und Mobil-Clients.", + "Device" : "Gerät", + "Last activity" : "Letzte Aktivität", + "Passcodes that give an app or device permissions to access your account." : "PINs mit denen APPs oder Geräte auf Ihr Konto zugreifen können.", "Name" : "Name", "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", @@ -301,19 +307,17 @@ OC.L10N.register( "Create" : "Erstellen", "Admin Recovery Password" : "Admin-Passwort-Wiederherstellung", "Enter the recovery password in order to recover the users files during password change" : "Geben Sie das Wiederherstellungspasswort ein, um die Benutzerdateien während der Passwortänderung wiederherzustellen", - "Add Group" : "Gruppe hinzufügen", "Group" : "Gruppe", "Everyone" : "Jeder", "Admins" : "Administratoren", - "Default Quota" : "Standardkontingent", + "Default quota" : "Standard-Kontingent", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z.B.: „512 MB“ oder „12 GB“)", "Other" : "Andere", - "Full Name" : "Vollständiger Name", - "Group Admin for" : "Gruppenadministrator für", + "Group admin for" : "Gruppenadministrator für", "Quota" : "Kontingent", - "Storage Location" : "Speicherort", - "User Backend" : "Benutzer-Backend", - "Last Login" : "Letzte Anmeldung", + "Storage location" : "Speicherort", + "User backend" : "Benutzer-Backend", + "Last login" : "Letzte Anmeldung", "change full name" : "Vollständigen Namen ändern", "set new password" : "Neues Passwort setzen", "change email address" : "E-Mail-Adresse ändern", diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json index a8cf1445c48..030f3f1cea2 100644 --- a/settings/l10n/de_DE.json +++ b/settings/l10n/de_DE.json @@ -1,7 +1,7 @@ { "translations": { "Wrong password" : "Falsches Passwort", "Saved" : "Gespeichert", - "No user supplied" : "Keinen Benutzer angegeben", + "No user supplied" : "Kein Benutzer angegeben", "Authentication error" : "Authentifizierungsfehler", "Please provide an admin recovery password, otherwise all user data will be lost" : "Bitte geben Sie ein Wiederherstellungspasswort für das Administratorkonto an, da sonst alle Benutzerdaten verlorengehen können", "Wrong admin recovery password. Please check the password and try again." : "Falsches Wiederherstellungspasswort für das Admin-Konto. Bitte überprüfen Sie das Passwort und versuchen Sie es erneut.", @@ -92,11 +92,13 @@ "Safari" : "Safari", "Google Chrome for Android" : "Google Chrome für Android", "iPhone" : "iPhone", - "iOS Client" : "iOS Client", - "Android Client" : "Android Client", + "iOS Client" : "iOS-Client", + "Android Client" : "Android-Client", + "Sync client - {os}" : "Synchronisationssoftware - {os}", + "This session" : "Diese Sitzung", "Error while loading browser sessions and device tokens" : "Fehler beim Laden der Browser-Sitzungen und Gerätetoken", - "Error while creating device token" : "Fehler beim Erstellen des Gerätetokens", - "Error while deleting the token" : "Fehler beim Löschen des Gerätetokens", + "Error while creating device token" : "Fehler beim Erstellen des Geräte-Tokens", + "Error while deleting the token" : "Fehler beim Löschen des Geräte-Tokens", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Es ist ein Fehler aufgetreten. Bitte laden Sie ein ASCII-kodiertes PEM-Zertifikat hoch.", "Valid until {date}" : "Gültig bis {date}", "Delete" : "Löschen", @@ -104,7 +106,7 @@ "Select a profile picture" : "Wählen Sie ein Profilbild", "Very weak password" : "Sehr schwaches Passwort", "Weak password" : "Schwaches Passwort", - "So-so password" : "Passables Passwort", + "So-so password" : "Akzeptables Passwort", "Good password" : "Gutes Passwort", "Strong password" : "Starkes Passwort", "Groups" : "Gruppen", @@ -113,10 +115,10 @@ "A valid group name must be provided" : "Ein gültiger Gruppenname muss angegeben werden", "deleted {groupName}" : "{groupName} gelöscht", "undo" : "rückgängig machen", - "no group" : "Keine Gruppe", + "No group" : "Keine Gruppe", "never" : "niemals", "deleted {userName}" : "{userName} gelöscht", - "add group" : "Gruppe hinzufügen", + "Add group" : "Gruppe hinzufügen", "Invalid quota value \"{val}\"" : "Ungültiger Grenzwert \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Die Änderung des Passworts führt zu Datenverlust, weil die Datenwiederherstellung für diesen Benutzer nicht verfügbar ist", "A valid username must be provided" : "Es muss ein gültiger Benutzername angegeben werden", @@ -145,7 +147,7 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "ihre Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Ihre Datenbank läuft nicht mit der \"READ COMMITED\" Transaktionsisolationsstufe. Dies kann Probleme hervorrufen, wenn mehrere Aktionen parallel ausgeführt werden.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s ist in einer älteren Version als %2$s installiert. Aus Stabilitäts- und Performancegründen empfehlen wir eine Aktualisierung auf eine neuere %1$s-Version", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Das PHP-Modul 'fileinfo' fehlt. Wir empfehlen Ihnen dieses Modul zu aktivieren, um die besten Resultate bei der Bestimmung der Dateitypen zu erzielen.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transaktionales Sperren ist deaktiviert, was zu Problemen mit Laufzeitbedingungen führen kann. Aktivieren Sie 'filelocking.enabled' in der config.php diese Probleme zu vermeiden. Weitere Informationen findest Sie in unserer <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a>.", @@ -166,7 +168,7 @@ "Expire after " : "Ablauf nach ", "days" : "Tagen", "Enforce expiration date" : "Ablaufdatum erzwingen", - "Allow resharing" : "Weiterverteilen erlauben", + "Allow resharing" : "Weiterteilen erlauben", "Allow sharing with groups" : "Mit Gruppen teilen erlauben", "Restrict users to only share with users in their groups" : "Benutzer auf das Teilen innerhalb ihrer Gruppen beschränken", "Allow users to send mail notification for shared files to other users" : "Benutzern erlauben, E-Mail-Benachrichtigungen für freigegebene Dateien an andere Benutzer zu senden", @@ -180,7 +182,7 @@ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php ist als Webcron-Dienst registriert, der die cron.php alle 15 Minuten per HTTP aufruft.", "Use system's cron service to call the cron.php file every 15 minutes." : "Benutzen Sie den systemeigenen Cron-Dienst, um die cron.php alle 15 Minuten aufzurufen.", "Enable server-side encryption" : "Serverseitige Verschlüsselung aktivieren", - "Please read carefully before activating server-side encryption: " : "Bitte lesen Sie ganz genau, bevor Sie die Serverseite Verschlüsselung aktivieren:", + "Please read carefully before activating server-side encryption: " : "Bitte lesen Sie ganz genau, bevor Sie die serverseitige Verschlüsselung aktivieren:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Wird die Verschlüsselung einmal aktiviert, so werden alle ab diesem Zeitpunkt hochgeladene Dateien verschlüsselt. Sie kann nur wieder deaktiviert werden, wenn das Verschlüsselungsmodul dies unterstützt und alle Voraussetzungen (wie das Setzen eines Wiederherstellungsschlüssels) im Vorhinein erfüllt wurden.", "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Verschlüsselung alleine garantiert nicht die Systemsicherheit. Bitte lese in der Dokumentation nach, wie die Verschlüsselungs-app funktioniert und welche Anwendungsfälle unterstützt werden.", "Be aware that encryption always increases the file size." : "Bedenke das durch die Verschlüsselung die Dateigröße zunimmt. ", @@ -202,20 +204,20 @@ "Server address" : "Serveradresse", "Port" : "Port", "Credentials" : "Zugangsdaten", - "SMTP Username" : "SMTP Benutzername", - "SMTP Password" : "SMTP Passwort", + "SMTP Username" : "SMTP-Benutzername", + "SMTP Password" : "SMTP-Passwort", "Store credentials" : "Anmeldeinformationen speichern", "Test email settings" : "E-Mail-Einstellungen testen", "Send email" : "E-Mail senden", + "What to log" : "Was geloggt wird", "Download logfile" : "Logdatei herunterladen", "More" : "Mehr", "Less" : "Weniger", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Die Logdatei ist größer als 100 MB. Es kann etwas Zeit beanspruchen, sie herunterzuladen!", - "What to log" : "Was geloggt wird", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Um zu einer anderen Datenbank zu migrieren, benutzen Sie bitte die Kommandozeile: 'occ db:convert-type', oder in die <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">Dokumentation ↗</a> schauen.", - "How to do backups" : "Wie man Backups anlegt", + "How to do backups" : "Wie man Datensicherungen anlegt", "Advanced monitoring" : "Erweitertes Monitoring", "Performance tuning" : "Leistungsoptimierung", "Improving the config.php" : "Die config.php optimieren", @@ -225,7 +227,7 @@ "Developer documentation" : "Dokumentation für Entwickler", "Experimental applications ahead" : "Experimentelle Apps nachfolgend", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Experimentelle Apps sind nicht auf Sicherheitsprobleme hin überprüft, sind neu oder bekanntermaßen instabil und befinden sich in intensiver Entwicklung. Ihre Installation kann Datenverlust oder Sicherheitslücken hervorrufen.", - "by %s" : "durch %s", + "by %s" : "von %s", "%s-licensed" : "%s-Lizensiert", "Documentation:" : "Dokumentation:", "User documentation" : "Dokumentation für Benutzer", @@ -242,7 +244,7 @@ "Uninstall App" : "App deinstallieren", "Enable experimental apps" : "Experimentelle Apps aktivieren", "SSL Root Certificates" : "SSL Root Zertifikate", - "Common Name" : "Common Name", + "Common Name" : "Allgemeiner Name", "Valid until" : "Gültig bis", "Issued By" : "Ausgestellt von:", "Valid until %s" : "Gültig bis %s", @@ -277,6 +279,10 @@ "Change password" : "Passwort ändern", "Language" : "Sprache", "Help translate" : "Helfen Sie bei der Übersetzung", + "Web, desktop and mobile clients currently logged in to your account." : "Aktuell in Ihrem Konto eingeloggte Web-, Desktop- und Mobil-Clients.", + "Device" : "Gerät", + "Last activity" : "Letzte Aktivität", + "Passcodes that give an app or device permissions to access your account." : "PINs mit denen APPs oder Geräte auf Ihr Konto zugreifen können.", "Name" : "Name", "App name" : "App-Name", "Create new app password" : "Neues App-Passwort erstellen", @@ -299,19 +305,17 @@ "Create" : "Erstellen", "Admin Recovery Password" : "Admin-Passwort-Wiederherstellung", "Enter the recovery password in order to recover the users files during password change" : "Geben Sie das Wiederherstellungspasswort ein, um die Benutzerdateien während der Passwortänderung wiederherzustellen", - "Add Group" : "Gruppe hinzufügen", "Group" : "Gruppe", "Everyone" : "Jeder", "Admins" : "Administratoren", - "Default Quota" : "Standardkontingent", + "Default quota" : "Standard-Kontingent", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Bitte Speicherkontingent eingeben (z.B.: „512 MB“ oder „12 GB“)", "Other" : "Andere", - "Full Name" : "Vollständiger Name", - "Group Admin for" : "Gruppenadministrator für", + "Group admin for" : "Gruppenadministrator für", "Quota" : "Kontingent", - "Storage Location" : "Speicherort", - "User Backend" : "Benutzer-Backend", - "Last Login" : "Letzte Anmeldung", + "Storage location" : "Speicherort", + "User backend" : "Benutzer-Backend", + "Last login" : "Letzte Anmeldung", "change full name" : "Vollständigen Namen ändern", "set new password" : "Neues Passwort setzen", "change email address" : "E-Mail-Adresse ändern", diff --git a/settings/l10n/el.js b/settings/l10n/el.js index 94799dfcbb9..7802dd2b04b 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -94,10 +94,8 @@ OC.L10N.register( "A valid group name must be provided" : "Πρέπει να δοθεί ένα έγκυρο όνομα ομάδας", "deleted {groupName}" : "διαγραφή {groupName}", "undo" : "αναίρεση", - "no group" : "καμια ομάδα", "never" : "ποτέ", "deleted {userName}" : "διαγραφή {userName}", - "add group" : "προσθήκη ομάδας", "Changing the password will result in data loss, because data recovery is not available for this user" : "Η αλλαγή του κωδικού πρόσβασης θα έχει ως αποτέλεσμα το χάσιμο δεδομένων, επειδή η ανάκτηση δεδομένων δεν είναι διαθέσιμη γι' αυτόν τον χρήστη", "A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη", "A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό", @@ -198,6 +196,7 @@ OC.L10N.register( "Admin documentation" : "Τεκμηρίωση Διαχειριστή", "Show description …" : "Εμφάνιση περιγραφής", "Hide description …" : "Απόκρυψη περιγραφής", + "This app has an update available." : "Αυτή η εφαρμογή έχει διαθέσιμη ενημέρωση.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Αυτή η εφαρμογή δεν μπορεί να εγκατασταθεί διότι δεν εκπληρώνονται οι ακόλουθες εξαρτήσεις:", "Enable only for specific groups" : "Ενεργοποίηση μόνο για καθορισμένες ομάδες", "Uninstall App" : "Απεγκατάσταση Εφαρμογής", @@ -217,8 +216,11 @@ OC.L10N.register( "Commercial support" : "Εμπορική Υποστήριξη", "Profile picture" : "Φωτογραφία προφίλ", "Upload new" : "Μεταφόρτωση νέου", + "Select from Files" : "Επιλογή από τα Αρχεία", "Remove image" : "Αφαίρεση εικόνας", + "png or jpg, max. 20 MB" : "png ή jpg, μεγ. 20 MB", "Cancel" : "Άκυρο", + "Choose as profile picture" : "Επιλέξτε εικόνα προφίλ", "Full name" : "Πλήρες όνομα", "No display name set" : "Δεν ορίστηκε όνομα", "Email" : "Ηλεκτρονικό ταχυδρομείο", @@ -231,7 +233,10 @@ OC.L10N.register( "Change password" : "Αλλαγή συνθηματικού", "Language" : "Γλώσσα", "Help translate" : "Βοηθήστε στη μετάφραση", + "Device" : "Συσκευή", "Name" : "Όνομα", + "App name" : "Όνομα εφαρμογής", + "Create new app password" : "Δημιουργία νέου συνθηματικού εφαρμογής", "Username" : "Όνομα χρήστη", "Done" : "Ολοκληρώθηκε", "Get the apps to sync your files" : "Λήψη της εφαρμογής για συγχρονισμό των αρχείων σας", @@ -248,19 +253,13 @@ OC.L10N.register( "Create" : "Δημιουργία", "Admin Recovery Password" : "Κωδικός Επαναφοράς Διαχειριστή ", "Enter the recovery password in order to recover the users files during password change" : "Εισάγετε το συνθηματικό ανάκτησης ώστε να ανακτήσετε τα αρχεία χρηστών κατά την αλλαγή συνθηματικού", - "Add Group" : "Προσθήκη Ομάδας", "Group" : "Ομάδα", "Everyone" : "Όλοι", "Admins" : "Διαχειριστές", - "Default Quota" : "Προεπιλεγμένο Όριο", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Παρακαλώ εισάγετε επιτρεπόμενα μερίδια αποθηκευτικού χώρου (π.χ. \"512 MB\" ή \"12 GB\")", "Other" : "Άλλο", - "Full Name" : "Πλήρες όνομα", - "Group Admin for" : "Διαχειριστής ομάδας για", "Quota" : "Σύνολο Χώρου", - "Storage Location" : "Τοποθεσία αποθηκευτικού χώρου", - "User Backend" : "Χρήστης συστήματος υποστήριξης", - "Last Login" : "Τελευταία Σύνδεση", + "Last login" : "Τελευταία είσοδος", "change full name" : "αλλαγή πλήρους ονόματος", "set new password" : "επιλογή νέου κωδικού", "change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας", diff --git a/settings/l10n/el.json b/settings/l10n/el.json index b4b3a398b75..a2885a79aba 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -92,10 +92,8 @@ "A valid group name must be provided" : "Πρέπει να δοθεί ένα έγκυρο όνομα ομάδας", "deleted {groupName}" : "διαγραφή {groupName}", "undo" : "αναίρεση", - "no group" : "καμια ομάδα", "never" : "ποτέ", "deleted {userName}" : "διαγραφή {userName}", - "add group" : "προσθήκη ομάδας", "Changing the password will result in data loss, because data recovery is not available for this user" : "Η αλλαγή του κωδικού πρόσβασης θα έχει ως αποτέλεσμα το χάσιμο δεδομένων, επειδή η ανάκτηση δεδομένων δεν είναι διαθέσιμη γι' αυτόν τον χρήστη", "A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη", "A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό", @@ -196,6 +194,7 @@ "Admin documentation" : "Τεκμηρίωση Διαχειριστή", "Show description …" : "Εμφάνιση περιγραφής", "Hide description …" : "Απόκρυψη περιγραφής", + "This app has an update available." : "Αυτή η εφαρμογή έχει διαθέσιμη ενημέρωση.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Αυτή η εφαρμογή δεν μπορεί να εγκατασταθεί διότι δεν εκπληρώνονται οι ακόλουθες εξαρτήσεις:", "Enable only for specific groups" : "Ενεργοποίηση μόνο για καθορισμένες ομάδες", "Uninstall App" : "Απεγκατάσταση Εφαρμογής", @@ -215,8 +214,11 @@ "Commercial support" : "Εμπορική Υποστήριξη", "Profile picture" : "Φωτογραφία προφίλ", "Upload new" : "Μεταφόρτωση νέου", + "Select from Files" : "Επιλογή από τα Αρχεία", "Remove image" : "Αφαίρεση εικόνας", + "png or jpg, max. 20 MB" : "png ή jpg, μεγ. 20 MB", "Cancel" : "Άκυρο", + "Choose as profile picture" : "Επιλέξτε εικόνα προφίλ", "Full name" : "Πλήρες όνομα", "No display name set" : "Δεν ορίστηκε όνομα", "Email" : "Ηλεκτρονικό ταχυδρομείο", @@ -229,7 +231,10 @@ "Change password" : "Αλλαγή συνθηματικού", "Language" : "Γλώσσα", "Help translate" : "Βοηθήστε στη μετάφραση", + "Device" : "Συσκευή", "Name" : "Όνομα", + "App name" : "Όνομα εφαρμογής", + "Create new app password" : "Δημιουργία νέου συνθηματικού εφαρμογής", "Username" : "Όνομα χρήστη", "Done" : "Ολοκληρώθηκε", "Get the apps to sync your files" : "Λήψη της εφαρμογής για συγχρονισμό των αρχείων σας", @@ -246,19 +251,13 @@ "Create" : "Δημιουργία", "Admin Recovery Password" : "Κωδικός Επαναφοράς Διαχειριστή ", "Enter the recovery password in order to recover the users files during password change" : "Εισάγετε το συνθηματικό ανάκτησης ώστε να ανακτήσετε τα αρχεία χρηστών κατά την αλλαγή συνθηματικού", - "Add Group" : "Προσθήκη Ομάδας", "Group" : "Ομάδα", "Everyone" : "Όλοι", "Admins" : "Διαχειριστές", - "Default Quota" : "Προεπιλεγμένο Όριο", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Παρακαλώ εισάγετε επιτρεπόμενα μερίδια αποθηκευτικού χώρου (π.χ. \"512 MB\" ή \"12 GB\")", "Other" : "Άλλο", - "Full Name" : "Πλήρες όνομα", - "Group Admin for" : "Διαχειριστής ομάδας για", "Quota" : "Σύνολο Χώρου", - "Storage Location" : "Τοποθεσία αποθηκευτικού χώρου", - "User Backend" : "Χρήστης συστήματος υποστήριξης", - "Last Login" : "Τελευταία Σύνδεση", + "Last login" : "Τελευταία είσοδος", "change full name" : "αλλαγή πλήρους ονόματος", "set new password" : "επιλογή νέου κωδικού", "change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας", diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js index d531af91a8d..452d2d22655 100644 --- a/settings/l10n/en_GB.js +++ b/settings/l10n/en_GB.js @@ -106,10 +106,8 @@ OC.L10N.register( "A valid group name must be provided" : "A valid group name must be provided", "deleted {groupName}" : "deleted {groupName}", "undo" : "undo", - "no group" : "no group", "never" : "never", "deleted {userName}" : "deleted {userName}", - "add group" : "add group", "Invalid quota value \"{val}\"" : "Invalid quota value \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Changing the password will result in data loss, because data recovery is not available for this user", "A valid username must be provided" : "A valid username must be provided", @@ -138,7 +136,6 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information.", @@ -200,11 +197,11 @@ OC.L10N.register( "Store credentials" : "Store credentials", "Test email settings" : "Test email settings", "Send email" : "Send email", + "What to log" : "What to log", "Download logfile" : "Download logfile", "More" : "More", "Less" : "Less", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!", - "What to log" : "What to log", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite is used as database. For larger installations, we recommend you switch to a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", @@ -292,19 +289,12 @@ OC.L10N.register( "Create" : "Create", "Admin Recovery Password" : "Admin Recovery Password", "Enter the recovery password in order to recover the users files during password change" : "Enter the recovery password in order to recover the user's files during password change", - "Add Group" : "Add Group", "Group" : "Group", "Everyone" : "Everyone", "Admins" : "Admins", - "Default Quota" : "Default Quota", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Please enter storage quota (e.g. \"512 MB\" or \"12 GB\")", "Other" : "Other", - "Full Name" : "Full Name", - "Group Admin for" : "Group Admin for", "Quota" : "Quota", - "Storage Location" : "Storage Location", - "User Backend" : "User Backend", - "Last Login" : "Last Login", "change full name" : "change full name", "set new password" : "set new password", "change email address" : "change email address", diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json index bfa6a84ed9a..f425beccc13 100644 --- a/settings/l10n/en_GB.json +++ b/settings/l10n/en_GB.json @@ -104,10 +104,8 @@ "A valid group name must be provided" : "A valid group name must be provided", "deleted {groupName}" : "deleted {groupName}", "undo" : "undo", - "no group" : "no group", "never" : "never", "deleted {userName}" : "deleted {userName}", - "add group" : "add group", "Invalid quota value \"{val}\"" : "Invalid quota value \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Changing the password will result in data loss, because data recovery is not available for this user", "A valid username must be provided" : "A valid username must be provided", @@ -136,7 +134,6 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "The PHP module 'fileinfo' is missing. We strongly recommend enabling this module to get best results with mime-type detection.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information.", @@ -198,11 +195,11 @@ "Store credentials" : "Store credentials", "Test email settings" : "Test email settings", "Send email" : "Send email", + "What to log" : "What to log", "Download logfile" : "Download logfile", "More" : "More", "Less" : "Less", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "The logfile is larger than 100 MB. Downloading it may take some time!", - "What to log" : "What to log", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite is used as database. For larger installations, we recommend you switch to a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", @@ -290,19 +287,12 @@ "Create" : "Create", "Admin Recovery Password" : "Admin Recovery Password", "Enter the recovery password in order to recover the users files during password change" : "Enter the recovery password in order to recover the user's files during password change", - "Add Group" : "Add Group", "Group" : "Group", "Everyone" : "Everyone", "Admins" : "Admins", - "Default Quota" : "Default Quota", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Please enter storage quota (e.g. \"512 MB\" or \"12 GB\")", "Other" : "Other", - "Full Name" : "Full Name", - "Group Admin for" : "Group Admin for", "Quota" : "Quota", - "Storage Location" : "Storage Location", - "User Backend" : "User Backend", - "Last Login" : "Last Login", "change full name" : "change full name", "set new password" : "set new password", "change email address" : "change email address", diff --git a/settings/l10n/es.js b/settings/l10n/es.js index d874c7e0a0e..53567326957 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -87,6 +87,17 @@ OC.L10N.register( "App update" : "Actualización de aplicación", "No apps found for {query}" : "No se han encontrado apps para {query}", "Disconnect" : "Desconectar", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome para Android", + "iPhone" : "iPhone", + "iOS Client" : "Cliente iOS", + "Android Client" : "Cliente Android", + "Sync client - {os}" : "Cliente de sincronización - {os}", + "This session" : "Esta sesión", "Error while loading browser sessions and device tokens" : "Error al cargar sesiones de navegador y \"tokens\" de dispositivos", "Error while creating device token" : "Error al crear \"token\" de dispositivo", "Error while deleting the token" : "Error al detectar el \"token\"", @@ -106,10 +117,10 @@ OC.L10N.register( "A valid group name must be provided" : "Se debe dar un nombre válido para el grupo ", "deleted {groupName}" : "{groupName} eliminado", "undo" : "deshacer", - "no group" : "sin grupo", + "No group" : "Sin grupo", "never" : "nunca", "deleted {userName}" : "borrado {userName}", - "add group" : "añadir grupo", + "Add group" : "Añadir grupo", "Invalid quota value \"{val}\"" : "Valor de cuota inválido \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Cambiar la contraseña provocará pérdida de datos porque la recuperación de datos no está disponible para este usuario", "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido", @@ -121,7 +132,7 @@ OC.L10N.register( "Personal info" : "Información personal", "Sessions" : "Sesiones", "App passwords" : "Contraseñas de la app", - "Sync clients" : "Sincronizar clientes", + "Sync clients" : "Clientes de sincronización", "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)", "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales", "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales", @@ -138,7 +149,7 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Se ha habilitado la configuración de sólo lectura. Esto evita tener que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones principales no estén accesibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto venga a causa de la caché o un acelerador, tales como Zend OPcache o eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Su base de datos no se ejecuta con el nivel de aislamiento de transacción \"READ COMMITED\" . Ésto puede causar problemas cuando múltiples acciones se ejecutan en paralelo.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Su base de datos no se ejecuta con el nivel de aislamiento de transacción \"READ COMMITTED\" . Ésto puede causar problemas cuando múltiples acciones se ejecutan en paralelo.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s una versión inferior %2$s está instalada, por razones de estabilidad y rendimiento, se recomienda actualizar a la versión %1$s más reciente .", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "El bloqueo de archivos transaccional está desactivado, esto podría conducir a problemas con 'race conditions'. Activa 'filelocking.enabled' en 'config.php' para solucionar esos problemas. Mira la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a> para más información.", @@ -200,11 +211,11 @@ OC.L10N.register( "Store credentials" : "Almacenar credenciales", "Test email settings" : "Probar configuración de correo electrónico", "Send email" : "Enviar mensaje", + "What to log" : "Que registrar", "Download logfile" : "Descargar archivo de registro", "More" : "Más", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.", - "What to log" : "Que registrar", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Se utiliza SQLite como base de datos. Para instalaciones mas grandes se recomiende cambiar a otro sistema de base de datos. ", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite está desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos usa la herramienta de línea de comandos 'occ db:convert-type' o mira la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.", @@ -270,6 +281,10 @@ OC.L10N.register( "Change password" : "Cambiar contraseña", "Language" : "Idioma", "Help translate" : "Ayúdanos a traducir", + "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, móviles y de escritorio actualmente conectados a tu cuenta.", + "Device" : "Dispositivo", + "Last activity" : "Última actividad", + "Passcodes that give an app or device permissions to access your account." : "Código de paso que da permisos a una app o dispositivo para acceder a tu cuente.", "Name" : "Nombre", "App name" : "Nombre de la app", "Create new app password" : "Crear nueva contraseña de app", @@ -292,19 +307,17 @@ OC.L10N.register( "Create" : "Crear", "Admin Recovery Password" : "Recuperación de la contraseña de administración", "Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.", - "Add Group" : "Agregar grupo", "Group" : "Grupo", "Everyone" : "Todos", "Admins" : "Administradores", - "Default Quota" : "Cuota predeterminada", + "Default quota" : "Cuota predeterminada", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indique la cúota de almacenamiento (ej: \"512 MB\" o \"12 GB\")", "Other" : "Otro", - "Full Name" : "Nombre completo", - "Group Admin for" : "Grupo administrador para", + "Group admin for" : "Administrador de grupo para", "Quota" : "Cuota", - "Storage Location" : "Ubicación de almacenamiento", - "User Backend" : "Motor de usuario", - "Last Login" : "Último inicio de sesión", + "Storage location" : "Ubicación de almacenamiento", + "User backend" : "Motor de usuario", + "Last login" : "Último inicio de sesión", "change full name" : "cambiar el nombre completo", "set new password" : "establecer nueva contraseña", "change email address" : "cambiar dirección de correo electrónico", diff --git a/settings/l10n/es.json b/settings/l10n/es.json index 907d89367e9..766fffb15fb 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -85,6 +85,17 @@ "App update" : "Actualización de aplicación", "No apps found for {query}" : "No se han encontrado apps para {query}", "Disconnect" : "Desconectar", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome para Android", + "iPhone" : "iPhone", + "iOS Client" : "Cliente iOS", + "Android Client" : "Cliente Android", + "Sync client - {os}" : "Cliente de sincronización - {os}", + "This session" : "Esta sesión", "Error while loading browser sessions and device tokens" : "Error al cargar sesiones de navegador y \"tokens\" de dispositivos", "Error while creating device token" : "Error al crear \"token\" de dispositivo", "Error while deleting the token" : "Error al detectar el \"token\"", @@ -104,10 +115,10 @@ "A valid group name must be provided" : "Se debe dar un nombre válido para el grupo ", "deleted {groupName}" : "{groupName} eliminado", "undo" : "deshacer", - "no group" : "sin grupo", + "No group" : "Sin grupo", "never" : "nunca", "deleted {userName}" : "borrado {userName}", - "add group" : "añadir grupo", + "Add group" : "Añadir grupo", "Invalid quota value \"{val}\"" : "Valor de cuota inválido \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Cambiar la contraseña provocará pérdida de datos porque la recuperación de datos no está disponible para este usuario", "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido", @@ -119,7 +130,7 @@ "Personal info" : "Información personal", "Sessions" : "Sesiones", "App passwords" : "Contraseñas de la app", - "Sync clients" : "Sincronizar clientes", + "Sync clients" : "Clientes de sincronización", "Everything (fatal issues, errors, warnings, info, debug)" : "Todo (Información, Avisos, Errores, debug y problemas fatales)", "Info, warnings, errors and fatal issues" : "Información, Avisos, Errores y problemas fatales", "Warnings, errors and fatal issues" : "Advertencias, errores y problemas fatales", @@ -136,7 +147,7 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Se ha habilitado la configuración de sólo lectura. Esto evita tener que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones principales no estén accesibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto venga a causa de la caché o un acelerador, tales como Zend OPcache o eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Su base de datos no se ejecuta con el nivel de aislamiento de transacción \"READ COMMITED\" . Ésto puede causar problemas cuando múltiples acciones se ejecutan en paralelo.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Su base de datos no se ejecuta con el nivel de aislamiento de transacción \"READ COMMITTED\" . Ésto puede causar problemas cuando múltiples acciones se ejecutan en paralelo.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s una versión inferior %2$s está instalada, por razones de estabilidad y rendimiento, se recomienda actualizar a la versión %1$s más reciente .", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "No se ha encontrado el modulo PHP 'fileinfo'. Le recomendamos encarecidamente que habilite este módulo para obtener mejores resultados con la detección de tipos MIME.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "El bloqueo de archivos transaccional está desactivado, esto podría conducir a problemas con 'race conditions'. Activa 'filelocking.enabled' en 'config.php' para solucionar esos problemas. Mira la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a> para más información.", @@ -198,11 +209,11 @@ "Store credentials" : "Almacenar credenciales", "Test email settings" : "Probar configuración de correo electrónico", "Send email" : "Enviar mensaje", + "What to log" : "Que registrar", "Download logfile" : "Descargar archivo de registro", "More" : "Más", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "El archivo de registro es mayor de 100 MB. Descargarlo puede tardar.", - "What to log" : "Que registrar", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Se utiliza SQLite como base de datos. Para instalaciones mas grandes se recomiende cambiar a otro sistema de base de datos. ", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite está desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar a otra base de datos usa la herramienta de línea de comandos 'occ db:convert-type' o mira la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentación ↗</a>.", @@ -268,6 +279,10 @@ "Change password" : "Cambiar contraseña", "Language" : "Idioma", "Help translate" : "Ayúdanos a traducir", + "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, móviles y de escritorio actualmente conectados a tu cuenta.", + "Device" : "Dispositivo", + "Last activity" : "Última actividad", + "Passcodes that give an app or device permissions to access your account." : "Código de paso que da permisos a una app o dispositivo para acceder a tu cuente.", "Name" : "Nombre", "App name" : "Nombre de la app", "Create new app password" : "Crear nueva contraseña de app", @@ -290,19 +305,17 @@ "Create" : "Crear", "Admin Recovery Password" : "Recuperación de la contraseña de administración", "Enter the recovery password in order to recover the users files during password change" : "Introduzca la contraseña de recuperación a fin de recuperar los archivos de los usuarios durante el cambio de contraseña.", - "Add Group" : "Agregar grupo", "Group" : "Grupo", "Everyone" : "Todos", "Admins" : "Administradores", - "Default Quota" : "Cuota predeterminada", + "Default quota" : "Cuota predeterminada", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor indique la cúota de almacenamiento (ej: \"512 MB\" o \"12 GB\")", "Other" : "Otro", - "Full Name" : "Nombre completo", - "Group Admin for" : "Grupo administrador para", + "Group admin for" : "Administrador de grupo para", "Quota" : "Cuota", - "Storage Location" : "Ubicación de almacenamiento", - "User Backend" : "Motor de usuario", - "Last Login" : "Último inicio de sesión", + "Storage location" : "Ubicación de almacenamiento", + "User backend" : "Motor de usuario", + "Last login" : "Último inicio de sesión", "change full name" : "cambiar el nombre completo", "set new password" : "establecer nueva contraseña", "change email address" : "cambiar dirección de correo electrónico", diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js index ddc1f63061b..c4d0657d86a 100644 --- a/settings/l10n/fi_FI.js +++ b/settings/l10n/fi_FI.js @@ -101,10 +101,8 @@ OC.L10N.register( "A valid group name must be provided" : "Anna kelvollinen ryhmän nimi", "deleted {groupName}" : "poistettu {groupName}", "undo" : "kumoa", - "no group" : "ei ryhmää", "never" : "ei koskaan", "deleted {userName}" : "poistettu {userName}", - "add group" : "lisää ryhmä", "Changing the password will result in data loss, because data recovery is not available for this user" : "Salasanan muuttaminen johtaa tietojen häviämiseen, koska tietojen palautusta ei ole käytettävissä tämän käyttäjän kohdalla", "A valid username must be provided" : "Anna kelvollinen käyttäjätunnus", "Error creating user: {message}" : "Virhe käyttäjää luotaessa: {message}", @@ -183,11 +181,11 @@ OC.L10N.register( "Store credentials" : "Säilytä tilitiedot", "Test email settings" : "Testaa sähköpostiasetukset", "Send email" : "Lähetä sähköpostiviesti", + "What to log" : "Mitä kerätään lokiin", "Download logfile" : "Lataa lokitiedosto", "More" : "Enemmän", "Less" : "Vähemmän", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Lokitiedosto on kooltaan yli 100 megatavua. Sen lataaminen saattaa kestää hetken.", - "What to log" : "Mitä kerätään lokiin", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLitea käytetään tietokantana. Suuria asennuksia varten on suositeltavaa vaihtaa muuhun tietokantaan.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Varsinkin työpöytäsovelluksen tiedostosynkronointia käyttäessä SQLiten käyttö ei ole suositeltavaa.", "How to do backups" : "Kuinka tehdä varmuuskopioita", @@ -269,19 +267,12 @@ OC.L10N.register( "Create" : "Luo", "Admin Recovery Password" : "Ylläpitäjän palautussalasana", "Enter the recovery password in order to recover the users files during password change" : "Anna palautussalasana, jotta käyttäjien tiedostot on mahdollista palauttaa salasanan muuttamisen yhteydessä", - "Add Group" : "Lisää ryhmä", "Group" : "Ryhmä", "Everyone" : "Kaikki", "Admins" : "Ylläpitäjät", - "Default Quota" : "Oletuskiintiö", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Määritä tallennustilan kiintiö (esim. \"512 MB\" tai \"12 GB\")", "Other" : "Muu", - "Full Name" : "Koko nimi", - "Group Admin for" : "Ryhmäylläpitäjä kohteille", "Quota" : "Kiintiö", - "Storage Location" : "Tallennustilan sijainti", - "User Backend" : "Käyttäjätaustaosa", - "Last Login" : "Viimeisin kirjautuminen", "change full name" : "muuta koko nimi", "set new password" : "aseta uusi salasana", "change email address" : "vaihda sähköpostiosoite", diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json index de81492281c..b2c32b1e6ff 100644 --- a/settings/l10n/fi_FI.json +++ b/settings/l10n/fi_FI.json @@ -99,10 +99,8 @@ "A valid group name must be provided" : "Anna kelvollinen ryhmän nimi", "deleted {groupName}" : "poistettu {groupName}", "undo" : "kumoa", - "no group" : "ei ryhmää", "never" : "ei koskaan", "deleted {userName}" : "poistettu {userName}", - "add group" : "lisää ryhmä", "Changing the password will result in data loss, because data recovery is not available for this user" : "Salasanan muuttaminen johtaa tietojen häviämiseen, koska tietojen palautusta ei ole käytettävissä tämän käyttäjän kohdalla", "A valid username must be provided" : "Anna kelvollinen käyttäjätunnus", "Error creating user: {message}" : "Virhe käyttäjää luotaessa: {message}", @@ -181,11 +179,11 @@ "Store credentials" : "Säilytä tilitiedot", "Test email settings" : "Testaa sähköpostiasetukset", "Send email" : "Lähetä sähköpostiviesti", + "What to log" : "Mitä kerätään lokiin", "Download logfile" : "Lataa lokitiedosto", "More" : "Enemmän", "Less" : "Vähemmän", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Lokitiedosto on kooltaan yli 100 megatavua. Sen lataaminen saattaa kestää hetken.", - "What to log" : "Mitä kerätään lokiin", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLitea käytetään tietokantana. Suuria asennuksia varten on suositeltavaa vaihtaa muuhun tietokantaan.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Varsinkin työpöytäsovelluksen tiedostosynkronointia käyttäessä SQLiten käyttö ei ole suositeltavaa.", "How to do backups" : "Kuinka tehdä varmuuskopioita", @@ -267,19 +265,12 @@ "Create" : "Luo", "Admin Recovery Password" : "Ylläpitäjän palautussalasana", "Enter the recovery password in order to recover the users files during password change" : "Anna palautussalasana, jotta käyttäjien tiedostot on mahdollista palauttaa salasanan muuttamisen yhteydessä", - "Add Group" : "Lisää ryhmä", "Group" : "Ryhmä", "Everyone" : "Kaikki", "Admins" : "Ylläpitäjät", - "Default Quota" : "Oletuskiintiö", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Määritä tallennustilan kiintiö (esim. \"512 MB\" tai \"12 GB\")", "Other" : "Muu", - "Full Name" : "Koko nimi", - "Group Admin for" : "Ryhmäylläpitäjä kohteille", "Quota" : "Kiintiö", - "Storage Location" : "Tallennustilan sijainti", - "User Backend" : "Käyttäjätaustaosa", - "Last Login" : "Viimeisin kirjautuminen", "change full name" : "muuta koko nimi", "set new password" : "aseta uusi salasana", "change email address" : "vaihda sähköpostiosoite", diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js index f883d70928e..c3db9933a4a 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -117,10 +117,10 @@ OC.L10N.register( "A valid group name must be provided" : "Vous devez spécifier un nom de groupe valide", "deleted {groupName}" : "{groupName} supprimé", "undo" : "annuler", - "no group" : "Aucun groupe", + "No group" : "Aucun groupe", "never" : "jamais", "deleted {userName}" : "{userName} supprimé", - "add group" : "ajouter un groupe", + "Add group" : "Ajouter un groupe", "Invalid quota value \"{val}\"" : "Valeur de quota invalide \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "La modification du mot de passe entrainera la perte des données car la restauration de données n'est pas disponible pour cet utilisateur", "A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi", @@ -149,7 +149,7 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configuration est en mode lecture seule. Ceci empêche la modification de certaines configurations via l'interface web. De plus, le fichier doit être passé manuellement en lecture-écriture avant chaque mise à jour.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP est apparemment configuré pour supprimer les blocs de documentation internes. Cela rendra plusieurs applications de base inaccessibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La raison est probablement l'utilisation d'un cache / accélérateur tel que Zend OPcache ou eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Votre base de données ne fonctionne pas avec le niveau d'isolation de transaction \"READ COMMITED\". Ceci peut causer des problèmes quand plusieurs actions sont exécutées en parallèle.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Votre base de données ne fonctionne pas avec le niveau d'isolation de transaction \"READ COMMITED\". Ceci peut causer des problèmes quand plusieurs actions sont exécutées en parallèle.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Une version de %1$s plus ancienne que %2$s est installée. Pour améliorer la stabilité et les performances, nous recommandons de mettre %1$s à jour.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats de détection mime-type.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Le verrouillage transactionnel de fichiers est désactivé. Cela peut causer des conflits en cas d'accès concurrent. Configurez 'filelocking.enabled' dans config.php pour éviter ces problèmes. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> pour plus d'informations.", @@ -211,11 +211,11 @@ OC.L10N.register( "Store credentials" : "Enregistrer les identifiants", "Test email settings" : "Tester les paramètres e-mail", "Send email" : "Envoyer un e-mail", + "What to log" : "Ce qu'il faut journaliser", "Download logfile" : "Télécharger le fichier de journalisation", "More" : "Plus", "Less" : "Moins", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!", - "What to log" : "Ce qu'il faut journaliser", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers un autre type de base de données, utilisez la ligne de commande : 'occ db:convert-type' ou consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", @@ -295,7 +295,7 @@ OC.L10N.register( "Desktop client" : "Client de bureau", "Android app" : "Application Android", "iOS app" : "Application iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n⇥⇥ou\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">faites découvrir</a>!", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a> ou <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">promouvoir</a> !", "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Afficher l'emplacement du stockage", @@ -307,19 +307,17 @@ OC.L10N.register( "Create" : "Créer", "Admin Recovery Password" : "Mot de passe Administrateur de récupération", "Enter the recovery password in order to recover the users files during password change" : "Entrez le mot de passe de récupération pour récupérer les fichiers utilisateurs pendant le changement de mot de passe", - "Add Group" : "Ajouter un groupe", "Group" : "Groupe", "Everyone" : "Tout le monde", "Admins" : "Administrateurs", - "Default Quota" : "Quota par défaut", + "Default quota" : "Quota par défaut", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Veuillez entrer le quota de stockage (ex. \"512 MB\" ou \"12 GB\")", "Other" : "Autre", - "Full Name" : "Nom complet", - "Group Admin for" : "Administrateur de groupe pour", + "Group admin for" : "Administrateur de groupe pour", "Quota" : "Quota", - "Storage Location" : "Emplacement du Stockage", - "User Backend" : "Source", - "Last Login" : "Dernière Connexion", + "Storage location" : "Emplacement du stockage", + "User backend" : "Retour utilisateur", + "Last login" : "Dernière connexion", "change full name" : "Modifier le nom complet", "set new password" : "Changer le mot de passe", "change email address" : "changer l'adresse e-mail", diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index 70021fd9585..05bfeb89a7a 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -115,10 +115,10 @@ "A valid group name must be provided" : "Vous devez spécifier un nom de groupe valide", "deleted {groupName}" : "{groupName} supprimé", "undo" : "annuler", - "no group" : "Aucun groupe", + "No group" : "Aucun groupe", "never" : "jamais", "deleted {userName}" : "{userName} supprimé", - "add group" : "ajouter un groupe", + "Add group" : "Ajouter un groupe", "Invalid quota value \"{val}\"" : "Valeur de quota invalide \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "La modification du mot de passe entrainera la perte des données car la restauration de données n'est pas disponible pour cet utilisateur", "A valid username must be provided" : "Un nom d'utilisateur valide doit être saisi", @@ -147,7 +147,7 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configuration est en mode lecture seule. Ceci empêche la modification de certaines configurations via l'interface web. De plus, le fichier doit être passé manuellement en lecture-écriture avant chaque mise à jour.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP est apparemment configuré pour supprimer les blocs de documentation internes. Cela rendra plusieurs applications de base inaccessibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La raison est probablement l'utilisation d'un cache / accélérateur tel que Zend OPcache ou eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Votre base de données ne fonctionne pas avec le niveau d'isolation de transaction \"READ COMMITED\". Ceci peut causer des problèmes quand plusieurs actions sont exécutées en parallèle.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Votre base de données ne fonctionne pas avec le niveau d'isolation de transaction \"READ COMMITED\". Ceci peut causer des problèmes quand plusieurs actions sont exécutées en parallèle.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Une version de %1$s plus ancienne que %2$s est installée. Pour améliorer la stabilité et les performances, nous recommandons de mettre %1$s à jour.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Le module PHP 'fileinfo' est manquant. Il est vivement recommandé de l'activer afin d'obtenir de meilleurs résultats de détection mime-type.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Le verrouillage transactionnel de fichiers est désactivé. Cela peut causer des conflits en cas d'accès concurrent. Configurez 'filelocking.enabled' dans config.php pour éviter ces problèmes. Consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> pour plus d'informations.", @@ -209,11 +209,11 @@ "Store credentials" : "Enregistrer les identifiants", "Test email settings" : "Tester les paramètres e-mail", "Send email" : "Envoyer un e-mail", + "What to log" : "Ce qu'il faut journaliser", "Download logfile" : "Télécharger le fichier de journalisation", "More" : "Plus", "Less" : "Moins", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "La taille du fichier journal excède 100 Mo. Le télécharger peut prendre un certain temps!", - "What to log" : "Ce qu'il faut journaliser", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Pour migrer vers un autre type de base de données, utilisez la ligne de commande : 'occ db:convert-type' ou consultez la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>.", @@ -293,7 +293,7 @@ "Desktop client" : "Client de bureau", "Android app" : "Application Android", "iOS app" : "Application iOS", - "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a>\n⇥⇥ou\n⇥⇥<a href=\"https://nextcloud.com/contribute\"\n⇥⇥⇥target=\"_blank\" rel=\"noreferrer\">faites découvrir</a>!", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Si vous voulez supporter le projet <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">rejoindre le développement</a> ou <a href=\"https://nextcloud.com/contribute\" target=\"_blank\" rel=\"noreferrer\">promouvoir</a> !", "Show First Run Wizard again" : "Revoir la fenêtre d'accueil affichée lors de votre première connexion", "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Développé par la {communityopen}communauté Nextcloud{linkclose}, le {githubopen}code source{linkclose} est sous licence {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Afficher l'emplacement du stockage", @@ -305,19 +305,17 @@ "Create" : "Créer", "Admin Recovery Password" : "Mot de passe Administrateur de récupération", "Enter the recovery password in order to recover the users files during password change" : "Entrez le mot de passe de récupération pour récupérer les fichiers utilisateurs pendant le changement de mot de passe", - "Add Group" : "Ajouter un groupe", "Group" : "Groupe", "Everyone" : "Tout le monde", "Admins" : "Administrateurs", - "Default Quota" : "Quota par défaut", + "Default quota" : "Quota par défaut", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Veuillez entrer le quota de stockage (ex. \"512 MB\" ou \"12 GB\")", "Other" : "Autre", - "Full Name" : "Nom complet", - "Group Admin for" : "Administrateur de groupe pour", + "Group admin for" : "Administrateur de groupe pour", "Quota" : "Quota", - "Storage Location" : "Emplacement du Stockage", - "User Backend" : "Source", - "Last Login" : "Dernière Connexion", + "Storage location" : "Emplacement du stockage", + "User backend" : "Retour utilisateur", + "Last login" : "Dernière connexion", "change full name" : "Modifier le nom complet", "set new password" : "Changer le mot de passe", "change email address" : "changer l'adresse e-mail", diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js index d2f7abc35eb..8f94e0ffdf5 100644 --- a/settings/l10n/gl.js +++ b/settings/l10n/gl.js @@ -92,10 +92,8 @@ OC.L10N.register( "A valid group name must be provided" : "Debe fornecer un nome de grupo", "deleted {groupName}" : "{groupName} foi eliminado", "undo" : "desfacer", - "no group" : "sen grupo", "never" : "nunca", "deleted {userName}" : "{userName} foi eliminado", - "add group" : "engadir un grupo", "Changing the password will result in data loss, because data recovery is not available for this user" : "Cambiar o contrasinal provocará unha perda de datos, xa que a recuperación de datos non está dispoñíbel para este usuario", "A valid username must be provided" : "Debe fornecer un nome de usuario", "A valid password must be provided" : "Debe fornecer un contrasinal", @@ -239,19 +237,12 @@ OC.L10N.register( "Create" : "Crear", "Admin Recovery Password" : "Contrasinal de recuperación do administrador", "Enter the recovery password in order to recover the users files during password change" : "Introduza o contrasinal de recuperación para recuperar os ficheiros dos usuarios durante o cambio de contrasinal", - "Add Group" : "Engadir un grupo", "Group" : "Grupo", "Everyone" : "Todos", "Admins" : "Administradores", - "Default Quota" : "Cota por omisión", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Introduza a cota de almacenamento (p.ex. «512 MB» ou «12 GB»)", "Other" : "Outro", - "Full Name" : "Nome completo", - "Group Admin for" : "Grupo de Admin para", "Quota" : "Cota", - "Storage Location" : "Localización do almacenamento", - "User Backend" : "Infraestrutura do usuario", - "Last Login" : "Último acceso", "change full name" : "Cambiar o nome completo", "set new password" : "estabelecer un novo contrasinal", "change email address" : "cambiar o enderezo de correo", diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json index 6c0f7cc15e5..c65aea18a84 100644 --- a/settings/l10n/gl.json +++ b/settings/l10n/gl.json @@ -90,10 +90,8 @@ "A valid group name must be provided" : "Debe fornecer un nome de grupo", "deleted {groupName}" : "{groupName} foi eliminado", "undo" : "desfacer", - "no group" : "sen grupo", "never" : "nunca", "deleted {userName}" : "{userName} foi eliminado", - "add group" : "engadir un grupo", "Changing the password will result in data loss, because data recovery is not available for this user" : "Cambiar o contrasinal provocará unha perda de datos, xa que a recuperación de datos non está dispoñíbel para este usuario", "A valid username must be provided" : "Debe fornecer un nome de usuario", "A valid password must be provided" : "Debe fornecer un contrasinal", @@ -237,19 +235,12 @@ "Create" : "Crear", "Admin Recovery Password" : "Contrasinal de recuperación do administrador", "Enter the recovery password in order to recover the users files during password change" : "Introduza o contrasinal de recuperación para recuperar os ficheiros dos usuarios durante o cambio de contrasinal", - "Add Group" : "Engadir un grupo", "Group" : "Grupo", "Everyone" : "Todos", "Admins" : "Administradores", - "Default Quota" : "Cota por omisión", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Introduza a cota de almacenamento (p.ex. «512 MB» ou «12 GB»)", "Other" : "Outro", - "Full Name" : "Nome completo", - "Group Admin for" : "Grupo de Admin para", "Quota" : "Cota", - "Storage Location" : "Localización do almacenamento", - "User Backend" : "Infraestrutura do usuario", - "Last Login" : "Último acceso", "change full name" : "Cambiar o nome completo", "set new password" : "estabelecer un novo contrasinal", "change email address" : "cambiar o enderezo de correo", diff --git a/settings/l10n/he.js b/settings/l10n/he.js index d16a60889d3..bfdcb9de110 100644 --- a/settings/l10n/he.js +++ b/settings/l10n/he.js @@ -105,10 +105,8 @@ OC.L10N.register( "A valid group name must be provided" : "יש לספק שם קבוצה תקני", "deleted {groupName}" : "נמחק {groupName}", "undo" : "ביטול", - "no group" : "אין קבוצה", "never" : "לעולם לא", "deleted {userName}" : "נמחק {userName}", - "add group" : "הוספת קבוצה", "Changing the password will result in data loss, because data recovery is not available for this user" : "שינוי הסיסמא יגרום איבוד מידע, וזאת בגלל ששחזור מידע אינו זמין למשתמש זה", "A valid username must be provided" : "יש לספק שם משתמש תקני", "Error creating user: {message}" : "שגיאה ביצירת משתמש: {message}", @@ -136,7 +134,6 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "תצורת קריאה בלבד הופעלה. תצורה זו מונעת קביעת מספר הגדרות באמצעות ממשק האינטרנט. יתר על כן, יש צורך להגדיר ההרשאות כתיבה באופן ידני לכל עדכון.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP מוגדר ככל הנראה להפשיט בלוקי קוד. מצב זה יגרום למספר יישומי ליבה להיות לא נגישים.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "זה ככל הנראה נגרם על ידי מאיץ/מטמון כמו Zend OPcache או eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "מסד הנתונים שלך אינו רץ עם \"READ COMMITED\" ברמת בידוד פעולה. דבר זה עלול להוות בעייה בזמן הרצת מספר פעולות במקביל.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s מתחת לגרסה %2$s מותקנת, מסיבות יציבות וביצועים אנו ממליצים לעדכן לגרסה חדשה יותר גרסה %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "מודול ה- PHP מסוג 'fileinfo' חסר. אנו ממליצים בחום לאפשר מודול זה כדי לקבל תוצאות מיטביות עם גילוי mime-type.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "נעילת קבצים בפעולות מושבתת, זה עלול להוביל לבעיות גרסאות תזמון. יש לאפשר 'filelocking.enabled' בקובץ config.php למניעת בעיות אלו. ניתן לראות מידע נוסף ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">תיעוד ↗</a>.", @@ -197,11 +194,11 @@ OC.L10N.register( "Store credentials" : "שמירת אישורים", "Test email settings" : "בדיקת הגדרות דואר אלקטרוני", "Send email" : "שליחת דואר אלקטרוני", + "What to log" : "מה לנטר בלוג", "Download logfile" : "הורדת קובץ לוג", "More" : "יותר", "Less" : "פחות", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "קובץ הלוג גדול מ- 100 מגה-בייט. הורדה עלולה לקחת זמן רב!", - "What to log" : "מה לנטר בלוג", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "המערכת משתמשת ב- SQLite כמסד נתונים. להתקנות גדולות אנו ממליצים לעבור למסדי נתונים צד אחורי אחרים.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "למעבר למסד נתונים אחר יש להשתמש בכלי שורת פקודה: 'occ db:convert-type', או לעיין ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">תיעוד↗</a>.", @@ -284,19 +281,12 @@ OC.L10N.register( "Create" : "יצירה", "Admin Recovery Password" : "סיסמת השחזור של המנהל", "Enter the recovery password in order to recover the users files during password change" : "יש להכניס את סיסמת השחזור לצורך שחזור של קבצי המשתמש במהלך החלפת סיסמא", - "Add Group" : "הוספת קבוצה", "Group" : "קבוצה", "Everyone" : "כולם", "Admins" : "מנהלים", - "Default Quota" : "מכסת ברירת המחדל", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "יש להכניס מכסת אחסון (לדוגמא: \"512 MB\" or \"12 GB\")", "Other" : "אחר", - "Full Name" : "שם מלא", - "Group Admin for" : "קבוצת ניהול עבור", "Quota" : "מכסה", - "Storage Location" : "מיקום אחסון", - "User Backend" : "צד אחורי משתמש", - "Last Login" : "התחברות אחרונה", "change full name" : "שינוי שם מלא", "set new password" : "הגדרת סיסמא חדשה", "change email address" : "שינוי כתובת דואר אלקטרוני", diff --git a/settings/l10n/he.json b/settings/l10n/he.json index 9e592399364..89129380062 100644 --- a/settings/l10n/he.json +++ b/settings/l10n/he.json @@ -103,10 +103,8 @@ "A valid group name must be provided" : "יש לספק שם קבוצה תקני", "deleted {groupName}" : "נמחק {groupName}", "undo" : "ביטול", - "no group" : "אין קבוצה", "never" : "לעולם לא", "deleted {userName}" : "נמחק {userName}", - "add group" : "הוספת קבוצה", "Changing the password will result in data loss, because data recovery is not available for this user" : "שינוי הסיסמא יגרום איבוד מידע, וזאת בגלל ששחזור מידע אינו זמין למשתמש זה", "A valid username must be provided" : "יש לספק שם משתמש תקני", "Error creating user: {message}" : "שגיאה ביצירת משתמש: {message}", @@ -134,7 +132,6 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "תצורת קריאה בלבד הופעלה. תצורה זו מונעת קביעת מספר הגדרות באמצעות ממשק האינטרנט. יתר על כן, יש צורך להגדיר ההרשאות כתיבה באופן ידני לכל עדכון.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP מוגדר ככל הנראה להפשיט בלוקי קוד. מצב זה יגרום למספר יישומי ליבה להיות לא נגישים.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "זה ככל הנראה נגרם על ידי מאיץ/מטמון כמו Zend OPcache או eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "מסד הנתונים שלך אינו רץ עם \"READ COMMITED\" ברמת בידוד פעולה. דבר זה עלול להוות בעייה בזמן הרצת מספר פעולות במקביל.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s מתחת לגרסה %2$s מותקנת, מסיבות יציבות וביצועים אנו ממליצים לעדכן לגרסה חדשה יותר גרסה %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "מודול ה- PHP מסוג 'fileinfo' חסר. אנו ממליצים בחום לאפשר מודול זה כדי לקבל תוצאות מיטביות עם גילוי mime-type.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "נעילת קבצים בפעולות מושבתת, זה עלול להוביל לבעיות גרסאות תזמון. יש לאפשר 'filelocking.enabled' בקובץ config.php למניעת בעיות אלו. ניתן לראות מידע נוסף ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">תיעוד ↗</a>.", @@ -195,11 +192,11 @@ "Store credentials" : "שמירת אישורים", "Test email settings" : "בדיקת הגדרות דואר אלקטרוני", "Send email" : "שליחת דואר אלקטרוני", + "What to log" : "מה לנטר בלוג", "Download logfile" : "הורדת קובץ לוג", "More" : "יותר", "Less" : "פחות", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "קובץ הלוג גדול מ- 100 מגה-בייט. הורדה עלולה לקחת זמן רב!", - "What to log" : "מה לנטר בלוג", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "המערכת משתמשת ב- SQLite כמסד נתונים. להתקנות גדולות אנו ממליצים לעבור למסדי נתונים צד אחורי אחרים.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "במיוחד כאשר משתמשים במחשב שולחני לסנכרון קבצים השימוש ב SQLite אינו מומלץ.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "למעבר למסד נתונים אחר יש להשתמש בכלי שורת פקודה: 'occ db:convert-type', או לעיין ב- <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">תיעוד↗</a>.", @@ -282,19 +279,12 @@ "Create" : "יצירה", "Admin Recovery Password" : "סיסמת השחזור של המנהל", "Enter the recovery password in order to recover the users files during password change" : "יש להכניס את סיסמת השחזור לצורך שחזור של קבצי המשתמש במהלך החלפת סיסמא", - "Add Group" : "הוספת קבוצה", "Group" : "קבוצה", "Everyone" : "כולם", "Admins" : "מנהלים", - "Default Quota" : "מכסת ברירת המחדל", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "יש להכניס מכסת אחסון (לדוגמא: \"512 MB\" or \"12 GB\")", "Other" : "אחר", - "Full Name" : "שם מלא", - "Group Admin for" : "קבוצת ניהול עבור", "Quota" : "מכסה", - "Storage Location" : "מיקום אחסון", - "User Backend" : "צד אחורי משתמש", - "Last Login" : "התחברות אחרונה", "change full name" : "שינוי שם מלא", "set new password" : "הגדרת סיסמא חדשה", "change email address" : "שינוי כתובת דואר אלקטרוני", diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js index 1d83dd015ba..f0df2d87a65 100644 --- a/settings/l10n/hu_HU.js +++ b/settings/l10n/hu_HU.js @@ -106,10 +106,8 @@ OC.L10N.register( "A valid group name must be provided" : "Érvényes csoportnevet kell megadni", "deleted {groupName}" : "törölve: {groupName}", "undo" : "visszavonás", - "no group" : "nincs csoport", "never" : "soha", "deleted {userName}" : "törölve: {userName}", - "add group" : "csoport hozzáadása", "Changing the password will result in data loss, because data recovery is not available for this user" : "A jelszó megváltoztatása adatvesztéssel jár, mert lehetséges az adatok visszaállítása ennek a felhasználónak", "A valid username must be provided" : "Érvényes felhasználónevet kell megadnia", "Error creating user: {message}" : "Hiba történt a felhasználó létrehozásakor: {message}", @@ -137,7 +135,6 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden frissítés alkalmával.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázisa nem tud \"READ COMMITED\" tranzakció elkülinítési szinttel. Ez problémákat okozhat ha több egyidejű esemény van végrehajtva.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s %2$s verziója van telepítve, de a stabilitási és teljesítményi okok miatt javasoljuk az újabb, %1$s verzióra való frissítést.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerülje ezeket a problémákat. Nézze meg a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a> bővebb információért.", @@ -199,11 +196,11 @@ OC.L10N.register( "Store credentials" : "Azonosítók eltárolása", "Test email settings" : "Az e-mail beállítások ellenőrzése", "Send email" : "E-mail küldése", + "What to log" : "Mit naplózzon", "Download logfile" : "Naplófájl letöltése", "More" : "Több", "Less" : "Kevesebb", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.", - "What to log" : "Mit naplózzon", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használja a parancssort: 'occ db:convert-type', vagy keresse fel a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a>.", @@ -291,19 +288,12 @@ OC.L10N.register( "Create" : "Létrehozás", "Admin Recovery Password" : "Adminisztrátori jelszó az állományok visszanyerésére", "Enter the recovery password in order to recover the users files during password change" : "Adja meg az adatok visszanyeréséhez szükséges jelszót arra az esetre, ha a felhasználók megváltoztatják a jelszavukat", - "Add Group" : "Csoport létrehozása", "Group" : "Csoport", "Everyone" : "Mindenki", "Admins" : "Adminok", - "Default Quota" : "Alapértelmezett kvóta", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Kérjük adja meg a tárolási kvótát (pl. \"512 MB\" vagy \"12 GB\")", "Other" : "Más", - "Full Name" : "Teljes név", - "Group Admin for" : "Csoport Adminisztrátor itt", "Quota" : "Kvóta", - "Storage Location" : "A háttértár helye", - "User Backend" : "Felhasználói háttér", - "Last Login" : "Utolsó bejelentkezés", "change full name" : "a teljes név megváltoztatása", "set new password" : "új jelszó beállítása", "change email address" : "e-mail cím megváltoztatása", diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json index 3d4d02ccc7b..738345cf9b4 100644 --- a/settings/l10n/hu_HU.json +++ b/settings/l10n/hu_HU.json @@ -104,10 +104,8 @@ "A valid group name must be provided" : "Érvényes csoportnevet kell megadni", "deleted {groupName}" : "törölve: {groupName}", "undo" : "visszavonás", - "no group" : "nincs csoport", "never" : "soha", "deleted {userName}" : "törölve: {userName}", - "add group" : "csoport hozzáadása", "Changing the password will result in data loss, because data recovery is not available for this user" : "A jelszó megváltoztatása adatvesztéssel jár, mert lehetséges az adatok visszaállítása ennek a felhasználónak", "A valid username must be provided" : "Érvényes felhasználónevet kell megadnia", "Error creating user: {message}" : "Hiba történt a felhasználó létrehozásakor: {message}", @@ -135,7 +133,6 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden frissítés alkalmával.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázisa nem tud \"READ COMMITED\" tranzakció elkülinítési szinttel. Ez problémákat okozhat ha több egyidejű esemény van végrehajtva.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s %2$s verziója van telepítve, de a stabilitási és teljesítményi okok miatt javasoljuk az újabb, %1$s verzióra való frissítést.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerülje ezeket a problémákat. Nézze meg a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a> bővebb információért.", @@ -197,11 +194,11 @@ "Store credentials" : "Azonosítók eltárolása", "Test email settings" : "Az e-mail beállítások ellenőrzése", "Send email" : "E-mail küldése", + "What to log" : "Mit naplózzon", "Download logfile" : "Naplófájl letöltése", "More" : "Több", "Less" : "Kevesebb", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "A naplófájl 100MB-nál nagyobb. A letöltése hosszabb időt vehet igénybe.", - "What to log" : "Mit naplózzon", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használja a parancssort: 'occ db:convert-type', vagy keresse fel a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a>.", @@ -289,19 +286,12 @@ "Create" : "Létrehozás", "Admin Recovery Password" : "Adminisztrátori jelszó az állományok visszanyerésére", "Enter the recovery password in order to recover the users files during password change" : "Adja meg az adatok visszanyeréséhez szükséges jelszót arra az esetre, ha a felhasználók megváltoztatják a jelszavukat", - "Add Group" : "Csoport létrehozása", "Group" : "Csoport", "Everyone" : "Mindenki", "Admins" : "Adminok", - "Default Quota" : "Alapértelmezett kvóta", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Kérjük adja meg a tárolási kvótát (pl. \"512 MB\" vagy \"12 GB\")", "Other" : "Más", - "Full Name" : "Teljes név", - "Group Admin for" : "Csoport Adminisztrátor itt", "Quota" : "Kvóta", - "Storage Location" : "A háttértár helye", - "User Backend" : "Felhasználói háttér", - "Last Login" : "Utolsó bejelentkezés", "change full name" : "a teljes név megváltoztatása", "set new password" : "új jelszó beállítása", "change email address" : "e-mail cím megváltoztatása", diff --git a/settings/l10n/id.js b/settings/l10n/id.js index 617025f2bbd..4d64d5a1b8d 100644 --- a/settings/l10n/id.js +++ b/settings/l10n/id.js @@ -63,14 +63,20 @@ OC.L10N.register( "Experimental" : "Uji Coba", "All" : "Semua", "No apps found for your version" : "Aplikasi tidak ditemukan untuk versi ini.", + "The app will be downloaded from the app store" : "Aplikasi akan diunduh melalui toko aplikasi", + "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplikasi resmi dikembangkan oleh dan didalam komunitas. Mereka menawarkan fungsi sentral dan siap untuk penggunaan produksi.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Aplikasi tersetujui dikembangkan oleh pengembang terpercaya dan telah lulus pemeriksaan keamanan. Mereka secara aktif dipelihara direpositori kode terbuka dan pemelihara sudah memastikan mereka stabil untuk penggunaan normal.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Apl ini belum diperiksa masalah keamanannya dan masih baru atau biasanya tidak stabil. Instal dengan resiko Anda sendiri.", "Update to %s" : "Perbarui ke %s", + "_You have %n app update pending_::_You have %n app updates pending_" : ["Anda memiliki %n pembaruan aplikasi tertunda"], "Please wait...." : "Mohon tunggu....", "Error while disabling app" : "Terjadi kesalahan saat menonaktifkan aplikasi", "Disable" : "Nonaktifkan", "Enable" : "Aktifkan", "Error while enabling app" : "Terjadi kesalahan saat mengakifkan aplikasi", + "Error: this app cannot be enabled because it makes the server unstable" : "Kesalahan: Aplikasi ini tidak bisa diaktifkan karena membuat server tidak stabil", + "Error: could not disable broken app" : "Kesalahan: Tidak dapat menonaktifkan aplikasi rusak", + "Error while disabling broken app" : "Terjadi kesalahan saat menonaktifkan aplikasi rusak", "Updating...." : "Memperbarui....", "Error while updating app" : "Terjadi kesalahan saat memperbarui aplikasi", "Updated" : "Diperbarui", @@ -79,6 +85,22 @@ OC.L10N.register( "Uninstall" : "Copot", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Aplikasi sudah diaktifkan tetapi perlu diperbarui. Anda akan dialihkan ke halaman pembaruan dalam 5 detik.", "App update" : "Pembaruan Aplikasi", + "No apps found for {query}" : "Tidak ditemukan aplikasi untuk {query}", + "Disconnect" : "Putuskan", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome untuk Android", + "iPhone" : "iPhone", + "iOS Client" : "Klien iOS", + "Android Client" : "Klien Android", + "Sync client - {os}" : "Klien sync - {os}", + "This session" : "Sesi ini", + "Error while loading browser sessions and device tokens" : "Terjadi kesalahan saat memuat sesi browser dan token perangkat", + "Error while creating device token" : "Terjadi kesalahan saat membuat token perangkat", + "Error while deleting the token" : "Terjadi kesalahan saat menghapus token", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Terjadi kesalahan. Mohon unggah sertifikat PEM terenkode-ASCII.", "Valid until {date}" : "Berlaku sampai {date}", "Delete" : "Hapus", @@ -91,20 +113,25 @@ OC.L10N.register( "Strong password" : "Sandi kuat", "Groups" : "Grup", "Unable to delete {objName}" : "Tidak dapat menghapus {objName}", + "Error creating group: {message}" : "Kesalahan membuat grup: {message}", "A valid group name must be provided" : "Harus memberikan nama grup yang benar.", "deleted {groupName}" : "menghapus {groupName}", "undo" : "urungkan", - "no group" : "tanpa grup", + "No group" : "Tidak ada grup", "never" : "tidak pernah", "deleted {userName}" : "menghapus {userName}", - "add group" : "tambah grup", + "Add group" : "Tambah grup", + "Invalid quota value \"{val}\"" : "Jumlah kuota tidak valid \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Pengubahan kata sandi akan ditampilkan di data kehilangan, karena data pemulihan tidak tersedia bagi pengguna ini", "A valid username must be provided" : "Harus memberikan nama pengguna yang benar", + "Error creating user: {message}" : "Gagal membuat pengguna: {message}", "A valid password must be provided" : "Harus memberikan sandi yang benar", "A valid email must be provided" : "Email yang benar harus diberikan", "__language_name__" : "__language_name__", "Unlimited" : "Tak terbatas", "Personal info" : "Info pribadi", + "Sessions" : "Sesi", + "App passwords" : "Sandi aplikasi", "Sync clients" : "Klien sync", "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)", "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal", @@ -118,15 +145,20 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "kelihatannya php tidak diatur dengan benar untuk variabel lingkungan sistem kueri. Pemeriksaan dengan getenv(\"PATH\") hanya mengembalikan respon kosong.", + "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfig Hanya-Baca telah diaktifkan. Ini akan mencegah setelan beberapa konfigurasi melalui antarmuka-web. Selanjutnya, berkas perlu dibuat dapat-dibaca secara manual untuk setiap pembaruan.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP tampaknya disetel menjadi strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Database Anda tidak dijalankan dengan isolasi transaksi level \"READ COMMITED\". Ini dapat menyebabkan masalah saat banyak tindakan dilakukan secara paralel.", + "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s dibawah versi %2$s, untuk performa dan stabilitas kami merekomendasikan Anda memperbarui versi %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Penguncian berkas transaksional nonaktif, ini dapat menyebabkan masalah dengan kondisi tertentu. Aktifkan 'filelocking.enabled' dalam config.php untuk menghindari masalah ini. Lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi ↗</a> untuk informasi lebih lanjut.", "System locale can not be set to a one which supports UTF-8." : "Sistem lokal tidak dapat diatur untuk satu yang mendukung UTF-8.", "This means that there might be problems with certain characters in file names." : "Ini artinya mungkin ada masalah dengan karakter tertentu pada nama berkas.", "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Kamu sangat menyarankan untuk menginstal paket-paket yang dibutuhkan pada sistem agar mendukung lokal berikut: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak di root domain dan menggunakan sistem cron, hal tersebut dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah tersebut, mohon atur opsi \"overwrite.cli.url\" pada berkas config.php Anda ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:", + "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">petunjuk instalasi ↗</a>, dan cek masalah atau peringatan di <a href=\"#log-section\">log</a>.", "All checks passed." : "Semua pemeriksaan lulus.", "Open documentation" : "Buka dokumentasi", "Allow apps to use the Share API" : "Izinkan aplikasi untuk menggunakan API Pembagian", @@ -139,6 +171,7 @@ OC.L10N.register( "days" : "hari", "Enforce expiration date" : "Berlakukan tanggal kadaluarsa", "Allow resharing" : "Izinkan pembagian ulang", + "Allow sharing with groups" : "Izinkan pembagian dengan grup", "Restrict users to only share with users in their groups" : "Batasi pengguna untuk hanya membagikan dengan pengguna didalam grup mereka", "Allow users to send mail notification for shared files to other users" : "Izinkan pengguna mengirim pemberitahuan email saat berbagi berkas kepada pengguna lainnya", "Exclude groups from sharing" : "Tidak termasuk grup untuk berbagi", @@ -153,6 +186,7 @@ OC.L10N.register( "Enable server-side encryption" : "Aktifkan enkripsi sisi-server", "Please read carefully before activating server-side encryption: " : "Mohon baca dengan teliti sebelum mengaktifkan enkripsi server-side:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Setelah enkripsi diaktifkan, semua berkas yang diunggah pada server mulai saat ini akan dienkripsi saat singgah pada server. Penonaktifan enkripsi hanya mungkin berhasil jika modul enkripsi yang aktif mendukung fungsi ini dan semua prasyarat (misalnya pengaturan kunci pemulihan) sudah terpenuhi.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.", "Be aware that encryption always increases the file size." : "Ingat bahwa enkripsi selalu menambah ukuran berkas.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Alangkah baiknya untuk membuat cadangan data secara rutin, dalam kasus enkripsi, pastikan untuk mencadangkan kunci enkripsi bersama dengan data Anda.", "This is the final warning: Do you really want to enable encryption?" : "Ini adalah peringatan terakhir: Apakah Anda yakin ingin mengaktifkan enkripsi?", @@ -177,12 +211,14 @@ OC.L10N.register( "Store credentials" : "Simpan kredensial", "Test email settings" : "Pengaturan email percobaan", "Send email" : "Kirim email", + "What to log" : "Apa yang akan di log", "Download logfile" : "Unduh berkas log", "More" : "Lainnya", "Less" : "Ciutkan", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite digunakan sebagai basis data. Untuk instalasi yang lebih besar, kami menyarankan untuk beralih ke backend basis data yang berbeda.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Terutama saat menggunakan klien desktop untuk sinkronisasi berkas, penggunaan SQLite tidak disarankan.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Untuk migrasi ke database lain, gunakan alat command line: 'occ db:convert-type', atau lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi ↗</a>.", "How to do backups" : "Bagaimana cara membuat cadangan", "Advanced monitoring" : "Pemantauan tingkat lanjut", "Performance tuning" : "Pemeliharaan performa", @@ -193,15 +229,23 @@ OC.L10N.register( "Developer documentation" : "Dokumentasi pengembang", "Experimental applications ahead" : "Aplikasi percobaan terdepan", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikasi percobaan belum diperiksa untuk masalah keamanan, baru atau dikenal tidak stabil dan dalam proses pengembangan. Menginstalnya dapat menyebabkan kehilangan data atau penerobosan keamanan.", + "by %s" : "oleh %s", + "%s-licensed" : "dilisensikan %s", "Documentation:" : "Dokumentasi:", "User documentation" : "Dokumentasi pengguna.", "Admin documentation" : "Dokumentasi admin", + "Visit website" : "Kunjungi laman web", + "Report a bug" : "Laporkan kerusakan", "Show description …" : "Tampilkan deskripsi ...", "Hide description …" : "Sembunyikan deskripsi ...", + "This app has an update available." : "Aplikasi ini dapat diperbarui.", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Aplikasi ini tidak mempunyai versi minimum Nextcloud yang ditetapkan. Di masa depan nanti ini akan menjadi kesalahan.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Aplikasi ini tidak mempunyai versi maksimum Nextcloud yang ditetapkan. Di masa depan nanti ini akan menjadi kesalahan.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Apl ini tidak dapat diinstal karena ketergantungan berikut belum terpenuhi:", "Enable only for specific groups" : "Aktifkan hanya untuk grup tertentu", "Uninstall App" : "Copot aplikasi", "Enable experimental apps" : "Aktifkan aplikasi percobaan", + "SSL Root Certificates" : "Sertifikat Root SSL", "Common Name" : "Nama umum", "Valid until" : "Berlaku sampai", "Issued By" : "Diterbitkan oleh", @@ -215,14 +259,20 @@ OC.L10N.register( "Forum" : "Forum", "Issue tracker" : "Pelacak masalah", "Commercial support" : "Dukungan komersial", + "You are using <strong>%s</strong> of <strong>%s</strong>" : "Anda sedang menggunakan <strong>%s</strong> dari <strong>%s</strong>", "Profile picture" : "Foto profil", "Upload new" : "Unggah baru", + "Select from Files" : "Pilih dari berkas", "Remove image" : "Hapus gambar", + "png or jpg, max. 20 MB" : "png atau jpg, maks. 20 MB", + "Picture provided by original account" : "Gambar disediakan oleh akun asli", "Cancel" : "Batal", + "Choose as profile picture" : "Pilih sebagai gambar profil", "Full name" : "Nama lengkap", "No display name set" : "Nama tampilan tidak diatur", "Email" : "Email", "Your email address" : "Alamat email Anda", + "For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan", "No email address set" : "Alamat email tidak diatur", "You are member of the following groups:" : "Anda adalah anggota dari grup berikut:", "Password" : "Sandi", @@ -231,14 +281,23 @@ OC.L10N.register( "Change password" : "Ubah sandi", "Language" : "Bahasa", "Help translate" : "Bantu menerjemahkan", + "Web, desktop and mobile clients currently logged in to your account." : "Klien web, desktop dan mobile yang sedang login di akun Anda.", + "Device" : "Perangkat", + "Last activity" : "Aktivitas terakhir", + "Passcodes that give an app or device permissions to access your account." : "Kode kunci yang memberikan aplikasi atau perangkat izin untuk mengakses akun Anda.", "Name" : "Nama", + "App name" : "Nama aplikasi", + "Create new app password" : "Buat sandi aplikasi baru", + "Use the credentials below to configure your app or device." : "Gunakan kredensial berikut untuk mengkonfigurasi aplikasi atau perangkat.", "Username" : "Nama pengguna", "Done" : "Selesai", "Get the apps to sync your files" : "Dapatkan aplikasi untuk sinkronisasi berkas Anda", "Desktop client" : "Klien desktop", "Android app" : "Aplikasi Android", "iOS app" : "Aplikasi iOS", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Apabila Anda ingin mendukung proyek ini\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ikuti pengembangannya</a>\n\t\tatau\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">sebarkan</a>!", "Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Tampilkan kolasi penyimpanan", "Show last log in" : "Tampilkan masuk terakhir", "Show user backend" : "Tampilkan pengguna backend", @@ -248,19 +307,17 @@ OC.L10N.register( "Create" : "Buat", "Admin Recovery Password" : "Sandi pemulihan Admin", "Enter the recovery password in order to recover the users files during password change" : "Masukkan sandi pemulihan untuk memulihkan berkas pengguna saat penggantian sandi", - "Add Group" : "Tambah Grup", "Group" : "Grup", "Everyone" : "Semua orang", "Admins" : "Admin", - "Default Quota" : "Kuota default", + "Default quota" : "Kuota standar", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Silakan masukkan jumlah penyimpanan (contoh: \"512 MB\" atau \"12 GB\")", "Other" : "Lainnya", - "Full Name" : "Nama Lengkap", - "Group Admin for" : "Grup Admin untuk", + "Group admin for" : "Grup admin untuk", "Quota" : "Kuota", - "Storage Location" : "Lokasi Penyimpanan", - "User Backend" : "Pengguna Backend", - "Last Login" : "Masuk Terakhir", + "Storage location" : "Lokasi penyimpanan", + "User backend" : "Backend pengguna", + "Last login" : "Log masuk terakhir", "change full name" : "ubah nama lengkap", "set new password" : "setel sandi baru", "change email address" : "ubah alamat email", diff --git a/settings/l10n/id.json b/settings/l10n/id.json index 71f08f5d9e6..2e62d420404 100644 --- a/settings/l10n/id.json +++ b/settings/l10n/id.json @@ -61,14 +61,20 @@ "Experimental" : "Uji Coba", "All" : "Semua", "No apps found for your version" : "Aplikasi tidak ditemukan untuk versi ini.", + "The app will be downloaded from the app store" : "Aplikasi akan diunduh melalui toko aplikasi", + "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Aplikasi resmi dikembangkan oleh dan didalam komunitas. Mereka menawarkan fungsi sentral dan siap untuk penggunaan produksi.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Aplikasi tersetujui dikembangkan oleh pengembang terpercaya dan telah lulus pemeriksaan keamanan. Mereka secara aktif dipelihara direpositori kode terbuka dan pemelihara sudah memastikan mereka stabil untuk penggunaan normal.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Apl ini belum diperiksa masalah keamanannya dan masih baru atau biasanya tidak stabil. Instal dengan resiko Anda sendiri.", "Update to %s" : "Perbarui ke %s", + "_You have %n app update pending_::_You have %n app updates pending_" : ["Anda memiliki %n pembaruan aplikasi tertunda"], "Please wait...." : "Mohon tunggu....", "Error while disabling app" : "Terjadi kesalahan saat menonaktifkan aplikasi", "Disable" : "Nonaktifkan", "Enable" : "Aktifkan", "Error while enabling app" : "Terjadi kesalahan saat mengakifkan aplikasi", + "Error: this app cannot be enabled because it makes the server unstable" : "Kesalahan: Aplikasi ini tidak bisa diaktifkan karena membuat server tidak stabil", + "Error: could not disable broken app" : "Kesalahan: Tidak dapat menonaktifkan aplikasi rusak", + "Error while disabling broken app" : "Terjadi kesalahan saat menonaktifkan aplikasi rusak", "Updating...." : "Memperbarui....", "Error while updating app" : "Terjadi kesalahan saat memperbarui aplikasi", "Updated" : "Diperbarui", @@ -77,6 +83,22 @@ "Uninstall" : "Copot", "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Aplikasi sudah diaktifkan tetapi perlu diperbarui. Anda akan dialihkan ke halaman pembaruan dalam 5 detik.", "App update" : "Pembaruan Aplikasi", + "No apps found for {query}" : "Tidak ditemukan aplikasi untuk {query}", + "Disconnect" : "Putuskan", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome untuk Android", + "iPhone" : "iPhone", + "iOS Client" : "Klien iOS", + "Android Client" : "Klien Android", + "Sync client - {os}" : "Klien sync - {os}", + "This session" : "Sesi ini", + "Error while loading browser sessions and device tokens" : "Terjadi kesalahan saat memuat sesi browser dan token perangkat", + "Error while creating device token" : "Terjadi kesalahan saat membuat token perangkat", + "Error while deleting the token" : "Terjadi kesalahan saat menghapus token", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Terjadi kesalahan. Mohon unggah sertifikat PEM terenkode-ASCII.", "Valid until {date}" : "Berlaku sampai {date}", "Delete" : "Hapus", @@ -89,20 +111,25 @@ "Strong password" : "Sandi kuat", "Groups" : "Grup", "Unable to delete {objName}" : "Tidak dapat menghapus {objName}", + "Error creating group: {message}" : "Kesalahan membuat grup: {message}", "A valid group name must be provided" : "Harus memberikan nama grup yang benar.", "deleted {groupName}" : "menghapus {groupName}", "undo" : "urungkan", - "no group" : "tanpa grup", + "No group" : "Tidak ada grup", "never" : "tidak pernah", "deleted {userName}" : "menghapus {userName}", - "add group" : "tambah grup", + "Add group" : "Tambah grup", + "Invalid quota value \"{val}\"" : "Jumlah kuota tidak valid \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Pengubahan kata sandi akan ditampilkan di data kehilangan, karena data pemulihan tidak tersedia bagi pengguna ini", "A valid username must be provided" : "Harus memberikan nama pengguna yang benar", + "Error creating user: {message}" : "Gagal membuat pengguna: {message}", "A valid password must be provided" : "Harus memberikan sandi yang benar", "A valid email must be provided" : "Email yang benar harus diberikan", "__language_name__" : "__language_name__", "Unlimited" : "Tak terbatas", "Personal info" : "Info pribadi", + "Sessions" : "Sesi", + "App passwords" : "Sandi aplikasi", "Sync clients" : "Klien sync", "Everything (fatal issues, errors, warnings, info, debug)" : "Semuanya (Masalah fatal, kesalahan, peringatan, info, debug)", "Info, warnings, errors and fatal issues" : "Info, peringatan, kesalahan dan masalah fatal", @@ -116,15 +143,20 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "kelihatannya php tidak diatur dengan benar untuk variabel lingkungan sistem kueri. Pemeriksaan dengan getenv(\"PATH\") hanya mengembalikan respon kosong.", + "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi instalasi↗</a> untuk catatan konfigurasi php dan konfigurasi PHP server Anda, khususnya saat menggunakan php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfig Hanya-Baca telah diaktifkan. Ini akan mencegah setelan beberapa konfigurasi melalui antarmuka-web. Selanjutnya, berkas perlu dibuat dapat-dibaca secara manual untuk setiap pembaruan.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP tampaknya disetel menjadi strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Database Anda tidak dijalankan dengan isolasi transaksi level \"READ COMMITED\". Ini dapat menyebabkan masalah saat banyak tindakan dilakukan secara paralel.", + "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s dibawah versi %2$s, untuk performa dan stabilitas kami merekomendasikan Anda memperbarui versi %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Module 'fileinfo' pada PHP tidak ada. Kami sangat menyarankan untuk mengaktifkan modul ini untuk mendapatkan hasil terbaik pada proses pendeteksian mime-type.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Penguncian berkas transaksional nonaktif, ini dapat menyebabkan masalah dengan kondisi tertentu. Aktifkan 'filelocking.enabled' dalam config.php untuk menghindari masalah ini. Lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi ↗</a> untuk informasi lebih lanjut.", "System locale can not be set to a one which supports UTF-8." : "Sistem lokal tidak dapat diatur untuk satu yang mendukung UTF-8.", "This means that there might be problems with certain characters in file names." : "Ini artinya mungkin ada masalah dengan karakter tertentu pada nama berkas.", "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Kamu sangat menyarankan untuk menginstal paket-paket yang dibutuhkan pada sistem agar mendukung lokal berikut: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak di root domain dan menggunakan sistem cron, hal tersebut dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah tersebut, mohon atur opsi \"overwrite.cli.url\" pada berkas config.php Anda ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:", + "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon cek <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">petunjuk instalasi ↗</a>, dan cek masalah atau peringatan di <a href=\"#log-section\">log</a>.", "All checks passed." : "Semua pemeriksaan lulus.", "Open documentation" : "Buka dokumentasi", "Allow apps to use the Share API" : "Izinkan aplikasi untuk menggunakan API Pembagian", @@ -137,6 +169,7 @@ "days" : "hari", "Enforce expiration date" : "Berlakukan tanggal kadaluarsa", "Allow resharing" : "Izinkan pembagian ulang", + "Allow sharing with groups" : "Izinkan pembagian dengan grup", "Restrict users to only share with users in their groups" : "Batasi pengguna untuk hanya membagikan dengan pengguna didalam grup mereka", "Allow users to send mail notification for shared files to other users" : "Izinkan pengguna mengirim pemberitahuan email saat berbagi berkas kepada pengguna lainnya", "Exclude groups from sharing" : "Tidak termasuk grup untuk berbagi", @@ -151,6 +184,7 @@ "Enable server-side encryption" : "Aktifkan enkripsi sisi-server", "Please read carefully before activating server-side encryption: " : "Mohon baca dengan teliti sebelum mengaktifkan enkripsi server-side:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Setelah enkripsi diaktifkan, semua berkas yang diunggah pada server mulai saat ini akan dienkripsi saat singgah pada server. Penonaktifan enkripsi hanya mungkin berhasil jika modul enkripsi yang aktif mendukung fungsi ini dan semua prasyarat (misalnya pengaturan kunci pemulihan) sudah terpenuhi.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Enkripsi saja tidak dapat menjamin keamanan sistem. Silakan lihat dokumentasi untuk informasi lebih lanjut dalam bagaimana aplikasi enkripsi bekerja, dan kasus pendukung.", "Be aware that encryption always increases the file size." : "Ingat bahwa enkripsi selalu menambah ukuran berkas.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Alangkah baiknya untuk membuat cadangan data secara rutin, dalam kasus enkripsi, pastikan untuk mencadangkan kunci enkripsi bersama dengan data Anda.", "This is the final warning: Do you really want to enable encryption?" : "Ini adalah peringatan terakhir: Apakah Anda yakin ingin mengaktifkan enkripsi?", @@ -175,12 +209,14 @@ "Store credentials" : "Simpan kredensial", "Test email settings" : "Pengaturan email percobaan", "Send email" : "Kirim email", + "What to log" : "Apa yang akan di log", "Download logfile" : "Unduh berkas log", "More" : "Lainnya", "Less" : "Ciutkan", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Berkas log lebih besar dari 100MB. Pengunduhan ini memerlukan beberapa saat!", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite digunakan sebagai basis data. Untuk instalasi yang lebih besar, kami menyarankan untuk beralih ke backend basis data yang berbeda.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Terutama saat menggunakan klien desktop untuk sinkronisasi berkas, penggunaan SQLite tidak disarankan.", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Untuk migrasi ke database lain, gunakan alat command line: 'occ db:convert-type', atau lihat <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasi ↗</a>.", "How to do backups" : "Bagaimana cara membuat cadangan", "Advanced monitoring" : "Pemantauan tingkat lanjut", "Performance tuning" : "Pemeliharaan performa", @@ -191,15 +227,23 @@ "Developer documentation" : "Dokumentasi pengembang", "Experimental applications ahead" : "Aplikasi percobaan terdepan", "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "Aplikasi percobaan belum diperiksa untuk masalah keamanan, baru atau dikenal tidak stabil dan dalam proses pengembangan. Menginstalnya dapat menyebabkan kehilangan data atau penerobosan keamanan.", + "by %s" : "oleh %s", + "%s-licensed" : "dilisensikan %s", "Documentation:" : "Dokumentasi:", "User documentation" : "Dokumentasi pengguna.", "Admin documentation" : "Dokumentasi admin", + "Visit website" : "Kunjungi laman web", + "Report a bug" : "Laporkan kerusakan", "Show description …" : "Tampilkan deskripsi ...", "Hide description …" : "Sembunyikan deskripsi ...", + "This app has an update available." : "Aplikasi ini dapat diperbarui.", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Aplikasi ini tidak mempunyai versi minimum Nextcloud yang ditetapkan. Di masa depan nanti ini akan menjadi kesalahan.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Aplikasi ini tidak mempunyai versi maksimum Nextcloud yang ditetapkan. Di masa depan nanti ini akan menjadi kesalahan.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Apl ini tidak dapat diinstal karena ketergantungan berikut belum terpenuhi:", "Enable only for specific groups" : "Aktifkan hanya untuk grup tertentu", "Uninstall App" : "Copot aplikasi", "Enable experimental apps" : "Aktifkan aplikasi percobaan", + "SSL Root Certificates" : "Sertifikat Root SSL", "Common Name" : "Nama umum", "Valid until" : "Berlaku sampai", "Issued By" : "Diterbitkan oleh", @@ -213,14 +257,20 @@ "Forum" : "Forum", "Issue tracker" : "Pelacak masalah", "Commercial support" : "Dukungan komersial", + "You are using <strong>%s</strong> of <strong>%s</strong>" : "Anda sedang menggunakan <strong>%s</strong> dari <strong>%s</strong>", "Profile picture" : "Foto profil", "Upload new" : "Unggah baru", + "Select from Files" : "Pilih dari berkas", "Remove image" : "Hapus gambar", + "png or jpg, max. 20 MB" : "png atau jpg, maks. 20 MB", + "Picture provided by original account" : "Gambar disediakan oleh akun asli", "Cancel" : "Batal", + "Choose as profile picture" : "Pilih sebagai gambar profil", "Full name" : "Nama lengkap", "No display name set" : "Nama tampilan tidak diatur", "Email" : "Email", "Your email address" : "Alamat email Anda", + "For password recovery and notifications" : "Untuk pemulihan sandi dan pemberitahuan", "No email address set" : "Alamat email tidak diatur", "You are member of the following groups:" : "Anda adalah anggota dari grup berikut:", "Password" : "Sandi", @@ -229,14 +279,23 @@ "Change password" : "Ubah sandi", "Language" : "Bahasa", "Help translate" : "Bantu menerjemahkan", + "Web, desktop and mobile clients currently logged in to your account." : "Klien web, desktop dan mobile yang sedang login di akun Anda.", + "Device" : "Perangkat", + "Last activity" : "Aktivitas terakhir", + "Passcodes that give an app or device permissions to access your account." : "Kode kunci yang memberikan aplikasi atau perangkat izin untuk mengakses akun Anda.", "Name" : "Nama", + "App name" : "Nama aplikasi", + "Create new app password" : "Buat sandi aplikasi baru", + "Use the credentials below to configure your app or device." : "Gunakan kredensial berikut untuk mengkonfigurasi aplikasi atau perangkat.", "Username" : "Nama pengguna", "Done" : "Selesai", "Get the apps to sync your files" : "Dapatkan aplikasi untuk sinkronisasi berkas Anda", "Desktop client" : "Klien desktop", "Android app" : "Aplikasi Android", "iOS app" : "Aplikasi iOS", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Apabila Anda ingin mendukung proyek ini\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">ikuti pengembangannya</a>\n\t\tatau\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">sebarkan</a>!", "Show First Run Wizard again" : "Tampilkan Penuntun Konfigurasi Awal", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Dikembangkan oleh {commmunityopen}komunitas Nextcloud{linkclose}, {githubopen}sumber kode{linkclose} dilisensikan dibawah {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Tampilkan kolasi penyimpanan", "Show last log in" : "Tampilkan masuk terakhir", "Show user backend" : "Tampilkan pengguna backend", @@ -246,19 +305,17 @@ "Create" : "Buat", "Admin Recovery Password" : "Sandi pemulihan Admin", "Enter the recovery password in order to recover the users files during password change" : "Masukkan sandi pemulihan untuk memulihkan berkas pengguna saat penggantian sandi", - "Add Group" : "Tambah Grup", "Group" : "Grup", "Everyone" : "Semua orang", "Admins" : "Admin", - "Default Quota" : "Kuota default", + "Default quota" : "Kuota standar", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Silakan masukkan jumlah penyimpanan (contoh: \"512 MB\" atau \"12 GB\")", "Other" : "Lainnya", - "Full Name" : "Nama Lengkap", - "Group Admin for" : "Grup Admin untuk", + "Group admin for" : "Grup admin untuk", "Quota" : "Kuota", - "Storage Location" : "Lokasi Penyimpanan", - "User Backend" : "Pengguna Backend", - "Last Login" : "Masuk Terakhir", + "Storage location" : "Lokasi penyimpanan", + "User backend" : "Backend pengguna", + "Last login" : "Log masuk terakhir", "change full name" : "ubah nama lengkap", "set new password" : "setel sandi baru", "change email address" : "ubah alamat email", diff --git a/settings/l10n/is.js b/settings/l10n/is.js index 8a113527060..7e1e7750294 100644 --- a/settings/l10n/is.js +++ b/settings/l10n/is.js @@ -99,10 +99,8 @@ OC.L10N.register( "A valid group name must be provided" : "Skráðu inn gilt heiti á hópi", "deleted {groupName}" : "eyddi {groupName}", "undo" : "afturkalla", - "no group" : "enginn hópur", "never" : "aldrei", "deleted {userName}" : "eyddi {userName}", - "add group" : "bæta við hópi", "Changing the password will result in data loss, because data recovery is not available for this user" : "Breyting á þessu lykilorði mun valda gagnatapi, þar sem gagnaendurheimt er ekki tiltæk fyrir þennan notanda", "A valid username must be provided" : "Skráðu inn gilt notandanafn", "Error creating user: {message}" : "Villa við að búa til notanda: {message}", @@ -174,11 +172,11 @@ OC.L10N.register( "Store credentials" : "Geyma auðkenni", "Test email settings" : "Prófa tölvupóststillingar", "Send email" : "Senda tölvupóst", + "What to log" : "Hvað á að skrá í annál", "Download logfile" : "Sækja annál", "More" : "Meira", "Less" : "Minna", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Annállinn er stærri en 100 MB.Þetta gæti tekið nokkra stund!", - "What to log" : "Hvað á að skrá í annál", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite er notað sem gagnagrunnur. Fyrir stærri uppsetningar mælum við með að velja annan gagnagrunnsbakenda.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Sérstaklega þegar tölvu forrit er notað til samræmingar þá er ekki mælt með notkunn SQLite.", "How to do backups" : "Hvernig á að taka öryggisafrit", @@ -255,19 +253,12 @@ OC.L10N.register( "Create" : "Búa til", "Admin Recovery Password" : "Endurheimtulykilorð kerfisstjóra", "Enter the recovery password in order to recover the users files during password change" : "Settu inn endurheimtulykilorð til að endurheimta skrár notandans við breytingu á lykilorði", - "Add Group" : "Bæta við hópi", "Group" : "Hópur", "Everyone" : "Allir", "Admins" : "Kerfisstjórar", - "Default Quota" : "Sjálfgefinn kvóti", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Settu inn geymslukvóta (t.d.: \"512 MB\" eða \"12 GB\")", "Other" : "Annað", - "Full Name" : "Fullt nafn", - "Group Admin for" : "Hópstjóri fyrir", "Quota" : "Kvóti", - "Storage Location" : "Staðsetning gagnageymslu", - "User Backend" : "Bakendi notanda", - "Last Login" : "Síðasta innskráning", "change full name" : "breyta fullu nafni", "set new password" : "setja nýtt lykilorð", "change email address" : "breyta tölvupóstfangi", diff --git a/settings/l10n/is.json b/settings/l10n/is.json index f82312e163b..43f8e85d501 100644 --- a/settings/l10n/is.json +++ b/settings/l10n/is.json @@ -97,10 +97,8 @@ "A valid group name must be provided" : "Skráðu inn gilt heiti á hópi", "deleted {groupName}" : "eyddi {groupName}", "undo" : "afturkalla", - "no group" : "enginn hópur", "never" : "aldrei", "deleted {userName}" : "eyddi {userName}", - "add group" : "bæta við hópi", "Changing the password will result in data loss, because data recovery is not available for this user" : "Breyting á þessu lykilorði mun valda gagnatapi, þar sem gagnaendurheimt er ekki tiltæk fyrir þennan notanda", "A valid username must be provided" : "Skráðu inn gilt notandanafn", "Error creating user: {message}" : "Villa við að búa til notanda: {message}", @@ -172,11 +170,11 @@ "Store credentials" : "Geyma auðkenni", "Test email settings" : "Prófa tölvupóststillingar", "Send email" : "Senda tölvupóst", + "What to log" : "Hvað á að skrá í annál", "Download logfile" : "Sækja annál", "More" : "Meira", "Less" : "Minna", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Annállinn er stærri en 100 MB.Þetta gæti tekið nokkra stund!", - "What to log" : "Hvað á að skrá í annál", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite er notað sem gagnagrunnur. Fyrir stærri uppsetningar mælum við með að velja annan gagnagrunnsbakenda.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Sérstaklega þegar tölvu forrit er notað til samræmingar þá er ekki mælt með notkunn SQLite.", "How to do backups" : "Hvernig á að taka öryggisafrit", @@ -253,19 +251,12 @@ "Create" : "Búa til", "Admin Recovery Password" : "Endurheimtulykilorð kerfisstjóra", "Enter the recovery password in order to recover the users files during password change" : "Settu inn endurheimtulykilorð til að endurheimta skrár notandans við breytingu á lykilorði", - "Add Group" : "Bæta við hópi", "Group" : "Hópur", "Everyone" : "Allir", "Admins" : "Kerfisstjórar", - "Default Quota" : "Sjálfgefinn kvóti", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Settu inn geymslukvóta (t.d.: \"512 MB\" eða \"12 GB\")", "Other" : "Annað", - "Full Name" : "Fullt nafn", - "Group Admin for" : "Hópstjóri fyrir", "Quota" : "Kvóti", - "Storage Location" : "Staðsetning gagnageymslu", - "User Backend" : "Bakendi notanda", - "Last Login" : "Síðasta innskráning", "change full name" : "breyta fullu nafni", "set new password" : "setja nýtt lykilorð", "change email address" : "breyta tölvupóstfangi", diff --git a/settings/l10n/it.js b/settings/l10n/it.js index ad442ea30aa..7448f92cbf1 100644 --- a/settings/l10n/it.js +++ b/settings/l10n/it.js @@ -117,10 +117,10 @@ OC.L10N.register( "A valid group name must be provided" : "Deve essere fornito un nome valido per il gruppo", "deleted {groupName}" : "{groupName} eliminato", "undo" : "annulla", - "no group" : "nessun gruppo", + "No group" : "Nessun gruppo", "never" : "mai", "deleted {userName}" : "{userName} eliminato", - "add group" : "aggiungi gruppo", + "Add group" : "Aggiungi gruppo", "Invalid quota value \"{val}\"" : "Valore di quota \"{val}\" non valido", "Changing the password will result in data loss, because data recovery is not available for this user" : "Il cambiamento della password causerà una perdita di dati, poiché il ripristino dei dati non è disponibile per questo utente", "A valid username must be provided" : "Deve essere fornito un nome utente valido", @@ -149,7 +149,7 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Il tuo database non è in esecuzione con il livello di isolamento delle transazioni \"READ COMMITTED\". Ciò può causare problemi quando diverse azioni sono eseguite in parallelo.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Il tuo database non è in esecuzione con il livello di isolamento delle transazioni \"READ COMMITTED\". Ciò può causare problemi quando diverse azioni sono eseguite in parallelo.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "La versione di %1$s installata è anteriore alla %2$s, per motivi di stabilità e prestazioni, consigliamo di aggiornare a una versione di %1$s più recente.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Il blocco del file transazionale è disabilitato, ciò potrebbe comportare problemi di race condition. Abilita 'filelocking.enabled' nel config-php per evitare questi problemi. Vedi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a> per ulteriori informazioni.", @@ -211,11 +211,11 @@ OC.L10N.register( "Store credentials" : "Memorizza le credenziali", "Test email settings" : "Prova impostazioni email", "Send email" : "Invia email", + "What to log" : "Cosa registrare", "Download logfile" : "Scarica file di log", "More" : "Altro", "Less" : "Meno", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!", - "What to log" : "Cosa registrare", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite è utilizzato come database. Per installazioni più grandi consigliamo di passare a un motore di database diverso.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Per migrare a un altro database, usa lo strumento da riga di comando: 'occ db:convert-type', o leggi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a>.", @@ -283,6 +283,7 @@ OC.L10N.register( "Help translate" : "Migliora la traduzione", "Web, desktop and mobile clients currently logged in to your account." : "Client web, desktop e mobile attualmente connessi al tuo account.", "Device" : "Dispositivo", + "Last activity" : "Ultima attività", "Passcodes that give an app or device permissions to access your account." : "Codici di accesso per fornire alle app oppure ai dispositivi il permesso di accedere al tuo account.", "Name" : "Nome", "App name" : "Nome applicazione", @@ -306,19 +307,17 @@ OC.L10N.register( "Create" : "Crea", "Admin Recovery Password" : "Password di ripristino amministrativa", "Enter the recovery password in order to recover the users files during password change" : "Digita la password di ripristino per recuperare i file degli utenti durante la modifica della password.", - "Add Group" : "Aggiungi gruppo", "Group" : "Gruppo", "Everyone" : "Chiunque", "Admins" : "Amministratori", - "Default Quota" : "Quota predefinita", + "Default quota" : "Quota predefinita", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Digita la quota di archiviazione (ad es.: \"512 MB\" or \"12 GB\")", "Other" : "Altro", - "Full Name" : "Nome completo", - "Group Admin for" : "Gruppo di amministrazione per", + "Group admin for" : "Gruppo di amministrazione per", "Quota" : "Quote", - "Storage Location" : "Posizione di archiviazione", - "User Backend" : "Motore utente", - "Last Login" : "Ultimo accesso", + "Storage location" : "Posizione di archiviazione", + "User backend" : "Motore utente", + "Last login" : "Ultimo accesso", "change full name" : "modica nome completo", "set new password" : "imposta una nuova password", "change email address" : "cambia l'indirizzo email", diff --git a/settings/l10n/it.json b/settings/l10n/it.json index 8f8904faf97..f23e662f72f 100644 --- a/settings/l10n/it.json +++ b/settings/l10n/it.json @@ -115,10 +115,10 @@ "A valid group name must be provided" : "Deve essere fornito un nome valido per il gruppo", "deleted {groupName}" : "{groupName} eliminato", "undo" : "annulla", - "no group" : "nessun gruppo", + "No group" : "Nessun gruppo", "never" : "mai", "deleted {userName}" : "{userName} eliminato", - "add group" : "aggiungi gruppo", + "Add group" : "Aggiungi gruppo", "Invalid quota value \"{val}\"" : "Valore di quota \"{val}\" non valido", "Changing the password will result in data loss, because data recovery is not available for this user" : "Il cambiamento della password causerà una perdita di dati, poiché il ripristino dei dati non è disponibile per questo utente", "A valid username must be provided" : "Deve essere fornito un nome utente valido", @@ -147,7 +147,7 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Il tuo database non è in esecuzione con il livello di isolamento delle transazioni \"READ COMMITTED\". Ciò può causare problemi quando diverse azioni sono eseguite in parallelo.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Il tuo database non è in esecuzione con il livello di isolamento delle transazioni \"READ COMMITTED\". Ciò può causare problemi quando diverse azioni sono eseguite in parallelo.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "La versione di %1$s installata è anteriore alla %2$s, per motivi di stabilità e prestazioni, consigliamo di aggiornare a una versione di %1$s più recente.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Il modulo PHP 'fileinfo' non è presente. Consigliamo vivamente di abilitare questo modulo per ottenere risultati migliori con il rilevamento dei tipi MIME.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Il blocco del file transazionale è disabilitato, ciò potrebbe comportare problemi di race condition. Abilita 'filelocking.enabled' nel config-php per evitare questi problemi. Vedi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a> per ulteriori informazioni.", @@ -209,11 +209,11 @@ "Store credentials" : "Memorizza le credenziali", "Test email settings" : "Prova impostazioni email", "Send email" : "Invia email", + "What to log" : "Cosa registrare", "Download logfile" : "Scarica file di log", "More" : "Altro", "Less" : "Meno", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Il file di log è più grande di 100MB. Scaricarlo potrebbe richiedere del tempo!", - "What to log" : "Cosa registrare", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite è utilizzato come database. Per installazioni più grandi consigliamo di passare a un motore di database diverso.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Per migrare a un altro database, usa lo strumento da riga di comando: 'occ db:convert-type', o leggi la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentazione ↗</a>.", @@ -281,6 +281,7 @@ "Help translate" : "Migliora la traduzione", "Web, desktop and mobile clients currently logged in to your account." : "Client web, desktop e mobile attualmente connessi al tuo account.", "Device" : "Dispositivo", + "Last activity" : "Ultima attività", "Passcodes that give an app or device permissions to access your account." : "Codici di accesso per fornire alle app oppure ai dispositivi il permesso di accedere al tuo account.", "Name" : "Nome", "App name" : "Nome applicazione", @@ -304,19 +305,17 @@ "Create" : "Crea", "Admin Recovery Password" : "Password di ripristino amministrativa", "Enter the recovery password in order to recover the users files during password change" : "Digita la password di ripristino per recuperare i file degli utenti durante la modifica della password.", - "Add Group" : "Aggiungi gruppo", "Group" : "Gruppo", "Everyone" : "Chiunque", "Admins" : "Amministratori", - "Default Quota" : "Quota predefinita", + "Default quota" : "Quota predefinita", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Digita la quota di archiviazione (ad es.: \"512 MB\" or \"12 GB\")", "Other" : "Altro", - "Full Name" : "Nome completo", - "Group Admin for" : "Gruppo di amministrazione per", + "Group admin for" : "Gruppo di amministrazione per", "Quota" : "Quote", - "Storage Location" : "Posizione di archiviazione", - "User Backend" : "Motore utente", - "Last Login" : "Ultimo accesso", + "Storage location" : "Posizione di archiviazione", + "User backend" : "Motore utente", + "Last login" : "Ultimo accesso", "change full name" : "modica nome completo", "set new password" : "imposta una nuova password", "change email address" : "cambia l'indirizzo email", diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js index 8f6ca84f075..8d3dd803044 100644 --- a/settings/l10n/ja.js +++ b/settings/l10n/ja.js @@ -106,10 +106,8 @@ OC.L10N.register( "A valid group name must be provided" : "有効なグループ名を指定する必要があります", "deleted {groupName}" : "{groupName} を削除しました", "undo" : "元に戻す", - "no group" : "未グループ", "never" : "なし", "deleted {userName}" : "{userName} を削除しました", - "add group" : "グループを追加", "Invalid quota value \"{val}\"" : "クオータ値 \"{val}\" は不正な値です。", "Changing the password will result in data loss, because data recovery is not available for this user" : "このユーザーのデータ復旧が無効になっていますので、パスワードを変更するとユーザーはデータに二度とアクセスできません。", "A valid username must be provided" : "有効なユーザー名を指定する必要があります", @@ -138,7 +136,6 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "\"config\"は読み取り専用になってます。そのためにWEBインターフェースで設定できません可能性があります。さらに、更新時に\"config\"ファイルを書き込み権限を与えることが必要", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHPでインラインドキュメントブロックを取り除く設定になっています。これによりコアアプリで利用できないものがいくつかあります。", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "これは、Zend OPcacheやeAccelerator 等のキャッシュ/アクセラレーターが原因かもしれません。", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "データベースのトランザクション分離レベルが \"READ COMMITED\" になっていません。この場合、複数の操作が同時に実行されたときに問題が発生する可能性があります。", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%2$s よりも古いバージョンの %1$s がインストールされています。安定した稼働とパフォーマンスの観点から、新しいバージョンの %1$s にアップデートすることをお勧めします。", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "ファイルの書き込み時のロックが無効になっており、競合時に問題となる可能性があります。この問題を避ける為に config.php 中の 'filelocking.enabled' を有効にしてください。詳細については、<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">ドキュメント↗ </a>を参照してください。", @@ -200,11 +197,11 @@ OC.L10N.register( "Store credentials" : "資格情報を保存", "Test email settings" : "メール設定のテスト", "Send email" : "メールを送信", + "What to log" : "ログ出力対象", "Download logfile" : "ログファイルのダウンロード", "More" : "もっと見る", "Less" : "閉じる", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが100MB以上あります。ダウンロードに時間がかかります!", - "What to log" : "ログ出力対象", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLiteがデータベースとして使用されています。大規模な運用では別のデータベースに切り替えることをお勧めします。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特にデスクトップクライアントをファイル同期に使用する場合,SQLiteは非推奨です.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "他のデータベースに移行する場合はコマンドラインツール: 'occ db:convert-type' を使うか、<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> ドキュメント ↗</a>を参照してください。", @@ -292,19 +289,12 @@ OC.L10N.register( "Create" : "作成", "Admin Recovery Password" : "管理者リカバリパスワード", "Enter the recovery password in order to recover the users files during password change" : "パスワード変更時のユーザーのファイルを回復するため、リカバリパスワードを入力してください", - "Add Group" : "グループを追加", "Group" : "グループ", "Everyone" : "すべてのユーザー", "Admins" : "管理者", - "Default Quota" : "デフォルトのクォータサイズ", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "ストレージのクォータを入力してください (例: \"512MB\" や \"12 GB\")", "Other" : "その他", - "Full Name" : "名前", - "Group Admin for" : "グループ管理者", "Quota" : "クオータ", - "Storage Location" : "データの保存場所", - "User Backend" : "ユーザーバックエンド", - "Last Login" : "最終ログイン", "change full name" : "名前を変更", "set new password" : "新しいパスワードを設定", "change email address" : "メールアドレスを変更", diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json index bd9fc830618..67007d97fdd 100644 --- a/settings/l10n/ja.json +++ b/settings/l10n/ja.json @@ -104,10 +104,8 @@ "A valid group name must be provided" : "有効なグループ名を指定する必要があります", "deleted {groupName}" : "{groupName} を削除しました", "undo" : "元に戻す", - "no group" : "未グループ", "never" : "なし", "deleted {userName}" : "{userName} を削除しました", - "add group" : "グループを追加", "Invalid quota value \"{val}\"" : "クオータ値 \"{val}\" は不正な値です。", "Changing the password will result in data loss, because data recovery is not available for this user" : "このユーザーのデータ復旧が無効になっていますので、パスワードを変更するとユーザーはデータに二度とアクセスできません。", "A valid username must be provided" : "有効なユーザー名を指定する必要があります", @@ -136,7 +134,6 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "\"config\"は読み取り専用になってます。そのためにWEBインターフェースで設定できません可能性があります。さらに、更新時に\"config\"ファイルを書き込み権限を与えることが必要", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHPでインラインドキュメントブロックを取り除く設定になっています。これによりコアアプリで利用できないものがいくつかあります。", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "これは、Zend OPcacheやeAccelerator 等のキャッシュ/アクセラレーターが原因かもしれません。", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "データベースのトランザクション分離レベルが \"READ COMMITED\" になっていません。この場合、複数の操作が同時に実行されたときに問題が発生する可能性があります。", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%2$s よりも古いバージョンの %1$s がインストールされています。安定した稼働とパフォーマンスの観点から、新しいバージョンの %1$s にアップデートすることをお勧めします。", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP のモジュール 'fileinfo' が見つかりません。mimeタイプの検出を精度良く行うために、このモジュールを有効にすることを強くお勧めします。", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "ファイルの書き込み時のロックが無効になっており、競合時に問題となる可能性があります。この問題を避ける為に config.php 中の 'filelocking.enabled' を有効にしてください。詳細については、<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">ドキュメント↗ </a>を参照してください。", @@ -198,11 +195,11 @@ "Store credentials" : "資格情報を保存", "Test email settings" : "メール設定のテスト", "Send email" : "メールを送信", + "What to log" : "ログ出力対象", "Download logfile" : "ログファイルのダウンロード", "More" : "もっと見る", "Less" : "閉じる", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ログファイルが100MB以上あります。ダウンロードに時間がかかります!", - "What to log" : "ログ出力対象", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLiteがデータベースとして使用されています。大規模な運用では別のデータベースに切り替えることをお勧めします。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特にデスクトップクライアントをファイル同期に使用する場合,SQLiteは非推奨です.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "他のデータベースに移行する場合はコマンドラインツール: 'occ db:convert-type' を使うか、<a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> ドキュメント ↗</a>を参照してください。", @@ -290,19 +287,12 @@ "Create" : "作成", "Admin Recovery Password" : "管理者リカバリパスワード", "Enter the recovery password in order to recover the users files during password change" : "パスワード変更時のユーザーのファイルを回復するため、リカバリパスワードを入力してください", - "Add Group" : "グループを追加", "Group" : "グループ", "Everyone" : "すべてのユーザー", "Admins" : "管理者", - "Default Quota" : "デフォルトのクォータサイズ", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "ストレージのクォータを入力してください (例: \"512MB\" や \"12 GB\")", "Other" : "その他", - "Full Name" : "名前", - "Group Admin for" : "グループ管理者", "Quota" : "クオータ", - "Storage Location" : "データの保存場所", - "User Backend" : "ユーザーバックエンド", - "Last Login" : "最終ログイン", "change full name" : "名前を変更", "set new password" : "新しいパスワードを設定", "change email address" : "メールアドレスを変更", diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js index 8bf03a67605..07354f29815 100644 --- a/settings/l10n/ko.js +++ b/settings/l10n/ko.js @@ -99,10 +99,8 @@ OC.L10N.register( "A valid group name must be provided" : "올바른 그룹 이름을 입력해야 함", "deleted {groupName}" : "{groupName} 삭제됨", "undo" : "실행 취소", - "no group" : "그룹 없음", "never" : "없음", "deleted {userName}" : "{userName} 삭제됨", - "add group" : "그룹 추가", "Changing the password will result in data loss, because data recovery is not available for this user" : "이 사용자에 대해 데이터 복구를 사용할 수 없기 때문에, 암호를 변경하면 데이터를 잃게 됩니다.", "A valid username must be provided" : "올바른 사용자 이름을 입력해야 함", "Error creating user: {message}" : "사용자 생성 오류: {message}", @@ -183,11 +181,11 @@ OC.L10N.register( "Store credentials" : "인증 정보 저장", "Test email settings" : "이메일 설정 시험", "Send email" : "이메일 보내기", + "What to log" : "남길 로그", "Download logfile" : "로그 파일 다운로드", "More" : "더 중요함", "Less" : "덜 중요함", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!", - "What to log" : "남길 로그", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "데이터베이스로 SQLite를 사용하고 있습니다. 대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드로 전환할 것을 권장합니다.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정이면, SQLite를 사용하지 않는 것이 좋습니다.", "How to do backups" : "백업 방법", @@ -263,19 +261,12 @@ OC.L10N.register( "Create" : "만들기", "Admin Recovery Password" : "관리자 복구 암호", "Enter the recovery password in order to recover the users files during password change" : "암호 변경 시 변경된 사용자 파일을 복구하려면 복구 암호를 입력하십시오", - "Add Group" : "그룹 추가", "Group" : "그룹", "Everyone" : "모두", "Admins" : "관리자", - "Default Quota" : "기본 할당량", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "저장소 할당량을 입력하십시오 (예: \"512 MB\", \"12 GB\")", "Other" : "기타", - "Full Name" : "전체 이름", - "Group Admin for" : "다음 그룹의 관리자:", "Quota" : "할당량", - "Storage Location" : "저장소 위치", - "User Backend" : "사용자 백엔드", - "Last Login" : "마지막 로그인", "change full name" : "전체 이름 변경", "set new password" : "새 암호 설정", "change email address" : "이메일 주소 변경", diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json index f56b69dbec0..415afd7120f 100644 --- a/settings/l10n/ko.json +++ b/settings/l10n/ko.json @@ -97,10 +97,8 @@ "A valid group name must be provided" : "올바른 그룹 이름을 입력해야 함", "deleted {groupName}" : "{groupName} 삭제됨", "undo" : "실행 취소", - "no group" : "그룹 없음", "never" : "없음", "deleted {userName}" : "{userName} 삭제됨", - "add group" : "그룹 추가", "Changing the password will result in data loss, because data recovery is not available for this user" : "이 사용자에 대해 데이터 복구를 사용할 수 없기 때문에, 암호를 변경하면 데이터를 잃게 됩니다.", "A valid username must be provided" : "올바른 사용자 이름을 입력해야 함", "Error creating user: {message}" : "사용자 생성 오류: {message}", @@ -181,11 +179,11 @@ "Store credentials" : "인증 정보 저장", "Test email settings" : "이메일 설정 시험", "Send email" : "이메일 보내기", + "What to log" : "남길 로그", "Download logfile" : "로그 파일 다운로드", "More" : "더 중요함", "Less" : "덜 중요함", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "로그 파일이 100MB보다 큽니다. 다운로드하는 데 시간이 걸릴 수 있습니다!", - "What to log" : "남길 로그", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "데이터베이스로 SQLite를 사용하고 있습니다. 대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드로 전환할 것을 권장합니다.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정이면, SQLite를 사용하지 않는 것이 좋습니다.", "How to do backups" : "백업 방법", @@ -261,19 +259,12 @@ "Create" : "만들기", "Admin Recovery Password" : "관리자 복구 암호", "Enter the recovery password in order to recover the users files during password change" : "암호 변경 시 변경된 사용자 파일을 복구하려면 복구 암호를 입력하십시오", - "Add Group" : "그룹 추가", "Group" : "그룹", "Everyone" : "모두", "Admins" : "관리자", - "Default Quota" : "기본 할당량", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "저장소 할당량을 입력하십시오 (예: \"512 MB\", \"12 GB\")", "Other" : "기타", - "Full Name" : "전체 이름", - "Group Admin for" : "다음 그룹의 관리자:", "Quota" : "할당량", - "Storage Location" : "저장소 위치", - "User Backend" : "사용자 백엔드", - "Last Login" : "마지막 로그인", "change full name" : "전체 이름 변경", "set new password" : "새 암호 설정", "change email address" : "이메일 주소 변경", diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js index edc054fd0f6..3978bc41e47 100644 --- a/settings/l10n/nb_NO.js +++ b/settings/l10n/nb_NO.js @@ -100,10 +100,8 @@ OC.L10N.register( "A valid group name must be provided" : "Et gyldig gruppenavn må oppgis", "deleted {groupName}" : "slettet {groupName}", "undo" : "angre", - "no group" : "ingen gruppe", "never" : "aldri", "deleted {userName}" : "slettet {userName}", - "add group" : "legg til gruppe", "Changing the password will result in data loss, because data recovery is not available for this user" : "Forandring av passordet vil føre til tap av data, fordi datagjennoppretting er utilgjengelig for denne brukeren", "A valid username must be provided" : "Oppgi et gyldig brukernavn", "Error creating user: {message}" : "Feil ved oppretting av bruker: {message}", @@ -189,11 +187,11 @@ OC.L10N.register( "Store credentials" : "Lagre påloggingsdetaljer", "Test email settings" : "Test innstillinger for e-post", "Send email" : "Send e-post", + "What to log" : "Hva som skal logges", "Download logfile" : "Last ned loggfil", "More" : "Mer", "Less" : "Mindre", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!", - "What to log" : "Hva som skal logges", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite brukes som database. For større installasjoner anbefaler vi å bytte til en annen database-server.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker desktopklienten til filsynkronisering", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" href=\"%s\">dokumentasjonen ↗</a>.", @@ -272,19 +270,12 @@ OC.L10N.register( "Create" : "Opprett", "Admin Recovery Password" : "Administrativt gjenopprettingspassord", "Enter the recovery password in order to recover the users files during password change" : "Legg inn gjenopprettingspassordet for å gjenopprette brukerfilene når passordet endres", - "Add Group" : "Legg til gruppe", "Group" : "Gruppe", "Everyone" : "Alle", "Admins" : "Administratorer", - "Default Quota" : "Standard kvote", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Legg inn lagringskvote (f.eks. \"512 MB\" eller \"12 GB\")", "Other" : "Annet", - "Full Name" : "Fullt navn", - "Group Admin for" : "Gruppeadministrator for", "Quota" : "Kvote", - "Storage Location" : "Lagringsplassering", - "User Backend" : "Bruker-server", - "Last Login" : "Siste innlogging", "change full name" : "endre fullt navn", "set new password" : "sett nytt passord", "change email address" : "endre e-postadresse", diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json index 1edb77536ea..917b7f49ad4 100644 --- a/settings/l10n/nb_NO.json +++ b/settings/l10n/nb_NO.json @@ -98,10 +98,8 @@ "A valid group name must be provided" : "Et gyldig gruppenavn må oppgis", "deleted {groupName}" : "slettet {groupName}", "undo" : "angre", - "no group" : "ingen gruppe", "never" : "aldri", "deleted {userName}" : "slettet {userName}", - "add group" : "legg til gruppe", "Changing the password will result in data loss, because data recovery is not available for this user" : "Forandring av passordet vil føre til tap av data, fordi datagjennoppretting er utilgjengelig for denne brukeren", "A valid username must be provided" : "Oppgi et gyldig brukernavn", "Error creating user: {message}" : "Feil ved oppretting av bruker: {message}", @@ -187,11 +185,11 @@ "Store credentials" : "Lagre påloggingsdetaljer", "Test email settings" : "Test innstillinger for e-post", "Send email" : "Send e-post", + "What to log" : "Hva som skal logges", "Download logfile" : "Last ned loggfil", "More" : "Mer", "Less" : "Mindre", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!", - "What to log" : "Hva som skal logges", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite brukes som database. For større installasjoner anbefaler vi å bytte til en annen database-server.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker desktopklienten til filsynkronisering", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "For å migrere til en annen database, bruk kommandolinjeverktøyet: 'occ db:convert-type', eller les i <a target=\"_blank\" href=\"%s\">dokumentasjonen ↗</a>.", @@ -270,19 +268,12 @@ "Create" : "Opprett", "Admin Recovery Password" : "Administrativt gjenopprettingspassord", "Enter the recovery password in order to recover the users files during password change" : "Legg inn gjenopprettingspassordet for å gjenopprette brukerfilene når passordet endres", - "Add Group" : "Legg til gruppe", "Group" : "Gruppe", "Everyone" : "Alle", "Admins" : "Administratorer", - "Default Quota" : "Standard kvote", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Legg inn lagringskvote (f.eks. \"512 MB\" eller \"12 GB\")", "Other" : "Annet", - "Full Name" : "Fullt navn", - "Group Admin for" : "Gruppeadministrator for", "Quota" : "Kvote", - "Storage Location" : "Lagringsplassering", - "User Backend" : "Bruker-server", - "Last Login" : "Siste innlogging", "change full name" : "endre fullt navn", "set new password" : "sett nytt passord", "change email address" : "endre e-postadresse", diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index f1d645d2b9e..9747c2d3991 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -13,8 +13,8 @@ OC.L10N.register( "Not enabled" : "Niet ingeschakeld", "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken applicaties via de app store of Federated Cloud Sharing", "Federated Cloud Sharing" : "Federated Cloud Sharing", - "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cUrl gebruikt een verouderde %s versie (%s). Werk het besturingssysteem bij of functies als %s zullen niet betrouwbaar werken.", - "A problem occurred, please check your log files (Error: %s)" : "Er trad een een probleem op, controleer uw logbestanden (Fout: %s).", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cUrl gebruikt een verouderde %s versie (%s). Werk het besturingssysteem bij, want anders zullen functies als %s niet betrouwbaar werken.", + "A problem occurred, please check your log files (Error: %s)" : "Er trad een een probleem op, controleer je logbestanden (Fout: %s).", "Migration Completed" : "Migratie gereed", "Group already exists." : "Groep bestaat al.", "Unable to add group." : "Kan groep niet toevoegen.", @@ -23,7 +23,7 @@ OC.L10N.register( "test email settings" : "test e-mailinstellingen", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Er ontstond een probleem bij het versturen van de e-mail. Controleer je instellingen. (Fout: %s)", "Email sent" : "E-mail verzonden", - "You need to set your user email before being able to send test emails." : "Je moet uw e-mailadres invoeren voordat je testberichten kunt versturen.", + "You need to set your user email before being able to send test emails." : "Je moet je e-mailadres invoeren voordat je testberichten kunt versturen.", "Invalid mail address" : "Ongeldig e-mailadres", "A user with that name already exists." : "Er bestaat al een gebruiker met die naam.", "Unable to create user." : "Kan gebruiker niet aanmaken.", @@ -68,7 +68,7 @@ OC.L10N.register( "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Goedgekeurde apps zijn ontwikkeld door vertrouwde ontwikkelaars en hebben een beveiligingscontrole ondergaan. Ze worden actief onderhouden in een open code repository en hun ontwikkelaars vinden ze stabiel genoeg voor informeel of normaal gebruik.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Deze app is niet gecontroleerd op beveiligingsproblemen en is nieuw of staat bekend als onstabiel. Installeren op eigen risico.", "Update to %s" : "Bijgewerkt naar %s", - "_You have %n app update pending_::_You have %n app updates pending_" : ["Er is een update voor een applicatie","Er zijn %n applicaties die geupdate kunnen worden"], + "_You have %n app update pending_::_You have %n app updates pending_" : ["Er is %n update voor een applicatie","Er zijn %n applicaties die geupdated kunnen worden"], "Please wait...." : "Even geduld a.u.b.", "Error while disabling app" : "Fout tijdens het uitzetten van de app", "Disable" : "Uitschakelen", @@ -117,10 +117,10 @@ OC.L10N.register( "A valid group name must be provided" : "Er moet een geldige groepsnaam worden opgegeven", "deleted {groupName}" : "verwijderd {groupName}", "undo" : "ongedaan maken", - "no group" : "geen groep", + "No group" : "Geen groep", "never" : "geen", "deleted {userName}" : "verwijderd {userName}", - "add group" : "Nieuwe groep", + "Add group" : "Groep toevoegen", "Invalid quota value \"{val}\"" : "Ongeldige quota waarde \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Wijzigen van het wachtwoord leidt tot gegevensverlies, omdat gegevensherstel voor deze gebruiker niet beschikbaar is", "A valid username must be provided" : "Er moet een geldige gebruikersnaam worden opgegeven", @@ -145,18 +145,18 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.", - "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verifieer de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratie notities en de php configuratie van je server, zeker bij gebrjuik van als php-fpm.", + "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratienotities en de php configuratie van je server, zeker bij gebruik van php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Je database draait niet met \"READ COMMITED\" transactie isolatie niveau. Dit kan problemen opleveren als er meerdere acties tegelijkertijd worden uitgevoerd.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Je database draait niet met \"READ COMMITTED\" transactie-isolatie niveau. Dit kan problemen opleveren als er meerdere acties tegelijkertijd worden uitgevoerd.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s lager dan versie %2$s geïnstalleerd, voor betere stabiliteit en prestaties adviseren wij om %1$s te upgraden naar een nieuwere versie.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandlocking is gedeactiveerd, dat zou kunnen leiden tot versiebeheerproblemen. Schakel 'filelocking enabled' in config.php in om deze problemen te voorkomen. Zie de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatie ↗</a> voor meer informatie.", "System locale can not be set to a one which supports UTF-8." : "De systeemtaal kan niet worden ingesteld op een taal die UTF-8 ondersteunt.", "This means that there might be problems with certain characters in file names." : "Dat betekent dat er problemen kunnen optreden met bepaalde tekens in bestandsnamen.", - "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.", - "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ", + "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten je uw systeem te installeren om een van de volgende talen te ondersteunen: %s.", + "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als je installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou je de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van je ownCloud (aanbevolen: \"%s\") ", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatie handleiding</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.", "All checks passed." : "Alle checks geslaagd", @@ -189,7 +189,7 @@ OC.L10N.register( "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Versleuteling alleen gerandeert geen beveiliging van het systeem. Lees de documentatie voor meer achtergrond over de werking van de crypto app an de relevante use cases.", "Be aware that encryption always increases the file size." : "Let erop dat versleuteling de bestandsomvang altijd laat toenemen.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Het is altijd verstandig om regelmatig backups van je bestanden te maken. Zorg ervoor dat je in geval van versleuteling ook de cryptosleutel met je gegevens backupt.", - "This is the final warning: Do you really want to enable encryption?" : "Dit is de laatste waarschuwing: Wilt je versleuteling echt inschakelen?", + "This is the final warning: Do you really want to enable encryption?" : "Dit is de laatste waarschuwing: Wil je versleuteling echt inschakelen?", "Enable encryption" : "Versleuteling inschakelen", "No encryption module loaded, please enable an encryption module in the app menu." : "Er is geen cryptomodule geladen, activeer een cryptomodule in het appmenu", "Select default encryption module:" : "Selecteer de standaard cryptomodule:", @@ -211,11 +211,11 @@ OC.L10N.register( "Store credentials" : "Opslaan inloggegevens", "Test email settings" : "Test e-mailinstellingen", "Send email" : "Versturen e-mail", + "What to log" : "Wat loggen", "Download logfile" : "Download logbestand", "More" : "Meer", "Less" : "Minder", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!", - "What to log" : "Wat loggen", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we om te schakelen naar een andere database engine.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Om te migreren naar een andere database moet u de commandoregel tool gebruiken: 'occ db:convert-type', lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatie ↗</a>.", @@ -251,15 +251,15 @@ OC.L10N.register( "Issued By" : "Uitgegeven door", "Valid until %s" : "Geldig tot %s", "Import root certificate" : "Importeren root certificaat", - "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen u laten weten dat u nu een %s account hebt.<br><br>Uw gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>", + "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen je laten weten dat je nu een %s account hebt.<br><br>Je gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "Proficiat!", - "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen u laten weten dat u nu een %s account hebt.\n\nUw gebruikersnaam: %s\nGa naar: %s\n\n", + "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen je laten weten dat je nu een %s account hebt.\n\nJe gebruikersnaam: %s\nGa naar: %s\n\n", "Administrator documentation" : "Beheerdersdocumentatie", "Online documentation" : "Online documentatie", "Forum" : "Forum", "Issue tracker" : "Issue tracker", "Commercial support" : "Commerciële ondersteuning", - "You are using <strong>%s</strong> of <strong>%s</strong>" : "U gebruikt <strong>%s</strong> van <strong>%s</strong>", + "You are using <strong>%s</strong> of <strong>%s</strong>" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong>", "Profile picture" : "Profielafbeelding", "Upload new" : "Upload een nieuwe", "Select from Files" : "Kies uit bestanden", @@ -307,19 +307,17 @@ OC.L10N.register( "Create" : "Aanmaken", "Admin Recovery Password" : "Beheer herstel wachtwoord", "Enter the recovery password in order to recover the users files during password change" : "Voer het herstel wachtwoord in om de gebruikersbestanden terug te halen bij wachtwoordwijziging", - "Add Group" : "Toevoegen groep", "Group" : "Groep", "Everyone" : "Iedereen", "Admins" : "Beheerders", - "Default Quota" : "Standaard limiet", + "Default quota" : "Standaard quota", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Geef de opslagquotering op (bijv. \"512 MB\" of \"12 GB\")", "Other" : "Anders", - "Full Name" : "Volledige naam", - "Group Admin for" : "Groepsbeheerder voor", + "Group admin for" : "Groepsbeheerder voor", "Quota" : "Limieten", - "Storage Location" : "Opslaglocatie", - "User Backend" : "Backend gebruiker", - "Last Login" : "Laatste inlog", + "Storage location" : "Opslag locatie", + "User backend" : "Backend gebruiker", + "Last login" : "Laatste login", "change full name" : "wijzigen volledige naam", "set new password" : "Instellen nieuw wachtwoord", "change email address" : "wijzig e-mailadres", diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index 330d4fdbf1c..e5cb8d11020 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -11,8 +11,8 @@ "Not enabled" : "Niet ingeschakeld", "installing and updating apps via the app store or Federated Cloud Sharing" : "installeren en bijwerken applicaties via de app store of Federated Cloud Sharing", "Federated Cloud Sharing" : "Federated Cloud Sharing", - "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cUrl gebruikt een verouderde %s versie (%s). Werk het besturingssysteem bij of functies als %s zullen niet betrouwbaar werken.", - "A problem occurred, please check your log files (Error: %s)" : "Er trad een een probleem op, controleer uw logbestanden (Fout: %s).", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cUrl gebruikt een verouderde %s versie (%s). Werk het besturingssysteem bij, want anders zullen functies als %s niet betrouwbaar werken.", + "A problem occurred, please check your log files (Error: %s)" : "Er trad een een probleem op, controleer je logbestanden (Fout: %s).", "Migration Completed" : "Migratie gereed", "Group already exists." : "Groep bestaat al.", "Unable to add group." : "Kan groep niet toevoegen.", @@ -21,7 +21,7 @@ "test email settings" : "test e-mailinstellingen", "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Er ontstond een probleem bij het versturen van de e-mail. Controleer je instellingen. (Fout: %s)", "Email sent" : "E-mail verzonden", - "You need to set your user email before being able to send test emails." : "Je moet uw e-mailadres invoeren voordat je testberichten kunt versturen.", + "You need to set your user email before being able to send test emails." : "Je moet je e-mailadres invoeren voordat je testberichten kunt versturen.", "Invalid mail address" : "Ongeldig e-mailadres", "A user with that name already exists." : "Er bestaat al een gebruiker met die naam.", "Unable to create user." : "Kan gebruiker niet aanmaken.", @@ -66,7 +66,7 @@ "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Goedgekeurde apps zijn ontwikkeld door vertrouwde ontwikkelaars en hebben een beveiligingscontrole ondergaan. Ze worden actief onderhouden in een open code repository en hun ontwikkelaars vinden ze stabiel genoeg voor informeel of normaal gebruik.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Deze app is niet gecontroleerd op beveiligingsproblemen en is nieuw of staat bekend als onstabiel. Installeren op eigen risico.", "Update to %s" : "Bijgewerkt naar %s", - "_You have %n app update pending_::_You have %n app updates pending_" : ["Er is een update voor een applicatie","Er zijn %n applicaties die geupdate kunnen worden"], + "_You have %n app update pending_::_You have %n app updates pending_" : ["Er is %n update voor een applicatie","Er zijn %n applicaties die geupdated kunnen worden"], "Please wait...." : "Even geduld a.u.b.", "Error while disabling app" : "Fout tijdens het uitzetten van de app", "Disable" : "Uitschakelen", @@ -115,10 +115,10 @@ "A valid group name must be provided" : "Er moet een geldige groepsnaam worden opgegeven", "deleted {groupName}" : "verwijderd {groupName}", "undo" : "ongedaan maken", - "no group" : "geen groep", + "No group" : "Geen groep", "never" : "geen", "deleted {userName}" : "verwijderd {userName}", - "add group" : "Nieuwe groep", + "Add group" : "Groep toevoegen", "Invalid quota value \"{val}\"" : "Ongeldige quota waarde \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Wijzigen van het wachtwoord leidt tot gegevensverlies, omdat gegevensherstel voor deze gebruiker niet beschikbaar is", "A valid username must be provided" : "Er moet een geldige gebruikersnaam worden opgegeven", @@ -143,18 +143,18 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.", - "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verifieer de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratie notities en de php configuratie van je server, zeker bij gebrjuik van als php-fpm.", + "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratienotities en de php configuratie van je server, zeker bij gebruik van php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Je database draait niet met \"READ COMMITED\" transactie isolatie niveau. Dit kan problemen opleveren als er meerdere acties tegelijkertijd worden uitgevoerd.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Je database draait niet met \"READ COMMITTED\" transactie-isolatie niveau. Dit kan problemen opleveren als er meerdere acties tegelijkertijd worden uitgevoerd.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s lager dan versie %2$s geïnstalleerd, voor betere stabiliteit en prestaties adviseren wij om %1$s te upgraden naar een nieuwere versie.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandlocking is gedeactiveerd, dat zou kunnen leiden tot versiebeheerproblemen. Schakel 'filelocking enabled' in config.php in om deze problemen te voorkomen. Zie de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatie ↗</a> voor meer informatie.", "System locale can not be set to a one which supports UTF-8." : "De systeemtaal kan niet worden ingesteld op een taal die UTF-8 ondersteunt.", "This means that there might be problems with certain characters in file names." : "Dat betekent dat er problemen kunnen optreden met bepaalde tekens in bestandsnamen.", - "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.", - "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ", + "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten je uw systeem te installeren om een van de volgende talen te ondersteunen: %s.", + "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als je installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou je de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van je ownCloud (aanbevolen: \"%s\") ", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:", "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installatie handleiding</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.", "All checks passed." : "Alle checks geslaagd", @@ -187,7 +187,7 @@ "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Versleuteling alleen gerandeert geen beveiliging van het systeem. Lees de documentatie voor meer achtergrond over de werking van de crypto app an de relevante use cases.", "Be aware that encryption always increases the file size." : "Let erop dat versleuteling de bestandsomvang altijd laat toenemen.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Het is altijd verstandig om regelmatig backups van je bestanden te maken. Zorg ervoor dat je in geval van versleuteling ook de cryptosleutel met je gegevens backupt.", - "This is the final warning: Do you really want to enable encryption?" : "Dit is de laatste waarschuwing: Wilt je versleuteling echt inschakelen?", + "This is the final warning: Do you really want to enable encryption?" : "Dit is de laatste waarschuwing: Wil je versleuteling echt inschakelen?", "Enable encryption" : "Versleuteling inschakelen", "No encryption module loaded, please enable an encryption module in the app menu." : "Er is geen cryptomodule geladen, activeer een cryptomodule in het appmenu", "Select default encryption module:" : "Selecteer de standaard cryptomodule:", @@ -209,11 +209,11 @@ "Store credentials" : "Opslaan inloggegevens", "Test email settings" : "Test e-mailinstellingen", "Send email" : "Versturen e-mail", + "What to log" : "Wat loggen", "Download logfile" : "Download logbestand", "More" : "Meer", "Less" : "Minder", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Het logbestand is groter dan 100MB. Downloaden kost even tijd!", - "What to log" : "Wat loggen", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wordt gebruikt als database. Voor grotere installaties adviseren we om te schakelen naar een andere database engine.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Om te migreren naar een andere database moet u de commandoregel tool gebruiken: 'occ db:convert-type', lees de <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatie ↗</a>.", @@ -249,15 +249,15 @@ "Issued By" : "Uitgegeven door", "Valid until %s" : "Geldig tot %s", "Import root certificate" : "Importeren root certificaat", - "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen u laten weten dat u nu een %s account hebt.<br><br>Uw gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>", + "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Hallo daar,<br><br>we willen je laten weten dat je nu een %s account hebt.<br><br>Je gebruikersnaam: %s<br>Ga naar: <a href=\"%s\">%s</a><br><br>", "Cheers!" : "Proficiat!", - "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen u laten weten dat u nu een %s account hebt.\n\nUw gebruikersnaam: %s\nGa naar: %s\n\n", + "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hallo,\n\nwe willen je laten weten dat je nu een %s account hebt.\n\nJe gebruikersnaam: %s\nGa naar: %s\n\n", "Administrator documentation" : "Beheerdersdocumentatie", "Online documentation" : "Online documentatie", "Forum" : "Forum", "Issue tracker" : "Issue tracker", "Commercial support" : "Commerciële ondersteuning", - "You are using <strong>%s</strong> of <strong>%s</strong>" : "U gebruikt <strong>%s</strong> van <strong>%s</strong>", + "You are using <strong>%s</strong> of <strong>%s</strong>" : "Je gebruikt <strong>%s</strong> van <strong>%s</strong>", "Profile picture" : "Profielafbeelding", "Upload new" : "Upload een nieuwe", "Select from Files" : "Kies uit bestanden", @@ -305,19 +305,17 @@ "Create" : "Aanmaken", "Admin Recovery Password" : "Beheer herstel wachtwoord", "Enter the recovery password in order to recover the users files during password change" : "Voer het herstel wachtwoord in om de gebruikersbestanden terug te halen bij wachtwoordwijziging", - "Add Group" : "Toevoegen groep", "Group" : "Groep", "Everyone" : "Iedereen", "Admins" : "Beheerders", - "Default Quota" : "Standaard limiet", + "Default quota" : "Standaard quota", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Geef de opslagquotering op (bijv. \"512 MB\" of \"12 GB\")", "Other" : "Anders", - "Full Name" : "Volledige naam", - "Group Admin for" : "Groepsbeheerder voor", + "Group admin for" : "Groepsbeheerder voor", "Quota" : "Limieten", - "Storage Location" : "Opslaglocatie", - "User Backend" : "Backend gebruiker", - "Last Login" : "Laatste inlog", + "Storage location" : "Opslag locatie", + "User backend" : "Backend gebruiker", + "Last login" : "Laatste login", "change full name" : "wijzigen volledige naam", "set new password" : "Instellen nieuw wachtwoord", "change email address" : "wijzig e-mailadres", diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js index de81fea8ec0..1ef37d471fd 100644 --- a/settings/l10n/pt_BR.js +++ b/settings/l10n/pt_BR.js @@ -117,10 +117,10 @@ OC.L10N.register( "A valid group name must be provided" : "Um nome de grupo válido deve ser fornecido", "deleted {groupName}" : "eliminado {groupName}", "undo" : "desfazer", - "no group" : "nenhum grupo", + "No group" : "Nenhum grupo", "never" : "nunca", "deleted {userName}" : "eliminado {userName}", - "add group" : "adicionar grupo", + "Add group" : "Adicionar grupo", "Invalid quota value \"{val}\"" : "Valor da quota inválido \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Trocar a senha irá resultar em perda de dados, porque recuperação de dados não está disponível para este usuário", "A valid username must be provided" : "Forneça um nome de usuário válido", @@ -149,7 +149,7 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Seu banco de dados não está sendo executado com \"READ COMMITTED\" nível de isolamento da transação. Isto pode causar problemas quando várias ações são executadas em paralelo.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Seu banco de dados não está em execução com o nível de isolamento de transação \"READ COMITTED\". Isso poderá causar problemas quando várias ações são executadas em paralelo.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s abaixo da versão %2$s está instalado, por razões de estabilidade e desempenho recomendamos a atualização para uma nova versão %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O módulo PHP 'fileinfo' está faltando. Recomendamos que ative este módulo para obter uma melhor detecção do tipo de mídia (mime-type).", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Bloqueio de arquivo transacional está desativado, isso pode levar a problemas com as condições de corrida. Ativar 'filelocking.enabled' em config.php para evitar esses problemas. Veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a> para mais informações.", @@ -186,7 +186,7 @@ OC.L10N.register( "Enable server-side encryption" : "Habilitar a Criptografia do Lado do Servidor", "Please read carefully before activating server-side encryption: " : "Por favor, leia com atenção antes de ativar a criptografia do lado do servidor:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Uma vez que a criptografia é ativada, todos os arquivos carregados para o servidor a partir desse ponto em diante serão criptografados e estarão disponíveis no servidor. Só será possível desativar a criptografia em uma data posterior, se o módulo de criptografia ativo suporta essa função, e todas as pré-condições sejam cumpridas(por exemplo, definindo uma chave de recuperação).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encriptação, por sí só, não garante segurança do sistema. Por favor, veja a documentação para mais informações sobe como o aplicativo de encriptação funciona e os casos de uso suportados.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encriptação, por si só, não garante segurança do sistema. Por favor, veja a documentação para mais informações sobe como o aplicativo de encriptação funciona e os casos de uso suportados.", "Be aware that encryption always increases the file size." : "Esteja ciente de que a criptografia sempre aumenta o tamanho do arquivo.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar backups regulares dos seus dados, em caso de criptografia certifique-se de fazer backup das chaves de criptografia, juntamente com os seus dados.", "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: Você realmente quer ativar a criptografia?", @@ -211,11 +211,11 @@ OC.L10N.register( "Store credentials" : "Armazenar credenciais", "Test email settings" : "Configurações de e-mail de teste", "Send email" : "Enviar email", + "What to log" : "O que colocar no log", "Download logfile" : "Baixar o arquivo de log", "More" : "Mais", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!", - "What to log" : "O que colocar no log", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'occ db:convert-type', ou consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.", @@ -248,7 +248,7 @@ OC.L10N.register( "SSL Root Certificates" : "Certificados Raiz SSL", "Common Name" : "Nome", "Valid until" : "Válido até", - "Issued By" : "Emitido Por", + "Issued By" : "Emitido por", "Valid until %s" : "Válido até %s", "Import root certificate" : "Importar certificado raiz", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>", @@ -307,19 +307,17 @@ OC.L10N.register( "Create" : "Criar", "Admin Recovery Password" : "Recuperação da Senha do Administrador", "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação para recuperar os arquivos dos usuários durante a mudança de senha.", - "Add Group" : "Adicionar Grupo", "Group" : "Grupo", "Everyone" : "Para todos", "Admins" : "Administradores", - "Default Quota" : "Quota Padrão", + "Default quota" : "Quota padrão", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor insira cota de armazenamento (ex: \"512\" ou \"12 GB\")", "Other" : "Outro", - "Full Name" : "Nome Completo", - "Group Admin for" : "Grupo Admin para", + "Group admin for" : "Grupo administrativo para", "Quota" : "Cota", - "Storage Location" : "Local de Armazenamento", - "User Backend" : "Administrador do Usuário", - "Last Login" : "Último Login", + "Storage location" : "Local do armazenamento", + "User backend" : "Backend de usuário", + "Last login" : "Última autenticação", "change full name" : "alterar nome completo", "set new password" : "definir nova senha", "change email address" : "Trocar o endereço de email", diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json index e20cd633164..09f609fa78f 100644 --- a/settings/l10n/pt_BR.json +++ b/settings/l10n/pt_BR.json @@ -115,10 +115,10 @@ "A valid group name must be provided" : "Um nome de grupo válido deve ser fornecido", "deleted {groupName}" : "eliminado {groupName}", "undo" : "desfazer", - "no group" : "nenhum grupo", + "No group" : "Nenhum grupo", "never" : "nunca", "deleted {userName}" : "eliminado {userName}", - "add group" : "adicionar grupo", + "Add group" : "Adicionar grupo", "Invalid quota value \"{val}\"" : "Valor da quota inválido \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Trocar a senha irá resultar em perda de dados, porque recuperação de dados não está disponível para este usuário", "A valid username must be provided" : "Forneça um nome de usuário válido", @@ -147,7 +147,7 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Seu banco de dados não está sendo executado com \"READ COMMITTED\" nível de isolamento da transação. Isto pode causar problemas quando várias ações são executadas em paralelo.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Seu banco de dados não está em execução com o nível de isolamento de transação \"READ COMITTED\". Isso poderá causar problemas quando várias ações são executadas em paralelo.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s abaixo da versão %2$s está instalado, por razões de estabilidade e desempenho recomendamos a atualização para uma nova versão %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O módulo PHP 'fileinfo' está faltando. Recomendamos que ative este módulo para obter uma melhor detecção do tipo de mídia (mime-type).", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Bloqueio de arquivo transacional está desativado, isso pode levar a problemas com as condições de corrida. Ativar 'filelocking.enabled' em config.php para evitar esses problemas. Veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a> para mais informações.", @@ -184,7 +184,7 @@ "Enable server-side encryption" : "Habilitar a Criptografia do Lado do Servidor", "Please read carefully before activating server-side encryption: " : "Por favor, leia com atenção antes de ativar a criptografia do lado do servidor:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Uma vez que a criptografia é ativada, todos os arquivos carregados para o servidor a partir desse ponto em diante serão criptografados e estarão disponíveis no servidor. Só será possível desativar a criptografia em uma data posterior, se o módulo de criptografia ativo suporta essa função, e todas as pré-condições sejam cumpridas(por exemplo, definindo uma chave de recuperação).", - "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encriptação, por sí só, não garante segurança do sistema. Por favor, veja a documentação para mais informações sobe como o aplicativo de encriptação funciona e os casos de uso suportados.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Encriptação, por si só, não garante segurança do sistema. Por favor, veja a documentação para mais informações sobe como o aplicativo de encriptação funciona e os casos de uso suportados.", "Be aware that encryption always increases the file size." : "Esteja ciente de que a criptografia sempre aumenta o tamanho do arquivo.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "É sempre bom criar backups regulares dos seus dados, em caso de criptografia certifique-se de fazer backup das chaves de criptografia, juntamente com os seus dados.", "This is the final warning: Do you really want to enable encryption?" : "Este é o aviso final: Você realmente quer ativar a criptografia?", @@ -209,11 +209,11 @@ "Store credentials" : "Armazenar credenciais", "Test email settings" : "Configurações de e-mail de teste", "Send email" : "Enviar email", + "What to log" : "O que colocar no log", "Download logfile" : "Baixar o arquivo de log", "More" : "Mais", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O arquivo de log é maior que 100 MB. Baixar esse arquivo requer algum tempo!", - "What to log" : "O que colocar no log", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é usada como base de dados. Para instalações maiores recomendamos mudar para um backend de banco de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro banco de dados usar a ferramenta de linha de comando: 'occ db:convert-type', ou consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a>.", @@ -246,7 +246,7 @@ "SSL Root Certificates" : "Certificados Raiz SSL", "Common Name" : "Nome", "Valid until" : "Válido até", - "Issued By" : "Emitido Por", + "Issued By" : "Emitido por", "Valid until %s" : "Válido até %s", "Import root certificate" : "Importar certificado raiz", "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "Olá,<br><br>somente para lembrar que agora você tem uma conta %s.<br><br>Seu nome de usuário é: %s<br>Acesse em: <a href=\"%s\">%s</a><br><br>", @@ -305,19 +305,17 @@ "Create" : "Criar", "Admin Recovery Password" : "Recuperação da Senha do Administrador", "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação para recuperar os arquivos dos usuários durante a mudança de senha.", - "Add Group" : "Adicionar Grupo", "Group" : "Grupo", "Everyone" : "Para todos", "Admins" : "Administradores", - "Default Quota" : "Quota Padrão", + "Default quota" : "Quota padrão", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Por favor insira cota de armazenamento (ex: \"512\" ou \"12 GB\")", "Other" : "Outro", - "Full Name" : "Nome Completo", - "Group Admin for" : "Grupo Admin para", + "Group admin for" : "Grupo administrativo para", "Quota" : "Cota", - "Storage Location" : "Local de Armazenamento", - "User Backend" : "Administrador do Usuário", - "Last Login" : "Último Login", + "Storage location" : "Local do armazenamento", + "User backend" : "Backend de usuário", + "Last login" : "Última autenticação", "change full name" : "alterar nome completo", "set new password" : "definir nova senha", "change email address" : "Trocar o endereço de email", diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js index c6aaba4e968..9d430082365 100644 --- a/settings/l10n/pt_PT.js +++ b/settings/l10n/pt_PT.js @@ -105,10 +105,8 @@ OC.L10N.register( "A valid group name must be provided" : "Deve ser indicado um nome de grupo válido", "deleted {groupName}" : "{groupName} apagado", "undo" : "Anular", - "no group" : "sem grupo", "never" : "nunca", "deleted {userName}" : "{userName} apagado", - "add group" : "Adicionar grupo", "Changing the password will result in data loss, because data recovery is not available for this user" : "A alteração da palavra-passe resultará na perda de dados, porque a recuperação de dados não está disponível para este utilizador", "A valid username must be provided" : "Deve ser indicado um nome de utilizador válido", "Error creating user: {message}" : "Erro ao criar utilizador: {message}", @@ -135,7 +133,6 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Só-de-Leitura foi ativada. Isto evita definir algumas configurações através da interface da Web. Além disso, o ficheiro precisa de ser definido gravável manualmente para cada atualização.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "O PHP está aparentemente configurado para remover blocos doc em linha. Isto vai tornar inacessíveis várias aplicações básicas.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto é provavelmente causado por uma cache/acelerador como o Zend OPcache or eAcelerador.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "A base de dados não tem o nível de isolamento da transacção \"READ COMMITTED\" activado. Isto pode causar problemas quando várias acções são executadas em paralelo.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s abaixo da versão %2$s está instalado. Por motivos de estabilidade e desempenho, recomendamos que atualize para a nova versão %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Bloqueio de arquivos transacionais está desativado, isto poderá levar a problemas com condições de corrida. Ative 'filelocking.enabled' no config.php para evitar estes problemas. Consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a> para mais informação.", @@ -196,11 +193,11 @@ OC.L10N.register( "Store credentials" : "Armazenar credenciais", "Test email settings" : "Testar definições de e-mail", "Send email" : "Enviar email", + "What to log" : "Fazer log do quê?", "Download logfile" : "Descarregar logfile", "More" : "Mais", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O logfile é maior que 100MB. O download do mesmo poderá demorar algum tempo!", - "What to log" : "Fazer log do quê?", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é utilizado como uma base de dados. Para instalações maiores nós recomendamos que mude para uma interface de base de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "O uso de SQLite é desencorajado especialmente se estiver a pensar em dar uso ao cliente desktop para sincronizar os seus ficheiros no seu computador.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro tipo de base de dados, use a ferramenta de comando de linha: 'occ db:convert-type', ou veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação↗</a>.", @@ -280,19 +277,12 @@ OC.L10N.register( "Create" : "Criar", "Admin Recovery Password" : "Recuperação da Palavra-passe de Administrador", "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os ficheiros dos utilizadores durante a mudança da palavra-passe", - "Add Group" : "Adicionar grupo", "Group" : "Grupo", "Everyone" : "Para todos", "Admins" : "Administrador", - "Default Quota" : "Quota por padrão", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Insira a quota de armazenamento (ex: \"512 MB\" ou \"12 GB\")", "Other" : "Outro", - "Full Name" : "Nome completo", - "Group Admin for" : "Administrador de Grupo para", "Quota" : "Quota", - "Storage Location" : "Localização do Armazenamento", - "User Backend" : "Interface do Utilizador", - "Last Login" : "Ultimo acesso", "change full name" : "alterar nome completo", "set new password" : "definir nova palavra-passe", "change email address" : "alterar endereço do correio eletrónico", diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json index 726d3470975..7a0acaf80da 100644 --- a/settings/l10n/pt_PT.json +++ b/settings/l10n/pt_PT.json @@ -103,10 +103,8 @@ "A valid group name must be provided" : "Deve ser indicado um nome de grupo válido", "deleted {groupName}" : "{groupName} apagado", "undo" : "Anular", - "no group" : "sem grupo", "never" : "nunca", "deleted {userName}" : "{userName} apagado", - "add group" : "Adicionar grupo", "Changing the password will result in data loss, because data recovery is not available for this user" : "A alteração da palavra-passe resultará na perda de dados, porque a recuperação de dados não está disponível para este utilizador", "A valid username must be provided" : "Deve ser indicado um nome de utilizador válido", "Error creating user: {message}" : "Erro ao criar utilizador: {message}", @@ -133,7 +131,6 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Só-de-Leitura foi ativada. Isto evita definir algumas configurações através da interface da Web. Além disso, o ficheiro precisa de ser definido gravável manualmente para cada atualização.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "O PHP está aparentemente configurado para remover blocos doc em linha. Isto vai tornar inacessíveis várias aplicações básicas.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto é provavelmente causado por uma cache/acelerador como o Zend OPcache or eAcelerador.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "A base de dados não tem o nível de isolamento da transacção \"READ COMMITTED\" activado. Isto pode causar problemas quando várias acções são executadas em paralelo.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s abaixo da versão %2$s está instalado. Por motivos de estabilidade e desempenho, recomendamos que atualize para a nova versão %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "O Módulo PHP 'fileinfo' não se encontra instalado/activado. É fortemente recomendado que active este módulo para obter os melhores resultado com a detecção dos tipos de mime.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Bloqueio de arquivos transacionais está desativado, isto poderá levar a problemas com condições de corrida. Ative 'filelocking.enabled' no config.php para evitar estes problemas. Consulte a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação ↗</a> para mais informação.", @@ -194,11 +191,11 @@ "Store credentials" : "Armazenar credenciais", "Test email settings" : "Testar definições de e-mail", "Send email" : "Enviar email", + "What to log" : "Fazer log do quê?", "Download logfile" : "Descarregar logfile", "More" : "Mais", "Less" : "Menos", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "O logfile é maior que 100MB. O download do mesmo poderá demorar algum tempo!", - "What to log" : "Fazer log do quê?", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite é utilizado como uma base de dados. Para instalações maiores nós recomendamos que mude para uma interface de base de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "O uso de SQLite é desencorajado especialmente se estiver a pensar em dar uso ao cliente desktop para sincronizar os seus ficheiros no seu computador.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Para migrar para outro tipo de base de dados, use a ferramenta de comando de linha: 'occ db:convert-type', ou veja a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentação↗</a>.", @@ -278,19 +275,12 @@ "Create" : "Criar", "Admin Recovery Password" : "Recuperação da Palavra-passe de Administrador", "Enter the recovery password in order to recover the users files during password change" : "Digite a senha de recuperação, a fim de recuperar os ficheiros dos utilizadores durante a mudança da palavra-passe", - "Add Group" : "Adicionar grupo", "Group" : "Grupo", "Everyone" : "Para todos", "Admins" : "Administrador", - "Default Quota" : "Quota por padrão", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Insira a quota de armazenamento (ex: \"512 MB\" ou \"12 GB\")", "Other" : "Outro", - "Full Name" : "Nome completo", - "Group Admin for" : "Administrador de Grupo para", "Quota" : "Quota", - "Storage Location" : "Localização do Armazenamento", - "User Backend" : "Interface do Utilizador", - "Last Login" : "Ultimo acesso", "change full name" : "alterar nome completo", "set new password" : "definir nova palavra-passe", "change email address" : "alterar endereço do correio eletrónico", diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js index 241a910032b..0b8d8bdaea8 100644 --- a/settings/l10n/ru.js +++ b/settings/l10n/ru.js @@ -87,6 +87,17 @@ OC.L10N.register( "App update" : "Обновить приложения", "No apps found for {query}" : "Приложения не найдены по {query}", "Disconnect" : "Отключить", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome для Android", + "iPhone" : "iPhone", + "iOS Client" : "Клиент iOS", + "Android Client" : "Клиент Android", + "Sync client - {os}" : "Синхронизировать клиента - {os}", + "This session" : "Эта сессия", "Error while loading browser sessions and device tokens" : "Ошибка при загрузке браузерных сессий и токенов устройств", "Error while creating device token" : "Ошибка при создании токена для устройства", "Error while deleting the token" : "Ошибка при удалении токена устройства", @@ -106,10 +117,11 @@ OC.L10N.register( "A valid group name must be provided" : "Введите правильное имя группы", "deleted {groupName}" : "удалена {groupName}", "undo" : "отмена", - "no group" : "без группы", + "No group" : "Без группы", "never" : "никогда", "deleted {userName}" : "удалён {userName}", - "add group" : "добавить группу", + "Add group" : "Добавить группу", + "Invalid quota value \"{val}\"" : "Недопустимая величина квоты \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Изменение пароля приведёт к потере данных, так как восстановление данных не доступно для этого пользователя", "A valid username must be provided" : "Укажите правильное имя пользователя", "Error creating user: {message}" : "Ошибка создания пользователя: {message}", @@ -137,7 +149,7 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Ваша база данных не работает в режиме изоляции транзакций \"READ COMMITED\". Это может вызвать проблемы, если несколько действий выполняется одновременно.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Ваша база данных не работает в режиме изоляции транзакций \"READ COMMITED\". Это может вызвать проблемы, если несколько действий выполняется одновременно.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s ниже установленной версии %2$s, по причинам стабильности и производительности мы рекомендуем обновиться до новой версии %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Блокировка передаваемых файлов отключена, это может привести к состоянию гонки. Включите параметр 'filelocking.enabled' в файла config.php для решения проблемы. Обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a> для получения дополнительной информации.", @@ -174,6 +186,7 @@ OC.L10N.register( "Enable server-side encryption" : "Включить шифрование на стороне сервера", "Please read carefully before activating server-side encryption: " : "Пожалуйста прочтите внимательно прежде чем включать шифрование на стороне сервера:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Когда вы включите шифрование, все файлы, загруженные с этого момента на сервер, будут храниться в зашифрованном виде. Отключить шифрование в более позднее время возможно только в случае, если выбранный модуль шифрования поддерживает эту функцию, и все дополнительные условия соблюдены (например настроен ключ восстановления).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование само по себе не гарантирует безопасность системы. Пожалуйста ознакомтесь с документацией для получения более подробной информации о том, как работают приложения шифрования и соответствующие примеры.", "Be aware that encryption always increases the file size." : "Будьте в курсе, что шифрование всегда увеличивает размер файла.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Хорошая практика делать регулярные резервные копии ваших данных. При использовании шифрования сохраняйте не только данные, но и ключи.", "This is the final warning: Do you really want to enable encryption?" : "Это последнее предупреждение: Вы действительно желаете включить шифрование?", @@ -198,11 +211,11 @@ OC.L10N.register( "Store credentials" : "Сохранить учётные данные", "Test email settings" : "Проверить настройки почты", "Send email" : "Отправить email", + "What to log" : "Что записывать в журнал", "Download logfile" : "Скачать журнал", "More" : "Больше", "Less" : "Меньше", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!", - "What to log" : "Что записывать в журнал", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "В качестве базы данных используется SQLite. Для больших установок мы рекомендуем переключиться на другую серверную базу данных.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особенно вызывает сомнение использование SQLite при синхронизации файлов с использованием клиента для ПК.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Для миграции на другую базу данных используйте команду: 'occ db:convert-type' или обратитесь к a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a>.", @@ -268,9 +281,14 @@ OC.L10N.register( "Change password" : "Сменить пароль", "Language" : "Язык", "Help translate" : "Помочь с переводом", + "Web, desktop and mobile clients currently logged in to your account." : "Веб, настольные и мобильные клиенты, которые в настоящий момент авторизованы вашей учётной записью.", + "Device" : "Устройство", + "Last activity" : "Последние действия", + "Passcodes that give an app or device permissions to access your account." : "Код доступа, который дает приложению или устройству разрешения на доступ к вашей учётной записи.", "Name" : "Название", "App name" : "Название приложения", "Create new app password" : "Создать новый пароль для приложения", + "Use the credentials below to configure your app or device." : "Используйте учётные данные ниже для настройки вашего приложения или устройства.", "Username" : "Имя пользователя", "Done" : "Выполнено", "Get the apps to sync your files" : "Получить приложения для синхронизации ваших файлов", @@ -289,19 +307,17 @@ OC.L10N.register( "Create" : "Создать", "Admin Recovery Password" : "Пароль административного восстановления", "Enter the recovery password in order to recover the users files during password change" : "Введите пароль для того, чтобы восстановить файлы пользователей при смене пароля", - "Add Group" : "Добавить группу", "Group" : "Группа", "Everyone" : "Все", "Admins" : "Администраторы", - "Default Quota" : "Квота по умолчанию", + "Default quota" : "Квота по умолчанию", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Пожалуйста, введите квоту на хранилище (например: \"512 MB\" или \"12 GB\")", "Other" : "Другая", - "Full Name" : "Полное имя", - "Group Admin for" : "Администратор групп", + "Group admin for" : "Администратор групп", "Quota" : "Квота", - "Storage Location" : "Место хранилища", - "User Backend" : "Механизм учёта пользователей", - "Last Login" : "Последний вход", + "Storage location" : "Место хранилища", + "User backend" : "Механизм учёта пользователей", + "Last login" : "Последний вход", "change full name" : "изменить полное имя", "set new password" : "установить новый пароль", "change email address" : "изменить адрес почты", diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json index 319f1ada521..5e33c1689ad 100644 --- a/settings/l10n/ru.json +++ b/settings/l10n/ru.json @@ -85,6 +85,17 @@ "App update" : "Обновить приложения", "No apps found for {query}" : "Приложения не найдены по {query}", "Disconnect" : "Отключить", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Google Chrome для Android", + "iPhone" : "iPhone", + "iOS Client" : "Клиент iOS", + "Android Client" : "Клиент Android", + "Sync client - {os}" : "Синхронизировать клиента - {os}", + "This session" : "Эта сессия", "Error while loading browser sessions and device tokens" : "Ошибка при загрузке браузерных сессий и токенов устройств", "Error while creating device token" : "Ошибка при создании токена для устройства", "Error while deleting the token" : "Ошибка при удалении токена устройства", @@ -104,10 +115,11 @@ "A valid group name must be provided" : "Введите правильное имя группы", "deleted {groupName}" : "удалена {groupName}", "undo" : "отмена", - "no group" : "без группы", + "No group" : "Без группы", "never" : "никогда", "deleted {userName}" : "удалён {userName}", - "add group" : "добавить группу", + "Add group" : "Добавить группу", + "Invalid quota value \"{val}\"" : "Недопустимая величина квоты \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Изменение пароля приведёт к потере данных, так как восстановление данных не доступно для этого пользователя", "A valid username must be provided" : "Укажите правильное имя пользователя", "Error creating user: {message}" : "Ошибка создания пользователя: {message}", @@ -135,7 +147,7 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Ваша база данных не работает в режиме изоляции транзакций \"READ COMMITED\". Это может вызвать проблемы, если несколько действий выполняется одновременно.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Ваша база данных не работает в режиме изоляции транзакций \"READ COMMITED\". Это может вызвать проблемы, если несколько действий выполняется одновременно.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s ниже установленной версии %2$s, по причинам стабильности и производительности мы рекомендуем обновиться до новой версии %1$s.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-модуль 'fileinfo' отсутствует. Мы настоятельно рекомендуем включить этот модуль для улучшения определения типов (mime-type) файлов.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Блокировка передаваемых файлов отключена, это может привести к состоянию гонки. Включите параметр 'filelocking.enabled' в файла config.php для решения проблемы. Обратитесь к <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a> для получения дополнительной информации.", @@ -172,6 +184,7 @@ "Enable server-side encryption" : "Включить шифрование на стороне сервера", "Please read carefully before activating server-side encryption: " : "Пожалуйста прочтите внимательно прежде чем включать шифрование на стороне сервера:", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Когда вы включите шифрование, все файлы, загруженные с этого момента на сервер, будут храниться в зашифрованном виде. Отключить шифрование в более позднее время возможно только в случае, если выбранный модуль шифрования поддерживает эту функцию, и все дополнительные условия соблюдены (например настроен ключ восстановления).", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Шифрование само по себе не гарантирует безопасность системы. Пожалуйста ознакомтесь с документацией для получения более подробной информации о том, как работают приложения шифрования и соответствующие примеры.", "Be aware that encryption always increases the file size." : "Будьте в курсе, что шифрование всегда увеличивает размер файла.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Хорошая практика делать регулярные резервные копии ваших данных. При использовании шифрования сохраняйте не только данные, но и ключи.", "This is the final warning: Do you really want to enable encryption?" : "Это последнее предупреждение: Вы действительно желаете включить шифрование?", @@ -196,11 +209,11 @@ "Store credentials" : "Сохранить учётные данные", "Test email settings" : "Проверить настройки почты", "Send email" : "Отправить email", + "What to log" : "Что записывать в журнал", "Download logfile" : "Скачать журнал", "More" : "Больше", "Less" : "Меньше", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Лог-файл - больше 100 мб. Его скачивание может занять некоторое время!", - "What to log" : "Что записывать в журнал", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "В качестве базы данных используется SQLite. Для больших установок мы рекомендуем переключиться на другую серверную базу данных.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особенно вызывает сомнение использование SQLite при синхронизации файлов с использованием клиента для ПК.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Для миграции на другую базу данных используйте команду: 'occ db:convert-type' или обратитесь к a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">документации ↗</a>.", @@ -266,9 +279,14 @@ "Change password" : "Сменить пароль", "Language" : "Язык", "Help translate" : "Помочь с переводом", + "Web, desktop and mobile clients currently logged in to your account." : "Веб, настольные и мобильные клиенты, которые в настоящий момент авторизованы вашей учётной записью.", + "Device" : "Устройство", + "Last activity" : "Последние действия", + "Passcodes that give an app or device permissions to access your account." : "Код доступа, который дает приложению или устройству разрешения на доступ к вашей учётной записи.", "Name" : "Название", "App name" : "Название приложения", "Create new app password" : "Создать новый пароль для приложения", + "Use the credentials below to configure your app or device." : "Используйте учётные данные ниже для настройки вашего приложения или устройства.", "Username" : "Имя пользователя", "Done" : "Выполнено", "Get the apps to sync your files" : "Получить приложения для синхронизации ваших файлов", @@ -287,19 +305,17 @@ "Create" : "Создать", "Admin Recovery Password" : "Пароль административного восстановления", "Enter the recovery password in order to recover the users files during password change" : "Введите пароль для того, чтобы восстановить файлы пользователей при смене пароля", - "Add Group" : "Добавить группу", "Group" : "Группа", "Everyone" : "Все", "Admins" : "Администраторы", - "Default Quota" : "Квота по умолчанию", + "Default quota" : "Квота по умолчанию", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Пожалуйста, введите квоту на хранилище (например: \"512 MB\" или \"12 GB\")", "Other" : "Другая", - "Full Name" : "Полное имя", - "Group Admin for" : "Администратор групп", + "Group admin for" : "Администратор групп", "Quota" : "Квота", - "Storage Location" : "Место хранилища", - "User Backend" : "Механизм учёта пользователей", - "Last Login" : "Последний вход", + "Storage location" : "Место хранилища", + "User backend" : "Механизм учёта пользователей", + "Last login" : "Последний вход", "change full name" : "изменить полное имя", "set new password" : "установить новый пароль", "change email address" : "изменить адрес почты", diff --git a/settings/l10n/sl.js b/settings/l10n/sl.js index 5b33089f0df..6de06e3b64f 100644 --- a/settings/l10n/sl.js +++ b/settings/l10n/sl.js @@ -102,10 +102,8 @@ OC.L10N.register( "A valid group name must be provided" : "Navedeno mora biti veljavno ime skupine", "deleted {groupName}" : "izbrisano {groupName}", "undo" : "razveljavi", - "no group" : "ni skupine", "never" : "nikoli", "deleted {userName}" : "izbrisano {userName}", - "add group" : "dodaj skupino", "Changing the password will result in data loss, because data recovery is not available for this user" : "Sprememba gesla bo povzročila izgubo podatkov, ker obnova podatkov za tega uporabnika ni na voljo.", "A valid username must be provided" : "Navedeno mora biti veljavno uporabniško ime", "Error creating user: {message}" : "Napaka ustvarjanja uporabnika: {message}", @@ -179,11 +177,11 @@ OC.L10N.register( "Store credentials" : "Shrani poverila", "Test email settings" : "Preizkus nastavitev elektronske pošte", "Send email" : "Pošlji elektronsko sporočilo", + "What to log" : "Kaj naj se beleži?", "Download logfile" : "Prejmi dnevniško datoteko", "More" : "Več", "Less" : "Manj", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Dnevniškega datoteka je večja od 100 MB. Hitrost prejema je odvisna od širokopasovne povezave!", - "What to log" : "Kaj naj se beleži?", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Uporabljena zbirka je SQLite. Za obsežnejše sisteme je priporočljiv prehod na drugo vrsto zbirke.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Uporaba SQLite ni priporočljiva iz varnostnih razlogov, to še posebej velja, če se sistem krajevno usklajuje z namizjem prek odjemalca.", "How to do backups" : "Kako ustvariti varnostne kopije", @@ -265,19 +263,12 @@ OC.L10N.register( "Create" : "Ustvari", "Admin Recovery Password" : "Obnovitev skrbniškega gesla", "Enter the recovery password in order to recover the users files during password change" : "Vnesite geslo, ki omogoča obnovitev uporabniških datotek med spreminjanjem gesla", - "Add Group" : "Dodaj skupino", "Group" : "Skupina", "Everyone" : "Vsi", "Admins" : "Skrbniki", - "Default Quota" : "Privzeta količinska omejitev", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Vnesite količinsko omejitev prostora (na primer: \"512 MB\" ali \"12 GB\")", "Other" : "Drugo", - "Full Name" : "Polno ime", - "Group Admin for" : "Skrbnik skupine za", "Quota" : "Količinska omejitev", - "Storage Location" : "Mesto shrambe", - "User Backend" : "Uporabniški ozadnji program", - "Last Login" : "Zadnja prijava", "change full name" : "Spremeni polno ime", "set new password" : "nastavi novo geslo", "change email address" : "spremeni naslov elektronske pošte", diff --git a/settings/l10n/sl.json b/settings/l10n/sl.json index 4da23bb2e24..44b7c9e55d6 100644 --- a/settings/l10n/sl.json +++ b/settings/l10n/sl.json @@ -100,10 +100,8 @@ "A valid group name must be provided" : "Navedeno mora biti veljavno ime skupine", "deleted {groupName}" : "izbrisano {groupName}", "undo" : "razveljavi", - "no group" : "ni skupine", "never" : "nikoli", "deleted {userName}" : "izbrisano {userName}", - "add group" : "dodaj skupino", "Changing the password will result in data loss, because data recovery is not available for this user" : "Sprememba gesla bo povzročila izgubo podatkov, ker obnova podatkov za tega uporabnika ni na voljo.", "A valid username must be provided" : "Navedeno mora biti veljavno uporabniško ime", "Error creating user: {message}" : "Napaka ustvarjanja uporabnika: {message}", @@ -177,11 +175,11 @@ "Store credentials" : "Shrani poverila", "Test email settings" : "Preizkus nastavitev elektronske pošte", "Send email" : "Pošlji elektronsko sporočilo", + "What to log" : "Kaj naj se beleži?", "Download logfile" : "Prejmi dnevniško datoteko", "More" : "Več", "Less" : "Manj", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Dnevniškega datoteka je večja od 100 MB. Hitrost prejema je odvisna od širokopasovne povezave!", - "What to log" : "Kaj naj se beleži?", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Uporabljena zbirka je SQLite. Za obsežnejše sisteme je priporočljiv prehod na drugo vrsto zbirke.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Uporaba SQLite ni priporočljiva iz varnostnih razlogov, to še posebej velja, če se sistem krajevno usklajuje z namizjem prek odjemalca.", "How to do backups" : "Kako ustvariti varnostne kopije", @@ -263,19 +261,12 @@ "Create" : "Ustvari", "Admin Recovery Password" : "Obnovitev skrbniškega gesla", "Enter the recovery password in order to recover the users files during password change" : "Vnesite geslo, ki omogoča obnovitev uporabniških datotek med spreminjanjem gesla", - "Add Group" : "Dodaj skupino", "Group" : "Skupina", "Everyone" : "Vsi", "Admins" : "Skrbniki", - "Default Quota" : "Privzeta količinska omejitev", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Vnesite količinsko omejitev prostora (na primer: \"512 MB\" ali \"12 GB\")", "Other" : "Drugo", - "Full Name" : "Polno ime", - "Group Admin for" : "Skrbnik skupine za", "Quota" : "Količinska omejitev", - "Storage Location" : "Mesto shrambe", - "User Backend" : "Uporabniški ozadnji program", - "Last Login" : "Zadnja prijava", "change full name" : "Spremeni polno ime", "set new password" : "nastavi novo geslo", "change email address" : "spremeni naslov elektronske pošte", diff --git a/settings/l10n/sq.js b/settings/l10n/sq.js index f86a6c638ca..6fb6afaf4b4 100644 --- a/settings/l10n/sq.js +++ b/settings/l10n/sq.js @@ -105,10 +105,8 @@ OC.L10N.register( "A valid group name must be provided" : "Duhet dhënë një emër i vlefshëm grupi", "deleted {groupName}" : "u fshi {groupName}", "undo" : "zhbëje", - "no group" : "pa grup", "never" : "kurrë", "deleted {userName}" : "u fshi {userName}", - "add group" : "shto grup", "Changing the password will result in data loss, because data recovery is not available for this user" : "Ndryshimi i fjalëkalimit do të sjellë humbje të dhënash, ngaqë rikthimi i të dhënave s’është i përdorshëm për këtë përdorues", "A valid username must be provided" : "Duhet dhënë një emër të vlefshëm përdoruesi", "Error creating user: {message}" : "Gabim gjatë krijimit të përdoruesit: {message}", @@ -136,7 +134,6 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Rregullimi Vetëm-Lexim u aktivizua. Kjo parandalon rregullimin e disa parametrave përmes ndërfaqes web. Më tej, për çdo përditësim kartela lyp të kalohet dorazi si e shkrueshme.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Duket se PHP-ja është rregulluar që të heqë blloqe të brendshme dokumentimi. Kjo do t’i bëjë të papërdrshme disa aplikacione bazë.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Kjo ka gjasa të jetë shkaktuar nga një fshehtinë/përshpejtues i tillë si Zend OPcache ose eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Baza juaj e të dhënave nuk xhiron me nivelin \"READ COMMITED\" e izolimit për ndërveprimet. Kjo mund të shkaktojë probleme, kur kryhen paralelisht disa veprime njëherësh.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Ka të instaluar %1$s nën versionin %2$s, për arsye qëndrueshmërie dhe performance këshillojmë të përditësohet me një version %1$s më të ri.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Kyçja e kartelave gjatë transaksioneve është e çaktivizuar, kjo mund të sjellë probleme me gjendje <em>race conditions</em>. Që të shmangni këto probleme, aktivizoni 'filelocking.enabled' te config.php. Për më tepër të dhëna, shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.", @@ -197,11 +194,11 @@ OC.L10N.register( "Store credentials" : "Depozitoji kredencialet", "Test email settings" : "Testoni rregullimet e email-it", "Send email" : "Dërgo email", + "What to log" : "Ç’të regjistrohet", "Download logfile" : "Shkarkoni kartelën regjistër", "More" : "Më tepër", "Less" : "Më pak", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Kartela regjistër është më e madhe se 100 MB. Shkarkimi i saj mund të hajë ca kohë!", - "What to log" : "Ç’të regjistrohet", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Si bazë të dhënash përdoret SQLite. Për instalime më të ngarkuara, këshillojmë të kalohet në një program tjetër baze të dhënash.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Përdorimi i SQLite-it nuk këshillohet veçanërisht kur përdoret klienti desktop për njëkohësim kartelash.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Për të kaluar te një tjetër bazë të dhënash përdorni mjetin rresht urdhrash: 'occ db:convert-type', ose shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.", @@ -284,19 +281,12 @@ OC.L10N.register( "Create" : "Krijoje", "Admin Recovery Password" : "Fjalëkalim Rikthimesh Nga Përgjegjësi", "Enter the recovery password in order to recover the users files during password change" : "Jepni fjalëkalim rimarrje që të mund të rimerrni kartela përdoruesi gjatë ndryshimit të fjalëkalimit", - "Add Group" : "Shtoni Grup", "Group" : "Grup", "Everyone" : "Kushdo", "Admins" : "Administratorë", - "Default Quota" : "Kuota Parazgjedhje", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ju lutemi, jepni kuotë depozitimi (psh: \"512 MB\" ose \"12 GB\")", "Other" : "Tjetër", - "Full Name" : "Emri i Plotë", - "Group Admin for" : "Admin Grupi për", "Quota" : "Kuota", - "Storage Location" : "Vendndodhje Depozite", - "User Backend" : "Program klient i përdoruesit", - "Last Login" : "Hyrja e fundit", "change full name" : "ndryshoni emrin e plotë", "set new password" : "caktoni fjalëkalim të ri", "change email address" : "ndryshoni adresën email", diff --git a/settings/l10n/sq.json b/settings/l10n/sq.json index 89a4eeeeb45..e4b4ac4dee5 100644 --- a/settings/l10n/sq.json +++ b/settings/l10n/sq.json @@ -103,10 +103,8 @@ "A valid group name must be provided" : "Duhet dhënë një emër i vlefshëm grupi", "deleted {groupName}" : "u fshi {groupName}", "undo" : "zhbëje", - "no group" : "pa grup", "never" : "kurrë", "deleted {userName}" : "u fshi {userName}", - "add group" : "shto grup", "Changing the password will result in data loss, because data recovery is not available for this user" : "Ndryshimi i fjalëkalimit do të sjellë humbje të dhënash, ngaqë rikthimi i të dhënave s’është i përdorshëm për këtë përdorues", "A valid username must be provided" : "Duhet dhënë një emër të vlefshëm përdoruesi", "Error creating user: {message}" : "Gabim gjatë krijimit të përdoruesit: {message}", @@ -134,7 +132,6 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Rregullimi Vetëm-Lexim u aktivizua. Kjo parandalon rregullimin e disa parametrave përmes ndërfaqes web. Më tej, për çdo përditësim kartela lyp të kalohet dorazi si e shkrueshme.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Duket se PHP-ja është rregulluar që të heqë blloqe të brendshme dokumentimi. Kjo do t’i bëjë të papërdrshme disa aplikacione bazë.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Kjo ka gjasa të jetë shkaktuar nga një fshehtinë/përshpejtues i tillë si Zend OPcache ose eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Baza juaj e të dhënave nuk xhiron me nivelin \"READ COMMITED\" e izolimit për ndërveprimet. Kjo mund të shkaktojë probleme, kur kryhen paralelisht disa veprime njëherësh.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "Ka të instaluar %1$s nën versionin %2$s, për arsye qëndrueshmërie dhe performance këshillojmë të përditësohet me një version %1$s më të ri.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Moduli PHP 'fileinfo' mungon. Ju këshillojmë me forcë ta aktivizoni këtë modul, për të patur përfundimet më të mira në zbulim llojesh MIME.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Kyçja e kartelave gjatë transaksioneve është e çaktivizuar, kjo mund të sjellë probleme me gjendje <em>race conditions</em>. Që të shmangni këto probleme, aktivizoni 'filelocking.enabled' te config.php. Për më tepër të dhëna, shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.", @@ -195,11 +192,11 @@ "Store credentials" : "Depozitoji kredencialet", "Test email settings" : "Testoni rregullimet e email-it", "Send email" : "Dërgo email", + "What to log" : "Ç’të regjistrohet", "Download logfile" : "Shkarkoni kartelën regjistër", "More" : "Më tepër", "Less" : "Më pak", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Kartela regjistër është më e madhe se 100 MB. Shkarkimi i saj mund të hajë ca kohë!", - "What to log" : "Ç’të regjistrohet", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Si bazë të dhënash përdoret SQLite. Për instalime më të ngarkuara, këshillojmë të kalohet në një program tjetër baze të dhënash.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Përdorimi i SQLite-it nuk këshillohet veçanërisht kur përdoret klienti desktop për njëkohësim kartelash.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Për të kaluar te një tjetër bazë të dhënash përdorni mjetin rresht urdhrash: 'occ db:convert-type', ose shihni <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentimin ↗</a>.", @@ -282,19 +279,12 @@ "Create" : "Krijoje", "Admin Recovery Password" : "Fjalëkalim Rikthimesh Nga Përgjegjësi", "Enter the recovery password in order to recover the users files during password change" : "Jepni fjalëkalim rimarrje që të mund të rimerrni kartela përdoruesi gjatë ndryshimit të fjalëkalimit", - "Add Group" : "Shtoni Grup", "Group" : "Grup", "Everyone" : "Kushdo", "Admins" : "Administratorë", - "Default Quota" : "Kuota Parazgjedhje", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Ju lutemi, jepni kuotë depozitimi (psh: \"512 MB\" ose \"12 GB\")", "Other" : "Tjetër", - "Full Name" : "Emri i Plotë", - "Group Admin for" : "Admin Grupi për", "Quota" : "Kuota", - "Storage Location" : "Vendndodhje Depozite", - "User Backend" : "Program klient i përdoruesit", - "Last Login" : "Hyrja e fundit", "change full name" : "ndryshoni emrin e plotë", "set new password" : "caktoni fjalëkalim të ri", "change email address" : "ndryshoni adresën email", diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js index 5732f6ba429..766ce58fe73 100644 --- a/settings/l10n/sr.js +++ b/settings/l10n/sr.js @@ -89,10 +89,8 @@ OC.L10N.register( "A valid group name must be provided" : "Мора бити наведено исправно име групе", "deleted {groupName}" : "обрисана {groupName}", "undo" : "опозови", - "no group" : "нема групе", "never" : "никада", "deleted {userName}" : "обрисан {userName}", - "add group" : "додај групу", "Changing the password will result in data loss, because data recovery is not available for this user" : "Измена лозинке ће резултирати губитком података јер опорављање података није доступно за овог корисника", "A valid username must be provided" : "Морате унети исправно корисничко име", "A valid password must be provided" : "Морате унети исправну лозинку", @@ -236,19 +234,12 @@ OC.L10N.register( "Create" : "Направи", "Admin Recovery Password" : "Администраторска лозинка за опоравак", "Enter the recovery password in order to recover the users files during password change" : "Унесите лозинку за опоравак корисничких фајлова током промене лозинке", - "Add Group" : "Додај групу", "Group" : "Група", "Everyone" : "Сви", "Admins" : "Администратори", - "Default Quota" : "Подразумевана квота", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Унесите квоту складиштења (нпр. 512 MB или 12 GB)", "Other" : "Друго", - "Full Name" : "Пуно име", - "Group Admin for" : "Администратор група", "Quota" : "Квота", - "Storage Location" : "Локација складишта", - "User Backend" : "Позадина за кориснике", - "Last Login" : "Последња пријава", "change full name" : "измени пуно име", "set new password" : "постави нову лозинку", "change email address" : "измени е-адресу", diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json index 7212341f175..b603b12ebc5 100644 --- a/settings/l10n/sr.json +++ b/settings/l10n/sr.json @@ -87,10 +87,8 @@ "A valid group name must be provided" : "Мора бити наведено исправно име групе", "deleted {groupName}" : "обрисана {groupName}", "undo" : "опозови", - "no group" : "нема групе", "never" : "никада", "deleted {userName}" : "обрисан {userName}", - "add group" : "додај групу", "Changing the password will result in data loss, because data recovery is not available for this user" : "Измена лозинке ће резултирати губитком података јер опорављање података није доступно за овог корисника", "A valid username must be provided" : "Морате унети исправно корисничко име", "A valid password must be provided" : "Морате унети исправну лозинку", @@ -234,19 +232,12 @@ "Create" : "Направи", "Admin Recovery Password" : "Администраторска лозинка за опоравак", "Enter the recovery password in order to recover the users files during password change" : "Унесите лозинку за опоравак корисничких фајлова током промене лозинке", - "Add Group" : "Додај групу", "Group" : "Група", "Everyone" : "Сви", "Admins" : "Администратори", - "Default Quota" : "Подразумевана квота", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Унесите квоту складиштења (нпр. 512 MB или 12 GB)", "Other" : "Друго", - "Full Name" : "Пуно име", - "Group Admin for" : "Администратор група", "Quota" : "Квота", - "Storage Location" : "Локација складишта", - "User Backend" : "Позадина за кориснике", - "Last Login" : "Последња пријава", "change full name" : "измени пуно име", "set new password" : "постави нову лозинку", "change email address" : "измени е-адресу", diff --git a/settings/l10n/sv.js b/settings/l10n/sv.js index e536bfaaab9..cdde7e7e6e7 100644 --- a/settings/l10n/sv.js +++ b/settings/l10n/sv.js @@ -105,10 +105,8 @@ OC.L10N.register( "A valid group name must be provided" : "Ett giltigt gruppnamn måste anges", "deleted {groupName}" : "raderade {groupName} ", "undo" : "ångra", - "no group" : "ingen grupp", "never" : "aldrig", "deleted {userName}" : "raderade {userName}", - "add group" : "lägg till grupp", "Changing the password will result in data loss, because data recovery is not available for this user" : "Ändring utav lösenord kommer resultera i förlorad data, eftersom dataåterställning ej är tillgängligt för denna användare.", "A valid username must be provided" : "Ett giltigt användarnamn måste anges", "Error creating user: {message}" : "Fel uppstod när användare skulle skapas: {message}", @@ -135,7 +133,6 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Läs-bara konfigureringen har blivit aktiv. Detta förhindrar att några konfigureringar kan sättas via web-gränssnittet.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP är tydligen inställd för att rensa inline doc block. Detta kommer att göra flera kärnapplikationer otillgängliga.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Detta orsakas troligtvis av en cache/accelerator som t ex Zend OPchache eller eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Din databas kör inte \"READ COMMITED\" tansaktionsisoleringsnvån. Detta kan orsaka problem när multipla aktioner körs parallellt.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s under version %2$s är installerad, för stabilitet och prestanda rekommenderar vi uppdatering till en nyare %1$s version.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transactional file locking är inaktiverad, detta kan innebära konkurrenstillstånd. Aktivera \"filelocking.enabled' i config.php för att undvika dessa problem. Se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentationen ↗</a> för mer information.", @@ -196,11 +193,11 @@ OC.L10N.register( "Store credentials" : "Lagra inloggningsuppgifter", "Test email settings" : "Testa e-postinställningar", "Send email" : "Skicka e-post", + "What to log" : "Vad som ska loggas", "Download logfile" : "Ladda ner loggfil", "More" : "Mer", "Less" : "Mindre", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nerladdningen kan ta en stund!", - "What to log" : "Vad som ska loggas", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite används som databas. För större installationer så rekommenderar vi ett byte till en annan databasmotor.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när desktop klienten för filsynkronisering används så avråds användande av SQLite.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "För att migrera till en annan databas använd kommandoverktyget 'occ db:convert-type' eller se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> dokumentationen ↗</a>", @@ -281,19 +278,12 @@ OC.L10N.register( "Create" : "Skapa", "Admin Recovery Password" : "Admin-återställningslösenord", "Enter the recovery password in order to recover the users files during password change" : "Ange återställningslösenordet för att återställa användarnas filer vid lösenordsbyte", - "Add Group" : "Lägg till Grupp", "Group" : "Grupp", "Everyone" : "Alla", "Admins" : "Administratörer", - "Default Quota" : "Förvald datakvot", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Var god skriv in lagringskvot (ex: \"512MB\" eller \"12 GB\")", "Other" : "Annat", - "Full Name" : "Hela namnet", - "Group Admin for" : "Gruppadministratör för", "Quota" : "Kvot", - "Storage Location" : "Lagringsplats", - "User Backend" : "Användar-back-end", - "Last Login" : "Senaste inloggning", "change full name" : "ändra hela namnet", "set new password" : "ange nytt lösenord", "change email address" : "ändra e-postadress", diff --git a/settings/l10n/sv.json b/settings/l10n/sv.json index 950b18d0533..6f77c010307 100644 --- a/settings/l10n/sv.json +++ b/settings/l10n/sv.json @@ -103,10 +103,8 @@ "A valid group name must be provided" : "Ett giltigt gruppnamn måste anges", "deleted {groupName}" : "raderade {groupName} ", "undo" : "ångra", - "no group" : "ingen grupp", "never" : "aldrig", "deleted {userName}" : "raderade {userName}", - "add group" : "lägg till grupp", "Changing the password will result in data loss, because data recovery is not available for this user" : "Ändring utav lösenord kommer resultera i förlorad data, eftersom dataåterställning ej är tillgängligt för denna användare.", "A valid username must be provided" : "Ett giltigt användarnamn måste anges", "Error creating user: {message}" : "Fel uppstod när användare skulle skapas: {message}", @@ -133,7 +131,6 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Läs-bara konfigureringen har blivit aktiv. Detta förhindrar att några konfigureringar kan sättas via web-gränssnittet.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP är tydligen inställd för att rensa inline doc block. Detta kommer att göra flera kärnapplikationer otillgängliga.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Detta orsakas troligtvis av en cache/accelerator som t ex Zend OPchache eller eAccelerator.", - "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Din databas kör inte \"READ COMMITED\" tansaktionsisoleringsnvån. Detta kan orsaka problem när multipla aktioner körs parallellt.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s under version %2$s är installerad, för stabilitet och prestanda rekommenderar vi uppdatering till en nyare %1$s version.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP-modulen 'fileinfo' saknas. Vi rekommenderar starkt att aktivera den här modulen för att kunna upptäcka korrekt mime-typ.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Transactional file locking är inaktiverad, detta kan innebära konkurrenstillstånd. Aktivera \"filelocking.enabled' i config.php för att undvika dessa problem. Se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentationen ↗</a> för mer information.", @@ -194,11 +191,11 @@ "Store credentials" : "Lagra inloggningsuppgifter", "Test email settings" : "Testa e-postinställningar", "Send email" : "Skicka e-post", + "What to log" : "Vad som ska loggas", "Download logfile" : "Ladda ner loggfil", "More" : "Mer", "Less" : "Mindre", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Logfilen är större än 100 MB. Nerladdningen kan ta en stund!", - "What to log" : "Vad som ska loggas", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite används som databas. För större installationer så rekommenderar vi ett byte till en annan databasmotor.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Speciellt när desktop klienten för filsynkronisering används så avråds användande av SQLite.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "För att migrera till en annan databas använd kommandoverktyget 'occ db:convert-type' eller se <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\"> dokumentationen ↗</a>", @@ -279,19 +276,12 @@ "Create" : "Skapa", "Admin Recovery Password" : "Admin-återställningslösenord", "Enter the recovery password in order to recover the users files during password change" : "Ange återställningslösenordet för att återställa användarnas filer vid lösenordsbyte", - "Add Group" : "Lägg till Grupp", "Group" : "Grupp", "Everyone" : "Alla", "Admins" : "Administratörer", - "Default Quota" : "Förvald datakvot", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Var god skriv in lagringskvot (ex: \"512MB\" eller \"12 GB\")", "Other" : "Annat", - "Full Name" : "Hela namnet", - "Group Admin for" : "Gruppadministratör för", "Quota" : "Kvot", - "Storage Location" : "Lagringsplats", - "User Backend" : "Användar-back-end", - "Last Login" : "Senaste inloggning", "change full name" : "ändra hela namnet", "set new password" : "ange nytt lösenord", "change email address" : "ändra e-postadress", diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js index bd800894eb8..fdbe3d7015e 100644 --- a/settings/l10n/th_TH.js +++ b/settings/l10n/th_TH.js @@ -101,10 +101,8 @@ OC.L10N.register( "A valid group name must be provided" : "จะต้องระบุชื่อกลุ่มที่ถูกต้อง", "deleted {groupName}" : "ลบกลุ่ม {groupName} เรียบร้อยแล้ว", "undo" : "เลิกทำ", - "no group" : "ไม่มีกลุ่ม", "never" : "ไม่ต้องเลย", "deleted {userName}" : "ลบผู้ใช้ {userName} เรียบร้อยแล้ว", - "add group" : "เพิ่มกลุ่ม", "Changing the password will result in data loss, because data recovery is not available for this user" : "การเปลี่ยนรหัสผ่านจะส่งผลให้เกิดการสูญเสียข้อมูลเพราะการกู้คืนข้อมูลจะไม่สามารถใช้ได้สำหรับผู้ใช้นี้", "A valid username must be provided" : "จะต้องระบุชื่อผู้ใช้ที่ถูกต้อง", "Error creating user: {message}" : "ข้อผิดพลาดในการสร้างผู้ใช้: {message}", @@ -187,11 +185,11 @@ OC.L10N.register( "Store credentials" : "ข้อมูลประจำตัวของร้านค้า", "Test email settings" : "ทดสอบการตั้งค่าอีเมล", "Send email" : "ส่งอีเมล", + "What to log" : "อะไรที่จะบันทึก", "Download logfile" : "ดาวน์โหลดไฟล์บันทึก", "More" : "มาก", "Less" : "ย่อ", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ไฟล์บันทึกมีขนาดใหญ่กว่า 100 เมกะไบต์ มันอาจจะใช้เวลาดาวน์โหลดนาน!", - "What to log" : "อะไรที่จะบันทึก", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "จะใช้ SQLite เป็นฐานข้อมูล สำหรับการติดตั้งขนาดใหญ่เราขอแนะนำเพื่อสลับไปยังฐานข้อมูลแบ็กเอนด์ที่แตกต่างกัน", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "โดยเฉพาะอย่างยิ่งเมื่อใช้ไคลเอนต์เดสก์ทอปสำหรับการประสานข้อมูลโดย SQLite", "How to do backups" : "วิธีการสำรองข้อมูล", @@ -268,19 +266,12 @@ OC.L10N.register( "Create" : "สร้าง", "Admin Recovery Password" : "กู้คืนรหัสผ่านดูแลระบบ", "Enter the recovery password in order to recover the users files during password change" : "ป้อนรหัสผ่านการกู้คืนเพื่อกู้คืนไฟล์ผู้ใช้ในช่วงการเปลี่ยนรหัสผ่าน", - "Add Group" : "เพิ่มกลุ่ม", "Group" : "กลุ่ม", "Everyone" : "ทุกคน", "Admins" : "ผู้ดูแลระบบ", - "Default Quota" : "ค่าโควต้าเริ่มต้น", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "กรุณากรอกโควต้าการจัดเก็บข้อมูล (ต.ย. : \"512 MB\" หรือ \"12 GB\")", "Other" : "อื่นๆ", - "Full Name" : "ชื่อเต็ม", - "Group Admin for" : "กลุ่มของผู้ดูแล", "Quota" : "โควต้า", - "Storage Location" : "สถานที่จัดเก็บข้อมูล", - "User Backend" : "ผู้ใช้แบ็กเอนด์", - "Last Login" : "เข้าสู่ระบบล่าสุด", "change full name" : "เปลี่ยนชื่อเต็ม", "set new password" : "ตั้งค่ารหัสผ่านใหม่", "change email address" : "เปลี่ยนแปลงที่อยู่อีเมล", diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json index 883791c90bc..b018e8e5dce 100644 --- a/settings/l10n/th_TH.json +++ b/settings/l10n/th_TH.json @@ -99,10 +99,8 @@ "A valid group name must be provided" : "จะต้องระบุชื่อกลุ่มที่ถูกต้อง", "deleted {groupName}" : "ลบกลุ่ม {groupName} เรียบร้อยแล้ว", "undo" : "เลิกทำ", - "no group" : "ไม่มีกลุ่ม", "never" : "ไม่ต้องเลย", "deleted {userName}" : "ลบผู้ใช้ {userName} เรียบร้อยแล้ว", - "add group" : "เพิ่มกลุ่ม", "Changing the password will result in data loss, because data recovery is not available for this user" : "การเปลี่ยนรหัสผ่านจะส่งผลให้เกิดการสูญเสียข้อมูลเพราะการกู้คืนข้อมูลจะไม่สามารถใช้ได้สำหรับผู้ใช้นี้", "A valid username must be provided" : "จะต้องระบุชื่อผู้ใช้ที่ถูกต้อง", "Error creating user: {message}" : "ข้อผิดพลาดในการสร้างผู้ใช้: {message}", @@ -185,11 +183,11 @@ "Store credentials" : "ข้อมูลประจำตัวของร้านค้า", "Test email settings" : "ทดสอบการตั้งค่าอีเมล", "Send email" : "ส่งอีเมล", + "What to log" : "อะไรที่จะบันทึก", "Download logfile" : "ดาวน์โหลดไฟล์บันทึก", "More" : "มาก", "Less" : "ย่อ", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "ไฟล์บันทึกมีขนาดใหญ่กว่า 100 เมกะไบต์ มันอาจจะใช้เวลาดาวน์โหลดนาน!", - "What to log" : "อะไรที่จะบันทึก", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "จะใช้ SQLite เป็นฐานข้อมูล สำหรับการติดตั้งขนาดใหญ่เราขอแนะนำเพื่อสลับไปยังฐานข้อมูลแบ็กเอนด์ที่แตกต่างกัน", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "โดยเฉพาะอย่างยิ่งเมื่อใช้ไคลเอนต์เดสก์ทอปสำหรับการประสานข้อมูลโดย SQLite", "How to do backups" : "วิธีการสำรองข้อมูล", @@ -266,19 +264,12 @@ "Create" : "สร้าง", "Admin Recovery Password" : "กู้คืนรหัสผ่านดูแลระบบ", "Enter the recovery password in order to recover the users files during password change" : "ป้อนรหัสผ่านการกู้คืนเพื่อกู้คืนไฟล์ผู้ใช้ในช่วงการเปลี่ยนรหัสผ่าน", - "Add Group" : "เพิ่มกลุ่ม", "Group" : "กลุ่ม", "Everyone" : "ทุกคน", "Admins" : "ผู้ดูแลระบบ", - "Default Quota" : "ค่าโควต้าเริ่มต้น", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "กรุณากรอกโควต้าการจัดเก็บข้อมูล (ต.ย. : \"512 MB\" หรือ \"12 GB\")", "Other" : "อื่นๆ", - "Full Name" : "ชื่อเต็ม", - "Group Admin for" : "กลุ่มของผู้ดูแล", "Quota" : "โควต้า", - "Storage Location" : "สถานที่จัดเก็บข้อมูล", - "User Backend" : "ผู้ใช้แบ็กเอนด์", - "Last Login" : "เข้าสู่ระบบล่าสุด", "change full name" : "เปลี่ยนชื่อเต็ม", "set new password" : "ตั้งค่ารหัสผ่านใหม่", "change email address" : "เปลี่ยนแปลงที่อยู่อีเมล", diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js index a8fed8b1f8a..ee70f99e35c 100644 --- a/settings/l10n/tr.js +++ b/settings/l10n/tr.js @@ -64,6 +64,7 @@ OC.L10N.register( "All" : "Tümü", "No apps found for your version" : "Sürümünüz için uygulama bulunamadı", "The app will be downloaded from the app store" : "uygulama uygulama dükkanından indirilebilecek", + "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Resmi uygulamalar topluluk tarafından geliştirilmiştir. Merkezi işlevleri yerine getirdikleri gibi kullanıma da hazırdırlar.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Onaylanan uygulamalar güvenilir geliştiriciler tarafından geliştirilir ve detaylı olmayan bir güvenlik kontrolünden geçirilir. Bunlar açık kaynak kod deposunda bulunmakta ve normal kullanım için kararlı oldukları varsayılmaktadır.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Bu uygulama güvenlik kontrolünden geçmedi veya yeni ya da kararsız olarak bilinmektedir. Kendiniz bu riski alarak yükleyebilirsiniz.", "Update to %s" : "%s sürümüne güncelle", @@ -86,6 +87,20 @@ OC.L10N.register( "App update" : "Uygulama güncellemesi", "No apps found for {query}" : "sorgulayabilmeniz için hiçbir uygulama bulunmamakta", "Disconnect" : "Bağlantıyı kes", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Android için Google Chrome", + "iPhone" : "iPhone", + "iOS Client" : "iOS İstemcisi", + "Android Client" : "Android İstemcisi", + "Sync client - {os}" : "Eşitleme istemcisi - {os}", + "This session" : "Bu oturum", + "Error while loading browser sessions and device tokens" : "Tarayıcı oturumu ve aygıt jetonları yüklenirken hata oluştu", + "Error while creating device token" : "Aygıt jetonu oluşturulurken hata oluştu", + "Error while deleting the token" : "Jeton silinirken hata oluştu", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Bir hata oluştu. Lütfen ASCII-kodlanmış PEM sertifikasını yükleyin.", "Valid until {date}" : "{date} tarihine kadar geçerli", "Delete" : "Sil", @@ -102,10 +117,11 @@ OC.L10N.register( "A valid group name must be provided" : "Geçerli bir grup adı mutlaka sağlanmalı", "deleted {groupName}" : "{groupName} silindi", "undo" : "geri al", - "no group" : "grup yok", + "No group" : "Grup yok", "never" : "hiçbir zaman", "deleted {userName}" : "{userName} silindi", - "add group" : "grup ekle", + "Add group" : "Grup ekle", + "Invalid quota value \"{val}\"" : "Geçersiz alıntı değeri \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Parolayı değiştirmek, bu kullanıcı için veri kurtarması kullanılamadığından veri kaybına sebep olacak", "A valid username must be provided" : "Geçerli bir kullanıcı adı mutlaka sağlanmalı", "Error creating user: {message}" : "Kullanıcı oluşturulurken hata: {message}", @@ -114,6 +130,7 @@ OC.L10N.register( "__language_name__" : "Türkçe", "Unlimited" : "Sınırsız", "Personal info" : "Kişisel bilgi", + "Sessions" : "Oturum", "App passwords" : "Uygulama parolaları", "Sync clients" : "Eşitleme istemcileri", "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)", @@ -132,6 +149,7 @@ OC.L10N.register( "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP satırıçi doc bloklarını ayıklamak üzere yapılandırılmış gibi görünüyor. Bu, bazı çekirdek (core) uygulamalarını erişilemez yapacak.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Bu, muhtemelen Zend OPcache veya eAccelerator gibi bir önbellek/hızlandırıcı nedeniyle gerçekleşir.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Veritabanınız \"READ COMMITTED\" geçiş soyutlama seviyesinde çalışmıyor. Bu aynı anda birden çok eylem yapıldığında sorunlara yol açabilir.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s, %2$s sürümü altı kurulu. Kararlılık ve performans için daha yeni bir %1$s sürümüne güncellemenizi öneririz.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modülü 'fileinfo' kayıp. MIME türü tanıma ile en iyi sonuçları elde etmek için bu modülü etkinleştirmenizi öneririz.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "İşlemsel dosya kilidi devre dışı. Bu yarış koşulu (race condition) sorunlarına neden olabilir. Bu sorunlardan kaçınmak için config.php içindeki 'filelocking.enabled' ayarını etkinleştirin. Daha fazla bilgi için <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelendirmeye ↗</a> bakın.", @@ -168,6 +186,7 @@ OC.L10N.register( "Enable server-side encryption" : "Sunucu taraflı şifrelemeyi aç", "Please read carefully before activating server-side encryption: " : "Lütfen sunucu tarafında şifrelemeyi etkinleştirmeden önce dikkatlice okuyun: ", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Şifreleme etkinleştirildiğinde, sunucuya yüklenen tüm dosyalar şifrelenmiş olarak kalacaktır. Şifrelemeyi devre dışı bırakmak sadece ileriki zamanlarda aktif şifreleme modülü desteklediğinde ve ön koşullar (örn: düzenleme anahtarı oluşturulması) yerine getirildiğinde yapılabilir.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Şifreleme tek başına sistemin güvenliğini garanti etmez. Lütfen şifreleme uygulamasının nasıl çalıştığı ve desteklenen durumlar hakkında daha fazla bilgi almak için belgelendirmeye bakınız.", "Be aware that encryption always increases the file size." : "Şifrelemenin dosya boyutunu büyüteceğini unutmayın.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Verilerinizi düzenli yedekleyin ve şifreleme anahtarlarınızın verilerinizle birlikte yedeklendiğinden emin olun. ", "This is the final warning: Do you really want to enable encryption?" : "Bu son uyarıdır: Şifrelemeyi etkinleştirmek istiyor musunuz?", @@ -192,11 +211,11 @@ OC.L10N.register( "Store credentials" : "Kimlik bilgilerini depola", "Test email settings" : "E-posta ayarlarını sına", "Send email" : "E-posta gönder", + "What to log" : "Neler günlüklenmeli", "Download logfile" : "Günlük dosyasını indir", "More" : "Daha fazla", "Less" : "Daha az", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!", - "What to log" : "Neler günlüklenmeli", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veritabanı arka ucuna geçmenizi öneriyoruz.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Özellikle dosya eşitleme için masaüstü istemcisi kullanılırken SQLite kullanımı önerilmez.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Başka bir veritabanına geçmek için komut satırı aracını kullanın: 'occ db:convert-type' veya <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelendirmeye ↗</a> bakın.", @@ -215,9 +234,13 @@ OC.L10N.register( "Documentation:" : "Belgelendirme:", "User documentation" : "Kullanıcı belgelendirmesi", "Admin documentation" : "Yönetici belgelendirmesi", + "Visit website" : "İnternet adresini ziyaret et", + "Report a bug" : "Hata raporla", "Show description …" : "Açıklamayı göster...", "Hide description …" : "Açıklamayı gizle...", "This app has an update available." : "Bu uygulamanın bir güncellemesi var.", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için atanan en düşük Nextcloud sürümü bulunmuyor. Bu ileride bir hata olacaktır.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için atanan en yüksek Nextcloud sürümü bulunmuyor. Bu ileride bir hata olacaktır.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Bu uygulama, aşağıdaki bağımlılıklar sağlanmadığından yüklenemiyor:", "Enable only for specific groups" : "Sadece belirli gruplar için etkinleştir", "Uninstall App" : "Uygulamayı Kaldır", @@ -258,14 +281,23 @@ OC.L10N.register( "Change password" : "Parola değiştir", "Language" : "Dil", "Help translate" : "Çevirilere yardım edin", + "Web, desktop and mobile clients currently logged in to your account." : "Web, masaüstü ve mobil şu anda hesabınıza oturum açmış durumda.", + "Device" : "Aygıt", + "Last activity" : "Son etkinlik", + "Passcodes that give an app or device permissions to access your account." : "Bir uygulama veya aygıtın hesabınıza erişimine izin veren geçiş kodlarıdır.", "Name" : "Ad", + "App name" : "Uygulama adı", + "Create new app password" : "Yeni uygulama parolası oluştur", + "Use the credentials below to configure your app or device." : "Uygulama veya aygıtınızı yapılandırmak için aşağıdaki kimlik bilgilerini kullan.", "Username" : "Kullanıcı Adı", "Done" : "Bitti", "Get the apps to sync your files" : "Dosyalarınızı eşitlemek için uygulamaları indirin", "Desktop client" : "Masaüstü istemcisi", "Android app" : "Android uygulaması", "iOS app" : "iOS uygulaması", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Projeyi desteklemek isterseniz\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">gelişimine katılın</a>\n\t\tya da\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">dünyaya duyurun</a>!", "Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "{communityopen}Nextcloud topluluğu tarafından geliştirilmiştir{linkclose}, {githubopen}kaynak kod{linkclose} {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} ile lisanslanmıştır.", "Show storage location" : "Depolama konumunu göster", "Show last log in" : "Son oturum açılma zamanını göster", "Show user backend" : "Kullanıcı arka ucunu göster", @@ -275,19 +307,17 @@ OC.L10N.register( "Create" : "Oluştur", "Admin Recovery Password" : "Yönetici Kurtarma Parolası", "Enter the recovery password in order to recover the users files during password change" : "Parola değiştirme sırasında kullanıcı dosyalarını kurtarmak için kurtarma parolasını girin", - "Add Group" : "Grup Ekle", "Group" : "Grup", "Everyone" : "Herkes", "Admins" : "Yöneticiler", - "Default Quota" : "Öntanımlı Kota", + "Default quota" : "Varsayılan kota", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Lütfen disk alanı kotasını girin (örnek: \"512MB\" veya \"12GB\")", "Other" : "Diğer", - "Full Name" : "Tam Adı", - "Group Admin for" : "Grup Yöneticisi", + "Group admin for" : "Grup Yöneticisi", "Quota" : "Kota", - "Storage Location" : "Depolama Konumu", - "User Backend" : "Kullanıcı Arka Ucu", - "Last Login" : "Son Giriş", + "Storage location" : "Depolama konumu", + "User backend" : "Kullanıcı Arka Ucu", + "Last login" : "Son giriş", "change full name" : "tam adı değiştir", "set new password" : "yeni parola belirle", "change email address" : "e-posta adresini değiştir", diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json index 358315323c6..401fdb3e1cf 100644 --- a/settings/l10n/tr.json +++ b/settings/l10n/tr.json @@ -62,6 +62,7 @@ "All" : "Tümü", "No apps found for your version" : "Sürümünüz için uygulama bulunamadı", "The app will be downloaded from the app store" : "uygulama uygulama dükkanından indirilebilecek", + "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Resmi uygulamalar topluluk tarafından geliştirilmiştir. Merkezi işlevleri yerine getirdikleri gibi kullanıma da hazırdırlar.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Onaylanan uygulamalar güvenilir geliştiriciler tarafından geliştirilir ve detaylı olmayan bir güvenlik kontrolünden geçirilir. Bunlar açık kaynak kod deposunda bulunmakta ve normal kullanım için kararlı oldukları varsayılmaktadır.", "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Bu uygulama güvenlik kontrolünden geçmedi veya yeni ya da kararsız olarak bilinmektedir. Kendiniz bu riski alarak yükleyebilirsiniz.", "Update to %s" : "%s sürümüne güncelle", @@ -84,6 +85,20 @@ "App update" : "Uygulama güncellemesi", "No apps found for {query}" : "sorgulayabilmeniz için hiçbir uygulama bulunmamakta", "Disconnect" : "Bağlantıyı kes", + "Internet Explorer" : "Internet Explorer", + "Edge" : "Edge", + "Firefox" : "Firefox", + "Google Chrome" : "Google Chrome", + "Safari" : "Safari", + "Google Chrome for Android" : "Android için Google Chrome", + "iPhone" : "iPhone", + "iOS Client" : "iOS İstemcisi", + "Android Client" : "Android İstemcisi", + "Sync client - {os}" : "Eşitleme istemcisi - {os}", + "This session" : "Bu oturum", + "Error while loading browser sessions and device tokens" : "Tarayıcı oturumu ve aygıt jetonları yüklenirken hata oluştu", + "Error while creating device token" : "Aygıt jetonu oluşturulurken hata oluştu", + "Error while deleting the token" : "Jeton silinirken hata oluştu", "An error occurred. Please upload an ASCII-encoded PEM certificate." : "Bir hata oluştu. Lütfen ASCII-kodlanmış PEM sertifikasını yükleyin.", "Valid until {date}" : "{date} tarihine kadar geçerli", "Delete" : "Sil", @@ -100,10 +115,11 @@ "A valid group name must be provided" : "Geçerli bir grup adı mutlaka sağlanmalı", "deleted {groupName}" : "{groupName} silindi", "undo" : "geri al", - "no group" : "grup yok", + "No group" : "Grup yok", "never" : "hiçbir zaman", "deleted {userName}" : "{userName} silindi", - "add group" : "grup ekle", + "Add group" : "Grup ekle", + "Invalid quota value \"{val}\"" : "Geçersiz alıntı değeri \"{val}\"", "Changing the password will result in data loss, because data recovery is not available for this user" : "Parolayı değiştirmek, bu kullanıcı için veri kurtarması kullanılamadığından veri kaybına sebep olacak", "A valid username must be provided" : "Geçerli bir kullanıcı adı mutlaka sağlanmalı", "Error creating user: {message}" : "Kullanıcı oluşturulurken hata: {message}", @@ -112,6 +128,7 @@ "__language_name__" : "Türkçe", "Unlimited" : "Sınırsız", "Personal info" : "Kişisel bilgi", + "Sessions" : "Oturum", "App passwords" : "Uygulama parolaları", "Sync clients" : "Eşitleme istemcileri", "Everything (fatal issues, errors, warnings, info, debug)" : "Her şey (Ciddi sorunlar, hatalar, uyarılar, bilgi, hata ayıklama)", @@ -130,6 +147,7 @@ "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP satırıçi doc bloklarını ayıklamak üzere yapılandırılmış gibi görünüyor. Bu, bazı çekirdek (core) uygulamalarını erişilemez yapacak.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Bu, muhtemelen Zend OPcache veya eAccelerator gibi bir önbellek/hızlandırıcı nedeniyle gerçekleşir.", + "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Veritabanınız \"READ COMMITTED\" geçiş soyutlama seviyesinde çalışmıyor. Bu aynı anda birden çok eylem yapıldığında sorunlara yol açabilir.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s, %2$s sürümü altı kurulu. Kararlılık ve performans için daha yeni bir %1$s sürümüne güncellemenizi öneririz.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modülü 'fileinfo' kayıp. MIME türü tanıma ile en iyi sonuçları elde etmek için bu modülü etkinleştirmenizi öneririz.", "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "İşlemsel dosya kilidi devre dışı. Bu yarış koşulu (race condition) sorunlarına neden olabilir. Bu sorunlardan kaçınmak için config.php içindeki 'filelocking.enabled' ayarını etkinleştirin. Daha fazla bilgi için <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelendirmeye ↗</a> bakın.", @@ -166,6 +184,7 @@ "Enable server-side encryption" : "Sunucu taraflı şifrelemeyi aç", "Please read carefully before activating server-side encryption: " : "Lütfen sunucu tarafında şifrelemeyi etkinleştirmeden önce dikkatlice okuyun: ", "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "Şifreleme etkinleştirildiğinde, sunucuya yüklenen tüm dosyalar şifrelenmiş olarak kalacaktır. Şifrelemeyi devre dışı bırakmak sadece ileriki zamanlarda aktif şifreleme modülü desteklediğinde ve ön koşullar (örn: düzenleme anahtarı oluşturulması) yerine getirildiğinde yapılabilir.", + "Encryption alone does not guarantee security of the system. Please see documentation for more information about how the encryption app works, and the supported use cases." : "Şifreleme tek başına sistemin güvenliğini garanti etmez. Lütfen şifreleme uygulamasının nasıl çalıştığı ve desteklenen durumlar hakkında daha fazla bilgi almak için belgelendirmeye bakınız.", "Be aware that encryption always increases the file size." : "Şifrelemenin dosya boyutunu büyüteceğini unutmayın.", "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Verilerinizi düzenli yedekleyin ve şifreleme anahtarlarınızın verilerinizle birlikte yedeklendiğinden emin olun. ", "This is the final warning: Do you really want to enable encryption?" : "Bu son uyarıdır: Şifrelemeyi etkinleştirmek istiyor musunuz?", @@ -190,11 +209,11 @@ "Store credentials" : "Kimlik bilgilerini depola", "Test email settings" : "E-posta ayarlarını sına", "Send email" : "E-posta gönder", + "What to log" : "Neler günlüklenmeli", "Download logfile" : "Günlük dosyasını indir", "More" : "Daha fazla", "Less" : "Daha az", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "Günlük dosyası 100 MB'dan daha büyük. İndirmek zaman alabilir!", - "What to log" : "Neler günlüklenmeli", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Veritabanı olarak SQLite kullanılıyor. Daha büyük kurulumlar için farklı bir veritabanı arka ucuna geçmenizi öneriyoruz.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Özellikle dosya eşitleme için masaüstü istemcisi kullanılırken SQLite kullanımı önerilmez.", "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a>." : "Başka bir veritabanına geçmek için komut satırı aracını kullanın: 'occ db:convert-type' veya <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">belgelendirmeye ↗</a> bakın.", @@ -213,9 +232,13 @@ "Documentation:" : "Belgelendirme:", "User documentation" : "Kullanıcı belgelendirmesi", "Admin documentation" : "Yönetici belgelendirmesi", + "Visit website" : "İnternet adresini ziyaret et", + "Report a bug" : "Hata raporla", "Show description …" : "Açıklamayı göster...", "Hide description …" : "Açıklamayı gizle...", "This app has an update available." : "Bu uygulamanın bir güncellemesi var.", + "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için atanan en düşük Nextcloud sürümü bulunmuyor. Bu ileride bir hata olacaktır.", + "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için atanan en yüksek Nextcloud sürümü bulunmuyor. Bu ileride bir hata olacaktır.", "This app cannot be installed because the following dependencies are not fulfilled:" : "Bu uygulama, aşağıdaki bağımlılıklar sağlanmadığından yüklenemiyor:", "Enable only for specific groups" : "Sadece belirli gruplar için etkinleştir", "Uninstall App" : "Uygulamayı Kaldır", @@ -256,14 +279,23 @@ "Change password" : "Parola değiştir", "Language" : "Dil", "Help translate" : "Çevirilere yardım edin", + "Web, desktop and mobile clients currently logged in to your account." : "Web, masaüstü ve mobil şu anda hesabınıza oturum açmış durumda.", + "Device" : "Aygıt", + "Last activity" : "Son etkinlik", + "Passcodes that give an app or device permissions to access your account." : "Bir uygulama veya aygıtın hesabınıza erişimine izin veren geçiş kodlarıdır.", "Name" : "Ad", + "App name" : "Uygulama adı", + "Create new app password" : "Yeni uygulama parolası oluştur", + "Use the credentials below to configure your app or device." : "Uygulama veya aygıtınızı yapılandırmak için aşağıdaki kimlik bilgilerini kullan.", "Username" : "Kullanıcı Adı", "Done" : "Bitti", "Get the apps to sync your files" : "Dosyalarınızı eşitlemek için uygulamaları indirin", "Desktop client" : "Masaüstü istemcisi", "Android app" : "Android uygulaması", "iOS app" : "iOS uygulaması", + "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Projeyi desteklemek isterseniz\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">gelişimine katılın</a>\n\t\tya da\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">dünyaya duyurun</a>!", "Show First Run Wizard again" : "İlk Çalıştırma Sihirbazı'nı yeniden göster", + "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "{communityopen}Nextcloud topluluğu tarafından geliştirilmiştir{linkclose}, {githubopen}kaynak kod{linkclose} {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} ile lisanslanmıştır.", "Show storage location" : "Depolama konumunu göster", "Show last log in" : "Son oturum açılma zamanını göster", "Show user backend" : "Kullanıcı arka ucunu göster", @@ -273,19 +305,17 @@ "Create" : "Oluştur", "Admin Recovery Password" : "Yönetici Kurtarma Parolası", "Enter the recovery password in order to recover the users files during password change" : "Parola değiştirme sırasında kullanıcı dosyalarını kurtarmak için kurtarma parolasını girin", - "Add Group" : "Grup Ekle", "Group" : "Grup", "Everyone" : "Herkes", "Admins" : "Yöneticiler", - "Default Quota" : "Öntanımlı Kota", + "Default quota" : "Varsayılan kota", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Lütfen disk alanı kotasını girin (örnek: \"512MB\" veya \"12GB\")", "Other" : "Diğer", - "Full Name" : "Tam Adı", - "Group Admin for" : "Grup Yöneticisi", + "Group admin for" : "Grup Yöneticisi", "Quota" : "Kota", - "Storage Location" : "Depolama Konumu", - "User Backend" : "Kullanıcı Arka Ucu", - "Last Login" : "Son Giriş", + "Storage location" : "Depolama konumu", + "User backend" : "Kullanıcı Arka Ucu", + "Last login" : "Son giriş", "change full name" : "tam adı değiştir", "set new password" : "yeni parola belirle", "change email address" : "e-posta adresini değiştir", diff --git a/settings/l10n/uk.js b/settings/l10n/uk.js index c5d3893d26c..873acf6a73e 100644 --- a/settings/l10n/uk.js +++ b/settings/l10n/uk.js @@ -92,10 +92,8 @@ OC.L10N.register( "A valid group name must be provided" : "Потрібно задати вірне ім'я групи", "deleted {groupName}" : "видалено {groupName}", "undo" : "відмінити", - "no group" : "без групи", "never" : "ніколи", "deleted {userName}" : "видалено {userName}", - "add group" : "додати групу", "Changing the password will result in data loss, because data recovery is not available for this user" : "Зміна пароля призведе до втрати даних, тому що відновлення даних не доступно для цього користувача", "A valid username must be provided" : "Потрібно задати вірне ім'я користувача", "A valid password must be provided" : "Потрібно задати вірний пароль", @@ -240,19 +238,12 @@ OC.L10N.register( "Create" : "Створити", "Admin Recovery Password" : "Пароль адміністратора для відновлення", "Enter the recovery password in order to recover the users files during password change" : "Введіть пароль для того, щоб відновити файли користувачів при зміні паролю", - "Add Group" : "Додати групу", "Group" : "Група", "Everyone" : "Всі", "Admins" : "Адміністратори", - "Default Quota" : "Квота за замовчуванням", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Будь ласка, вкажіть розмір сховища (наприклад: \"512 MB\" або \"12 GB\")", "Other" : "Інше", - "Full Name" : "Повне Ім'я", - "Group Admin for" : "Адміністратор групи", "Quota" : "Квота", - "Storage Location" : "Місцезнаходження сховища", - "User Backend" : "Внутрішній користувач", - "Last Login" : "Останній вхід", "change full name" : "змінити ім'я", "set new password" : "встановити новий пароль", "change email address" : "Змінити адресу електронної пошти", diff --git a/settings/l10n/uk.json b/settings/l10n/uk.json index 2fed7ce6d95..8a996fcb058 100644 --- a/settings/l10n/uk.json +++ b/settings/l10n/uk.json @@ -90,10 +90,8 @@ "A valid group name must be provided" : "Потрібно задати вірне ім'я групи", "deleted {groupName}" : "видалено {groupName}", "undo" : "відмінити", - "no group" : "без групи", "never" : "ніколи", "deleted {userName}" : "видалено {userName}", - "add group" : "додати групу", "Changing the password will result in data loss, because data recovery is not available for this user" : "Зміна пароля призведе до втрати даних, тому що відновлення даних не доступно для цього користувача", "A valid username must be provided" : "Потрібно задати вірне ім'я користувача", "A valid password must be provided" : "Потрібно задати вірний пароль", @@ -238,19 +236,12 @@ "Create" : "Створити", "Admin Recovery Password" : "Пароль адміністратора для відновлення", "Enter the recovery password in order to recover the users files during password change" : "Введіть пароль для того, щоб відновити файли користувачів при зміні паролю", - "Add Group" : "Додати групу", "Group" : "Група", "Everyone" : "Всі", "Admins" : "Адміністратори", - "Default Quota" : "Квота за замовчуванням", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Будь ласка, вкажіть розмір сховища (наприклад: \"512 MB\" або \"12 GB\")", "Other" : "Інше", - "Full Name" : "Повне Ім'я", - "Group Admin for" : "Адміністратор групи", "Quota" : "Квота", - "Storage Location" : "Місцезнаходження сховища", - "User Backend" : "Внутрішній користувач", - "Last Login" : "Останній вхід", "change full name" : "змінити ім'я", "set new password" : "встановити новий пароль", "change email address" : "Змінити адресу електронної пошти", diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js index 83672d5bc09..ca7541fe800 100644 --- a/settings/l10n/zh_CN.js +++ b/settings/l10n/zh_CN.js @@ -99,10 +99,8 @@ OC.L10N.register( "A valid group name must be provided" : "请提供一个有效的组名称", "deleted {groupName}" : "已删除 {groupName}", "undo" : "撤销", - "no group" : "没有组", "never" : "从不", "deleted {userName}" : "已删除 {userName}", - "add group" : "增加组", "Changing the password will result in data loss, because data recovery is not available for this user" : "更改密码会导致数据丢失,因为数据恢复不适用于此用户", "A valid username must be provided" : "必须提供合法的用户名", "Error creating user: {message}" : "创建用户出错: {message}", @@ -184,11 +182,11 @@ OC.L10N.register( "Store credentials" : "存储凭据", "Test email settings" : "测试电子邮件设置", "Send email" : "发送邮件", + "What to log" : "记录日志", "Download logfile" : "下载日志文件", "More" : "更多", "Less" : "更少", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!", - "What to log" : "记录日志", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库。对于较大数据量的安装和使用,我们建议您切换到不同的数据库后端。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。", "How to do backups" : "如何做备份", @@ -263,19 +261,12 @@ OC.L10N.register( "Create" : "创建", "Admin Recovery Password" : "管理恢复密码", "Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件", - "Add Group" : "增加组", "Group" : "分组", "Everyone" : "所有人", "Admins" : "管理员", - "Default Quota" : "默认配额", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "请输入存储限额 (ex: \"512 MB\" or \"12 GB\")", "Other" : "其它", - "Full Name" : "全名", - "Group Admin for" : "设为以下组管理员", "Quota" : "配额", - "Storage Location" : "存储空间位置", - "User Backend" : "用户后端", - "Last Login" : "最后登录", "change full name" : "更改全名", "set new password" : "设置新密码", "change email address" : "修改电子邮箱地址", diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json index b7a32573822..c5af97dd214 100644 --- a/settings/l10n/zh_CN.json +++ b/settings/l10n/zh_CN.json @@ -97,10 +97,8 @@ "A valid group name must be provided" : "请提供一个有效的组名称", "deleted {groupName}" : "已删除 {groupName}", "undo" : "撤销", - "no group" : "没有组", "never" : "从不", "deleted {userName}" : "已删除 {userName}", - "add group" : "增加组", "Changing the password will result in data loss, because data recovery is not available for this user" : "更改密码会导致数据丢失,因为数据恢复不适用于此用户", "A valid username must be provided" : "必须提供合法的用户名", "Error creating user: {message}" : "创建用户出错: {message}", @@ -182,11 +180,11 @@ "Store credentials" : "存储凭据", "Test email settings" : "测试电子邮件设置", "Send email" : "发送邮件", + "What to log" : "记录日志", "Download logfile" : "下载日志文件", "More" : "更多", "Less" : "更少", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!", - "What to log" : "记录日志", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库。对于较大数据量的安装和使用,我们建议您切换到不同的数据库后端。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。", "How to do backups" : "如何做备份", @@ -261,19 +259,12 @@ "Create" : "创建", "Admin Recovery Password" : "管理恢复密码", "Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件", - "Add Group" : "增加组", "Group" : "分组", "Everyone" : "所有人", "Admins" : "管理员", - "Default Quota" : "默认配额", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "请输入存储限额 (ex: \"512 MB\" or \"12 GB\")", "Other" : "其它", - "Full Name" : "全名", - "Group Admin for" : "设为以下组管理员", "Quota" : "配额", - "Storage Location" : "存储空间位置", - "User Backend" : "用户后端", - "Last Login" : "最后登录", "change full name" : "更改全名", "set new password" : "设置新密码", "change email address" : "修改电子邮箱地址", diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js index 2cf441fc000..3cdcb90f896 100644 --- a/settings/l10n/zh_TW.js +++ b/settings/l10n/zh_TW.js @@ -94,10 +94,8 @@ OC.L10N.register( "A valid group name must be provided" : "必須提供一個有效的群組名稱", "deleted {groupName}" : "刪除 {groupName}", "undo" : "復原", - "no group" : "沒有群組", "never" : "永不", "deleted {userName}" : "刪除 {userName}", - "add group" : "新增群組", "Changing the password will result in data loss, because data recovery is not available for this user" : "更改密碼會造成資料遺失,因為資料復原的功能無法在這個使用者使用", "A valid username must be provided" : "必須提供一個有效的用戶名", "A valid password must be provided" : "一定要提供一個有效的密碼", @@ -180,11 +178,11 @@ OC.L10N.register( "Store credentials" : "儲存帳密", "Test email settings" : "測試郵件設定", "Send email" : "寄送郵件", + "What to log" : "記錄哪些訊息", "Download logfile" : "下載記錄檔", "More" : "更多", "Less" : "更少", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "記錄檔大於 100MB,下載可能需要一些時間!", - "What to log" : "記錄哪些訊息", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "將會使用 SQLite 作為資料庫,在大型安裝中建議使用其他種資料庫", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "若使用桌面版程式同步檔案,不建議使用 SQLite", "How to do backups" : "如何備份", @@ -257,19 +255,12 @@ OC.L10N.register( "Create" : "建立", "Admin Recovery Password" : "管理者復原密碼", "Enter the recovery password in order to recover the users files during password change" : "為了修改密碼時能夠取回使用者資料,請輸入另一組還原用密碼", - "Add Group" : "新增群組", "Group" : "群組", "Everyone" : "所有人", "Admins" : "管理者", - "Default Quota" : "預設容量限制", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "請輸入空間配額(例如 \"512 MB\" 或是 \"12 GB\")", "Other" : "其他", - "Full Name" : "全名", - "Group Admin for" : "指定群組管理者", "Quota" : "容量限制", - "Storage Location" : "儲存位置", - "User Backend" : "用戶後端", - "Last Login" : "上次登入", "change full name" : "變更全名", "set new password" : "設定新密碼", "change email address" : "更改電子郵件地址", diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json index 3b3b4d73c8f..1b1514c151e 100644 --- a/settings/l10n/zh_TW.json +++ b/settings/l10n/zh_TW.json @@ -92,10 +92,8 @@ "A valid group name must be provided" : "必須提供一個有效的群組名稱", "deleted {groupName}" : "刪除 {groupName}", "undo" : "復原", - "no group" : "沒有群組", "never" : "永不", "deleted {userName}" : "刪除 {userName}", - "add group" : "新增群組", "Changing the password will result in data loss, because data recovery is not available for this user" : "更改密碼會造成資料遺失,因為資料復原的功能無法在這個使用者使用", "A valid username must be provided" : "必須提供一個有效的用戶名", "A valid password must be provided" : "一定要提供一個有效的密碼", @@ -178,11 +176,11 @@ "Store credentials" : "儲存帳密", "Test email settings" : "測試郵件設定", "Send email" : "寄送郵件", + "What to log" : "記錄哪些訊息", "Download logfile" : "下載記錄檔", "More" : "更多", "Less" : "更少", "The logfile is bigger than 100 MB. Downloading it may take some time!" : "記錄檔大於 100MB,下載可能需要一些時間!", - "What to log" : "記錄哪些訊息", "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "將會使用 SQLite 作為資料庫,在大型安裝中建議使用其他種資料庫", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "若使用桌面版程式同步檔案,不建議使用 SQLite", "How to do backups" : "如何備份", @@ -255,19 +253,12 @@ "Create" : "建立", "Admin Recovery Password" : "管理者復原密碼", "Enter the recovery password in order to recover the users files during password change" : "為了修改密碼時能夠取回使用者資料,請輸入另一組還原用密碼", - "Add Group" : "新增群組", "Group" : "群組", "Everyone" : "所有人", "Admins" : "管理者", - "Default Quota" : "預設容量限制", "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "請輸入空間配額(例如 \"512 MB\" 或是 \"12 GB\")", "Other" : "其他", - "Full Name" : "全名", - "Group Admin for" : "指定群組管理者", "Quota" : "容量限制", - "Storage Location" : "儲存位置", - "User Backend" : "用戶後端", - "Last Login" : "上次登入", "change full name" : "變更全名", "set new password" : "設定新密碼", "change email address" : "更改電子郵件地址", diff --git a/settings/templates/admin.php b/settings/templates/admin.php index 1830e542bbc..730e60cfad4 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -39,14 +39,14 @@ $mail_smtpsecure = [ ]; $mail_smtpmode = [ - 'php', - 'smtp', + ['php', 'PHP'], + ['smtp', 'SMTP'], ]; if ($_['sendmail_is_available']) { - $mail_smtpmode[] = 'sendmail'; + $mail_smtpmode[] = ['sendmail', 'Sendmail']; } if ($_['mail_smtpmode'] == 'qmail') { - $mail_smtpmode[] = 'qmail'; + $mail_smtpmode[] = ['qmail', 'qmail']; } ?> @@ -97,11 +97,11 @@ if (!$_['isAnnotationsWorking']) { <?php } -// Is the Transaction isolation level READ_COMMITED? +// Is the Transaction isolation level READ_COMMITTED? if ($_['invalidTransactionIsolationLevel']) { ?> <li> - <?php p($l->t('Your database does not run with "READ COMMITED" transaction isolation level. This can cause problems when multiple actions are executed in parallel.')); ?> + <?php p($l->t('Your database does not run with "READ COMMITTED" transaction isolation level. This can cause problems when multiple actions are executed in parallel.')); ?> </li> <?php } @@ -414,10 +414,10 @@ if ($_['cronErrors']) { <select name='mail_smtpmode' id='mail_smtpmode'> <?php foreach ($mail_smtpmode as $smtpmode): $selected = ''; - if ($smtpmode == $_['mail_smtpmode']): + if ($smtpmode[0] == $_['mail_smtpmode']): $selected = 'selected="selected"'; endif; ?> - <option value='<?php p($smtpmode)?>' <?php p($selected) ?>><?php p($smtpmode) ?></option> + <option value='<?php p($smtpmode[0])?>' <?php p($selected) ?>><?php p($smtpmode[1]) ?></option> <?php endforeach;?> </select> @@ -514,6 +514,16 @@ if ($_['cronErrors']) { </tr> <?php endforeach;?> </table> + <p><?php p($l->t('What to log'));?> <select name='loglevel' id='loglevel'> + <?php for ($i = 0; $i < 5; $i++): + $selected = ''; + if ($i == $_['loglevel']): + $selected = 'selected="selected"'; + endif; ?> + <option value='<?php p($i)?>' <?php p($selected) ?>><?php p($levelLabels[$i])?></option> + <?php endfor;?> + </select></p> + <?php if ($_['logFileSize'] > 0): ?> <a href="<?php print_unescaped(OC::$server->getURLGenerator()->linkToRoute('settings.LogSettings.download')); ?>" class="button" id="downloadLog"><?php p($l->t('Download logfile'));?></a> <?php endif; ?> @@ -528,16 +538,6 @@ if ($_['cronErrors']) { </em> <?php endif; ?> <?php endif; ?> - - <p><?php p($l->t('What to log'));?> <select name='loglevel' id='loglevel'> - <?php for ($i = 0; $i < 5; $i++): - $selected = ''; - if ($i == $_['loglevel']): - $selected = 'selected="selected"'; - endif; ?> - <option value='<?php p($i)?>' <?php p($selected) ?>><?php p($levelLabels[$i])?></option> - <?php endfor;?> - </select></p> </div> <div class="section" id="admin-tips"> diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 4f580e41287..890bfd1bbeb 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -158,7 +158,7 @@ if($_['passwordChangeSupported']) { <?php endforeach;?> </select> <?php if (OC_Util::getEditionString() === ''): ?> - <a href="https://www.transifex.com/projects/p/owncloud/" + <a href="https://www.transifex.com/nextcloud/nextcloud/" target="_blank" rel="noreferrer"> <em><?php p($l->t('Help translate'));?></em> </a> diff --git a/settings/templates/settings.development.notice.php b/settings/templates/settings.development.notice.php index 4e6bbd8db9f..a96661e5de1 100644 --- a/settings/templates/settings.development.notice.php +++ b/settings/templates/settings.development.notice.php @@ -1,4 +1,6 @@ -<?php if (OC_Util::getEditionString() === ''): ?> +<?php +/** @var \OCP\IL10N $l */ +if (OC_Util::getEditionString() === ''): ?> <p> <?php print_unescaped(str_replace( [ @@ -13,7 +15,7 @@ '<a href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank" rel="noreferrer">', '</a>', ], - $l->t('Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title="Affero General Public License">AGPL</abbr>{linkclose}.') + $l->t('Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}.') )); ?> </p> <?php endif; ?> diff --git a/settings/templates/users/part.grouplist.php b/settings/templates/users/part.grouplist.php index 64c602c364c..22a3d6e78de 100644 --- a/settings/templates/users/part.grouplist.php +++ b/settings/templates/users/part.grouplist.php @@ -2,7 +2,7 @@ <!-- Add new group --> <li id="newgroup-init"> <a href="#"> - <span><?php p($l->t('Add Group'))?></span> + <span><?php p($l->t('Add group'))?></span> </a> </li> <li id="newgroup-form" style="display: none"> diff --git a/settings/templates/users/part.setquota.php b/settings/templates/users/part.setquota.php index 18ec3fa8cd7..a0231ddace2 100644 --- a/settings/templates/users/part.setquota.php +++ b/settings/templates/users/part.setquota.php @@ -1,6 +1,6 @@ <div class="quota"> <!-- Default storage --> - <span><?php p($l->t('Default Quota'));?></span> + <span><?php p($l->t('Default quota'));?></span> <?php if((bool) $_['isAdmin']): ?> <select id='default_quota' data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>" data-tipsy-gravity="s"> <option <?php if($_['default_quota'] === 'none') print_unescaped('selected="selected"');?> value='none'> @@ -25,7 +25,7 @@ </select> <?php endif; ?> <?php if((bool) !$_['isAdmin']): ?> - : + : <?php if( $_['default_quota'] === 'none'): ?> <?php p($l->t('Unlimited'));?> <?php else: ?> diff --git a/settings/templates/users/part.userlist.php b/settings/templates/users/part.userlist.php index c7b2ad58c15..2bdd0714a3c 100644 --- a/settings/templates/users/part.userlist.php +++ b/settings/templates/users/part.userlist.php @@ -5,17 +5,17 @@ <th id="headerAvatar" scope="col"></th> <?php endif; ?> <th id="headerName" scope="col"><?php p($l->t('Username'))?></th> - <th id="headerDisplayName" scope="col"><?php p($l->t( 'Full Name' )); ?></th> + <th id="headerDisplayName" scope="col"><?php p($l->t( 'Full name' )); ?></th> <th id="headerPassword" scope="col"><?php p($l->t( 'Password' )); ?></th> <th class="mailAddress" scope="col"><?php p($l->t( 'Email' )); ?></th> <th id="headerGroups" scope="col"><?php p($l->t( 'Groups' )); ?></th> <?php if(is_array($_['subadmins']) || $_['subadmins']): ?> - <th id="headerSubAdmins" scope="col"><?php p($l->t('Group Admin for')); ?></th> + <th id="headerSubAdmins" scope="col"><?php p($l->t('Group admin for')); ?></th> <?php endif;?> <th id="headerQuota" scope="col"><?php p($l->t('Quota')); ?></th> - <th class="storageLocation" scope="col"><?php p($l->t('Storage Location')); ?></th> - <th class="userBackend" scope="col"><?php p($l->t('User Backend')); ?></th> - <th class="lastLogin" scope="col"><?php p($l->t('Last Login')); ?></th> + <th class="storageLocation" scope="col"><?php p($l->t('Storage location')); ?></th> + <th class="userBackend" scope="col"><?php p($l->t('User backend')); ?></th> + <th class="lastLogin" scope="col"><?php p($l->t('Last login')); ?></th> <th id="headerRemove"> </th> </tr> </thead> diff --git a/tests/Core/Command/Log/OwnCloudTest.php b/tests/Core/Command/Log/FileTest.php index e0445a5cfda..f55f92901d6 100644 --- a/tests/Core/Command/Log/OwnCloudTest.php +++ b/tests/Core/Command/Log/FileTest.php @@ -22,10 +22,10 @@ namespace Tests\Core\Command\Log; -use OC\Core\Command\Log\OwnCloud; +use OC\Core\Command\Log\File; use Test\TestCase; -class OwnCloudTest extends TestCase { +class FileTest extends TestCase { /** @var \PHPUnit_Framework_MockObject_MockObject */ protected $config; /** @var \PHPUnit_Framework_MockObject_MockObject */ @@ -45,7 +45,7 @@ class OwnCloudTest extends TestCase { $this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); $this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); - $this->command = new OwnCloud($config); + $this->command = new File($config); } public function testEnable() { @@ -55,7 +55,7 @@ class OwnCloudTest extends TestCase { ])); $this->config->expects($this->once()) ->method('setSystemValue') - ->with('log_type', 'owncloud'); + ->with('log_type', 'file'); self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); } @@ -99,7 +99,7 @@ class OwnCloudTest extends TestCase { public function testGetConfiguration() { $this->config->method('getSystemValue') ->will($this->returnValueMap([ - ['log_type', 'owncloud', 'log_type_value'], + ['log_type', 'file', 'log_type_value'], ['datadirectory', \OC::$SERVERROOT.'/data', '/data/directory/'], ['logfile', '/data/directory/nextcloud.log', '/var/log/nextcloud.log'], ['log_rotate_size', 0, 5 * 1024 * 1024], @@ -107,7 +107,7 @@ class OwnCloudTest extends TestCase { $this->consoleOutput->expects($this->at(0)) ->method('writeln') - ->with('Log backend ownCloud: disabled'); + ->with('Log backend file: disabled'); $this->consoleOutput->expects($this->at(1)) ->method('writeln') ->with('Log file: /var/log/nextcloud.log'); diff --git a/tests/Core/Command/Log/ManageTest.php b/tests/Core/Command/Log/ManageTest.php index 6fb83347f23..cf4506a64eb 100644 --- a/tests/Core/Command/Log/ManageTest.php +++ b/tests/Core/Command/Log/ManageTest.php @@ -154,7 +154,7 @@ class ManageTest extends TestCase { public function testGetConfiguration() { $this->config->expects($this->at(0)) ->method('getSystemValue') - ->with('log_type', 'owncloud') + ->with('log_type', 'file') ->willReturn('log_type_value'); $this->config->expects($this->at(1)) ->method('getSystemValue') diff --git a/tests/lib/App/DependencyAnalyzerTest.php b/tests/lib/App/DependencyAnalyzerTest.php index 3f410444f47..684a1b52259 100644 --- a/tests/lib/App/DependencyAnalyzerTest.php +++ b/tests/lib/App/DependencyAnalyzerTest.php @@ -16,7 +16,7 @@ use Test\TestCase; class DependencyAnalyzerTest extends TestCase { - /** @var Platform */ + /** @var Platform|\PHPUnit_Framework_MockObject_MockObject */ private $platformMock; /** @var IL10N */ @@ -206,6 +206,8 @@ class DependencyAnalyzerTest extends TestCase { array(array(), array('@attributes' => array('min-version' => '8.0.2', 'max-version' => '8.0.2'))), array(array('Server version 8.0.3 or higher is required.'), array('@attributes' => array('min-version' => '8.0.3'))), array(array('Server version 9 or higher is required.'), array('@attributes' => array('min-version' => '9'))), + array(array('Server version 10 or higher is required.'), array('@attributes' => array('min-version' => '9.1'))), + array(array('Server version 11 or higher is required.'), array('@attributes' => array('min-version' => '9.2'))), [['Server version 8.0.1 or lower is required.'], ['@attributes' => ['max-version' => '8.0.1']]], ); } diff --git a/tests/lib/App/ManagerTest.php b/tests/lib/App/ManagerTest.php index 2d4ec4968b0..80754413fc8 100644 --- a/tests/lib/App/ManagerTest.php +++ b/tests/lib/App/ManagerTest.php @@ -306,7 +306,7 @@ class ManagerTest extends TestCase { $this->appConfig->setValue('test1', 'enabled', 'yes'); $this->appConfig->setValue('test2', 'enabled', 'no'); $this->appConfig->setValue('test3', 'enabled', '["foo"]'); - $this->assertEquals(['dav', 'federatedfilesharing', 'files', 'test1', 'test3'], $this->manager->getInstalledApps()); + $this->assertEquals(['dav', 'federatedfilesharing', 'files', 'test1', 'test3', 'workflowengine'], $this->manager->getInstalledApps()); } public function testGetAppsForUser() { @@ -320,7 +320,7 @@ class ManagerTest extends TestCase { $this->appConfig->setValue('test2', 'enabled', 'no'); $this->appConfig->setValue('test3', 'enabled', '["foo"]'); $this->appConfig->setValue('test4', 'enabled', '["asd"]'); - $this->assertEquals(['dav', 'federatedfilesharing', 'files', 'test1', 'test3'], $this->manager->getEnabledAppsForUser($user)); + $this->assertEquals(['dav', 'federatedfilesharing', 'files', 'test1', 'test3', 'workflowengine'], $this->manager->getEnabledAppsForUser($user)); } public function testGetAppsNeedingUpgrade() { @@ -338,6 +338,7 @@ class ManagerTest extends TestCase { 'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'], 'test4' => ['id' => 'test4', 'version' => '3.0.0', 'requiremin' => '8.1.0'], 'testnoversion' => ['id' => 'testnoversion', 'requiremin' => '8.2.0'], + 'workflowengine' => ['id' => 'workflowengine'], ]; $this->manager->expects($this->any()) @@ -378,6 +379,7 @@ class ManagerTest extends TestCase { 'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'], 'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'], 'testnoversion' => ['id' => 'testnoversion', 'requiremin' => '8.2.0'], + 'workflowengine' => ['id' => 'workflowengine'], ]; $this->manager->expects($this->any()) diff --git a/tests/lib/AppFramework/AppTest.php b/tests/lib/AppFramework/AppTest.php index 7288e686d52..92ebd1f81e7 100644 --- a/tests/lib/AppFramework/AppTest.php +++ b/tests/lib/AppFramework/AppTest.php @@ -162,4 +162,55 @@ class AppTest extends \Test\TestCase { App::main($this->controllerName, $this->controllerMethod, $this->container, []); } + public function testCoreApp() { + $this->container['AppName'] = 'core'; + $this->container['OC\Core\Controller\Foo'] = $this->controller; + + $return = array(null, array(), array(), null, new Response()); + $this->dispatcher->expects($this->once()) + ->method('dispatch') + ->with($this->equalTo($this->controller), + $this->equalTo($this->controllerMethod)) + ->will($this->returnValue($return)); + + $this->io->expects($this->never()) + ->method('setOutput'); + + App::main('Foo', $this->controllerMethod, $this->container); + } + + public function testSettingsApp() { + $this->container['AppName'] = 'settings'; + $this->container['OC\Settings\Controller\Foo'] = $this->controller; + + $return = array(null, array(), array(), null, new Response()); + $this->dispatcher->expects($this->once()) + ->method('dispatch') + ->with($this->equalTo($this->controller), + $this->equalTo($this->controllerMethod)) + ->will($this->returnValue($return)); + + $this->io->expects($this->never()) + ->method('setOutput'); + + App::main('Foo', $this->controllerMethod, $this->container); + } + + public function testApp() { + $this->container['AppName'] = 'bar'; + $this->container['OCA\Bar\Controller\Foo'] = $this->controller; + + $return = array(null, array(), array(), null, new Response()); + $this->dispatcher->expects($this->once()) + ->method('dispatch') + ->with($this->equalTo($this->controller), + $this->equalTo($this->controllerMethod)) + ->will($this->returnValue($return)); + + $this->io->expects($this->never()) + ->method('setOutput'); + + App::main('Foo', $this->controllerMethod, $this->container); + } + } diff --git a/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php b/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php index 66131aa4b25..7d8cadc677f 100644 --- a/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php +++ b/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php @@ -88,7 +88,10 @@ class OCSMiddlewareTest extends \Test\TestCase { * @param string $message * @param int $code */ - public function testAfterException($controller, $exception, $forward, $message = '', $code = 0) { + public function testAfterExceptionOCSv1($controller, $exception, $forward, $message = '', $code = 0) { + $this->request + ->method('getScriptName') + ->willReturn('/ocs/v1.php'); $OCSMiddleware = new OCSMiddleware($this->request); try { @@ -99,6 +102,67 @@ class OCSMiddlewareTest extends \Test\TestCase { $this->assertSame($message, $this->invokePrivate($result, 'message')); $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); + $this->assertSame(200, $result->getStatus()); + } catch (\Exception $e) { + $this->assertTrue($forward); + $this->assertEquals($exception, $e); + } + } + + /** + * @dataProvider dataAfterException + * + * @param Controller $controller + * @param \Exception $exception + * @param bool $forward + * @param string $message + * @param int $code + */ + public function testAfterExceptionOCSv2($controller, $exception, $forward, $message = '', $code = 0) { + $this->request + ->method('getScriptName') + ->willReturn('/ocs/v2.php'); + $OCSMiddleware = new OCSMiddleware($this->request); + + try { + $result = $OCSMiddleware->afterException($controller, 'method', $exception); + $this->assertFalse($forward); + + $this->assertInstanceOf('OCP\AppFramework\Http\OCSResponse', $result); + + $this->assertSame($message, $this->invokePrivate($result, 'message')); + $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); + $this->assertSame($code, $result->getStatus()); + } catch (\Exception $e) { + $this->assertTrue($forward); + $this->assertEquals($exception, $e); + } + } + + /** + * @dataProvider dataAfterException + * + * @param Controller $controller + * @param \Exception $exception + * @param bool $forward + * @param string $message + * @param int $code + */ + public function testAfterExceptionOCSv2SubFolder($controller, $exception, $forward, $message = '', $code = 0) { + $this->request + ->method('getScriptName') + ->willReturn('/mysubfolder/ocs/v2.php'); + $OCSMiddleware = new OCSMiddleware($this->request); + + try { + $result = $OCSMiddleware->afterException($controller, 'method', $exception); + $this->assertFalse($forward); + + $this->assertInstanceOf('OCP\AppFramework\Http\OCSResponse', $result); + + $this->assertSame($message, $this->invokePrivate($result, 'message')); + $this->assertSame($code, $this->invokePrivate($result, 'statuscode')); + $this->assertSame($code, $result->getStatus()); } catch (\Exception $e) { $this->assertTrue($forward); $this->assertEquals($exception, $e); diff --git a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php index 487b83c0bef..bfd810bc6b9 100644 --- a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php +++ b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php @@ -35,22 +35,38 @@ use OC\Appframework\Middleware\Security\Exceptions\StrictCookieMissingException; use OC\AppFramework\Middleware\Security\SecurityMiddleware; use OC\AppFramework\Utility\ControllerMethodReflector; use OC\Security\CSP\ContentSecurityPolicy; +use OC\Security\CSP\ContentSecurityPolicyManager; +use OCP\AppFramework\Controller; use OCP\AppFramework\Http\RedirectResponse; use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\TemplateResponse; +use OCP\ILogger; +use OCP\INavigationManager; +use OCP\IRequest; +use OCP\IURLGenerator; class SecurityMiddlewareTest extends \Test\TestCase { + /** @var SecurityMiddleware|\PHPUnit_Framework_MockObject_MockObject */ private $middleware; + /** @var Controller|\PHPUnit_Framework_MockObject_MockObject */ private $controller; + /** @var SecurityException */ private $secException; + /** @var SecurityException */ private $secAjaxException; + /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */ private $request; + /** @var ControllerMethodReflector */ private $reader; + /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ private $logger; + /** @var INavigationManager|\PHPUnit_Framework_MockObject_MockObject */ private $navigationManager; + /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ private $urlGenerator; + /** @var ContentSecurityPolicyManager|\PHPUnit_Framework_MockObject_MockObject */ private $contentSecurityPolicyManager; protected function setUp() { @@ -354,6 +370,46 @@ class SecurityMiddlewareTest extends \Test\TestCase { $this->middleware->beforeController(__CLASS__, __FUNCTION__); } + public function dataCsrfOcsController() { + $controller = $this->getMockBuilder('OCP\AppFramework\Controller') + ->disableOriginalConstructor() + ->getMock(); + $ocsController = $this->getMockBuilder('OCP\AppFramework\OCSController') + ->disableOriginalConstructor() + ->getMock(); + + return [ + [$controller, false, true], + [$controller, true, true], + + [$ocsController, false, true], + [$ocsController, true, false], + ]; + } + + /** + * @dataProvider dataCsrfOcsController + * @param Controller $controller + * @param bool $hasOcsApiHeader + * @param bool $exception + */ + public function testCsrfOcsController(Controller $controller, $hasOcsApiHeader, $exception) { + $this->request + ->method('getHeader') + ->with('OCS-APIREQUEST') + ->willReturn($hasOcsApiHeader ? 'true' : null); + $this->request->expects($this->once()) + ->method('passesStrictCookieCheck') + ->willReturn(true); + + try { + $this->middleware->beforeController($controller, 'foo'); + $this->assertFalse($exception); + } catch (CrossSiteRequestForgeryException $e) { + $this->assertTrue($exception); + } + } + /** * @NoCSRFRequired * @NoAdminRequired diff --git a/tests/lib/AppFramework/Routing/RoutingTest.php b/tests/lib/AppFramework/Routing/RoutingTest.php index 6c8b0f40133..d395584d011 100644 --- a/tests/lib/AppFramework/Routing/RoutingTest.php +++ b/tests/lib/AppFramework/Routing/RoutingTest.php @@ -24,7 +24,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open'); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open'); } public function testSimpleRouteWithMissingVerb() @@ -42,7 +42,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/folders/{folderId}/open', 'FoldersController', 'open'); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'GET', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open'); } public function testSimpleRouteWithLowercaseVerb() @@ -60,7 +60,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open'); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open'); } public function testSimpleRouteWithRequirements() @@ -78,7 +78,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', ['something']); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open', ['something']); } public function testSimpleRouteWithDefaults() @@ -97,7 +97,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', [], ['param' => 'foobar']); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open', [], ['param' => 'foobar']); } public function testSimpleRouteWithPostfix() @@ -115,7 +115,7 @@ class RoutingTest extends \Test\TestCase ] ]; - $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/folders/{folderId}/open', 'FoldersController', 'open', [], [], '_something'); + $this->assertSimpleOCSRoute($routes, 'folders.open', 'DELETE', '/apps/app1/folders/{folderId}/open', 'FoldersController', 'open', [], [], '_something'); } /** @@ -175,7 +175,7 @@ class RoutingTest extends \Test\TestCase ['name' => 'admin_folders#open_current', 'url' => '/folders/{folderId}/open', 'verb' => 'delete'] ]]; - $this->assertSimpleOCSRoute($routes, 'admin_folders.open_current', 'DELETE', '/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent'); + $this->assertSimpleOCSRoute($routes, 'admin_folders.open_current', 'DELETE', '/apps/app1/folders/{folderId}/open', 'AdminFoldersController', 'openCurrent'); } public function testResource() diff --git a/tests/lib/AppTest.php b/tests/lib/AppTest.php index 2e5b6f74ab7..d37b4a0f56a 100644 --- a/tests/lib/AppTest.php +++ b/tests/lib/AppTest.php @@ -316,6 +316,7 @@ class AppTest extends \Test\TestCase { 'appforgroup12', 'dav', 'federatedfilesharing', + 'workflowengine', ), false ), @@ -330,6 +331,7 @@ class AppTest extends \Test\TestCase { 'appforgroup2', 'dav', 'federatedfilesharing', + 'workflowengine', ), false ), @@ -345,6 +347,7 @@ class AppTest extends \Test\TestCase { 'appforgroup2', 'dav', 'federatedfilesharing', + 'workflowengine', ), false ), @@ -360,6 +363,7 @@ class AppTest extends \Test\TestCase { 'appforgroup2', 'dav', 'federatedfilesharing', + 'workflowengine', ), false, ), @@ -375,6 +379,7 @@ class AppTest extends \Test\TestCase { 'appforgroup2', 'dav', 'federatedfilesharing', + 'workflowengine', ), true, ), @@ -452,11 +457,11 @@ class AppTest extends \Test\TestCase { ); $apps = \OC_App::getEnabledApps(); - $this->assertEquals(array('files', 'app3', 'dav', 'federatedfilesharing',), $apps); + $this->assertEquals(array('files', 'app3', 'dav', 'federatedfilesharing', 'workflowengine'), $apps); // mock should not be called again here $apps = \OC_App::getEnabledApps(); - $this->assertEquals(array('files', 'app3', 'dav', 'federatedfilesharing',), $apps); + $this->assertEquals(array('files', 'app3', 'dav', 'federatedfilesharing', 'workflowengine'), $apps); $this->restoreAppConfig(); \OC_User::setUserId(null); diff --git a/tests/lib/Files/Cache/Wrapper/CacheJailTest.php b/tests/lib/Files/Cache/Wrapper/CacheJailTest.php index 6ef6716f721..e3043c50d57 100644 --- a/tests/lib/Files/Cache/Wrapper/CacheJailTest.php +++ b/tests/lib/Files/Cache/Wrapper/CacheJailTest.php @@ -63,8 +63,17 @@ class CacheJailTest extends CacheTest { } function testGetById() { - //not supported - $this->assertTrue(true); + $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'httpd/unix-directory'); + $id = $this->sourceCache->put('foo/bar', $data1); + + // path from jailed foo of foo/bar is bar + $path = $this->cache->getPathById($id); + $this->assertEquals('bar', $path); + + // path from jailed '' of foo/bar is foo/bar + $this->cache = new \OC\Files\Cache\Wrapper\CacheJail($this->sourceCache, ''); + $path = $this->cache->getPathById($id); + $this->assertEquals('foo/bar', $path); } function testGetIncomplete() { diff --git a/tests/lib/Files/EtagTest.php b/tests/lib/Files/EtagTest.php index d8e44000f9c..67ddd6ca514 100644 --- a/tests/lib/Files/EtagTest.php +++ b/tests/lib/Files/EtagTest.php @@ -34,8 +34,8 @@ class EtagTest extends \Test\TestCase { \OC_Hook::clear('OC_Filesystem', 'setup'); $application = new \OCA\Files_Sharing\AppInfo\Application(); $application->registerMountProviders(); - \OCP\Share::registerBackend('file', 'OC_Share_Backend_File'); - \OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file'); + \OCP\Share::registerBackend('file', 'OCA\Files_Sharing\ShareBackend\File'); + \OCP\Share::registerBackend('folder', 'OCA\Files_Sharing\ShareBackend\Folder', 'file'); $config = \OC::$server->getConfig(); $this->datadir = $config->getSystemValue('datadirectory'); diff --git a/tests/lib/Files/Node/FolderTest.php b/tests/lib/Files/Node/FolderTest.php index 7ce9fff1419..18acfcae1fa 100644 --- a/tests/lib/Files/Node/FolderTest.php +++ b/tests/lib/Files/Node/FolderTest.php @@ -12,6 +12,8 @@ use OC\Files\Cache\Cache; use OC\Files\FileInfo; use OC\Files\Mount\MountPoint; use OC\Files\Node\Node; +use OC\Files\Storage\Temporary; +use OC\Files\Storage\Wrapper\Jail; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OC\Files\View; @@ -760,9 +762,9 @@ class FolderTest extends \Test\TestCase { public function uniqueNameProvider() { return [ // input, existing, expected - ['foo', [] , 'foo'], - ['foo', ['foo'] , 'foo (2)'], - ['foo', ['foo', 'foo (2)'] , 'foo (3)'] + ['foo', [], 'foo'], + ['foo', ['foo'], 'foo (2)'], + ['foo', ['foo', 'foo (2)'], 'foo (3)'] ]; } @@ -782,7 +784,7 @@ class FolderTest extends \Test\TestCase { ->method('file_exists') ->will($this->returnCallback(function ($path) use ($existingFiles, $folderPath) { foreach ($existingFiles as $existing) { - if ($folderPath . '/' . $existing === $path){ + if ($folderPath . '/' . $existing === $path) { return true; } } @@ -792,4 +794,167 @@ class FolderTest extends \Test\TestCase { $node = new \OC\Files\Node\Folder($root, $view, $folderPath); $this->assertEquals($expected, $node->getNonExistingName($name)); } + + public function testRecent() { + $manager = $this->getMock('\OC\Files\Mount\Manager'); + $folderPath = '/bar/foo'; + /** + * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view + */ + $view = $this->getMock('\OC\Files\View'); + /** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\Node\Root $root */ + $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user)); + /** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\FileInfo $folderInfo */ + $folderInfo = $this->getMockBuilder('\OC\Files\FileInfo') + ->disableOriginalConstructor()->getMock(); + + $baseTime = 1000; + $storage = new Temporary(); + $mount = new MountPoint($storage, ''); + + $folderInfo->expects($this->any()) + ->method('getMountPoint') + ->will($this->returnValue($mount)); + + $cache = $storage->getCache(); + + $id1 = $cache->put('bar/foo/inside.txt', [ + 'storage_mtime' => $baseTime, + 'mtime' => $baseTime, + 'mimetype' => 'text/plain', + 'size' => 3 + ]); + $id2 = $cache->put('bar/foo/old.txt', [ + 'storage_mtime' => $baseTime - 100, + 'mtime' => $baseTime - 100, + 'mimetype' => 'text/plain', + 'size' => 3 + ]); + $cache->put('bar/asd/outside.txt', [ + 'storage_mtime' => $baseTime, + 'mtime' => $baseTime, + 'mimetype' => 'text/plain', + 'size' => 3 + ]); + $id3 = $cache->put('bar/foo/older.txt', [ + 'storage_mtime' => $baseTime - 600, + 'mtime' => $baseTime - 600, + 'mimetype' => 'text/plain', + 'size' => 3 + ]); + + $node = new \OC\Files\Node\Folder($root, $view, $folderPath, $folderInfo); + + + $nodes = $node->getRecent(5); + $ids = array_map(function (Node $node) { + return (int)$node->getId(); + }, $nodes); + $this->assertEquals([$id1, $id2, $id3], $ids); + } + + public function testRecentFolder() { + $manager = $this->getMock('\OC\Files\Mount\Manager'); + $folderPath = '/bar/foo'; + /** + * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view + */ + $view = $this->getMock('\OC\Files\View'); + /** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\Node\Root $root */ + $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user)); + /** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\FileInfo $folderInfo */ + $folderInfo = $this->getMockBuilder('\OC\Files\FileInfo') + ->disableOriginalConstructor()->getMock(); + + $baseTime = 1000; + $storage = new Temporary(); + $mount = new MountPoint($storage, ''); + + $folderInfo->expects($this->any()) + ->method('getMountPoint') + ->will($this->returnValue($mount)); + + $cache = $storage->getCache(); + + $id1 = $cache->put('bar/foo/folder', [ + 'storage_mtime' => $baseTime, + 'mtime' => $baseTime, + 'mimetype' => \OCP\Files\FileInfo::MIMETYPE_FOLDER, + 'size' => 3 + ]); + $id2 = $cache->put('bar/foo/folder/bar.txt', [ + 'storage_mtime' => $baseTime, + 'mtime' => $baseTime, + 'mimetype' => 'text/plain', + 'size' => 3, + 'parent' => $id1 + ]); + $id3 = $cache->put('bar/foo/folder/asd.txt', [ + 'storage_mtime' => $baseTime - 100, + 'mtime' => $baseTime - 100, + 'mimetype' => 'text/plain', + 'size' => 3, + 'parent' => $id1 + ]); + + $node = new \OC\Files\Node\Folder($root, $view, $folderPath, $folderInfo); + + + $nodes = $node->getRecent(5); + $ids = array_map(function (Node $node) { + return (int)$node->getId(); + }, $nodes); + $this->assertEquals([$id2, $id3], $ids); + $this->assertEquals($baseTime, $nodes[0]->getMTime()); + $this->assertEquals($baseTime - 100, $nodes[1]->getMTime()); + } + + public function testRecentJail() { + $manager = $this->getMock('\OC\Files\Mount\Manager'); + $folderPath = '/bar/foo'; + /** + * @var \OC\Files\View | \PHPUnit_Framework_MockObject_MockObject $view + */ + $view = $this->getMock('\OC\Files\View'); + /** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\Node\Root $root */ + $root = $this->getMock('\OC\Files\Node\Root', array('getUser', 'getMountsIn', 'getMount'), array($manager, $view, $this->user)); + /** @var \PHPUnit_Framework_MockObject_MockObject|\OC\Files\FileInfo $folderInfo */ + $folderInfo = $this->getMockBuilder('\OC\Files\FileInfo') + ->disableOriginalConstructor()->getMock(); + + $baseTime = 1000; + $storage = new Temporary(); + $jail = new Jail([ + 'storage' => $storage, + 'root' => 'folder' + ]); + $mount = new MountPoint($jail, '/bar/foo'); + + $folderInfo->expects($this->any()) + ->method('getMountPoint') + ->will($this->returnValue($mount)); + + $cache = $storage->getCache(); + + $id1 = $cache->put('folder/inside.txt', [ + 'storage_mtime' => $baseTime, + 'mtime' => $baseTime, + 'mimetype' => 'text/plain', + 'size' => 3 + ]); + $cache->put('outside.txt', [ + 'storage_mtime' => $baseTime - 100, + 'mtime' => $baseTime - 100, + 'mimetype' => 'text/plain', + 'size' => 3 + ]); + + $node = new \OC\Files\Node\Folder($root, $view, $folderPath, $folderInfo); + + $nodes = $node->getRecent(5); + $ids = array_map(function (Node $node) { + return (int)$node->getId(); + }, $nodes); + $this->assertEquals([$id1], $ids); + } } diff --git a/tests/lib/Log/OwncloudTest.php b/tests/lib/Log/FileTest.php index e19063a83f5..4bd5b6f21ab 100644 --- a/tests/lib/Log/OwncloudTest.php +++ b/tests/lib/Log/FileTest.php @@ -17,15 +17,15 @@ namespace Test\Log; -use OC\Log\Owncloud; +use OC\Log\File; use Test\TestCase; /** - * Class OwncloudTest + * Class FileTest * * @group DB */ -class OwncloudTest extends TestCase +class FileTest extends TestCase { private $restore_logfile; private $restore_logdateformat; @@ -37,7 +37,7 @@ class OwncloudTest extends TestCase $this->restore_logdateformat = $config->getSystemValue('logdateformat'); $config->setSystemValue("logfile", $config->getSystemValue('datadirectory') . "/logtest"); - Owncloud::init(); + File::init(); } protected function tearDown() { $config = \OC::$server->getConfig(); @@ -51,7 +51,7 @@ class OwncloudTest extends TestCase } else { $config->deleteSystemValue("restore_logdateformat"); } - Owncloud::init(); + File::init(); parent::tearDown(); } @@ -62,7 +62,7 @@ class OwncloudTest extends TestCase # set format & write log line $config->setSystemValue('logdateformat', 'u'); - Owncloud::write('test', 'message', \OCP\Util::ERROR); + File::write('test', 'message', \OCP\Util::ERROR); # read log line $handle = @fopen($config->getSystemValue('logfile'), 'r'); diff --git a/tests/lib/Repair/RepairUnmergedSharesTest.php b/tests/lib/Repair/RepairUnmergedSharesTest.php new file mode 100644 index 00000000000..fe9b3e5b96f --- /dev/null +++ b/tests/lib/Repair/RepairUnmergedSharesTest.php @@ -0,0 +1,449 @@ +<?php +/** + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @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 Test\Repair; + + +use OC\Repair\RepairUnmergedShares; +use OC\Share\Constants; +use OCP\Migration\IOutput; +use OCP\Migration\IRepairStep; +use Test\TestCase; +use OC\Share20\DefaultShareProvider; + +/** + * Tests for repairing invalid shares + * + * @group DB + * + * @see \OC\Repair\RepairUnmergedShares + */ +class RepairUnmergedSharesTest extends TestCase { + + /** @var IRepairStep */ + private $repair; + + /** @var \OCP\IDBConnection */ + private $connection; + + protected function setUp() { + parent::setUp(); + + $config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor() + ->getMock(); + $config->expects($this->any()) + ->method('getSystemValue') + ->with('version') + ->will($this->returnValue('9.0.3.0')); + + $this->connection = \OC::$server->getDatabaseConnection(); + $this->deleteAllShares(); + + $user1 = $this->getMock('\OCP\IUser'); + $user1->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('user1')); + + $user2 = $this->getMock('\OCP\IUser'); + $user2->expects($this->any()) + ->method('getUID') + ->will($this->returnValue('user2')); + + $users = [$user1, $user2]; + + $groupManager = $this->getMock('\OCP\IGroupManager'); + $groupManager->expects($this->any()) + ->method('getUserGroupIds') + ->will($this->returnValueMap([ + // owner + [$user1, ['samegroup1', 'samegroup2']], + // recipient + [$user2, ['recipientgroup1', 'recipientgroup2']], + ])); + + $userManager = $this->getMock('\OCP\IUserManager'); + $userManager->expects($this->once()) + ->method('countUsers') + ->will($this->returnValue([2])); + $userManager->expects($this->once()) + ->method('callForAllUsers') + ->will($this->returnCallback(function(\Closure $closure) use ($users) { + foreach ($users as $user) { + $closure($user); + } + })); + + /** @var \OCP\IConfig $config */ + $this->repair = new RepairUnmergedShares($config, $this->connection, $userManager, $groupManager); + } + + protected function tearDown() { + $this->deleteAllShares(); + + parent::tearDown(); + } + + protected function deleteAllShares() { + $qb = $this->connection->getQueryBuilder(); + $qb->delete('share')->execute(); + } + + private function createShare($type, $sourceId, $recipient, $targetName, $permissions, $parentId = null) { + $qb = $this->connection->getQueryBuilder(); + $values = [ + 'share_type' => $qb->expr()->literal($type), + 'share_with' => $qb->expr()->literal($recipient), + 'uid_owner' => $qb->expr()->literal('user1'), + 'item_type' => $qb->expr()->literal('folder'), + 'item_source' => $qb->expr()->literal($sourceId), + 'item_target' => $qb->expr()->literal('/' . $sourceId), + 'file_source' => $qb->expr()->literal($sourceId), + 'file_target' => $qb->expr()->literal($targetName), + 'permissions' => $qb->expr()->literal($permissions), + 'stime' => $qb->expr()->literal(time()), + ]; + if ($parentId !== null) { + $values['parent'] = $qb->expr()->literal($parentId); + } + $qb->insert('share') + ->values($values) + ->execute(); + + return $this->connection->lastInsertId('*PREFIX*share'); + } + + private function getShareById($id) { + $query = $this->connection->getQueryBuilder(); + $results = $query + ->select('*') + ->from('share') + ->where($query->expr()->eq('id', $query->expr()->literal($id))) + ->execute() + ->fetchAll(); + + if (!empty($results)) { + return $results[0]; + } + return null; + } + + public function sharesDataProvider() { + /** + * For all these test cases we have the following situation: + * + * - "user1" is the share owner + * - "user2" is the recipient, and member of "recipientgroup1" and "recipientgroup2" + * - "user1" is member of "samegroup1", "samegroup2" for same group tests + */ + return [ + [ + // #0 legitimate share: + // - outsider shares with group1, group2 + // - recipient renamed, resulting in subshares + // - one subshare for each group share + // - targets of subshare all match + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test renamed', 31, 0], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test renamed', 31, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + ['/test', 31], + ['/test', 31], + // leave them alone + ['/test renamed', 31], + ['/test renamed', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #1 broken share: + // - outsider shares with group1, group2 + // - only one subshare for two group shares + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], + // child of the previous one + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 31, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + ['/test', 31], + ['/test', 31], + ['/test', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #2 bogus share + // - outsider shares with group1, group2 + // - one subshare for each group share + // - but the targets do not match when grouped + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 31, 0], + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (3)', 31, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + ['/test', 31], + ['/test', 31], + // reset to original name + ['/test', 31], + ['/test', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #3 bogus share + // - outsider shares with group1, group2 + // - one subshare for each group share + // - first subshare not renamed (as in real world scenario) + // - but the targets do not match when grouped + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 31], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test', 31, 0], + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 31, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + ['/test', 31], + ['/test', 31], + // reset to original name + ['/test', 31], + ['/test', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #4 bogus share: + // - outsider shares with group1, group2 + // - one subshare for each group share + // - non-matching targets + // - recipient deletes one duplicate (unshare from self, permissions 0) + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 15], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 0, 0], + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (3)', 15, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + ['/test', 31], + ['/test', 15], + // subshares repaired and permissions restored to the max allowed + ['/test', 31], + ['/test', 15], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #5 bogus share: + // - outsider shares with group1, group2 + // - one subshare for each group share + // - non-matching targets + // - recipient deletes ALL duplicates (unshare from self, permissions 0) + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 15], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 0, 0], + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (3)', 0, 1], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + ['/test', 31], + ['/test', 15], + // subshares target repaired but left "deleted" as it was the user's choice + ['/test', 0], + ['/test', 0], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #6 bogus share: + // - outsider shares with group1, group2 and also user2 + // - one subshare for each group share + // - one extra share entry for direct share to user2 + // - non-matching targets + // - user share has more permissions + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 1], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup2', '/test', 15], + // child of the previous ones + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (2)', 1, 0], + [DefaultShareProvider::SHARE_TYPE_USERGROUP, 123, 'user2', '/test (3)', 15, 1], + [Constants::SHARE_TYPE_USER, 123, 'user2', '/test (4)', 31], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (5)', 31], + ], + [ + ['/test', 1], + ['/test', 15], + // subshares repaired + ['/test', 1], + ['/test', 15], + ['/test', 31], + // leave unrelated alone + ['/test (5)', 31], + ] + ], + [ + // #7 bogus share: + // - outsider shares with group1 and also user2 + // - no subshare at all + // - one extra share entry for direct share to user2 + // - non-matching targets + // - user share has more permissions + [ + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 1], + [Constants::SHARE_TYPE_USER, 123, 'user2', '/test (2)', 31], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (5)', 31], + ], + [ + ['/test', 1], + // user share repaired + ['/test', 31], + // leave unrelated alone + ['/test (5)', 31], + ] + ], + [ + // #8 legitimate share with own group: + // - insider shares with both groups the user is already in + // - no subshares in this case + [ + [Constants::SHARE_TYPE_GROUP, 123, 'samegroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'samegroup2', '/test', 31], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + // leave all alone + ['/test', 31], + ['/test', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #9 legitimate shares: + // - group share with same group + // - group share with other group + // - user share where recipient renamed + // - user share where recipient did not rename + [ + [Constants::SHARE_TYPE_GROUP, 123, 'samegroup1', '/test', 31], + [Constants::SHARE_TYPE_GROUP, 123, 'recipientgroup1', '/test', 31], + [Constants::SHARE_TYPE_USER, 123, 'user3', '/test legit rename', 31], + [Constants::SHARE_TYPE_USER, 123, 'user4', '/test', 31], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + // leave all alone + ['/test', 31], + ['/test', 31], + ['/test legit rename', 31], + ['/test', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + [ + // #10 legitimate share: + // - outsider shares with group and user directly with different permissions + // - no subshares + // - same targets + [ + [Constants::SHARE_TYPE_GROUP, 123, 'samegroup1', '/test', 1], + [Constants::SHARE_TYPE_USER, 123, 'user3', '/test', 31], + // different unrelated share + [Constants::SHARE_TYPE_GROUP, 456, 'recipientgroup1', '/test (4)', 31], + ], + [ + // leave all alone + ['/test', 1], + ['/test', 31], + // leave unrelated alone + ['/test (4)', 31], + ] + ], + ]; + } + + /** + * Test merge shares from group shares + * + * @dataProvider sharesDataProvider + */ + public function testMergeGroupShares($shares, $expectedShares) { + $shareIds = []; + + foreach ($shares as $share) { + // if parent + if (isset($share[5])) { + // adjust to real id + $share[5] = $shareIds[$share[5]]; + } else { + $share[5] = null; + } + $shareIds[] = $this->createShare($share[0], $share[1], $share[2], $share[3], $share[4], $share[5]); + } + + /** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */ + $outputMock = $this->getMockBuilder('\OCP\Migration\IOutput') + ->disableOriginalConstructor() + ->getMock(); + + $this->repair->run($outputMock); + + foreach ($expectedShares as $index => $expectedShare) { + $share = $this->getShareById($shareIds[$index]); + $this->assertEquals($expectedShare[0], $share['file_target']); + $this->assertEquals($expectedShare[1], $share['permissions']); + } + } +} + diff --git a/version.php b/version.php index 62adec076bb..2c0c2029aca 100644 --- a/version.php +++ b/version.php @@ -25,7 +25,7 @@ // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version = array(9, 2, 0, 0); +$OC_Version = array(9, 2, 0, 1); // The human readable string $OC_VersionString = '11.0 alpha'; |