aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
m---------3rdparty0
-rw-r--r--apps/dav/l10n/es_MX.js12
-rw-r--r--apps/dav/l10n/es_MX.json12
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php4
-rw-r--r--apps/dav/lib/CalDAV/Calendar.php9
-rw-r--r--apps/dav/lib/DAV/CustomPropertiesBackend.php (renamed from apps/dav/lib/Files/CustomPropertiesBackend.php)24
-rw-r--r--apps/dav/lib/Server.php2
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarTest.php17
-rw-r--r--apps/dav/tests/unit/DAV/CustomPropertiesBackendTest.php170
-rw-r--r--apps/encryption/l10n/es_MX.js76
-rw-r--r--apps/encryption/l10n/es_MX.json76
-rw-r--r--apps/encryption/l10n/fi.js6
-rw-r--r--apps/encryption/l10n/fi.json6
-rw-r--r--apps/encryption/l10n/hu.js1
-rw-r--r--apps/encryption/l10n/hu.json1
-rw-r--r--apps/encryption/l10n/pt_BR.js31
-rw-r--r--apps/encryption/l10n/pt_BR.json31
-rw-r--r--apps/encryption/lib/KeyManager.php17
-rw-r--r--apps/encryption/tests/KeyManagerTest.php35
-rw-r--r--apps/federation/l10n/es_MX.js4
-rw-r--r--apps/federation/l10n/es_MX.json4
-rw-r--r--apps/federation/l10n/pt_BR.js2
-rw-r--r--apps/federation/l10n/pt_BR.json2
-rw-r--r--apps/files/js/file-upload.js12
-rw-r--r--apps/files/l10n/es_MX.js7
-rw-r--r--apps/files/l10n/es_MX.json7
-rw-r--r--apps/files/l10n/fi.js8
-rw-r--r--apps/files/l10n/fi.json8
-rw-r--r--apps/files/l10n/hu.js2
-rw-r--r--apps/files/l10n/hu.json2
-rw-r--r--apps/files/l10n/lb.js119
-rw-r--r--apps/files/l10n/lb.json119
-rw-r--r--apps/files/l10n/pt_BR.js26
-rw-r--r--apps/files/l10n/pt_BR.json26
-rw-r--r--apps/files/l10n/ru.js2
-rw-r--r--apps/files/l10n/ru.json2
-rw-r--r--apps/files_external/js/settings.js2
-rw-r--r--apps/files_external/l10n/es_MX.js98
-rw-r--r--apps/files_external/l10n/es_MX.json98
-rw-r--r--apps/files_external/l10n/fi.js20
-rw-r--r--apps/files_external/l10n/fi.json20
-rw-r--r--apps/files_external/l10n/pt_BR.js28
-rw-r--r--apps/files_external/l10n/pt_BR.json28
-rw-r--r--apps/files_external/l10n/tr.js6
-rw-r--r--apps/files_external/l10n/tr.json6
-rw-r--r--apps/files_external/lib/Controller/StoragesController.php2
-rw-r--r--apps/files_external/lib/Lib/Storage/Swift.php11
-rw-r--r--apps/files_sharing/l10n/es_MX.js97
-rw-r--r--apps/files_sharing/l10n/es_MX.json97
-rw-r--r--apps/files_sharing/l10n/fi.js1
-rw-r--r--apps/files_sharing/l10n/fi.json1
-rw-r--r--apps/files_sharing/l10n/pt_BR.js39
-rw-r--r--apps/files_sharing/l10n/pt_BR.json39
-rw-r--r--apps/files_sharing/l10n/ru.js8
-rw-r--r--apps/files_sharing/l10n/ru.json8
-rw-r--r--apps/files_trashbin/l10n/es_MX.js22
-rw-r--r--apps/files_trashbin/l10n/es_MX.json22
-rw-r--r--apps/files_trashbin/l10n/pt_BR.js6
-rw-r--r--apps/files_trashbin/l10n/pt_BR.json6
-rw-r--r--apps/files_trashbin/l10n/sr.js2
-rw-r--r--apps/files_trashbin/l10n/sr.json2
-rw-r--r--apps/files_versions/l10n/es_MX.js2
-rw-r--r--apps/files_versions/l10n/es_MX.json2
-rw-r--r--apps/files_versions/l10n/fi.js2
-rw-r--r--apps/files_versions/l10n/fi.json2
-rw-r--r--apps/files_versions/l10n/hu.js1
-rw-r--r--apps/files_versions/l10n/hu.json1
-rw-r--r--apps/files_versions/l10n/is.js2
-rw-r--r--apps/files_versions/l10n/is.json2
-rw-r--r--apps/files_versions/l10n/nl.js2
-rw-r--r--apps/files_versions/l10n/nl.json2
-rw-r--r--apps/files_versions/l10n/pt_BR.js2
-rw-r--r--apps/files_versions/l10n/pt_BR.json2
-rw-r--r--apps/files_versions/l10n/ru.js2
-rw-r--r--apps/files_versions/l10n/ru.json2
-rw-r--r--apps/files_versions/l10n/zh_CN.js4
-rw-r--r--apps/files_versions/l10n/zh_CN.json4
-rw-r--r--apps/sharebymail/l10n/es_MX.js24
-rw-r--r--apps/sharebymail/l10n/es_MX.json22
-rw-r--r--apps/systemtags/l10n/es_MX.js47
-rw-r--r--apps/systemtags/l10n/es_MX.json47
-rw-r--r--apps/theming/l10n/bg.js27
-rw-r--r--apps/theming/l10n/bg.json25
-rw-r--r--apps/theming/l10n/es_MX.js26
-rw-r--r--apps/theming/l10n/es_MX.json24
-rw-r--r--apps/twofactor_backupcodes/l10n/el.js21
-rw-r--r--apps/twofactor_backupcodes/l10n/el.json19
-rw-r--r--apps/twofactor_backupcodes/l10n/es_MX.js21
-rw-r--r--apps/twofactor_backupcodes/l10n/es_MX.json19
-rw-r--r--apps/updatenotification/l10n/es_MX.js25
-rw-r--r--apps/updatenotification/l10n/es_MX.json23
-rw-r--r--apps/updatenotification/l10n/fi.js23
-rw-r--r--apps/updatenotification/l10n/fi.json21
-rw-r--r--apps/updatenotification/l10n/ja.js2
-rw-r--r--apps/updatenotification/l10n/ja.json2
-rw-r--r--apps/user_ldap/l10n/de.js3
-rw-r--r--apps/user_ldap/l10n/de.json3
-rw-r--r--apps/user_ldap/l10n/de_DE.js3
-rw-r--r--apps/user_ldap/l10n/de_DE.json3
-rw-r--r--apps/user_ldap/l10n/es_MX.js179
-rw-r--r--apps/user_ldap/l10n/es_MX.json179
-rw-r--r--apps/user_ldap/l10n/fr.js3
-rw-r--r--apps/user_ldap/l10n/fr.json3
-rw-r--r--apps/user_ldap/l10n/ja.js3
-rw-r--r--apps/user_ldap/l10n/ja.json3
-rw-r--r--apps/user_ldap/l10n/pl.js9
-rw-r--r--apps/user_ldap/l10n/pl.json9
-rw-r--r--apps/user_ldap/l10n/pt_BR.js3
-rw-r--r--apps/user_ldap/l10n/pt_BR.json3
-rw-r--r--apps/user_ldap/l10n/ru.js3
-rw-r--r--apps/user_ldap/l10n/ru.json3
-rw-r--r--apps/user_ldap/l10n/tr.js7
-rw-r--r--apps/user_ldap/l10n/tr.json7
-rw-r--r--apps/workflowengine/l10n/es_MX.js8
-rw-r--r--apps/workflowengine/l10n/es_MX.json8
-rwxr-xr-xbuild/integration/run.sh2
-rw-r--r--build/mergejs.php1
-rw-r--r--core/Command/Db/ConvertType.php31
-rw-r--r--core/Controller/LostController.php39
-rw-r--r--core/css/apps.scss31
-rw-r--r--core/css/inputs.scss17
-rw-r--r--core/js/core.json2
-rw-r--r--core/js/shareconfigmodel.js1
-rw-r--r--core/js/sharedialoglinkshareview.js28
-rw-r--r--core/l10n/es_MX.js288
-rw-r--r--core/l10n/es_MX.json286
-rw-r--r--core/l10n/fi.js3
-rw-r--r--core/l10n/fi.json3
-rw-r--r--core/l10n/ja.js1
-rw-r--r--core/l10n/ja.json1
-rw-r--r--core/l10n/nl.js1
-rw-r--r--core/l10n/nl.json1
-rw-r--r--core/shipped.json1
-rw-r--r--core/vendor/.gitignore2
-rw-r--r--core/vendor/autosize/.bower.json11
-rw-r--r--core/vendor/autosize/dist/autosize.js262
-rw-r--r--core/vendor/autosize/dist/autosize.min.js6
-rw-r--r--core/vendor/core.js296
-rw-r--r--issue_template.md10
-rw-r--r--lib/l10n/es_MX.js188
-rw-r--r--lib/l10n/es_MX.json186
-rw-r--r--lib/l10n/ja.js1
-rw-r--r--lib/l10n/ja.json1
-rw-r--r--lib/l10n/pt_BR.js71
-rw-r--r--lib/l10n/pt_BR.json71
-rw-r--r--lib/l10n/tr.js12
-rw-r--r--lib/l10n/tr.json12
-rw-r--r--lib/private/AppFramework/Http/Request.php2
-rw-r--r--lib/private/AppFramework/Routing/RouteConfig.php8
-rw-r--r--lib/private/Encryption/Manager.php7
-rw-r--r--lib/private/Log/File.php4
-rw-r--r--lib/private/Security/Bruteforce/Throttler.php65
-rw-r--r--lib/private/Session/CryptoSessionData.php4
-rw-r--r--lib/private/Settings/Admin/Sharing.php1
-rw-r--r--lib/private/Settings/Manager.php1
-rw-r--r--lib/private/Template/JSCombiner.php2
-rw-r--r--lib/private/Template/JSConfigHelper.php4
-rw-r--r--lib/private/legacy/util.php4
-rw-r--r--settings/l10n/es_MX.js276
-rw-r--r--settings/l10n/es_MX.json276
-rw-r--r--settings/l10n/fi.js6
-rw-r--r--settings/l10n/fi.json6
-rw-r--r--settings/l10n/hu.js1
-rw-r--r--settings/l10n/hu.json1
-rw-r--r--settings/l10n/ja.js1
-rw-r--r--settings/l10n/ja.json1
-rw-r--r--settings/l10n/lb.js4
-rw-r--r--settings/l10n/lb.json4
-rw-r--r--settings/l10n/nl.js1
-rw-r--r--settings/l10n/nl.json1
-rw-r--r--settings/l10n/pt_BR.js1
-rw-r--r--settings/l10n/pt_BR.json1
-rw-r--r--settings/l10n/tr.js4
-rw-r--r--settings/l10n/tr.json4
-rw-r--r--settings/templates/admin/sharing.php4
-rw-r--r--settings/templates/users/main.php26
-rw-r--r--tests/Core/Controller/LostControllerTest.php85
-rw-r--r--tests/lib/AppFramework/Http/RequestTest.php5
-rw-r--r--tests/lib/Security/Bruteforce/ThrottlerTest.php90
-rw-r--r--tests/lib/Settings/Admin/SharingTest.php16
-rw-r--r--tests/lib/Settings/ManagerTest.php6
182 files changed, 4067 insertions, 1167 deletions
diff --git a/.gitignore b/.gitignore
index d8669fed074..6a8e6723376 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,7 +40,6 @@
/apps/files_external/tests/config.*.php
-
# ignore themes except the example and the README
/themes/*
!/themes/example
diff --git a/3rdparty b/3rdparty
-Subproject 18adb82bab030a0af41e66e421a90d123a21a8f
+Subproject 8403b2b6768fb5c5abd2a36dc337d16571349c5
diff --git a/apps/dav/l10n/es_MX.js b/apps/dav/l10n/es_MX.js
index 73868dfaa84..088ba8f1d3b 100644
--- a/apps/dav/l10n/es_MX.js
+++ b/apps/dav/l10n/es_MX.js
@@ -9,16 +9,16 @@ OC.L10N.register(
"You deleted calendar {calendar}" : "Usted borró el calendario {calendar}",
"{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}",
"You updated calendar {calendar}" : "Usted actualizó el calendario {calendar}",
- "{actor} shared calendar {calendar} with you" : "{actor} compartió el calendario {calendar} con usted",
- "You shared calendar {calendar} with {user}" : "Usted compartió el calendarió {calendar} con {user}",
+ "{actor} shared calendar {calendar} with you" : "{actor} ha compartido el calendario {calendar} con usted",
+ "You shared calendar {calendar} with {user}" : "Usted ha compartido el calendarió {calendar} con {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} compartió el calendario {calendar} con {user}",
- "{actor} unshared calendar {calendar} from you" : "{actor} dejó de compartir el calendario {calendar} con usted",
- "You unshared calendar {calendar} from {user}" : "Usted dejó de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ha dejado de compartir el calendario {calendar} con usted",
+ "You unshared calendar {calendar} from {user}" : "Usted ha dejado de compartir el calendario {calendar} con {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} dejó de compartir el calendario {calendar} con {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} dejó de compartir {el calendario calendar} con él mismo",
- "You shared calendar {calendar} with group {group}" : "Usted compartió el calendario {calendar} con el grupo {group}",
+ "You shared calendar {calendar} with group {group}" : "Usted ha compartido el calendario {calendar} con el grupo {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} compatió el calendario {calendar} con el grupo {group}",
- "You unshared calendar {calendar} from group {group}" : "Usted dejó de compartir el calendario {calendar} con el grupo{group}",
+ "You unshared calendar {calendar} from group {group}" : "Usted ha dejado de compartir el calendario {calendar} con el grupo {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendrio {calendar} con el grupo {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}",
"You created event {event} in calendar {calendar}" : "Usted creó el evento {event} en el calendario {calendar}",
diff --git a/apps/dav/l10n/es_MX.json b/apps/dav/l10n/es_MX.json
index 650b58eab3c..de0d6403fc4 100644
--- a/apps/dav/l10n/es_MX.json
+++ b/apps/dav/l10n/es_MX.json
@@ -7,16 +7,16 @@
"You deleted calendar {calendar}" : "Usted borró el calendario {calendar}",
"{actor} updated calendar {calendar}" : "{actor} actualizó el calendario {calendar}",
"You updated calendar {calendar}" : "Usted actualizó el calendario {calendar}",
- "{actor} shared calendar {calendar} with you" : "{actor} compartió el calendario {calendar} con usted",
- "You shared calendar {calendar} with {user}" : "Usted compartió el calendarió {calendar} con {user}",
+ "{actor} shared calendar {calendar} with you" : "{actor} ha compartido el calendario {calendar} con usted",
+ "You shared calendar {calendar} with {user}" : "Usted ha compartido el calendarió {calendar} con {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} compartió el calendario {calendar} con {user}",
- "{actor} unshared calendar {calendar} from you" : "{actor} dejó de compartir el calendario {calendar} con usted",
- "You unshared calendar {calendar} from {user}" : "Usted dejó de compartir el calendario {calendar} con {user}",
+ "{actor} unshared calendar {calendar} from you" : "{actor} ha dejado de compartir el calendario {calendar} con usted",
+ "You unshared calendar {calendar} from {user}" : "Usted ha dejado de compartir el calendario {calendar} con {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} dejó de compartir el calendario {calendar} con {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} dejó de compartir {el calendario calendar} con él mismo",
- "You shared calendar {calendar} with group {group}" : "Usted compartió el calendario {calendar} con el grupo {group}",
+ "You shared calendar {calendar} with group {group}" : "Usted ha compartido el calendario {calendar} con el grupo {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} compatió el calendario {calendar} con el grupo {group}",
- "You unshared calendar {calendar} from group {group}" : "Usted dejó de compartir el calendario {calendar} con el grupo{group}",
+ "You unshared calendar {calendar} from group {group}" : "Usted ha dejado de compartir el calendario {calendar} con el grupo {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} dejó de compartir el calendrio {calendar} con el grupo {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} creó el evento {event} en el calendario {calendar}",
"You created event {event} in calendar {calendar}" : "Usted creó el evento {event} en el calendario {calendar}",
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index 7976c1490ff..631593974e7 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -621,7 +621,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
}
$transp = '{' . Plugin::NS_CALDAV . '}schedule-calendar-transp';
if (isset($properties[$transp])) {
- $values['transparent'] = $properties[$transp]->getValue()==='transparent';
+ $values['transparent'] = (int) ($properties[$transp]->getValue() === 'transparent');
}
foreach($this->propertyMap as $xmlName=>$dbName) {
@@ -674,7 +674,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
switch ($propertyName) {
case '{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' :
$fieldName = 'transparent';
- $newValues[$fieldName] = $propertyValue->getValue() === 'transparent';
+ $newValues[$fieldName] = (int) ($propertyValue->getValue() === 'transparent');
break;
default :
$fieldName = $this->propertyMap[$propertyName];
diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php
index ef8e21be83a..d5e41c3c8c5 100644
--- a/apps/dav/lib/CalDAV/Calendar.php
+++ b/apps/dav/lib/CalDAV/Calendar.php
@@ -175,12 +175,11 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IShareable {
}
function propPatch(PropPatch $propPatch) {
- $mutations = $propPatch->getMutations();
- // If this is a shared calendar, the user can only change the enabled property, to hide it.
- if ($this->isShared() && (sizeof($mutations) !== 1 || !isset($mutations['{http://owncloud.org/ns}calendar-enabled']))) {
- throw new Forbidden();
+ // parent::propPatch will only update calendars table
+ // if calendar is shared, changes have to be made to the properties table
+ if (!$this->isShared()) {
+ parent::propPatch($propPatch);
}
- parent::propPatch($propPatch);
}
function getChild($name) {
diff --git a/apps/dav/lib/Files/CustomPropertiesBackend.php b/apps/dav/lib/DAV/CustomPropertiesBackend.php
index 43c02e7d6eb..ee0d0407015 100644
--- a/apps/dav/lib/Files/CustomPropertiesBackend.php
+++ b/apps/dav/lib/DAV/CustomPropertiesBackend.php
@@ -1,9 +1,11 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @copyright Copyright (c) 2017, Georg Ehrke <oc.list@georgehrke.com>
*
* @author Robin Appelman <robin@icewind.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@@ -21,7 +23,7 @@
*
*/
-namespace OCA\DAV\Files;
+namespace OCA\DAV\DAV;
use OCP\IDBConnection;
use OCP\IUser;
@@ -102,6 +104,26 @@ class CustomPropertiesBackend implements BackendInterface {
$this->ignoredProperties
);
+ // substr of calendars/ => path is inside the CalDAV component
+ // two '/' => this a calendar (no calendar-home nor calendar object)
+ if (substr($path, 0, 10) === 'calendars/' && substr_count($path, '/') === 2) {
+ $allRequestedProps = $propFind->getRequestedProperties();
+ $customPropertiesForShares = [
+ '{DAV:}displayname',
+ '{urn:ietf:params:xml:ns:caldav}calendar-description',
+ '{urn:ietf:params:xml:ns:caldav}calendar-timezone',
+ '{http://apple.com/ns/ical/}calendar-order',
+ '{http://apple.com/ns/ical/}calendar-color',
+ '{urn:ietf:params:xml:ns:caldav}schedule-calendar-transp',
+ ];
+
+ foreach ($customPropertiesForShares as $customPropertyForShares) {
+ if (in_array($customPropertyForShares, $allRequestedProps)) {
+ $requestedProps[] = $customPropertyForShares;
+ }
+ }
+ }
+
if (empty($requestedProps)) {
return;
}
diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php
index 031bc1d3d81..a5c1379eb7e 100644
--- a/apps/dav/lib/Server.php
+++ b/apps/dav/lib/Server.php
@@ -42,9 +42,9 @@ use OCA\DAV\Connector\Sabre\FilesPlugin;
use OCA\DAV\Connector\Sabre\FilesReportPlugin;
use OCA\DAV\Connector\Sabre\SharesPlugin;
use OCA\DAV\DAV\PublicAuth;
+use OCA\DAV\DAV\CustomPropertiesBackend;
use OCA\DAV\Connector\Sabre\QuotaPlugin;
use OCA\DAV\Files\BrowserErrorPagePlugin;
-use OCA\DAV\Files\CustomPropertiesBackend;
use OCA\DAV\SystemTag\SystemTagPlugin;
use OCP\IRequest;
use OCP\SabrePluginEvent;
diff --git a/apps/dav/tests/unit/CalDAV/CalendarTest.php b/apps/dav/tests/unit/CalDAV/CalendarTest.php
index 70a072f04de..112b2c598df 100644
--- a/apps/dav/tests/unit/CalDAV/CalendarTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalendarTest.php
@@ -109,7 +109,7 @@ class CalendarTest extends TestCase {
['user1', 'user2', [], true],
['user1', 'user2', [
'{http://owncloud.org/ns}calendar-enabled' => true,
- ], false],
+ ], true],
['user1', 'user2', [
'{DAV:}displayname' => true,
], true],
@@ -134,7 +134,7 @@ class CalendarTest extends TestCase {
/**
* @dataProvider dataPropPatch
*/
- public function testPropPatch($ownerPrincipal, $principalUri, $mutations, $throws) {
+ public function testPropPatch($ownerPrincipal, $principalUri, $mutations, $shared) {
/** @var \PHPUnit_Framework_MockObject_MockObject | CalDavBackend $backend */
$backend = $this->getMockBuilder(CalDavBackend::class)->disableOriginalConstructor()->getMock();
$calendarInfo = [
@@ -144,14 +144,15 @@ class CalendarTest extends TestCase {
'uri' => 'default'
];
$c = new Calendar($backend, $calendarInfo, $this->l10n);
+ $propPatch = new PropPatch($mutations);
- if ($throws) {
- $this->setExpectedException('\Sabre\DAV\Exception\Forbidden');
- }
- $c->propPatch(new PropPatch($mutations));
- if (!$throws) {
- $this->assertTrue(true);
+ if (!$shared) {
+ $backend->expects($this->once())
+ ->method('updateCalendar')
+ ->with(666, $propPatch);
}
+ $c->propPatch($propPatch);
+ $this->assertTrue(true);
}
/**
diff --git a/apps/dav/tests/unit/DAV/CustomPropertiesBackendTest.php b/apps/dav/tests/unit/DAV/CustomPropertiesBackendTest.php
new file mode 100644
index 00000000000..780324abaa6
--- /dev/null
+++ b/apps/dav/tests/unit/DAV/CustomPropertiesBackendTest.php
@@ -0,0 +1,170 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017, Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.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\DAV\Tests\DAV;
+
+use OCA\DAV\DAV\CustomPropertiesBackend;
+use OCP\IDBConnection;
+use OCP\IUser;
+use Sabre\DAV\PropFind;
+use Sabre\DAV\PropPatch;
+use Sabre\DAV\Tree;
+use Test\TestCase;
+
+class CustomPropertiesBackendTest extends TestCase {
+
+ /** @var Tree | \PHPUnit_Framework_MockObject_MockObject */
+ private $tree;
+
+ /** @var IDBConnection | \PHPUnit_Framework_MockObject_MockObject */
+ private $dbConnection;
+
+ /** @var IUser | \PHPUnit_Framework_MockObject_MockObject */
+ private $user;
+
+ /** @var CustomPropertiesBackend | \PHPUnit_Framework_MockObject_MockObject */
+ private $backend;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->tree = $this->createMock(Tree::class);
+ $this->dbConnection = $this->createMock(IDBConnection::class);
+ $this->user = $this->createMock(IUser::class);
+ $this->user->expects($this->once())
+ ->method('getUID')
+ ->with()
+ ->will($this->returnValue('dummy_user_42'));
+
+ $this->backend = new CustomPropertiesBackend($this->tree,
+ $this->dbConnection, $this->user);
+ }
+
+ public function testPropFindNoDbCalls() {
+ $propFind = $this->createMock(PropFind::class);
+ $propFind->expects($this->at(0))
+ ->method('get404Properties')
+ ->with()
+ ->will($this->returnValue([
+ '{http://owncloud.org/ns}permissions',
+ '{http://owncloud.org/ns}downloadURL',
+ '{http://owncloud.org/ns}dDC',
+ '{http://owncloud.org/ns}size',
+ ]));
+
+ $this->dbConnection->expects($this->never())
+ ->method($this->anything());
+
+ $this->backend->propFind('foo_bar_path_1337_0', $propFind);
+ }
+
+ public function testPropFindCalendarCall() {
+ $propFind = $this->createMock(PropFind::class);
+ $propFind->expects($this->at(0))
+ ->method('get404Properties')
+ ->with()
+ ->will($this->returnValue([
+ '{DAV:}getcontentlength',
+ '{DAV:}getcontenttype',
+ '{DAV:}getetag',
+ '{abc}def'
+ ]));
+
+ $propFind->expects($this->at(1))
+ ->method('getRequestedProperties')
+ ->with()
+ ->will($this->returnValue([
+ '{DAV:}getcontentlength',
+ '{DAV:}getcontenttype',
+ '{DAV:}getetag',
+ '{DAV:}displayname',
+ '{urn:ietf:params:xml:ns:caldav}calendar-description',
+ '{urn:ietf:params:xml:ns:caldav}calendar-timezone',
+ '{abc}def'
+ ]));
+
+ $statement = $this->createMock('\Doctrine\DBAL\Driver\Statement');
+ $this->dbConnection->expects($this->once())
+ ->method('executeQuery')
+ ->with('SELECT * FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ? AND `propertyname` in (?)',
+ ['dummy_user_42', 'calendars/foo/bar_path_1337_0', [
+ 3 => '{abc}def',
+ 4 => '{DAV:}displayname',
+ 5 => '{urn:ietf:params:xml:ns:caldav}calendar-description',
+ 6 => '{urn:ietf:params:xml:ns:caldav}calendar-timezone']],
+ [null, null, 102])
+ ->will($this->returnValue($statement));
+
+ $this->backend->propFind('calendars/foo/bar_path_1337_0', $propFind);
+ }
+
+ /**
+ * @dataProvider propPatchProvider
+ */
+ public function testPropPatch($path, $propPatch) {
+ $propPatch->expects($this->once())
+ ->method('handleRemaining');
+
+ $this->backend->propPatch($path, $propPatch);
+ }
+
+ public function propPatchProvider() {
+ $propPatchMock = $this->createMock(PropPatch::class);
+ return [
+ ['foo_bar_path_1337', $propPatchMock],
+ ];
+ }
+
+ public function testDelete() {
+ $statement = $this->createMock('\Doctrine\DBAL\Driver\Statement');
+ $statement->expects($this->at(0))
+ ->method('execute')
+ ->with(['dummy_user_42', 'foo_bar_path_1337']);
+ $statement->expects($this->at(1))
+ ->method('closeCursor')
+ ->with();
+
+ $this->dbConnection->expects($this->at(0))
+ ->method('prepare')
+ ->with('DELETE FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ?')
+ ->will($this->returnValue($statement));
+
+ $this->backend->delete('foo_bar_path_1337');
+ }
+
+ public function testMove() {
+ $statement = $this->createMock('\Doctrine\DBAL\Driver\Statement');
+ $statement->expects($this->at(0))
+ ->method('execute')
+ ->with(['bar_foo_path_7331', 'dummy_user_42', 'foo_bar_path_1337']);
+ $statement->expects($this->at(1))
+ ->method('closeCursor')
+ ->with();
+
+ $this->dbConnection->expects($this->at(0))
+ ->method('prepare')
+ ->with('UPDATE `*PREFIX*properties` SET `propertypath` = ? WHERE `userid` = ? AND `propertypath` = ?')
+ ->will($this->returnValue($statement));
+
+ $this->backend->move('foo_bar_path_1337', 'bar_foo_path_7331');
+ }
+}
diff --git a/apps/encryption/l10n/es_MX.js b/apps/encryption/l10n/es_MX.js
index ad94a24e114..7fd15231c79 100644
--- a/apps/encryption/l10n/es_MX.js
+++ b/apps/encryption/l10n/es_MX.js
@@ -1,28 +1,64 @@
OC.L10N.register(
"encryption",
{
- "Recovery key successfully enabled" : "Se ha habilitado la recuperación de archivos",
- "Could not enable recovery key. Please check your recovery key password!" : "No se pudo habilitar la clave de recuperación. Por favor compruebe su contraseña.",
- "Recovery key successfully disabled" : "Clave de recuperación deshabilitada",
- "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
- "Password successfully changed." : "Su contraseña ha sido cambiada",
- "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
- "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.",
- "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 aplicación 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 aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
- "The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
+ "Missing recovery key password" : "Contraseña de llave de recuperacion faltante",
+ "Please repeat the recovery key password" : "Favor de reingresar la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "Las contraseñas de la llave de recuperación no coinciden",
+ "Recovery key successfully enabled" : "Llave de recuperación habilitada exitosamente",
+ "Could not enable recovery key. Please check your recovery key password!" : "No fue posible habilitar la llave de recuperación. ¡Favor de comprobar la contraseña de su llave de recuperación!",
+ "Recovery key successfully disabled" : "Llave de recuperación deshabilitada exitosamente",
+ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la llave de recuperación. ¡Favor de comprobar la contraseña de la llave de recuperación!",
+ "Missing parameters" : "Parámetros faltantes",
+ "Please provide the old recovery password" : "Favor de proporcionar su contraseña de recuperación anterior",
+ "Please provide a new recovery password" : "Favor de proporcionar una nueva contraseña de recuperación",
+ "Please repeat the new recovery password" : "Favor de reingresar la nueva contraseña de recuperación",
+ "Password successfully changed." : "La contraseña ha sido cambiada exitosamente",
+ "Could not change the password. Maybe the old password was not correct." : "No fue posible cambiar la contraseña. Favor de verificar que contraseña anterior sea correcta.",
+ "Recovery Key disabled" : "Llave de recuperación deshabilitada",
+ "Recovery Key enabled" : "Llave de recuperación habilitada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "No fue posible habilitar la llave de recuperación, favor de intentarlo de nuevo o contacte a su administrador",
+ "Could not update the private key password." : "No fue posible actualizar la contraseña de la llave privada.",
+ "The old password was not correct, please try again." : "La contraseña anterior no es correcta, favor de intentar de nuevo. ",
+ "The current log-in password was not correct, please try again." : "La contraseña actual para iniciar sesión fue incorrecta, favor de volverlo a intentar. ",
+ "Private key password successfully updated." : "Contraseña de llave privada actualizada exitosamente.",
+ "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" : "Usted necesita migar sus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la nueva. Favor de ejecutar 'occ encryption:migrate' o contacte a su adminstrador",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "La llave de encripción privada es inválida para la aplicación de encripción. Favor de actualizar la contraseña de su llave privada en sus ajustes personales para recuperar el acceso a sus archivos encriptados. ",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "La aplicación de encripción está habilitada, pero sus llaves no han sido inicializadas. Favor de cerrar sesión e iniciar sesión de nuevo. ",
+ "Encryption app is enabled and ready" : "La aplicación de encripción se cuentra habilitada y lista",
+ "Bad Signature" : "Firma equivocada",
+ "Missing Signature" : "Firma faltante",
+ "one-time password for server-side-encryption" : "Contraseña de una-sola-vez para la encripción del lado del servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible decriptar este archivo, posiblemente sea un archivo compartido. Favor de solicitar al dueño del archivo que lo vuelva a compartir con usted.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible leer este archivo, posiblemente sea un archivo compatido. Favor de solicitar al dueño que vuelva a compartirlo con usted. ",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha habilitado la encripción del lado del servidor. Sus archivos fueron encriptados usando la contrasela '%s'\n\nFavor de iniciar sesión en la interface web, vata a la sección \"módulo de encripción básica\" de sus ajustes personales y actualice su contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y su contraseña de inicio de sesión actual. \n",
+ "The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
"Cheers!" : "¡Saludos!",
- "Recovery key password" : "Contraseña de clave de recuperación",
- "Change recovery key password:" : "Cambiar la contraseña de la clave de recuperación",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola, <br><br>el administrador ha habilitado la encripción del lado del servidor. Sus archivos fueron encriptados usando la contraseña <strong>%s</strong>.<br><br> Favor de iniciar sesisón en la interface web, vaya a la sección \"módulo de encripción básica\" de sus ajustes personales y actualice su contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y su contraseña de inicio de sesión actual. <br><br>",
+ "Default encryption module" : "Módulo de encripción predeterminado",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción esta habilitada pero sus llaves no han sido inicializadas, favor de salir y volver a entrar a la sesion",
+ "Encrypt the home storage" : "Encriptar el almacenamiento de inicio",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Habilitar esta opción encripta todos los archivos almacenados en el almacenamiento principal, de otro modo, sólo los archivos en el almacenamiento externo serán encriptados",
+ "Enable recovery key" : "Habilitar llave de recuperación",
+ "Disable recovery key" : "Deshabilitar llave de recuperación",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La llave de recuperación es una llave de encripción que se usa para encriptar archivos. Permite la recuperación de los archivos del usuario si este olvida su contraseña. ",
+ "Recovery key password" : "Contraseña de llave de recuperación",
+ "Repeat recovery key password" : "Repetir la contraseña de la llave de recuperación",
+ "Change recovery key password:" : "Cambiar la contraseña de la llave de recuperación:",
+ "Old recovery key password" : "Anterior contraseña de llave de recuperación",
+ "New recovery key password" : "Nueva contraseña de llave de recuperación",
+ "Repeat new recovery key password" : "Reingresar la nueva contraseña de llave de recuperación",
"Change Password" : "Cambiar contraseña",
- " 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 archivos.",
- "Old log-in password" : "Contraseña de acceso antigua",
- "Current log-in password" : "Contraseña de acceso actual",
- "Update Private Key Password" : "Actualizar Contraseña de Clave Privada",
+ "Basic encryption module" : "Módulo de encripción básica",
+ "Your private key password no longer matches your log-in password." : "Su contraseña de llave privada ya no corresónde con su contraseña de inicio de sesión. ",
+ "Set your old private key password to your current log-in password:" : "Establezca su contraseña de llave privada a su contraseña actual de inicio de seisón:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su contraseña anterior le puede pedir a su administrador que recupere sus archivos.",
+ "Old log-in password" : "Contraseña anterior",
+ "Current log-in password" : "Contraseña actual",
+ "Update Private Key Password" : "Actualizar Contraseña de Llave Privada",
"Enable password recovery:" : "Habilitar la recuperación de contraseña:",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus archivos cifrados en caso de pérdida de contraseña",
- "Enabled" : "Habilitar",
- "Disabled" : "Deshabilitado"
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus archivos encriptados en caso de perder la contraseña",
+ "Enabled" : "Habilitado",
+ "Disabled" : "Deshabilitado",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción está habilitada pero tus llaves no han sido establecidas, favor de cerrar la sesión y volver a iniciarla."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/es_MX.json b/apps/encryption/l10n/es_MX.json
index 5a64c7c8777..073485adfbf 100644
--- a/apps/encryption/l10n/es_MX.json
+++ b/apps/encryption/l10n/es_MX.json
@@ -1,26 +1,62 @@
{ "translations": {
- "Recovery key successfully enabled" : "Se ha habilitado la recuperación de archivos",
- "Could not enable recovery key. Please check your recovery key password!" : "No se pudo habilitar la clave de recuperación. Por favor compruebe su contraseña.",
- "Recovery key successfully disabled" : "Clave de recuperación deshabilitada",
- "Could not disable recovery key. Please check your recovery key password!" : "No se pudo deshabilitar la clave de recuperación. Por favor compruebe su contraseña!",
- "Password successfully changed." : "Su contraseña ha sido cambiada",
- "Could not change the password. Maybe the old password was not correct." : "No se pudo cambiar la contraseña. Compruebe que la contraseña actual sea correcta.",
- "Private key password successfully updated." : "Contraseña de clave privada actualizada con éxito.",
- "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 aplicación 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 aplicación de crifrado está habilitada pero tus claves no han sido inicializadas, por favor, cierra la sesión y vuelva a iniciarla de nuevo.",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.",
- "The share will expire on %s." : "El objeto dejará de ser compartido el %s.",
+ "Missing recovery key password" : "Contraseña de llave de recuperacion faltante",
+ "Please repeat the recovery key password" : "Favor de reingresar la contraseña de recuperación",
+ "Repeated recovery key password does not match the provided recovery key password" : "Las contraseñas de la llave de recuperación no coinciden",
+ "Recovery key successfully enabled" : "Llave de recuperación habilitada exitosamente",
+ "Could not enable recovery key. Please check your recovery key password!" : "No fue posible habilitar la llave de recuperación. ¡Favor de comprobar la contraseña de su llave de recuperación!",
+ "Recovery key successfully disabled" : "Llave de recuperación deshabilitada exitosamente",
+ "Could not disable recovery key. Please check your recovery key password!" : "No fue posible deshabilitar la llave de recuperación. ¡Favor de comprobar la contraseña de la llave de recuperación!",
+ "Missing parameters" : "Parámetros faltantes",
+ "Please provide the old recovery password" : "Favor de proporcionar su contraseña de recuperación anterior",
+ "Please provide a new recovery password" : "Favor de proporcionar una nueva contraseña de recuperación",
+ "Please repeat the new recovery password" : "Favor de reingresar la nueva contraseña de recuperación",
+ "Password successfully changed." : "La contraseña ha sido cambiada exitosamente",
+ "Could not change the password. Maybe the old password was not correct." : "No fue posible cambiar la contraseña. Favor de verificar que contraseña anterior sea correcta.",
+ "Recovery Key disabled" : "Llave de recuperación deshabilitada",
+ "Recovery Key enabled" : "Llave de recuperación habilitada",
+ "Could not enable the recovery key, please try again or contact your administrator" : "No fue posible habilitar la llave de recuperación, favor de intentarlo de nuevo o contacte a su administrador",
+ "Could not update the private key password." : "No fue posible actualizar la contraseña de la llave privada.",
+ "The old password was not correct, please try again." : "La contraseña anterior no es correcta, favor de intentar de nuevo. ",
+ "The current log-in password was not correct, please try again." : "La contraseña actual para iniciar sesión fue incorrecta, favor de volverlo a intentar. ",
+ "Private key password successfully updated." : "Contraseña de llave privada actualizada exitosamente.",
+ "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" : "Usted necesita migar sus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la nueva. Favor de ejecutar 'occ encryption:migrate' o contacte a su adminstrador",
+ "Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "La llave de encripción privada es inválida para la aplicación de encripción. Favor de actualizar la contraseña de su llave privada en sus ajustes personales para recuperar el acceso a sus archivos encriptados. ",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "La aplicación de encripción está habilitada, pero sus llaves no han sido inicializadas. Favor de cerrar sesión e iniciar sesión de nuevo. ",
+ "Encryption app is enabled and ready" : "La aplicación de encripción se cuentra habilitada y lista",
+ "Bad Signature" : "Firma equivocada",
+ "Missing Signature" : "Firma faltante",
+ "one-time password for server-side-encryption" : "Contraseña de una-sola-vez para la encripción del lado del servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible decriptar este archivo, posiblemente sea un archivo compartido. Favor de solicitar al dueño del archivo que lo vuelva a compartir con usted.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es posible leer este archivo, posiblemente sea un archivo compatido. Favor de solicitar al dueño que vuelva a compartirlo con usted. ",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha habilitado la encripción del lado del servidor. Sus archivos fueron encriptados usando la contrasela '%s'\n\nFavor de iniciar sesión en la interface web, vata a la sección \"módulo de encripción básica\" de sus ajustes personales y actualice su contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y su contraseña de inicio de sesión actual. \n",
+ "The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
"Cheers!" : "¡Saludos!",
- "Recovery key password" : "Contraseña de clave de recuperación",
- "Change recovery key password:" : "Cambiar la contraseña de la clave de recuperación",
+ "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola, <br><br>el administrador ha habilitado la encripción del lado del servidor. Sus archivos fueron encriptados usando la contraseña <strong>%s</strong>.<br><br> Favor de iniciar sesisón en la interface web, vaya a la sección \"módulo de encripción básica\" de sus ajustes personales y actualice su contraseña de encripción ingresando esta contraseña en el campo \"contraseña de inicio de sesión anterior\" y su contraseña de inicio de sesión actual. <br><br>",
+ "Default encryption module" : "Módulo de encripción predeterminado",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción esta habilitada pero sus llaves no han sido inicializadas, favor de salir y volver a entrar a la sesion",
+ "Encrypt the home storage" : "Encriptar el almacenamiento de inicio",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Habilitar esta opción encripta todos los archivos almacenados en el almacenamiento principal, de otro modo, sólo los archivos en el almacenamiento externo serán encriptados",
+ "Enable recovery key" : "Habilitar llave de recuperación",
+ "Disable recovery key" : "Deshabilitar llave de recuperación",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La llave de recuperación es una llave de encripción que se usa para encriptar archivos. Permite la recuperación de los archivos del usuario si este olvida su contraseña. ",
+ "Recovery key password" : "Contraseña de llave de recuperación",
+ "Repeat recovery key password" : "Repetir la contraseña de la llave de recuperación",
+ "Change recovery key password:" : "Cambiar la contraseña de la llave de recuperación:",
+ "Old recovery key password" : "Anterior contraseña de llave de recuperación",
+ "New recovery key password" : "Nueva contraseña de llave de recuperación",
+ "Repeat new recovery key password" : "Reingresar la nueva contraseña de llave de recuperación",
"Change Password" : "Cambiar contraseña",
- " 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 archivos.",
- "Old log-in password" : "Contraseña de acceso antigua",
- "Current log-in password" : "Contraseña de acceso actual",
- "Update Private Key Password" : "Actualizar Contraseña de Clave Privada",
+ "Basic encryption module" : "Módulo de encripción básica",
+ "Your private key password no longer matches your log-in password." : "Su contraseña de llave privada ya no corresónde con su contraseña de inicio de sesión. ",
+ "Set your old private key password to your current log-in password:" : "Establezca su contraseña de llave privada a su contraseña actual de inicio de seisón:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Si no recuerda su contraseña anterior le puede pedir a su administrador que recupere sus archivos.",
+ "Old log-in password" : "Contraseña anterior",
+ "Current log-in password" : "Contraseña actual",
+ "Update Private Key Password" : "Actualizar Contraseña de Llave Privada",
"Enable password recovery:" : "Habilitar la recuperación de contraseña:",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus archivos cifrados en caso de pérdida de contraseña",
- "Enabled" : "Habilitar",
- "Disabled" : "Deshabilitado"
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus archivos encriptados en caso de perder la contraseña",
+ "Enabled" : "Habilitado",
+ "Disabled" : "Deshabilitado",
+ "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La aplicación de encripción está habilitada pero tus llaves no han sido establecidas, favor de cerrar la sesión y volver a iniciarla."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/fi.js b/apps/encryption/l10n/fi.js
index b926b08fc7a..10229e7706e 100644
--- a/apps/encryption/l10n/fi.js
+++ b/apps/encryption/l10n/fi.js
@@ -22,6 +22,9 @@ 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 salauskirjoitetut 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 aktivoitu 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",
@@ -29,6 +32,8 @@ OC.L10N.register(
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tiedostoa ei voi lukea, se on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto uudelleen kanssasi.",
"The share will expire on %s." : "Jakaminen päättyy %s.",
"Cheers!" : "Kiitos!",
+ "Default encryption module" : "Oletus salausmoduuli",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on aktivoitu, mutta avaimia ei ole alustettu, kirjaudu uudelleen sisään",
"Encrypt the home storage" : "Salaa oma kotitila",
"Enable recovery key" : "Ota palautusavain käyttöön",
"Disable recovery key" : "Poista palautusavain käytöstä",
@@ -40,6 +45,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" : "Perus salausmoduuli",
"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.json b/apps/encryption/l10n/fi.json
index 96cc9ea8b6f..14b3b95fc24 100644
--- a/apps/encryption/l10n/fi.json
+++ b/apps/encryption/l10n/fi.json
@@ -20,6 +20,9 @@
"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 salauskirjoitetut 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 aktivoitu 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",
@@ -27,6 +30,8 @@
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tiedostoa ei voi lukea, se on luultavasti jaettu tiedosto. Pyydä tiedoston omistajaa jakamaan tiedosto uudelleen kanssasi.",
"The share will expire on %s." : "Jakaminen päättyy %s.",
"Cheers!" : "Kiitos!",
+ "Default encryption module" : "Oletus salausmoduuli",
+ "Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Salaussovellus on aktivoitu, mutta avaimia ei ole alustettu, kirjaudu uudelleen sisään",
"Encrypt the home storage" : "Salaa oma kotitila",
"Enable recovery key" : "Ota palautusavain käyttöön",
"Disable recovery key" : "Poista palautusavain käytöstä",
@@ -38,6 +43,7 @@
"New recovery key password" : "Uusi salausavaimen salasana",
"Repeat new recovery key password" : "Toista uusi salausavaimen salasana",
"Change Password" : "Vaihda salasana",
+ "Basic encryption module" : "Perus salausmoduuli",
"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/hu.js b/apps/encryption/l10n/hu.js
index 9782ec439cc..0b93142bfd4 100644
--- a/apps/encryption/l10n/hu.js
+++ b/apps/encryption/l10n/hu.js
@@ -23,6 +23,7 @@ OC.L10N.register(
"Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.",
"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" : "Migrálni kell a titkosítási kulcsaidat a rég titkosításról (ownCloud <= 8.0) az újra. Kérlek futtasd az 'occ encryption:migrate' parancsot, vagy lépj kapcsolatba az adminisztrátorral",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "A titkosító alkalmazás privát kulcsa érvénytelen. A titkosított fájljaidhoz való hozzáféréshez frissítsd a privát kulcsod jelszavát a személyes beállításoknál.",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "A fájlok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérlek, hogy jelentkezz ki, és lépj be újra!",
"Encryption app is enabled and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
"Bad Signature" : "Rossz aláírás",
"Missing Signature" : "Hiányzó aláírás",
diff --git a/apps/encryption/l10n/hu.json b/apps/encryption/l10n/hu.json
index 54d55df0679..7f6814fa533 100644
--- a/apps/encryption/l10n/hu.json
+++ b/apps/encryption/l10n/hu.json
@@ -21,6 +21,7 @@
"Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.",
"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" : "Migrálni kell a titkosítási kulcsaidat a rég titkosításról (ownCloud <= 8.0) az újra. Kérlek futtasd az 'occ encryption:migrate' parancsot, vagy lépj kapcsolatba az adminisztrátorral",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "A titkosító alkalmazás privát kulcsa érvénytelen. A titkosított fájljaidhoz való hozzáféréshez frissítsd a privát kulcsod jelszavát a személyes beállításoknál.",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "A fájlok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérlek, hogy jelentkezz ki, és lépj be újra!",
"Encryption app is enabled and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
"Bad Signature" : "Rossz aláírás",
"Missing Signature" : "Hiányzó aláírás",
diff --git a/apps/encryption/l10n/pt_BR.js b/apps/encryption/l10n/pt_BR.js
index 1e87489c2e5..f8bb3026a8c 100644
--- a/apps/encryption/l10n/pt_BR.js
+++ b/apps/encryption/l10n/pt_BR.js
@@ -1,35 +1,36 @@
OC.L10N.register(
"encryption",
{
- "Missing recovery key password" : "Senha da chave de recuperação em falta",
+ "Missing recovery key password" : "Está faltando a senha da chave de recuperação",
"Please repeat the recovery key password" : "Por favor, repita a senha da chave de recuperação",
- "Repeated recovery key password does not match the provided recovery key password" : "A senha repetidas da chave de valorização não corresponde a senha da chave de recuperação prevista",
+ "Repeated recovery key password does not match the provided recovery key password" : "A senha repetida da chave de recuperação não corresponde a senha da chave de recuperação fornecida",
"Recovery key successfully enabled" : "Recuperação de chave habilitada com sucesso",
"Could not enable recovery key. Please check your recovery key password!" : "Impossível habilitar recuperação de chave. Por favor, verifique sua senha para recuperação de chave!",
"Recovery key successfully disabled" : "Recuperação de chave desabilitada com sucesso",
"Could not disable recovery key. Please check your recovery key password!" : "Impossível desabilitar recuperação de chave. Por favor, verifique sua senha para recuperação de chave!",
- "Missing parameters" : "Parâmetros que faltam",
+ "Missing parameters" : "Parâmetros faltantes",
"Please provide the old recovery password" : "Por favor, forneça a antiga senha de recuperação",
"Please provide a new recovery password" : "Por favor, forneça a nova senha de recuperação",
"Please repeat the new recovery password" : "Por favor, repita a nova senha de recuperação",
"Password successfully changed." : "Senha alterada com sucesso.",
- "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.",
+ "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estivesse correta.",
"Recovery Key disabled" : "Recuperação de chave desativada",
"Recovery Key enabled" : "Recuperação de chave ativada",
"Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a recuperação de chave. Tente novamente ou entre em contato com seu administrador",
"Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
- "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente novamente.",
- "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.",
+ "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor tente novamente.",
+ "The current log-in password was not correct, please try again." : "A senha atual de acesso 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 privada inválida para o aplicativo de criptografia. Atualize a senha da sua chave privada nas configurações pessoais para recuperar o acesso aos seus arquivos criptografados.",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "O aplicativo de criptografia está habilitada mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.",
"Encryption app is enabled and ready" : "O aplicativo de criptografia está ativo 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",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Por favor, peça ao dono do arquivo para compartilhá-lo com você.",
- "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.",
- "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n",
+ "Missing Signature" : "Assinatura faltante",
+ "one-time password for server-side-encryption" : "senha de uso único para criptografia do lado do servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptografado pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para compartilhá-lo com você.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhar o arquivo com você.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
"Cheers!" : "Saudações!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Olá,<br><br>o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor, faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.<br><br>",
@@ -39,9 +40,9 @@ OC.L10N.register(
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção de criptografia para todos os arquivos armazenados no armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados",
"Enable recovery key" : "Habilitar recuperação de chave",
"Disable recovery key" : "Dasabilitar chave de recuperação",
- "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar arquivos. Ela permite a recuperação de arquivos de um usuário esquecer sua senha.",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de criptografia extra que é utilizada para criptografar arquivos. Ela permite a recuperação de arquivos se um usuário esquecer a senha.",
"Recovery key password" : "Senha da chave de recuperação",
- "Repeat recovery key password" : "Repita senha da chave de recuperação",
+ "Repeat recovery key password" : "Repita a senha da chave de recuperação",
"Change recovery key password:" : "Mudar a senha da chave de recuperação:",
"Old recovery key password" : "Senha da chave de recuperação antiga",
"New recovery key password" : "Nova senha da chave de recuperação",
@@ -52,12 +53,12 @@ OC.L10N.register(
"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.",
"Old log-in password" : "Senha antiga de login",
- "Current log-in password" : "Senha de login atual",
+ "Current log-in password" : "Senha atual de login",
"Update Private Key Password" : "Atualizar senha de chave privada",
"Enable password recovery:" : "Habilitar recuperação de senha:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ativar essa opção vai permitir que você obtenha novamente acesso aos seus arquivos criptografados em caso de perda de senha",
"Enabled" : "Habilitado",
"Disabled" : "Desabilitado",
- "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 but your keys are not initialized, please log-out and log-in again" : "O aplicativo criptografia está ativado, mas as chaves não estão inicializadas. Por favor saia e entre novamente"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/encryption/l10n/pt_BR.json b/apps/encryption/l10n/pt_BR.json
index 730b65f9a73..c03061ae608 100644
--- a/apps/encryption/l10n/pt_BR.json
+++ b/apps/encryption/l10n/pt_BR.json
@@ -1,33 +1,34 @@
{ "translations": {
- "Missing recovery key password" : "Senha da chave de recuperação em falta",
+ "Missing recovery key password" : "Está faltando a senha da chave de recuperação",
"Please repeat the recovery key password" : "Por favor, repita a senha da chave de recuperação",
- "Repeated recovery key password does not match the provided recovery key password" : "A senha repetidas da chave de valorização não corresponde a senha da chave de recuperação prevista",
+ "Repeated recovery key password does not match the provided recovery key password" : "A senha repetida da chave de recuperação não corresponde a senha da chave de recuperação fornecida",
"Recovery key successfully enabled" : "Recuperação de chave habilitada com sucesso",
"Could not enable recovery key. Please check your recovery key password!" : "Impossível habilitar recuperação de chave. Por favor, verifique sua senha para recuperação de chave!",
"Recovery key successfully disabled" : "Recuperação de chave desabilitada com sucesso",
"Could not disable recovery key. Please check your recovery key password!" : "Impossível desabilitar recuperação de chave. Por favor, verifique sua senha para recuperação de chave!",
- "Missing parameters" : "Parâmetros que faltam",
+ "Missing parameters" : "Parâmetros faltantes",
"Please provide the old recovery password" : "Por favor, forneça a antiga senha de recuperação",
"Please provide a new recovery password" : "Por favor, forneça a nova senha de recuperação",
"Please repeat the new recovery password" : "Por favor, repita a nova senha de recuperação",
"Password successfully changed." : "Senha alterada com sucesso.",
- "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estava correta.",
+ "Could not change the password. Maybe the old password was not correct." : "Não foi possível alterar a senha. Talvez a senha antiga não estivesse correta.",
"Recovery Key disabled" : "Recuperação de chave desativada",
"Recovery Key enabled" : "Recuperação de chave ativada",
"Could not enable the recovery key, please try again or contact your administrator" : "Não foi possível ativar a recuperação de chave. Tente novamente ou entre em contato com seu administrador",
"Could not update the private key password." : "Não foi possível atualizar a senha da chave privada.",
- "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor, tente novamente.",
- "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.",
+ "The old password was not correct, please try again." : "A senha antiga não estava correta, por favor tente novamente.",
+ "The current log-in password was not correct, please try again." : "A senha atual de acesso 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 privada inválida para o aplicativo de criptografia. Atualize a senha da sua chave privada nas configurações pessoais para recuperar o acesso aos seus arquivos criptografados.",
+ "Encryption App is enabled, but your keys are not initialized. Please log-out and log-in again." : "O aplicativo de criptografia está habilitada mas suas chaves não foram inicializadas. Por favor, saia e entre novamente.",
"Encryption app is enabled and ready" : "O aplicativo de criptografia está ativo 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",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Por favor, peça ao dono do arquivo para compartilhá-lo com você.",
- "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo, provavelmente este é um arquivo compartilhado. Por favor, pergunte o dono do arquivo para recompartilhar o arquivo com você.",
- "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.\n\n",
+ "Missing Signature" : "Assinatura faltante",
+ "one-time password for server-side-encryption" : "senha de uso único para criptografia do lado do servidor",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Este arquivo não pode ser decriptografado pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para compartilhá-lo com você.",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Não é possível ler este arquivo pois provavelmente é um arquivo compartilhado. Por favor, peça ao dono do arquivo para recompartilhar o arquivo com você.",
+ "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Olá,\n\nO administrador habilitou a criptografia do lado do servidor. Os seus arquivos foram criptografados usando a senha '%s'.\n\nPor favor faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua senha de login atual.\n\n",
"The share will expire on %s." : "O compartilhamento irá expirar em %s.",
"Cheers!" : "Saudações!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Olá,<br><br>o administrador habilitou criptografia-lado-servidor. Os seus arquivos foram criptografados usando a senha <strong>%s</strong>.<br><br>Por favor, faça o login para a interface da Web, vá para a seção 'módulo de criptografia básico' das suas definições pessoais e atualize sua senha de criptografia, inserindo esta senha no campo 'senha antiga de log-in' e sua atual senha-de-login.<br><br>",
@@ -37,9 +38,9 @@
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ativar essa opção de criptografia para todos os arquivos armazenados no armazenamento principal, caso contrário, apenas arquivos no armazenamento externo serão criptografados",
"Enable recovery key" : "Habilitar recuperação de chave",
"Disable recovery key" : "Dasabilitar chave de recuperação",
- "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de encriptação extra que é utilizada para encriptar arquivos. Ela permite a recuperação de arquivos de um usuário esquecer sua senha.",
+ "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "A chave de recuperação é uma chave de criptografia extra que é utilizada para criptografar arquivos. Ela permite a recuperação de arquivos se um usuário esquecer a senha.",
"Recovery key password" : "Senha da chave de recuperação",
- "Repeat recovery key password" : "Repita senha da chave de recuperação",
+ "Repeat recovery key password" : "Repita a senha da chave de recuperação",
"Change recovery key password:" : "Mudar a senha da chave de recuperação:",
"Old recovery key password" : "Senha da chave de recuperação antiga",
"New recovery key password" : "Nova senha da chave de recuperação",
@@ -50,12 +51,12 @@
"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.",
"Old log-in password" : "Senha antiga de login",
- "Current log-in password" : "Senha de login atual",
+ "Current log-in password" : "Senha atual de login",
"Update Private Key Password" : "Atualizar senha de chave privada",
"Enable password recovery:" : "Habilitar recuperação de senha:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ativar essa opção vai permitir que você obtenha novamente acesso aos seus arquivos criptografados em caso de perda de senha",
"Enabled" : "Habilitado",
"Disabled" : "Desabilitado",
- "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 but your keys are not initialized, please log-out and log-in again" : "O aplicativo criptografia está ativado, mas as chaves não estão inicializadas. Por favor saia e entre novamente"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/encryption/lib/KeyManager.php b/apps/encryption/lib/KeyManager.php
index caae154b2d3..32872ae99b3 100644
--- a/apps/encryption/lib/KeyManager.php
+++ b/apps/encryption/lib/KeyManager.php
@@ -399,6 +399,10 @@ class KeyManager {
* @return string
*/
public function getFileKey($path, $uid) {
+ if ($uid === '') {
+ $uid = null;
+ }
+ $publicAccess = is_null($uid);
$encryptedFileKey = $this->keyStorage->getFileKey($path, $this->fileKeyId, Encryption::ID);
if (empty($encryptedFileKey)) {
@@ -407,9 +411,16 @@ class KeyManager {
if ($this->util->isMasterKeyEnabled()) {
$uid = $this->getMasterKeyId();
- }
-
- if (is_null($uid)) {
+ $shareKey = $this->getShareKey($path, $uid);
+ if ($publicAccess) {
+ $privateKey = $this->getSystemPrivateKey($uid);
+ $privateKey = $this->crypt->decryptPrivateKey($privateKey, $this->getMasterKeyPassword(), $uid);
+ } else {
+ // when logged in, the master key is already decrypted in the session
+ $privateKey = $this->session->getPrivateKey();
+ }
+ } else if ($publicAccess) {
+ // use public share key for public links
$uid = $this->getPublicShareKeyId();
$shareKey = $this->getShareKey($path, $uid);
$privateKey = $this->keyStorage->getSystemUserKey($this->publicShareKeyId . '.privateKey', Encryption::ID);
diff --git a/apps/encryption/tests/KeyManagerTest.php b/apps/encryption/tests/KeyManagerTest.php
index 40def135816..a8441427a2c 100644
--- a/apps/encryption/tests/KeyManagerTest.php
+++ b/apps/encryption/tests/KeyManagerTest.php
@@ -349,6 +349,19 @@ class KeyManagerTest extends TestCase {
$this->assertTrue($this->instance->getEncryptedFileKey('/'));
}
+ public function dataTestGetFileKey() {
+ return [
+ ['user1', false, 'privateKey', true],
+ ['user1', false, false, ''],
+ ['user1', true, 'privateKey', true],
+ ['user1', true, false, ''],
+ [null, false, 'privateKey', true],
+ [null, false, false, ''],
+ [null, true, 'privateKey', true],
+ [null, true, false, '']
+ ];
+ }
+
/**
* @dataProvider dataTestGetFileKey
*
@@ -363,6 +376,10 @@ class KeyManagerTest extends TestCase {
if ($isMasterKeyEnabled) {
$expectedUid = 'masterKeyId';
+ $this->configMock->expects($this->any())->method('getSystemValue')->with('secret')
+ ->willReturn('password');
+ } else if (!$uid) {
+ $expectedUid = 'systemKeyId';
} else {
$expectedUid = $uid;
}
@@ -379,6 +396,9 @@ class KeyManagerTest extends TestCase {
->with($path, $expectedUid . '.shareKey', 'OC_DEFAULT_MODULE')
->willReturn(true);
+ $this->utilMock->expects($this->any())->method('isMasterKeyEnabled')
+ ->willReturn($isMasterKeyEnabled);
+
if (is_null($uid)) {
$this->keyStorageMock->expects($this->once())
->method('getSystemUserKey')
@@ -389,8 +409,6 @@ class KeyManagerTest extends TestCase {
} else {
$this->keyStorageMock->expects($this->never())
->method('getSystemUserKey');
- $this->utilMock->expects($this->once())->method('isMasterKeyEnabled')
- ->willReturn($isMasterKeyEnabled);
$this->sessionMock->expects($this->once())->method('getPrivateKey')->willReturn($privateKey);
}
@@ -409,19 +427,6 @@ class KeyManagerTest extends TestCase {
}
- public function dataTestGetFileKey() {
- return [
- ['user1', false, 'privateKey', true],
- ['user1', false, false, ''],
- ['user1', true, 'privateKey', true],
- ['user1', true, false, ''],
- ['', false, 'privateKey', true],
- ['', false, false, ''],
- ['', true, 'privateKey', true],
- ['', true, false, '']
- ];
- }
-
public function testDeletePrivateKey() {
$this->keyStorageMock->expects($this->once())
->method('deleteUserKey')
diff --git a/apps/federation/l10n/es_MX.js b/apps/federation/l10n/es_MX.js
index affca49c911..d14f9937f73 100644
--- a/apps/federation/l10n/es_MX.js
+++ b/apps/federation/l10n/es_MX.js
@@ -4,10 +4,10 @@ OC.L10N.register(
"Added to the list of trusted servers" : "Agregado a la lista de servidores de confianza",
"Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.",
"No server to federate with found" : "No se encontraron servidores para integrar a la federación",
- "Could not add server" : "No se pudo agregar el servidor",
+ "Could not add server" : "No fue posible agregar el servidor",
"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 le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.",
- "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el recurso compartido federado",
+ "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado",
"Trusted servers" : "Servidores de confianza",
"+ Add trusted server" : "+ Agregar servidor de confianza",
"Trusted server" : "Servidor de confianza",
diff --git a/apps/federation/l10n/es_MX.json b/apps/federation/l10n/es_MX.json
index 15c3ab8e038..386e85dcffd 100644
--- a/apps/federation/l10n/es_MX.json
+++ b/apps/federation/l10n/es_MX.json
@@ -2,10 +2,10 @@
"Added to the list of trusted servers" : "Agregado a la lista de servidores de confianza",
"Server is already in the list of trusted servers." : "El servidor ya se encuentra en la lista de servidores de confianza.",
"No server to federate with found" : "No se encontraron servidores para integrar a la federación",
- "Could not add server" : "No se pudo agregar el servidor",
+ "Could not add server" : "No fue posible agregar el servidor",
"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 le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se usará para auto-completar usuarios externos en el recurso compartido federado.",
- "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el recurso compartido federado",
+ "Add server automatically once a federated share was created successfully" : "Agregar el servidor automáticamente una vez que se genere exitosamente el elemento compartido federado",
"Trusted servers" : "Servidores de confianza",
"+ Add trusted server" : "+ Agregar servidor de confianza",
"Trusted server" : "Servidor de confianza",
diff --git a/apps/federation/l10n/pt_BR.js b/apps/federation/l10n/pt_BR.js
index d46445b85f1..7684b1cb009 100644
--- a/apps/federation/l10n/pt_BR.js
+++ b/apps/federation/l10n/pt_BR.js
@@ -5,7 +5,7 @@ OC.L10N.register(
"Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.",
"No server to federate with found" : "Nenhum servidor para associar com o encontrado",
"Could not add server" : "Não foi possível adicionar servidor",
- "Federation" : "Associação",
+ "Federation" : "Federaçã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",
diff --git a/apps/federation/l10n/pt_BR.json b/apps/federation/l10n/pt_BR.json
index dc4f2eadb92..c5887d8f6a3 100644
--- a/apps/federation/l10n/pt_BR.json
+++ b/apps/federation/l10n/pt_BR.json
@@ -3,7 +3,7 @@
"Server is already in the list of trusted servers." : "O servidor já está na lista de servidores confiáveis.",
"No server to federate with found" : "Nenhum servidor para associar com o encontrado",
"Could not add server" : "Não foi possível adicionar servidor",
- "Federation" : "Associação",
+ "Federation" : "Federaçã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",
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index ad4d03a1bdb..bfb88bc5d20 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -960,6 +960,7 @@ OC.Uploader.prototype = _.extend({
var bufferSize = 20;
var buffer = [];
var bufferIndex = 0;
+ var bufferIndex2 = 0;
var bufferTotal = 0;
for(var i = 0; i < bufferSize;i++){
buffer[i] = 0;
@@ -1005,8 +1006,17 @@ OC.Uploader.prototype = _.extend({
bufferTotal = bufferTotal - (buffer[bufferIndex]) + remainingSeconds;
buffer[bufferIndex] = remainingSeconds; //buffer to make it smoother
bufferIndex = (bufferIndex + 1) % bufferSize;
+ bufferIndex2++;
}
- var smoothRemainingSeconds = (bufferTotal / bufferSize); //seconds
+ var smoothRemainingSeconds;
+ if (bufferIndex2 > 0 && bufferIndex2 < 20) {
+ smoothRemainingSeconds = bufferTotal / bufferIndex2;
+ } else if (bufferSize > 0) {
+ smoothRemainingSeconds = bufferTotal / bufferSize;
+ } else {
+ smoothRemainingSeconds = 1;
+ }
+
var h = moment.duration(smoothRemainingSeconds, "seconds").humanize();
$('#uploadprogressbar .label .mobile').text(h);
$('#uploadprogressbar .label .desktop').text(h);
diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js
index b4d7c160ed7..1a2cef949aa 100644
--- a/apps/files/l10n/es_MX.js
+++ b/apps/files/l10n/es_MX.js
@@ -7,13 +7,13 @@ OC.L10N.register(
"All files" : "Todos los archivos",
"Recent" : "Reciente",
"File could not be found" : "No fue posible encontrar el archivo",
- "Home" : "Particular",
+ "Home" : "Inicio",
"Close" : "Cerrar",
"Favorites" : "Favoritos",
"Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
"Upload cancelled." : "Carga cancelada.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "No cuenta con suficiente espacio disponible, usted se encuentra cargando {size1} pero solo cuenta con {size2} disponible",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "No cuenta con suficiente espacio disponible, usted se encuentra cargando {size1} pero sólo cuenta con {size2} disponible",
"Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
"Not enough free space" : "No cuenta con suficiente espacio disponible",
"Uploading..." : "Cargando...",
@@ -102,7 +102,7 @@ OC.L10N.register(
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
"A new file or folder has been <strong>created</strong>" : "Un nuevo archivo ha sido <strong>creado</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Un nuevo archivo ha sido <strong>borrado</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite las notificación de la creación y cambios a sus <strong>archivos favoritos</strong> <em>(solo flujo)</em>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite las notificación de la creación y cambios a sus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
"A new file or folder has been <strong>restored</strong>" : "Un nuevo archivo ha sido <strong>restaurado</strong>",
"Upload (max. %s)" : "Cargar (max. %s)",
"File handling" : "Administración de archivos",
@@ -126,6 +126,7 @@ OC.L10N.register(
"Shared with you" : "Compartido con usted",
"Shared with others" : "Compartido con otros",
"Shared by link" : "Compartido por liga",
+ "Tags" : "Etiquetas",
"Deleted files" : "Archivos borrados",
"Text file" : "Archivo de texto",
"New text file.txt" : "Nuevo ArchivoDeTexto.txt",
diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json
index 921886af132..2784c500f87 100644
--- a/apps/files/l10n/es_MX.json
+++ b/apps/files/l10n/es_MX.json
@@ -5,13 +5,13 @@
"All files" : "Todos los archivos",
"Recent" : "Reciente",
"File could not be found" : "No fue posible encontrar el archivo",
- "Home" : "Particular",
+ "Home" : "Inicio",
"Close" : "Cerrar",
"Favorites" : "Favoritos",
"Could not create folder \"{dir}\"" : "No fue posible crear la carpeta \"{dir}\"",
"Upload cancelled." : "Carga cancelada.",
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No fue posible cargar {filename} ya que es una carpeta o tiene un tamaño de 0 bytes",
- "Not enough free space, you are uploading {size1} but only {size2} is left" : "No cuenta con suficiente espacio disponible, usted se encuentra cargando {size1} pero solo cuenta con {size2} disponible",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "No cuenta con suficiente espacio disponible, usted se encuentra cargando {size1} pero sólo cuenta con {size2} disponible",
"Target folder \"{dir}\" does not exist any more" : "La carpeta destino \"{dir}\" ya no existe",
"Not enough free space" : "No cuenta con suficiente espacio disponible",
"Uploading..." : "Cargando...",
@@ -100,7 +100,7 @@
"A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado </strong> o <strong>renombrado</strong>",
"A new file or folder has been <strong>created</strong>" : "Un nuevo archivo ha sido <strong>creado</strong>",
"A new file or folder has been <strong>deleted</strong>" : "Un nuevo archivo ha sido <strong>borrado</strong>",
- "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite las notificación de la creación y cambios a sus <strong>archivos favoritos</strong> <em>(solo flujo)</em>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limite las notificación de la creación y cambios a sus <strong>archivos favoritos</strong> <em>(sólo flujo)</em>",
"A new file or folder has been <strong>restored</strong>" : "Un nuevo archivo ha sido <strong>restaurado</strong>",
"Upload (max. %s)" : "Cargar (max. %s)",
"File handling" : "Administración de archivos",
@@ -124,6 +124,7 @@
"Shared with you" : "Compartido con usted",
"Shared with others" : "Compartido con otros",
"Shared by link" : "Compartido por liga",
+ "Tags" : "Etiquetas",
"Deleted files" : "Archivos borrados",
"Text file" : "Archivo de texto",
"New text file.txt" : "Nuevo ArchivoDeTexto.txt",
diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js
index 17e907f2786..dc5628be4b5 100644
--- a/apps/files/l10n/fi.js
+++ b/apps/files/l10n/fi.js
@@ -27,6 +27,7 @@ OC.L10N.register(
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
+ "Could not load info for file \"{file}\"" : "Ei voida ladata tiedoston \"{file}\" tietoja",
"Files" : "Tiedostot",
"Details" : "Tiedot",
"Select" : "Valitse",
@@ -57,6 +58,7 @@ OC.L10N.register(
"New" : "Uusi",
"\"{name}\" is an invalid file name." : "\"{name}\" on virheellinen tiedostonimi.",
"File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" ei ole sallittu tiedostomuoto",
"Storage of {owner} is full, files can not be updated or synced anymore!" : "Käyttäjän {owner} tallennustila on täynnä, tiedostoja ei voi enää päivittää tai synkronoida!",
"Your storage is full, files can not be updated or synced anymore!" : "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Käyttäjän {owner} tallennustila on melkein täynnä ({usedSpacePercent} %)",
@@ -77,6 +79,12 @@ OC.L10N.register(
"You added {file} to your favorites" : "Lisäsit tiedoston {file} suosikkeihin",
"You removed {file} from your favorites" : "Poistit tiedoston {file} suosikeista",
"File changes" : "Tiedostomuutokset",
+ "Created by {user}" : "Tekijänä {user}",
+ "Changed by {user}" : "Muokkaajana {user}",
+ "Deleted by {user}" : "Poistanut {user}",
+ "Restored by {user}" : "Palauttanut {user}",
+ "Renamed by {user}" : "Uudelleennimennyt {user}",
+ "Moved by {user}" : "Siirtänyt {user}",
"You created {file}" : "Loit tiedoston {file}",
"{user} created {file}" : "{user} loi tiedoston {file}",
"{file} was created in a public folder" : "Tiedosto {file} luotiin julkisessa kansiossa",
diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json
index 94596d6b91b..ce49d222cbc 100644
--- a/apps/files/l10n/fi.json
+++ b/apps/files/l10n/fi.json
@@ -25,6 +25,7 @@
"Delete" : "Poista",
"Disconnect storage" : "Katkaise yhteys tallennustilaan",
"Unshare" : "Peru jakaminen",
+ "Could not load info for file \"{file}\"" : "Ei voida ladata tiedoston \"{file}\" tietoja",
"Files" : "Tiedostot",
"Details" : "Tiedot",
"Select" : "Valitse",
@@ -55,6 +56,7 @@
"New" : "Uusi",
"\"{name}\" is an invalid file name." : "\"{name}\" on virheellinen tiedostonimi.",
"File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" ei ole sallittu tiedostomuoto",
"Storage of {owner} is full, files can not be updated or synced anymore!" : "Käyttäjän {owner} tallennustila on täynnä, tiedostoja ei voi enää päivittää tai synkronoida!",
"Your storage is full, files can not be updated or synced anymore!" : "Tallennustila on loppu, tiedostoja ei voi enää päivittää tai synkronoida!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Käyttäjän {owner} tallennustila on melkein täynnä ({usedSpacePercent} %)",
@@ -75,6 +77,12 @@
"You added {file} to your favorites" : "Lisäsit tiedoston {file} suosikkeihin",
"You removed {file} from your favorites" : "Poistit tiedoston {file} suosikeista",
"File changes" : "Tiedostomuutokset",
+ "Created by {user}" : "Tekijänä {user}",
+ "Changed by {user}" : "Muokkaajana {user}",
+ "Deleted by {user}" : "Poistanut {user}",
+ "Restored by {user}" : "Palauttanut {user}",
+ "Renamed by {user}" : "Uudelleennimennyt {user}",
+ "Moved by {user}" : "Siirtänyt {user}",
"You created {file}" : "Loit tiedoston {file}",
"{user} created {file}" : "{user} loi tiedoston {file}",
"{file} was created in a public folder" : "Tiedosto {file} luotiin julkisessa kansiossa",
diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js
index 7d93ff59ec4..9c8ad41159a 100644
--- a/apps/files/l10n/hu.js
+++ b/apps/files/l10n/hu.js
@@ -45,6 +45,7 @@ OC.L10N.register(
"Could not create file \"{file}\" because it already exists" : "{file} fájl nem létrehozható, mert már létezik",
"Could not create folder \"{dir}\" because it already exists" : "{dir} mappa nem hozható létre, mert már létezik",
"Error deleting file \"{fileName}\"." : "Hiba történt {fileName} fájl törlése közben.",
+ "No search results in other folders for {tag}{filter}{endtag}" : "Ehhez nincsenek keresési eredmények más mappákban: {tag}{filter}{endtag}",
"Name" : "Név",
"Size" : "Méret",
"Modified" : "Módosítva",
@@ -57,6 +58,7 @@ OC.L10N.register(
"New" : "Új",
"\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.",
"File name cannot be empty." : "A fájlnév nem lehet semmi.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" nem engedélyetett fájltípus",
"Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!",
"Your storage is full, files can not be updated or synced anymore!" : "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "A {owner} felhasználó tárolója majdnem betelt ({usedSpacePercent}%)",
diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json
index 06cefdf3a4e..edad01f94bf 100644
--- a/apps/files/l10n/hu.json
+++ b/apps/files/l10n/hu.json
@@ -43,6 +43,7 @@
"Could not create file \"{file}\" because it already exists" : "{file} fájl nem létrehozható, mert már létezik",
"Could not create folder \"{dir}\" because it already exists" : "{dir} mappa nem hozható létre, mert már létezik",
"Error deleting file \"{fileName}\"." : "Hiba történt {fileName} fájl törlése közben.",
+ "No search results in other folders for {tag}{filter}{endtag}" : "Ehhez nincsenek keresési eredmények más mappákban: {tag}{filter}{endtag}",
"Name" : "Név",
"Size" : "Méret",
"Modified" : "Módosítva",
@@ -55,6 +56,7 @@
"New" : "Új",
"\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.",
"File name cannot be empty." : "A fájlnév nem lehet semmi.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" nem engedélyetett fájltípus",
"Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!",
"Your storage is full, files can not be updated or synced anymore!" : "A tároló tele van, a fájlok nem frissíthetőek vagy szinkronizálhatóak a jövőben.",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "A {owner} felhasználó tárolója majdnem betelt ({usedSpacePercent}%)",
diff --git a/apps/files/l10n/lb.js b/apps/files/l10n/lb.js
index 9fa3a0fdfaa..06669c9f94d 100644
--- a/apps/files/l10n/lb.js
+++ b/apps/files/l10n/lb.js
@@ -1,50 +1,143 @@
OC.L10N.register(
"files",
{
+ "Storage is temporarily not available" : "Späicherplaatz temporär net erreeschbar",
+ "Storage invalid" : "Späicherplatz net gülteg",
"Unknown error" : "Et ass en onbekannte Fehler opgetrueden",
- "There is no error, the file uploaded with success" : "Keen Feeler, Datei ass komplett ropgelueden ginn",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Déi ropgelueden Datei ass méi grouss wei d'MAX_FILE_SIZE Eegenschaft déi an der HTML form uginn ass",
- "The uploaded file was only partially uploaded" : "Déi ropgelueden Datei ass nëmmen hallef ropgelueden ginn",
- "No file was uploaded" : "Et ass kee Fichier ropgeluede ginn",
- "Missing a temporary folder" : "Et feelt en temporären Dossier",
- "Failed to write to disk" : "Konnt net op den Disk schreiwen",
- "Files" : "Dateien",
"All files" : "All d'Fichieren",
+ "Recent" : "Rezent",
+ "File could not be found" : "Datei konnt net fonnt ginn",
"Home" : "Doheem",
"Close" : "Zoumaachen",
"Favorites" : "Favoriten",
+ "Could not create folder \"{dir}\"" : "Dossier \"{dir}\" konnt net erstallt ginn",
"Upload cancelled." : "Upload ofgebrach.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename} konnt eropgelueden ginn, well et een Dossier ass oder d'Datei 0 Bytes huet",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Net genuch Späicher, du probéiers {size1} eropzelueden, et ass awer nëmmen méi {size2} fräi",
+ "Target folder \"{dir}\" does not exist any more" : "Den Dossier \"{dir}\" existéiert net méi",
+ "Not enough free space" : "Nët genuch Späicherplaatz",
"Uploading..." : "Lueden erop...",
"..." : "...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} vun {totalSize} ({bitrate})",
+ "Actions" : "Aktiounen",
"Download" : "Download",
"Rename" : "Ëmbenennen",
+ "Move" : "Verschieben",
+ "Target folder" : "Ziel Dossier",
"Delete" : "Läschen",
+ "Disconnect storage" : "Net connectéierten Späicher",
"Unshare" : "Net méi deelen",
+ "Could not load info for file \"{file}\"" : "Et konnten keng Informatiounen zu {file} gelueden ginn",
+ "Files" : "Dateien",
"Details" : "Detailer",
"Select" : "Auswielen",
+ "Pending" : "Ausstoend",
+ "Unable to determine date" : "Datum kann net festgestallt ginn",
"This operation is forbidden" : "Dës Operatioun ass verbueden.",
"This directory is unavailable, please check the logs or contact the administrator" : "Dësen Dossier ass net disponibel, w.e.g. kontrolléiert d'Logs oder kontaktéiert den Administrateur",
+ "Could not move \"{file}\", target exists" : "\"{file}\" konnt beweegt ginn. Et existéiert do schonn.",
+ "Could not move \"{file}\"" : "\"{file}\" konnt verreckelt ginn",
+ "{newName} already exists" : "{newName} gett et schon",
+ "Could not rename \"{fileName}\", it does not exist any more" : "\"{fileName}\" konnt embenannt ginn, well et net méi existéiert",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" konnt net gesat ginn, well dësen schon am Dossier \"{dir}\" existéiert. Wiel weg. een aaneren",
+ "Could not rename \"{fileName}\"" : "\"{fileName}\" konnt net embenannt ginn",
+ "Could not create file \"{file}\"" : "\"{file}\" konnt net erstallt ginn",
+ "Could not create file \"{file}\" because it already exists" : "\"{file}\" konnt net erstallt ginn, well des schon existéiert",
+ "Could not create folder \"{dir}\" because it already exists" : "Den Dossier \"{dir}\" konnt net erstallt ginn, well desen schon existéiert",
+ "Error deleting file \"{fileName}\"." : "Fehler beim läschen vun \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "Keng Resultater an aneren Dossieren fir {tag}{filter}{endtag} fonnt",
"Name" : "Numm",
"Size" : "Gréisst",
"Modified" : "Geännert",
+ "_%n folder_::_%n folders_" : ["¦%n Dossier","¦%n Dossieren"],
+ "_%n file_::_%n files_" : ["¦%n Datei","¦%n Dateien"],
+ "{dirs} and {files}" : "{dirs} an {files}",
+ "_including %n hidden_::_including %n hidden_" : ["Beinhaltet ¦%n verstoppte Saach","Beinhaltet ¦%n verstoppte Saachen"],
+ "You don’t have permission to upload or create files here" : "Du hues net genuch Rechter hei Dokumenter eropzelueden oder ze erstellen",
+ "_Uploading %n file_::_Uploading %n files_" : ["Am Gaangen ¦%n Datei eropzelueden","Am Gaangen ¦%n Dateien eropzelueden"],
"New" : "Nei",
- "\"{name}\" is an invalid file name." : "\"{Numm}\" ass een ongültegen Numm fir e Fichier.",
- "File name cannot be empty." : "Den Numm vum Fichier kann net eidel sinn.",
+ "\"{name}\" is an invalid file name." : "\"{name}\" ass een ongültegen Numm",
+ "File name cannot be empty." : "D'Datei kann net eidel sinn",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" ass een ongültegen Typ vun Datei",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Späicher vum {owener} ass voll, et kennen keng Dokumenter méi eropgelueden oder synchroniséiert ginn!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Däin Späicher ass voll, et kennen keng Dateien méi eropgeluden oder synchrosniséiert ginn",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Späicher vum {owner} ass baal voll ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Däin Späicher ass baal voll ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["entsprecht","entspriechen"],
+ "View in folder" : "Kuk am Dossier ",
+ "Path" : "Pad",
+ "_%n byte_::_%n bytes_" : ["¦%n Byte","¦%n Byte"],
+ "Favorited" : "Favoriséiert",
+ "Favorite" : "Favorit",
+ "Copy local link" : "Lokale Link kopéiert",
"Folder" : "Dossier",
"New folder" : "Neien Dossier",
"Upload" : "Eroplueden",
- "Upload (max. %s)" : "Eroplueden (max. %s)",
+ "An error occurred while trying to update the tags" : "Beim Updaten vun den Tags ass e Fehler entstaanen",
+ "Added to favorites" : "Zu den Favoriten dobaigesat",
+ "Removed from favorites" : "Vun den Favoriten eweggeholl",
+ "You added {file} to your favorites" : "Du hues {file} zu denger Favortiten dobäigesat",
+ "You removed {file} from your favorites" : "Du hues {file} aus dengen Favortiten geläscht",
+ "File changes" : "Datei Ännerungen",
+ "Created by {user}" : "Erstallt vum {user}",
+ "Changed by {user}" : "Geännert vum {user}",
+ "Deleted by {user}" : "Geläscht vum {user}",
+ "Restored by {user}" : "Erem hier gestallt vum {user}",
+ "Renamed by {user}" : "Embenannt vum {user}",
+ "Moved by {user}" : "Beweegt vum {user}",
+ "You created {file}" : "Du hues {file} erstallt",
+ "{user} created {file}" : "Den {user} huet {file} erstallt",
+ "{file} was created in a public folder" : "{file} ass an engem ëffentlechen Dossier erstallt ginn",
+ "You changed {file}" : "Du hues {file} verännert",
+ "{user} changed {file}" : "Den {user} huet {file} verännert",
+ "You deleted {file}" : "Du hues {file} geläscht",
+ "{user} deleted {file}" : "Den {user} huet {file} geläscht",
+ "You restored {file}" : "Du hues {file} erem hier gestallt",
+ "{user} restored {file}" : "Den {user} huet {file} erem hier gestallt",
+ "You renamed {oldfile} to {newfile}" : "Du hues {oldfile} zu {newfile} embenannt",
+ "{user} renamed {oldfile} to {newfile}" : "Den {user} huet {oldfile} zu {newfile} embenannt",
+ "You moved {oldfile} to {newfile}" : "Du hues {oldfile} zu {newfile} verreckelt",
+ "{user} moved {oldfile} to {newfile}" : "Den {user} huet {oldfile} zu {newfile} verreckelt",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Eng Datei gouf zu dengen Favoriten <strong> dobäigesat </strong> oder aus dengen Favortien <strong> geläscht </strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eng Datei gouf <strong> verännert</strong> oder <strong> embenannt</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Eng nei Datei oder e neien Dossier gouf <strong> erstallt </strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "Eng Datei oder en Dossier gouf <strong> geläscht</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitéier Notifikatiounen op d'Erstellen an Veränneren vun dengen <strong> Favoriten</strong> (nëmmen Floss)",
+ "A new file or folder has been <strong>restored</strong>" : "Eng Datei oder en Dossier gouf <strong> erem hier gestallt</strong>",
+ "Upload (max. %s)" : "Upload (maximal ¦%s)",
"File handling" : "Fichier handling",
"Maximum upload size" : "Maximum Upload Gréisst ",
"max. possible: " : "max. méiglech:",
"Save" : "Späicheren",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Mat PHP-FPM kann et 5 Minutten dauern bis d'Ännerungen iwwerholl goufen",
+ "Missing permissions to edit from here." : "Net genuch Recher fir hei eppes ze veränneren",
"Settings" : "Astellungen",
- "No files in here" : "Hei sinn keng Fichieren",
+ "Show hidden files" : "Weis déi verstoppten Dateien",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Benotz dess Address <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">, fir op deng Dateien via WebDAV zouzegräifen</a>",
+ "No files in here" : "Keng Dokumenter hei",
+ "Upload some content or sync with your devices!" : "Lued Dateien erop oder synchroniséier se mat dengen Appartaten",
"No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt",
"Select all" : "All auswielen",
"Upload too large" : "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
- "Text file" : "Text Fichier"
+ "No favorites" : "Keng Favoriten",
+ "Files and folders you mark as favorite will show up here" : "Hei gesais du deng Favoriten",
+ "Shared with you" : "Mat dir gedeelt",
+ "Shared with others" : "Mat aaneren gedeelt",
+ "Shared by link" : "Mat engem Link gedeelt",
+ "Tags" : "Tags",
+ "Deleted files" : "Geläschten Dateien",
+ "Text file" : "Text Fichier",
+ "New text file.txt" : "Neien Text file.txt",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} Stonn iwwereg","{hours}:{minutes}:{seconds} Stonnen iwwereg"],
+ "{hours}:{minutes}h" : "{hours}:{minutes} Stonnen",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} Minute iwwereg","{minutes}:{seconds} Minuten iwwereg"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} Minuten",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} Sekonn iwwereg","{seconds} Sekonnen iwwereg"],
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "An engen Moment",
+ "Soon..." : "Geschwënn",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/lb.json b/apps/files/l10n/lb.json
index 67da26b1ece..a00689bcec8 100644
--- a/apps/files/l10n/lb.json
+++ b/apps/files/l10n/lb.json
@@ -1,48 +1,141 @@
{ "translations": {
+ "Storage is temporarily not available" : "Späicherplaatz temporär net erreeschbar",
+ "Storage invalid" : "Späicherplatz net gülteg",
"Unknown error" : "Et ass en onbekannte Fehler opgetrueden",
- "There is no error, the file uploaded with success" : "Keen Feeler, Datei ass komplett ropgelueden ginn",
- "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Déi ropgelueden Datei ass méi grouss wei d'MAX_FILE_SIZE Eegenschaft déi an der HTML form uginn ass",
- "The uploaded file was only partially uploaded" : "Déi ropgelueden Datei ass nëmmen hallef ropgelueden ginn",
- "No file was uploaded" : "Et ass kee Fichier ropgeluede ginn",
- "Missing a temporary folder" : "Et feelt en temporären Dossier",
- "Failed to write to disk" : "Konnt net op den Disk schreiwen",
- "Files" : "Dateien",
"All files" : "All d'Fichieren",
+ "Recent" : "Rezent",
+ "File could not be found" : "Datei konnt net fonnt ginn",
"Home" : "Doheem",
"Close" : "Zoumaachen",
"Favorites" : "Favoriten",
+ "Could not create folder \"{dir}\"" : "Dossier \"{dir}\" konnt net erstallt ginn",
"Upload cancelled." : "Upload ofgebrach.",
+ "Unable to upload {filename} as it is a directory or has 0 bytes" : "{filename} konnt eropgelueden ginn, well et een Dossier ass oder d'Datei 0 Bytes huet",
+ "Not enough free space, you are uploading {size1} but only {size2} is left" : "Net genuch Späicher, du probéiers {size1} eropzelueden, et ass awer nëmmen méi {size2} fräi",
+ "Target folder \"{dir}\" does not exist any more" : "Den Dossier \"{dir}\" existéiert net méi",
+ "Not enough free space" : "Nët genuch Späicherplaatz",
"Uploading..." : "Lueden erop...",
"..." : "...",
- "File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach.",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} vun {totalSize} ({bitrate})",
+ "Actions" : "Aktiounen",
"Download" : "Download",
"Rename" : "Ëmbenennen",
+ "Move" : "Verschieben",
+ "Target folder" : "Ziel Dossier",
"Delete" : "Läschen",
+ "Disconnect storage" : "Net connectéierten Späicher",
"Unshare" : "Net méi deelen",
+ "Could not load info for file \"{file}\"" : "Et konnten keng Informatiounen zu {file} gelueden ginn",
+ "Files" : "Dateien",
"Details" : "Detailer",
"Select" : "Auswielen",
+ "Pending" : "Ausstoend",
+ "Unable to determine date" : "Datum kann net festgestallt ginn",
"This operation is forbidden" : "Dës Operatioun ass verbueden.",
"This directory is unavailable, please check the logs or contact the administrator" : "Dësen Dossier ass net disponibel, w.e.g. kontrolléiert d'Logs oder kontaktéiert den Administrateur",
+ "Could not move \"{file}\", target exists" : "\"{file}\" konnt beweegt ginn. Et existéiert do schonn.",
+ "Could not move \"{file}\"" : "\"{file}\" konnt verreckelt ginn",
+ "{newName} already exists" : "{newName} gett et schon",
+ "Could not rename \"{fileName}\", it does not exist any more" : "\"{fileName}\" konnt embenannt ginn, well et net méi existéiert",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "\"{targetName}\" konnt net gesat ginn, well dësen schon am Dossier \"{dir}\" existéiert. Wiel weg. een aaneren",
+ "Could not rename \"{fileName}\"" : "\"{fileName}\" konnt net embenannt ginn",
+ "Could not create file \"{file}\"" : "\"{file}\" konnt net erstallt ginn",
+ "Could not create file \"{file}\" because it already exists" : "\"{file}\" konnt net erstallt ginn, well des schon existéiert",
+ "Could not create folder \"{dir}\" because it already exists" : "Den Dossier \"{dir}\" konnt net erstallt ginn, well desen schon existéiert",
+ "Error deleting file \"{fileName}\"." : "Fehler beim läschen vun \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "Keng Resultater an aneren Dossieren fir {tag}{filter}{endtag} fonnt",
"Name" : "Numm",
"Size" : "Gréisst",
"Modified" : "Geännert",
+ "_%n folder_::_%n folders_" : ["¦%n Dossier","¦%n Dossieren"],
+ "_%n file_::_%n files_" : ["¦%n Datei","¦%n Dateien"],
+ "{dirs} and {files}" : "{dirs} an {files}",
+ "_including %n hidden_::_including %n hidden_" : ["Beinhaltet ¦%n verstoppte Saach","Beinhaltet ¦%n verstoppte Saachen"],
+ "You don’t have permission to upload or create files here" : "Du hues net genuch Rechter hei Dokumenter eropzelueden oder ze erstellen",
+ "_Uploading %n file_::_Uploading %n files_" : ["Am Gaangen ¦%n Datei eropzelueden","Am Gaangen ¦%n Dateien eropzelueden"],
"New" : "Nei",
- "\"{name}\" is an invalid file name." : "\"{Numm}\" ass een ongültegen Numm fir e Fichier.",
- "File name cannot be empty." : "Den Numm vum Fichier kann net eidel sinn.",
+ "\"{name}\" is an invalid file name." : "\"{name}\" ass een ongültegen Numm",
+ "File name cannot be empty." : "D'Datei kann net eidel sinn",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" ass een ongültegen Typ vun Datei",
+ "Storage of {owner} is full, files can not be updated or synced anymore!" : "Späicher vum {owener} ass voll, et kennen keng Dokumenter méi eropgelueden oder synchroniséiert ginn!",
+ "Your storage is full, files can not be updated or synced anymore!" : "Däin Späicher ass voll, et kennen keng Dateien méi eropgeluden oder synchrosniséiert ginn",
+ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "Späicher vum {owner} ass baal voll ({usedSpacePercent}%)",
+ "Your storage is almost full ({usedSpacePercent}%)" : "Däin Späicher ass baal voll ({usedSpacePercent}%)",
+ "_matches '{filter}'_::_match '{filter}'_" : ["entsprecht","entspriechen"],
+ "View in folder" : "Kuk am Dossier ",
+ "Path" : "Pad",
+ "_%n byte_::_%n bytes_" : ["¦%n Byte","¦%n Byte"],
+ "Favorited" : "Favoriséiert",
+ "Favorite" : "Favorit",
+ "Copy local link" : "Lokale Link kopéiert",
"Folder" : "Dossier",
"New folder" : "Neien Dossier",
"Upload" : "Eroplueden",
- "Upload (max. %s)" : "Eroplueden (max. %s)",
+ "An error occurred while trying to update the tags" : "Beim Updaten vun den Tags ass e Fehler entstaanen",
+ "Added to favorites" : "Zu den Favoriten dobaigesat",
+ "Removed from favorites" : "Vun den Favoriten eweggeholl",
+ "You added {file} to your favorites" : "Du hues {file} zu denger Favortiten dobäigesat",
+ "You removed {file} from your favorites" : "Du hues {file} aus dengen Favortiten geläscht",
+ "File changes" : "Datei Ännerungen",
+ "Created by {user}" : "Erstallt vum {user}",
+ "Changed by {user}" : "Geännert vum {user}",
+ "Deleted by {user}" : "Geläscht vum {user}",
+ "Restored by {user}" : "Erem hier gestallt vum {user}",
+ "Renamed by {user}" : "Embenannt vum {user}",
+ "Moved by {user}" : "Beweegt vum {user}",
+ "You created {file}" : "Du hues {file} erstallt",
+ "{user} created {file}" : "Den {user} huet {file} erstallt",
+ "{file} was created in a public folder" : "{file} ass an engem ëffentlechen Dossier erstallt ginn",
+ "You changed {file}" : "Du hues {file} verännert",
+ "{user} changed {file}" : "Den {user} huet {file} verännert",
+ "You deleted {file}" : "Du hues {file} geläscht",
+ "{user} deleted {file}" : "Den {user} huet {file} geläscht",
+ "You restored {file}" : "Du hues {file} erem hier gestallt",
+ "{user} restored {file}" : "Den {user} huet {file} erem hier gestallt",
+ "You renamed {oldfile} to {newfile}" : "Du hues {oldfile} zu {newfile} embenannt",
+ "{user} renamed {oldfile} to {newfile}" : "Den {user} huet {oldfile} zu {newfile} embenannt",
+ "You moved {oldfile} to {newfile}" : "Du hues {oldfile} zu {newfile} verreckelt",
+ "{user} moved {oldfile} to {newfile}" : "Den {user} huet {oldfile} zu {newfile} verreckelt",
+ "A file has been added to or removed from your <strong>favorites</strong>" : "Eng Datei gouf zu dengen Favoriten <strong> dobäigesat </strong> oder aus dengen Favortien <strong> geläscht </strong>",
+ "A file or folder has been <strong>changed</strong> or <strong>renamed</strong>" : "Eng Datei gouf <strong> verännert</strong> oder <strong> embenannt</strong>",
+ "A new file or folder has been <strong>created</strong>" : "Eng nei Datei oder e neien Dossier gouf <strong> erstallt </strong>",
+ "A new file or folder has been <strong>deleted</strong>" : "Eng Datei oder en Dossier gouf <strong> geläscht</strong>",
+ "Limit notifications about creation and changes to your <strong>favorite files</strong> <em>(Stream only)</em>" : "Limitéier Notifikatiounen op d'Erstellen an Veränneren vun dengen <strong> Favoriten</strong> (nëmmen Floss)",
+ "A new file or folder has been <strong>restored</strong>" : "Eng Datei oder en Dossier gouf <strong> erem hier gestallt</strong>",
+ "Upload (max. %s)" : "Upload (maximal ¦%s)",
"File handling" : "Fichier handling",
"Maximum upload size" : "Maximum Upload Gréisst ",
"max. possible: " : "max. méiglech:",
"Save" : "Späicheren",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "Mat PHP-FPM kann et 5 Minutten dauern bis d'Ännerungen iwwerholl goufen",
+ "Missing permissions to edit from here." : "Net genuch Recher fir hei eppes ze veränneren",
"Settings" : "Astellungen",
- "No files in here" : "Hei sinn keng Fichieren",
+ "Show hidden files" : "Weis déi verstoppten Dateien",
+ "WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Benotz dess Address <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">, fir op deng Dateien via WebDAV zouzegräifen</a>",
+ "No files in here" : "Keng Dokumenter hei",
+ "Upload some content or sync with your devices!" : "Lued Dateien erop oder synchroniséier se mat dengen Appartaten",
"No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt",
"Select all" : "All auswielen",
"Upload too large" : "Upload ze grouss",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
- "Text file" : "Text Fichier"
+ "No favorites" : "Keng Favoriten",
+ "Files and folders you mark as favorite will show up here" : "Hei gesais du deng Favoriten",
+ "Shared with you" : "Mat dir gedeelt",
+ "Shared with others" : "Mat aaneren gedeelt",
+ "Shared by link" : "Mat engem Link gedeelt",
+ "Tags" : "Tags",
+ "Deleted files" : "Geläschten Dateien",
+ "Text file" : "Text Fichier",
+ "New text file.txt" : "Neien Text file.txt",
+ "_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} Stonn iwwereg","{hours}:{minutes}:{seconds} Stonnen iwwereg"],
+ "{hours}:{minutes}h" : "{hours}:{minutes} Stonnen",
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} Minute iwwereg","{minutes}:{seconds} Minuten iwwereg"],
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} Minuten",
+ "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} Sekonn iwwereg","{seconds} Sekonnen iwwereg"],
+ "{seconds}s" : "{seconds}s",
+ "Any moment now..." : "An engen Moment",
+ "Soon..." : "Geschwënn",
+ "File upload is in progress. Leaving the page now will cancel the upload." : "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js
index 154b72567c7..5ae55d039ca 100644
--- a/apps/files/l10n/pt_BR.js
+++ b/apps/files/l10n/pt_BR.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"files",
{
- "Storage is temporarily not available" : "Storage esta, temporariamente, indisponível",
+ "Storage is temporarily not available" : "Storage esté temporariamente indisponível",
"Storage invalid" : "Armazenamento inválido",
"Unknown error" : "Erro desconhecido",
"All files" : "Todos os arquivos",
@@ -34,17 +34,18 @@ OC.L10N.register(
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
- "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o alvo já existe",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor verifique os logs ou entre em contato com o administrador",
+ "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o destino já existe",
"Could not move \"{file}\"" : "Não foi possível mover \"{file}\"",
"{newName} already exists" : "{newName} já existe",
- "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele já não existe",
- "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta \"{dir}\". Por favor escolha um outro nome.",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele não existe mais",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta  \"{dir}\". Por favor escolha outro nome.",
"Could not rename \"{fileName}\"" : "Não foi possível renomear \"{fileName}\"",
"Could not create file \"{file}\"" : "Não foi possível criar o arquivo \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" porque ele já existe",
"Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" porque ela já existe",
- "Error deleting file \"{fileName}\"." : "Ocorreu um erro ao apagar o arquivo \"{fileName}\".",
+ "Error deleting file \"{fileName}\"." : "Ocorreu um erro ao excluir o arquivo \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "Sem resultados de pesquisa em outras pastas para {tag}{filter}{endtag}",
"Name" : "Nome",
"Size" : "Tamanho",
"Modified" : "Modificado",
@@ -57,6 +58,7 @@ OC.L10N.register(
"New" : "Novo",
"\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.",
"File name cannot be empty." : "O nome do arquivo não pode estar vazio.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" não é um tipo de arquivo válido",
"Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!",
"Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
@@ -65,7 +67,7 @@ OC.L10N.register(
"View in folder" : "Exibir na pasta",
"Path" : "Caminho",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
- "Favorited" : "Favorito",
+ "Favorited" : "Favoritado",
"Favorite" : "Favorito",
"Copy local link" : "Copiar link local",
"Folder" : "Pasta",
@@ -108,7 +110,7 @@ OC.L10N.register(
"max. possible: " : "max. possível:",
"Save" : "Salvar",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Com PHP-FPM pode demorar 5 minutos para que as alterações sejam aplicadas.",
- "Missing permissions to edit from here." : "Faltando permissões para editar a partir daqui.",
+ "Missing permissions to edit from here." : "Faltando permissões para editar aqui.",
"Settings" : "Configurações",
"Show hidden files" : "Mostrar arquivos ocultos",
"WebDAV" : "WebDAV",
@@ -118,10 +120,10 @@ OC.L10N.register(
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Upload too large" : "Arquivo muito grande para envio",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excedeu o tamanho máximo para arquivos no servidor.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excederam o tamanho máximo para arquivos no servidor.",
"No favorites" : "Sem favoritos",
"Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui",
- "Shared with you" : "Compartilhado com voce",
+ "Shared with you" : "Compartilhado com você",
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado via link",
"Tags" : "Tags",
@@ -130,9 +132,9 @@ OC.L10N.register(
"New text file.txt" : "Novo texto file.txt",
"_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} hora restante","{hours}:{minutes}:{seconds} horas restantes"],
"{hours}:{minutes}h" : "{hours}:{minutes}h",
- "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minutos retantes","{minutes}:{seconds} minutos retantes"],
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minutos retantes","{minutes}:{seconds} minutos restantes"],
"{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} segundos restantes","{seconds} secondos restantes"],
+ "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} segundos restantes","{seconds} segundos restantes"],
"{seconds}s" : "{seconds}s",
"Any moment now..." : "A qualquer momento...",
"Soon..." : "Logo...",
diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json
index 4e1ba96e2ee..d263544e0e4 100644
--- a/apps/files/l10n/pt_BR.json
+++ b/apps/files/l10n/pt_BR.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Storage is temporarily not available" : "Storage esta, temporariamente, indisponível",
+ "Storage is temporarily not available" : "Storage esté temporariamente indisponível",
"Storage invalid" : "Armazenamento inválido",
"Unknown error" : "Erro desconhecido",
"All files" : "Todos os arquivos",
@@ -32,17 +32,18 @@
"Pending" : "Pendente",
"Unable to determine date" : "Impossível determinar a data",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
- "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o alvo já existe",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor verifique os logs ou entre em contato com o administrador",
+ "Could not move \"{file}\", target exists" : "Não foi possível mover o \"{file}\", o destino já existe",
"Could not move \"{file}\"" : "Não foi possível mover \"{file}\"",
"{newName} already exists" : "{newName} já existe",
- "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele já não existe",
- "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta \"{dir}\". Por favor escolha um outro nome.",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Não foi possível renomear \"{fileName}\", ele não existe mais",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "O nome \"{targetName}\" já está sendo usado na pasta  \"{dir}\". Por favor escolha outro nome.",
"Could not rename \"{fileName}\"" : "Não foi possível renomear \"{fileName}\"",
"Could not create file \"{file}\"" : "Não foi possível criar o arquivo \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "Não foi possível criar o arquivo \"{file}\" porque ele já existe",
"Could not create folder \"{dir}\" because it already exists" : "Não foi possível criar a pasta \"{dir}\" porque ela já existe",
- "Error deleting file \"{fileName}\"." : "Ocorreu um erro ao apagar o arquivo \"{fileName}\".",
+ "Error deleting file \"{fileName}\"." : "Ocorreu um erro ao excluir o arquivo \"{fileName}\".",
+ "No search results in other folders for {tag}{filter}{endtag}" : "Sem resultados de pesquisa em outras pastas para {tag}{filter}{endtag}",
"Name" : "Nome",
"Size" : "Tamanho",
"Modified" : "Modificado",
@@ -55,6 +56,7 @@
"New" : "Novo",
"\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.",
"File name cannot be empty." : "O nome do arquivo não pode estar vazio.",
+ "\"{name}\" is not an allowed filetype" : "\"{name}\" não é um tipo de arquivo válido",
"Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!",
"Your storage is full, files can not be updated or synced anymore!" : "Seu armazenamento está cheio, arquivos não podem mais ser atualizados ou sincronizados!",
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Armazenamento do {owner} está quase cheio ({usedSpacePercent}%)",
@@ -63,7 +65,7 @@
"View in folder" : "Exibir na pasta",
"Path" : "Caminho",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
- "Favorited" : "Favorito",
+ "Favorited" : "Favoritado",
"Favorite" : "Favorito",
"Copy local link" : "Copiar link local",
"Folder" : "Pasta",
@@ -106,7 +108,7 @@
"max. possible: " : "max. possível:",
"Save" : "Salvar",
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Com PHP-FPM pode demorar 5 minutos para que as alterações sejam aplicadas.",
- "Missing permissions to edit from here." : "Faltando permissões para editar a partir daqui.",
+ "Missing permissions to edit from here." : "Faltando permissões para editar aqui.",
"Settings" : "Configurações",
"Show hidden files" : "Mostrar arquivos ocultos",
"WebDAV" : "WebDAV",
@@ -116,10 +118,10 @@
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Upload too large" : "Arquivo muito grande para envio",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excedeu o tamanho máximo para arquivos no servidor.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Os arquivos que você está tentando enviar excederam o tamanho máximo para arquivos no servidor.",
"No favorites" : "Sem favoritos",
"Files and folders you mark as favorite will show up here" : "Arquivos e pastas que você marcou como favoritos são mostrados aqui",
- "Shared with you" : "Compartilhado com voce",
+ "Shared with you" : "Compartilhado com você",
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado via link",
"Tags" : "Tags",
@@ -128,9 +130,9 @@
"New text file.txt" : "Novo texto file.txt",
"_{hours}:{minutes}:{seconds} hour left_::_{hours}:{minutes}:{seconds} hours left_" : ["{hours}:{minutes}:{seconds} hora restante","{hours}:{minutes}:{seconds} horas restantes"],
"{hours}:{minutes}h" : "{hours}:{minutes}h",
- "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minutos retantes","{minutes}:{seconds} minutos retantes"],
+ "_{minutes}:{seconds} minute left_::_{minutes}:{seconds} minutes left_" : ["{minutes}:{seconds} minutos retantes","{minutes}:{seconds} minutos restantes"],
"{minutes}:{seconds}m" : "{minutes}:{seconds}m",
- "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} segundos restantes","{seconds} secondos restantes"],
+ "_{seconds} second left_::_{seconds} seconds left_" : ["{seconds} segundos restantes","{seconds} segundos restantes"],
"{seconds}s" : "{seconds}s",
"Any moment now..." : "A qualquer momento...",
"Soon..." : "Logo...",
diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js
index b8981373ddd..397710545cb 100644
--- a/apps/files/l10n/ru.js
+++ b/apps/files/l10n/ru.js
@@ -87,7 +87,7 @@ OC.L10N.register(
"Moved by {user}" : "Перемещено {user}",
"You created {file}" : "Вы создали {file}",
"{user} created {file}" : "{user} создал {file}",
- "{file} was created in a public folder" : "{file} создан в общем каталоге",
+ "{file} was created in a public folder" : "{file} создан в общедоступом каталоге",
"You changed {file}" : "Вы изменили {file}",
"{user} changed {file}" : "{user} изменил {file}",
"You deleted {file}" : "Вы удалили {file}",
diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json
index 3e41f1eef87..7e8801c8a9f 100644
--- a/apps/files/l10n/ru.json
+++ b/apps/files/l10n/ru.json
@@ -85,7 +85,7 @@
"Moved by {user}" : "Перемещено {user}",
"You created {file}" : "Вы создали {file}",
"{user} created {file}" : "{user} создал {file}",
- "{file} was created in a public folder" : "{file} создан в общем каталоге",
+ "{file} was created in a public folder" : "{file} создан в общедоступом каталоге",
"You changed {file}" : "Вы изменили {file}",
"{user} changed {file}" : "{user} изменил {file}",
"You deleted {file}" : "Вы удалили {file}",
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
index 976c0c00b89..4e35ea531eb 100644
--- a/apps/files_external/js/settings.js
+++ b/apps/files_external/js/settings.js
@@ -960,7 +960,7 @@ MountConfigListView.prototype = _.extend({
success: function(result) {
var onCompletion = jQuery.Deferred();
$.each(result, function(i, storageParams) {
- storageParams.mountPoint = storageParams.mountPoint.substr(1); // trim leading slash
+ storageParams.mountPoint = (storageParams.mountPoint === '/')? '/' : storageParams.mountPoint.substr(1); // trim leading slash
var storageConfig = new self._storageConfigClass();
_.extend(storageConfig, storageParams);
var $tr = self.newStorage(storageConfig, onCompletion);
diff --git a/apps/files_external/l10n/es_MX.js b/apps/files_external/l10n/es_MX.js
index be4478ab639..f1ee8f0446b 100644
--- a/apps/files_external/l10n/es_MX.js
+++ b/apps/files_external/l10n/es_MX.js
@@ -1,27 +1,115 @@
OC.L10N.register(
"files_external",
{
+ "Please provide a valid app key and secret." : "Favor de proporcionar una llave de aplicación y secreto válidos.",
+ "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s",
+ "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
"External storage" : "Almacenamiento externo",
+ "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
+ "Google Drive App Configuration" : "Configuración de Aplicación Google Drive",
"Personal" : "Personal",
+ "System" : "Sistema",
"Grant access" : "Conceder acceso",
+ "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
+ "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
+ "Generate keys" : "Generar llaves",
+ "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
+ "All users. Type to select user or group." : "Todos los usuarios. Escriba para seleccionar el usuario o grupo",
+ "(group)" : "(grupo)",
+ "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
+ "Admin defined" : "Administrador definido",
"Saved" : "Guardado",
+ "Saving..." : "Guardando...",
+ "Save" : "Guardar",
+ "Empty response from the server" : "Respuesta vacía del servidor",
+ "Couldn't access. Please logout and login to activate this mount point" : "No fue posible accesar. Favor de salir e iniciar sesión para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
+ "There was an error with message: " : "Se presentó un problema con el mensaje:",
+ "External mount error" : "Error de montaje externo",
+ "external-storage" : "almacenamiento externo",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "No fue posible obtener el listado de los puntos de montaje de la unidad de red de Windows: respuesta del servidor vacía ",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Favor de hacer click en los renglon(es) en rojo para más información",
+ "Please enter the credentials for the {mount} mount" : "Favor de ingresar las credenciales para el montaje {mount}",
"Username" : "Nombre de usuario",
"Password" : "Contraseña",
- "Save" : "Guardar",
+ "Credentials saved" : "Credenciales guardadas",
+ "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
+ "Credentials required" : "Se requieren credenciales",
+ "Storage with id \"%i\" not found" : "El almacenamiento con id \"%i\" no fue encontrado",
+ "Invalid mount point" : "Punto de montaje inválido",
+ "Objectstore forbidden" : "Objectstore prohibido",
+ "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
+ "Unsatisfied authentication mechanism parameters" : "Parametros no satisfechos del mecanismo de autenticación",
+ "Insufficient data: %s" : "Datos insuficientes: %s",
+ "%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "El almacenamiento con id \"%i\" no puede ser editado por el usuario",
+ "Access key" : "Llave de acceso",
+ "Secret key" : "Llave secreta",
+ "Builtin" : "Integrado",
"None" : "Ninguno",
- "API key" : "clave API",
+ "OAuth1" : "OAuth1",
+ "App key" : "Llave de la aplicación",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "ID del cliente",
+ "OpenStack" : "OpenStack",
+ "Rackspace" : "Rackspace",
+ "API key" : "Llave de API",
+ "Global credentials" : "Credenciales globales",
+ "Username and password" : "Nombre de usuario y contraseña",
+ "Log-in credentials, save in session" : "Credenciales para iniciar sesión, guardar en la sesión",
+ "RSA public key" : "Llave pública RSA",
"Public key" : "Llave pública",
+ "Amazon S3" : "Amazon S3",
+ "Hostname" : "Nombre del servidor",
"Port" : "Puerto",
+ "Region" : "Región",
+ "Enable SSL" : "Habilitar SSL",
+ "Enable Path Style" : "Habilitar Estilo de Ruta",
"WebDAV" : "WebDAV",
"URL" : "URL",
+ "Remote subfolder" : "Subcarpeta remota",
+ "Secure https://" : "Asegurar https:// ",
+ "Dropbox" : "Dropbox",
+ "FTP" : "FTP",
"Host" : "Servidor",
+ "Google Drive" : "Google Drive",
+ "Local" : "Local",
"Location" : "Ubicación",
+ "Nextcloud" : "Nextcloud",
+ "SFTP" : "SFTP",
+ "Root" : "Raíz",
+ "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "Compartir",
+ "Domain" : "Dominio",
+ "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nombre del servicio",
+ "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
+ "External storages" : "Almacenamiento externo",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Favor de solicitar a su administador su instalación. ",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Favor de solicitar a su administador su instalación. ",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Favor de solicitar a su administrador su instalación. ",
+ "No external storage configured" : "No se ha configurado el almacenamiento externo",
+ "You can add external storages in the personal settings" : "Usted puede agregar almacenamiento externo en los ajustes personales",
"Name" : "Nombre",
- "External Storage" : "Almacenamiento externo",
+ "Storage type" : "Tipo de almacenamiento",
+ "Scope" : "Alcance",
+ "Enable encryption" : "Habilitar encripción",
+ "Enable previews" : "Habilitar previsualizaciones",
+ "Enable sharing" : "Habilitar compartir",
+ "Check for changes" : "Verificar si hay cambios",
+ "Never" : "Nunca",
+ "Once every direct access" : "Una vez cada acceso directo",
"Folder name" : "Nombre de la carpeta",
+ "Authentication" : "Autenticación",
"Configuration" : "Configuración",
- "Add storage" : "Añadir almacenamiento",
- "Delete" : "Eliminar"
+ "Available for" : "Disponible para",
+ "Add storage" : "Agregar almacenamiento",
+ "Advanced settings" : "Ajustes avanzados",
+ "Delete" : "Borrar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
+ "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/es_MX.json b/apps/files_external/l10n/es_MX.json
index b37b125f036..1c7b32addc0 100644
--- a/apps/files_external/l10n/es_MX.json
+++ b/apps/files_external/l10n/es_MX.json
@@ -1,25 +1,113 @@
{ "translations": {
+ "Please provide a valid app key and secret." : "Favor de proporcionar una llave de aplicación y secreto válidos.",
+ "Step 1 failed. Exception: %s" : "Falla en el paso 1: Excepción %s",
+ "Step 2 failed. Exception: %s" : "Paso 2 falló. Excepción: %s",
"External storage" : "Almacenamiento externo",
+ "Dropbox App Configuration" : "Configuración de la aplicación Dropbox",
+ "Google Drive App Configuration" : "Configuración de Aplicación Google Drive",
"Personal" : "Personal",
+ "System" : "Sistema",
"Grant access" : "Conceder acceso",
+ "Error configuring OAuth1" : "Se presentó un error al configurar OAuth1",
+ "Error configuring OAuth2" : "Se presentó un error al configurar OAuth2",
+ "Generate keys" : "Generar llaves",
+ "Error generating key pair" : "Se presentó un error al generar el juego de llaves",
+ "All users. Type to select user or group." : "Todos los usuarios. Escriba para seleccionar el usuario o grupo",
+ "(group)" : "(grupo)",
+ "Compatibility with Mac NFD encoding (slow)" : "Compatibilidad con codificación Mac NFD (lenta)",
+ "Admin defined" : "Administrador definido",
"Saved" : "Guardado",
+ "Saving..." : "Guardando...",
+ "Save" : "Guardar",
+ "Empty response from the server" : "Respuesta vacía del servidor",
+ "Couldn't access. Please logout and login to activate this mount point" : "No fue posible accesar. Favor de salir e iniciar sesión para activar este punto de montaje",
+ "Couldn't get the information from the remote server: {code} {type}" : "No fue posible obtener la información del servidor remoto: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "No fue posible obtener la lista de puntos de montaje externos: {type}",
+ "There was an error with message: " : "Se presentó un problema con el mensaje:",
+ "External mount error" : "Error de montaje externo",
+ "external-storage" : "almacenamiento externo",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "No fue posible obtener el listado de los puntos de montaje de la unidad de red de Windows: respuesta del servidor vacía ",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Algunos de los puntos de montaje externos configurados no se encuentran conectados. Favor de hacer click en los renglon(es) en rojo para más información",
+ "Please enter the credentials for the {mount} mount" : "Favor de ingresar las credenciales para el montaje {mount}",
"Username" : "Nombre de usuario",
"Password" : "Contraseña",
- "Save" : "Guardar",
+ "Credentials saved" : "Credenciales guardadas",
+ "Credentials saving failed" : "Se ha presentado una falla al guardar las credenciales",
+ "Credentials required" : "Se requieren credenciales",
+ "Storage with id \"%i\" not found" : "El almacenamiento con id \"%i\" no fue encontrado",
+ "Invalid mount point" : "Punto de montaje inválido",
+ "Objectstore forbidden" : "Objectstore prohibido",
+ "Not permitted to use authentication mechanism \"%s\"" : "No está permitido el uso del mecanismo de autenticación \"%s\"",
+ "Unsatisfied authentication mechanism parameters" : "Parametros no satisfechos del mecanismo de autenticación",
+ "Insufficient data: %s" : "Datos insuficientes: %s",
+ "%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "El almacenamiento con id \"%i\" no puede ser editado por el usuario",
+ "Access key" : "Llave de acceso",
+ "Secret key" : "Llave secreta",
+ "Builtin" : "Integrado",
"None" : "Ninguno",
- "API key" : "clave API",
+ "OAuth1" : "OAuth1",
+ "App key" : "Llave de la aplicación",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "ID del cliente",
+ "OpenStack" : "OpenStack",
+ "Rackspace" : "Rackspace",
+ "API key" : "Llave de API",
+ "Global credentials" : "Credenciales globales",
+ "Username and password" : "Nombre de usuario y contraseña",
+ "Log-in credentials, save in session" : "Credenciales para iniciar sesión, guardar en la sesión",
+ "RSA public key" : "Llave pública RSA",
"Public key" : "Llave pública",
+ "Amazon S3" : "Amazon S3",
+ "Hostname" : "Nombre del servidor",
"Port" : "Puerto",
+ "Region" : "Región",
+ "Enable SSL" : "Habilitar SSL",
+ "Enable Path Style" : "Habilitar Estilo de Ruta",
"WebDAV" : "WebDAV",
"URL" : "URL",
+ "Remote subfolder" : "Subcarpeta remota",
+ "Secure https://" : "Asegurar https:// ",
+ "Dropbox" : "Dropbox",
+ "FTP" : "FTP",
"Host" : "Servidor",
+ "Google Drive" : "Google Drive",
+ "Local" : "Local",
"Location" : "Ubicación",
+ "Nextcloud" : "Nextcloud",
+ "SFTP" : "SFTP",
+ "Root" : "Raíz",
+ "SFTP with secret key login" : "Inicio de sesión SFTP con llave secreta",
+ "SMB / CIFS" : "SMB / CIFS",
"Share" : "Compartir",
+ "Domain" : "Dominio",
+ "SMB / CIFS using OC login" : "SMB / CIFS usando inicio de sesión OC",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
+ "Service name" : "Nombre del servicio",
+ "Request timeout (seconds)" : "Tiemo de vida de la solicitud (segudos)",
+ "External storages" : "Almacenamiento externo",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para cURL en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Favor de solicitar a su administador su instalación. ",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "El soporte para FTP en PHP no se encuentra habilitado o instalado. El montaje de %s no es posible. Favor de solicitar a su administador su instalación. ",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" no se encuentra instalado. El montaje de %s no es posible. Favor de solicitar a su administrador su instalación. ",
+ "No external storage configured" : "No se ha configurado el almacenamiento externo",
+ "You can add external storages in the personal settings" : "Usted puede agregar almacenamiento externo en los ajustes personales",
"Name" : "Nombre",
- "External Storage" : "Almacenamiento externo",
+ "Storage type" : "Tipo de almacenamiento",
+ "Scope" : "Alcance",
+ "Enable encryption" : "Habilitar encripción",
+ "Enable previews" : "Habilitar previsualizaciones",
+ "Enable sharing" : "Habilitar compartir",
+ "Check for changes" : "Verificar si hay cambios",
+ "Never" : "Nunca",
+ "Once every direct access" : "Una vez cada acceso directo",
"Folder name" : "Nombre de la carpeta",
+ "Authentication" : "Autenticación",
"Configuration" : "Configuración",
- "Add storage" : "Añadir almacenamiento",
- "Delete" : "Eliminar"
+ "Available for" : "Disponible para",
+ "Add storage" : "Agregar almacenamiento",
+ "Advanced settings" : "Ajustes avanzados",
+ "Delete" : "Borrar",
+ "Allow users to mount external storage" : "Permitir a los usuarios montar almacenamiento externo",
+ "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/fi.js b/apps/files_external/l10n/fi.js
index 775874cf11a..ed06c92fe46 100644
--- a/apps/files_external/l10n/fi.js
+++ b/apps/files_external/l10n/fi.js
@@ -2,6 +2,8 @@ OC.L10N.register(
"files_external",
{
"Fetching request tokens failed. Verify that your app key and secret are correct." : "Pyyntötunnisteen nouto epäonnistui. Tarkista että sovellusavaimesi ja -salaisuutesi ovat oikein.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Pyyntötunnisteen haku epäonnistui. Tarkista että sovellusavaimesi ja -salaisuutesi ovat oikein.",
+ "Please provide a valid app key and secret." : "Sovellusavain ja salaus ovat virheelliset",
"Step 1 failed. Exception: %s" : "Vaihe 1 epäonnistui. Poikkeus: %s",
"Step 2 failed. Exception: %s" : "Vaihe 2 epäonnistui. Poikkeus: %s",
"External storage" : "Ulkoinen tallennustila",
@@ -16,15 +18,18 @@ OC.L10N.register(
"Error generating key pair" : "Virhe luotaessa avainparia",
"All users. Type to select user or group." : "Kaikki käyttäjät. Kirjoita valitaksesi käyttäjän tai ryhmän.",
"(group)" : "(ryhmä)",
+ "Compatibility with Mac NFD encoding (slow)" : "Yhteensopivuus Mac NFD enkoodauksen kanssa (hidas)",
"Admin defined" : "Ylläpitäjän määrittämä",
"Saved" : "Tallennettu",
"Saving..." : "Tallennetaan...",
"Save" : "Tallenna",
"Empty response from the server" : "Tyhjä vastaus palvelimelta",
"Couldn't access. Please logout and login to activate this mount point" : "Käyttö epäonnistui. Kirjaudu ulos ja takaisin sisään aktivoidaksesi tämän liitospisteen",
+ "Couldn't get the information from the remote server: {code} {type}" : "Tietojen saaminen etäpalvelimelta epäonnistui: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Erillisten liitospisteiden listauksen noutaminen epäonnistui: {type}",
"There was an error with message: " : "Tapahtui virhe viestillä:",
"External mount error" : "Ulkoinen liitosvirhe",
+ "external-storage" : "ulkoinen taltio",
"Couldn't get the list of Windows network drive mount points: empty response from the server" : "Windows-verkkoasemien liitospisteiden listauksen noutaminen epäonnistui: tyhjä vastaus palvelimelta",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Jotkin määritetyt erilliset liitospisteet eivät ole yhdistettynä. Napsauta punaisia rivejä saadaksesi lisätietoja",
"Please enter the credentials for the {mount} mount" : "Anna kirjautumistiedot liitokselle {mount}",
@@ -36,10 +41,15 @@ OC.L10N.register(
"Storage with id \"%i\" not found" : "Tallennustilaa tunnisteella \"%i\" ei löytynyt",
"Invalid backend or authentication mechanism class" : "Virheellinen tietovarasto tai tunnistautumismekanismin luokka",
"Invalid mount point" : "Virheellinen liitoskohta",
+ "Objectstore forbidden" : "Objektimuisti estetty",
"Invalid storage backend \"%s\"" : "Virheellinen tietovarasto \"%s\"",
"Not permitted to use backend \"%s\"" : "Ei lupaa käyttää tietovarastoa \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "Ei lupaa käyttää tunnistautumismekanismia \"%s\"",
"Unsatisfied backend parameters" : "Riittämättömät tietovaraston parametrit",
+ "Unsatisfied authentication mechanism parameters" : "Riittämättömät tunnistautumismekanismin parametrit",
+ "Insufficient data: %s" : "Puutteellinen data: %s",
"%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "Tallennustila, jolla on \"%i\" id, ei ole muokattavissa.",
"Access key" : "Pääsyavain",
"Secret key" : "Salainen avain",
"Builtin" : "Sisäänrakennettu",
@@ -52,17 +62,23 @@ OC.L10N.register(
"Client secret" : "Asiakassalaisuus",
"OpenStack" : "OpenStack",
"Tenant name" : "Tenant nimi",
+ "Identity endpoint URL" : "Määritä URL päätepiste",
"Rackspace" : "Rackspace",
"API key" : "API-avain",
+ "Global credentials" : "Globaalit valtuudet",
+ "Log-in credentials, save in database" : "Kirjautumistiedot, tallennetaan tietokantaan",
"Username and password" : "Käyttäjätunnus ja salasana",
"Log-in credentials, save in session" : "Kirjautumistiedot, tallenna istuntoon",
"User entered, store in database" : "Käyttäjän antama, tallennettu tietokantaan",
"RSA public key" : "Julkinen RSA-avain",
"Public key" : "Julkinen avain",
"Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
+ "Hostname" : "Isäntänimi",
"Port" : "Portti",
"Region" : "Alue",
"Enable SSL" : "Käytä SSL:ää",
+ "Enable Path Style" : "Aktivoi polun tyyli",
"WebDAV" : "WebDAV",
"URL" : "Verkko-osoite",
"Remote subfolder" : "Etäalikansio",
@@ -87,10 +103,14 @@ OC.L10N.register(
"Service name" : "Palvelun nimi",
"Request timeout (seconds)" : "Pyynnön aikakatkaisu (sekunneissa)",
"External storages" : "Ulkoiset tallennustilat",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cULR tuki PHPsta ei ole aktivoitu tai asennettu. Kohteen %s liittäminen ei ole mahdollista. Ota yhteyttä järjestelmänvalvojaan asentaaksesi puuttuvan osan.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP tuki PHPsta ei ole aktivoitu tai asennettu. Kohteen %s liittäminen ei ole mahdollista. Ota yhteyttä järjestelmänvalvojaan asentaaksesi puuttuvan osan.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.",
"No external storage configured" : "Erillistä tallennustilaa ei ole määritetty",
"You can add external storages in the personal settings" : "Voit lisätä erillisiä tallennustiloja henkilökohtaisista asetuksistasi",
"Name" : "Nimi",
"Storage type" : "Tallennustilan tyyppi",
+ "Scope" : "Näkyvyysalue",
"Enable encryption" : "Käytä salausta",
"Enable previews" : "Käytä esikatseluja",
"Enable sharing" : "Käytä jakamista",
diff --git a/apps/files_external/l10n/fi.json b/apps/files_external/l10n/fi.json
index e8c1e205f53..225a526a642 100644
--- a/apps/files_external/l10n/fi.json
+++ b/apps/files_external/l10n/fi.json
@@ -1,5 +1,7 @@
{ "translations": {
"Fetching request tokens failed. Verify that your app key and secret are correct." : "Pyyntötunnisteen nouto epäonnistui. Tarkista että sovellusavaimesi ja -salaisuutesi ovat oikein.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Pyyntötunnisteen haku epäonnistui. Tarkista että sovellusavaimesi ja -salaisuutesi ovat oikein.",
+ "Please provide a valid app key and secret." : "Sovellusavain ja salaus ovat virheelliset",
"Step 1 failed. Exception: %s" : "Vaihe 1 epäonnistui. Poikkeus: %s",
"Step 2 failed. Exception: %s" : "Vaihe 2 epäonnistui. Poikkeus: %s",
"External storage" : "Ulkoinen tallennustila",
@@ -14,15 +16,18 @@
"Error generating key pair" : "Virhe luotaessa avainparia",
"All users. Type to select user or group." : "Kaikki käyttäjät. Kirjoita valitaksesi käyttäjän tai ryhmän.",
"(group)" : "(ryhmä)",
+ "Compatibility with Mac NFD encoding (slow)" : "Yhteensopivuus Mac NFD enkoodauksen kanssa (hidas)",
"Admin defined" : "Ylläpitäjän määrittämä",
"Saved" : "Tallennettu",
"Saving..." : "Tallennetaan...",
"Save" : "Tallenna",
"Empty response from the server" : "Tyhjä vastaus palvelimelta",
"Couldn't access. Please logout and login to activate this mount point" : "Käyttö epäonnistui. Kirjaudu ulos ja takaisin sisään aktivoidaksesi tämän liitospisteen",
+ "Couldn't get the information from the remote server: {code} {type}" : "Tietojen saaminen etäpalvelimelta epäonnistui: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Erillisten liitospisteiden listauksen noutaminen epäonnistui: {type}",
"There was an error with message: " : "Tapahtui virhe viestillä:",
"External mount error" : "Ulkoinen liitosvirhe",
+ "external-storage" : "ulkoinen taltio",
"Couldn't get the list of Windows network drive mount points: empty response from the server" : "Windows-verkkoasemien liitospisteiden listauksen noutaminen epäonnistui: tyhjä vastaus palvelimelta",
"Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Jotkin määritetyt erilliset liitospisteet eivät ole yhdistettynä. Napsauta punaisia rivejä saadaksesi lisätietoja",
"Please enter the credentials for the {mount} mount" : "Anna kirjautumistiedot liitokselle {mount}",
@@ -34,10 +39,15 @@
"Storage with id \"%i\" not found" : "Tallennustilaa tunnisteella \"%i\" ei löytynyt",
"Invalid backend or authentication mechanism class" : "Virheellinen tietovarasto tai tunnistautumismekanismin luokka",
"Invalid mount point" : "Virheellinen liitoskohta",
+ "Objectstore forbidden" : "Objektimuisti estetty",
"Invalid storage backend \"%s\"" : "Virheellinen tietovarasto \"%s\"",
"Not permitted to use backend \"%s\"" : "Ei lupaa käyttää tietovarastoa \"%s\"",
+ "Not permitted to use authentication mechanism \"%s\"" : "Ei lupaa käyttää tunnistautumismekanismia \"%s\"",
"Unsatisfied backend parameters" : "Riittämättömät tietovaraston parametrit",
+ "Unsatisfied authentication mechanism parameters" : "Riittämättömät tunnistautumismekanismin parametrit",
+ "Insufficient data: %s" : "Puutteellinen data: %s",
"%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "Tallennustila, jolla on \"%i\" id, ei ole muokattavissa.",
"Access key" : "Pääsyavain",
"Secret key" : "Salainen avain",
"Builtin" : "Sisäänrakennettu",
@@ -50,17 +60,23 @@
"Client secret" : "Asiakassalaisuus",
"OpenStack" : "OpenStack",
"Tenant name" : "Tenant nimi",
+ "Identity endpoint URL" : "Määritä URL päätepiste",
"Rackspace" : "Rackspace",
"API key" : "API-avain",
+ "Global credentials" : "Globaalit valtuudet",
+ "Log-in credentials, save in database" : "Kirjautumistiedot, tallennetaan tietokantaan",
"Username and password" : "Käyttäjätunnus ja salasana",
"Log-in credentials, save in session" : "Kirjautumistiedot, tallenna istuntoon",
"User entered, store in database" : "Käyttäjän antama, tallennettu tietokantaan",
"RSA public key" : "Julkinen RSA-avain",
"Public key" : "Julkinen avain",
"Amazon S3" : "Amazon S3",
+ "Bucket" : "Bucket",
+ "Hostname" : "Isäntänimi",
"Port" : "Portti",
"Region" : "Alue",
"Enable SSL" : "Käytä SSL:ää",
+ "Enable Path Style" : "Aktivoi polun tyyli",
"WebDAV" : "WebDAV",
"URL" : "Verkko-osoite",
"Remote subfolder" : "Etäalikansio",
@@ -85,10 +101,14 @@
"Service name" : "Palvelun nimi",
"Request timeout (seconds)" : "Pyynnön aikakatkaisu (sekunneissa)",
"External storages" : "Ulkoiset tallennustilat",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "cULR tuki PHPsta ei ole aktivoitu tai asennettu. Kohteen %s liittäminen ei ole mahdollista. Ota yhteyttä järjestelmänvalvojaan asentaaksesi puuttuvan osan.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "FTP tuki PHPsta ei ole aktivoitu tai asennettu. Kohteen %s liittäminen ei ole mahdollista. Ota yhteyttä järjestelmänvalvojaan asentaaksesi puuttuvan osan.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää asentamaan puuttuva kohde.",
"No external storage configured" : "Erillistä tallennustilaa ei ole määritetty",
"You can add external storages in the personal settings" : "Voit lisätä erillisiä tallennustiloja henkilökohtaisista asetuksistasi",
"Name" : "Nimi",
"Storage type" : "Tallennustilan tyyppi",
+ "Scope" : "Näkyvyysalue",
"Enable encryption" : "Käytä salausta",
"Enable previews" : "Käytä esikatseluja",
"Enable sharing" : "Käytä jakamista",
diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js
index 24ac44e9aa3..bcdb72d189d 100644
--- a/apps/files_external/l10n/pt_BR.js
+++ b/apps/files_external/l10n/pt_BR.js
@@ -1,8 +1,8 @@
OC.L10N.register(
"files_external",
{
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de requesição falhou. Verifique se a sua chave de aplicativo e segurança estão corretos.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de acesso falhou. Verifique se a sua chave de aplicativo e segurança estão corretos.",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de requisição falhou. Verifique se sua chave de aplicativo e segurança estão corretos.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de acesso falhou. Verifique se sua chave de aplicativo e segurança estão corretos.",
"Please provide a valid app key and secret." : "Por favor forneça uma chave e segurança válidos.",
"Step 1 failed. Exception: %s" : "Passo 1 falhou. Exceção: %s",
"Step 2 failed. Exception: %s" : "Passo 2 falhou. Exceção: %s",
@@ -15,7 +15,7 @@ OC.L10N.register(
"Error configuring OAuth1" : "Erro configurando OAuth1",
"Error configuring OAuth2" : "Erro configurando OAuth2",
"Generate keys" : "Gerar chaves",
- "Error generating key pair" : "Erro ao gerar um par de chaves",
+ "Error generating key pair" : "Erro ao gerar o par de chaves",
"All users. Type to select user or group." : "Todos os usuários. Digite para selecionar usuário ou grupo.",
"(group)" : "(grupo)",
"Compatibility with Mac NFD encoding (slow)" : "Compatibilidade com a codificação Mac NFD (lento)",
@@ -23,14 +23,14 @@ OC.L10N.register(
"Saved" : "Salvo",
"Saving..." : "Salvando...",
"Save" : "Salvar",
- "Empty response from the server" : "Resposta vazia a partir do servidor",
- "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconectar e conectar novamente para ativar este ponto de montagem",
+ "Empty response from the server" : "Resposta vazia do servidor",
+ "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconecte e conecte novamente para ativar este ponto de montagem",
"Couldn't get the information from the remote server: {code} {type}" : "Não foi possível obter as informações do servidor remoto: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}",
"There was an error with message: " : "Houve um erro com a mensagem:",
"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",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista de unidades de pontos de montagem da rede Windows: resposta vazia 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. 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",
@@ -62,13 +62,13 @@ OC.L10N.register(
"Client secret" : "Segredo do cliente",
"OpenStack" : "OpenStack",
"Tenant name" : "Nome do inquilino",
- "Identity endpoint URL" : "Identidade pontofinal URL",
+ "Identity endpoint URL" : "URL da identidade destino",
"Rackspace" : "Espaço em rack",
"API key" : "Chave API",
"Global credentials" : "Credenciais globais",
"Log-in credentials, save in database" : "Credenciais de acesso, salvas no banco de dados",
- "Username and password" : "Nome de Usuário e senha",
- "Log-in credentials, save in session" : "Credenciais de login, guardados em sessão",
+ "Username and password" : "Nome de usuário e senha",
+ "Log-in credentials, save in session" : "Credenciais de login, guardadas em sessão",
"User entered, store in database" : "Usuário adicionado, armazenado no banco de dados",
"RSA public key" : "Chave pública RSA",
"Public key" : "Chave pública",
@@ -86,7 +86,7 @@ OC.L10N.register(
"Dropbox" : "Dropbox",
"FTP" : "FTP",
"Host" : "Host",
- "Secure ftps://" : "Seguro ftps://",
+ "Secure ftps://" : "ftps:// seguro",
"Google Drive" : "Google Drive",
"Local" : "Local",
"Location" : "Localização",
@@ -101,11 +101,11 @@ OC.L10N.register(
"Username as share" : "Nome de usuário como compartilhado",
"OpenStack Object Storage" : "Armazenamento de Objetos OpenStack",
"Service name" : "Nome do serviço",
- "Request timeout (seconds)" : "Tempo esgotado requerido (segundos)",
+ "Request timeout (seconds)" : "Tempo requerido esgotado (segundos)",
"External storages" : "Armazenamentos externo",
- "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema instalá-lo.",
- "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, psolicite ao seu administrador do sistema instalá-lo.",
- "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema instalá-lo.",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
"No external storage configured" : "Nenhum armazendo externo foi configurado",
"You can add external storages in the personal settings" : "Você pode adicionar armazenamentos externos nas configurações pessoais",
"Name" : "Nome",
diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json
index e9e64f3325c..b0acf8586c0 100644
--- a/apps/files_external/l10n/pt_BR.json
+++ b/apps/files_external/l10n/pt_BR.json
@@ -1,6 +1,6 @@
{ "translations": {
- "Fetching request tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de requesição falhou. Verifique se a sua chave de aplicativo e segurança estão corretos.",
- "Fetching access tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de acesso falhou. Verifique se a sua chave de aplicativo e segurança estão corretos.",
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de requisição falhou. Verifique se sua chave de aplicativo e segurança estão corretos.",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "A solicitação dos tokens de acesso falhou. Verifique se sua chave de aplicativo e segurança estão corretos.",
"Please provide a valid app key and secret." : "Por favor forneça uma chave e segurança válidos.",
"Step 1 failed. Exception: %s" : "Passo 1 falhou. Exceção: %s",
"Step 2 failed. Exception: %s" : "Passo 2 falhou. Exceção: %s",
@@ -13,7 +13,7 @@
"Error configuring OAuth1" : "Erro configurando OAuth1",
"Error configuring OAuth2" : "Erro configurando OAuth2",
"Generate keys" : "Gerar chaves",
- "Error generating key pair" : "Erro ao gerar um par de chaves",
+ "Error generating key pair" : "Erro ao gerar o par de chaves",
"All users. Type to select user or group." : "Todos os usuários. Digite para selecionar usuário ou grupo.",
"(group)" : "(grupo)",
"Compatibility with Mac NFD encoding (slow)" : "Compatibilidade com a codificação Mac NFD (lento)",
@@ -21,14 +21,14 @@
"Saved" : "Salvo",
"Saving..." : "Salvando...",
"Save" : "Salvar",
- "Empty response from the server" : "Resposta vazia a partir do servidor",
- "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconectar e conectar novamente para ativar este ponto de montagem",
+ "Empty response from the server" : "Resposta vazia do servidor",
+ "Couldn't access. Please logout and login to activate this mount point" : "Não foi possível acessar. Por favor, desconecte e conecte novamente para ativar este ponto de montagem",
"Couldn't get the information from the remote server: {code} {type}" : "Não foi possível obter as informações do servidor remoto: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Não foi possível obter a lista de pontos de montagem externos: {type}",
"There was an error with message: " : "Houve um erro com a mensagem:",
"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",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Não foi possível obter a lista de unidades de pontos de montagem da rede Windows: resposta vazia 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. 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",
@@ -60,13 +60,13 @@
"Client secret" : "Segredo do cliente",
"OpenStack" : "OpenStack",
"Tenant name" : "Nome do inquilino",
- "Identity endpoint URL" : "Identidade pontofinal URL",
+ "Identity endpoint URL" : "URL da identidade destino",
"Rackspace" : "Espaço em rack",
"API key" : "Chave API",
"Global credentials" : "Credenciais globais",
"Log-in credentials, save in database" : "Credenciais de acesso, salvas no banco de dados",
- "Username and password" : "Nome de Usuário e senha",
- "Log-in credentials, save in session" : "Credenciais de login, guardados em sessão",
+ "Username and password" : "Nome de usuário e senha",
+ "Log-in credentials, save in session" : "Credenciais de login, guardadas em sessão",
"User entered, store in database" : "Usuário adicionado, armazenado no banco de dados",
"RSA public key" : "Chave pública RSA",
"Public key" : "Chave pública",
@@ -84,7 +84,7 @@
"Dropbox" : "Dropbox",
"FTP" : "FTP",
"Host" : "Host",
- "Secure ftps://" : "Seguro ftps://",
+ "Secure ftps://" : "ftps:// seguro",
"Google Drive" : "Google Drive",
"Local" : "Local",
"Location" : "Localização",
@@ -99,11 +99,11 @@
"Username as share" : "Nome de usuário como compartilhado",
"OpenStack Object Storage" : "Armazenamento de Objetos OpenStack",
"Service name" : "Nome do serviço",
- "Request timeout (seconds)" : "Tempo esgotado requerido (segundos)",
+ "Request timeout (seconds)" : "Tempo requerido esgotado (segundos)",
"External storages" : "Armazenamentos externo",
- "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema instalá-lo.",
- "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, psolicite ao seu administrador do sistema instalá-lo.",
- "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema instalá-lo.",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a cURL no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "O suporte a FTP no PHP não está habilitado ou instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" não está instalado. A montagem de %s não é possível. Por favor, solicite ao administrador do sistema instalá-lo.",
"No external storage configured" : "Nenhum armazendo externo foi configurado",
"You can add external storages in the personal settings" : "Você pode adicionar armazenamentos externos nas configurações pessoais",
"Name" : "Nome",
diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js
index 01eb3cc7808..e6a6996a056 100644
--- a/apps/files_external/l10n/tr.js
+++ b/apps/files_external/l10n/tr.js
@@ -103,9 +103,9 @@ OC.L10N.register(
"Service name" : "Hizmet adı",
"Request timeout (seconds)" : "İstek zaman aşımı (saniye)",
"External storages" : "Dış depolama",
- "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP cURL desteği etkin ya da kurulu değil. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
- "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP FTP desteği etkin ya da kurulu değil. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
- "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s kurulu değil. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP cURL desteği kurulmamış ya da etkinleştirilmemiş. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP FTP desteği kuurlmamış ya da etkinleştirilmemiş. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s kurulmamış. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
"No external storage configured" : "Herhangi bir dış depolama yapılandırılmamış",
"You can add external storages in the personal settings" : "Kişisel ayarlar bölümünden dış depolamaları ekleyebilirsiniz",
"Name" : "Ad",
diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json
index cd86370854f..76cffec546e 100644
--- a/apps/files_external/l10n/tr.json
+++ b/apps/files_external/l10n/tr.json
@@ -101,9 +101,9 @@
"Service name" : "Hizmet adı",
"Request timeout (seconds)" : "İstek zaman aşımı (saniye)",
"External storages" : "Dış depolama",
- "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP cURL desteği etkin ya da kurulu değil. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
- "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP FTP desteği etkin ya da kurulu değil. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
- "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s kurulu değil. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP cURL desteği kurulmamış ya da etkinleştirilmemiş. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "PHP FTP desteği kuurlmamış ya da etkinleştirilmemiş. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s kurulmamış. %s bağlanamaz. Lütfen kurulum için sistem yöneticinizle görüşün.",
"No external storage configured" : "Herhangi bir dış depolama yapılandırılmamış",
"You can add external storages in the personal settings" : "Kişisel ayarlar bölümünden dış depolamaları ekleyebilirsiniz",
"Name" : "Ad",
diff --git a/apps/files_external/lib/Controller/StoragesController.php b/apps/files_external/lib/Controller/StoragesController.php
index ef7cc8c6e4f..d962848bd78 100644
--- a/apps/files_external/lib/Controller/StoragesController.php
+++ b/apps/files_external/lib/Controller/StoragesController.php
@@ -143,7 +143,7 @@ abstract class StoragesController extends Controller {
*/
protected function validate(StorageConfig $storage) {
$mountPoint = $storage->getMountPoint();
- if ($mountPoint === '' || $mountPoint === '/') {
+ if ($mountPoint === '') {
return new DataResponse(
array(
'message' => (string)$this->l10n->t('Invalid mount point')
diff --git a/apps/files_external/lib/Lib/Storage/Swift.php b/apps/files_external/lib/Lib/Storage/Swift.php
index 5fec278ef3d..105d1073ae6 100644
--- a/apps/files_external/lib/Lib/Storage/Swift.php
+++ b/apps/files_external/lib/Lib/Storage/Swift.php
@@ -373,6 +373,10 @@ class Swift extends \OC\Files\Storage\Common {
$path = $this->normalizePath($path);
switch ($mode) {
+ case 'a':
+ case 'ab':
+ case 'a+':
+ return false;
case 'r':
case 'rb':
try {
@@ -395,12 +399,9 @@ class Swift extends \OC\Files\Storage\Common {
}
case 'w':
case 'wb':
- case 'a':
- case 'ab':
case 'r+':
case 'w+':
case 'wb+':
- case 'a+':
case 'x':
case 'x+':
case 'c':
@@ -419,10 +420,6 @@ class Swift extends \OC\Files\Storage\Common {
}
$source = $this->fopen($path, 'r');
file_put_contents($tmpFile, $source);
- // Seek to end if required
- if ($mode[0] === 'a') {
- fseek($tmpFile, 0, SEEK_END);
- }
}
$handle = fopen($tmpFile, $mode);
return CallbackWrapper::wrap($handle, null, null, function () use ($path, $tmpFile) {
diff --git a/apps/files_sharing/l10n/es_MX.js b/apps/files_sharing/l10n/es_MX.js
index 9c287312e8a..434e7a219e3 100644
--- a/apps/files_sharing/l10n/es_MX.js
+++ b/apps/files_sharing/l10n/es_MX.js
@@ -1,20 +1,101 @@
OC.L10N.register(
"files_sharing",
{
- "Cancel" : "Cancelar",
+ "Shared with you" : "Compartido con usted",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Nothing shared with you yet" : "Nada ha sido compartido aún con usted",
+ "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos con usted se mostrarán aquí",
+ "Nothing shared yet" : "Nada compartido aún",
+ "Files and folders you share will show up here" : "Los archivos y carpetas que comparta se mostrarán aquí",
+ "No shared links" : "No hay ligas compartidas",
+ "Files and folders you share by link will show up here" : "Los archivos y carpetas que comparta por ligas se mostrarán aquí",
+ "You can upload into this folder" : "Usted puede cargar archivos dentro de esta carpeta",
+ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
+ "Invalid server URL" : "URL del servidor inválido",
+ "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a su Nextcloud",
+ "Share" : "Compartir",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
"Shared by" : "Compartido por",
"Sharing" : "Compartiendo",
- "This share is password-protected" : "Este elemento compartido esta protegido por contraseña",
- "The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
+ "Downloaded via public link" : "Descargado mediante una liga pública",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "{file} downloaded via public link" : "{file} descargado mediante una liga pública",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group {group}" : "Compartido con el gupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} ha eliminado el elemento compartido del grupo {group}",
+ "You shared {file} with group {group}" : "Usted ha compartido {file} con el grupo {group}",
+ "You removed group {group} from {file}" : "Usted ha eliminado al grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} lo ha eliminado del grupo {group} de {file}",
+ "Shared as public link" : "Compartir como una liga pública",
+ "Removed public link" : "Liga pública eliminada",
+ "Public link expired" : "La liga pública ha expirado",
+ "{actor} shared as public link" : "{actor} compartió como una liga pública",
+ "{actor} removed public link" : "{actor} eliminó la liga pública",
+ "Public link of {actor} expired" : "La liga pública de {actor} ha expirado",
+ "You shared {file} as public link" : "Usted ha compartido {file} como una liga pública",
+ "You removed public link for {file}" : "Usted ha eliminado la liga pública de {file}",
+ "Public link expired for {file}" : "La liga pública para {file} ha expirado",
+ "{actor} shared {file} as public link" : "{actor} ha compatido {file} como una liga pública",
+ "{actor} removed public link for {file}" : "{actor} eliminó la liga pública de {file}",
+ "Public link of {actor} for {file} expired" : "La liga pública de {actor} para {file} ha expirado",
+ "{user} accepted the remote share" : "{user} aceptó el elemento compartido remoto",
+ "{user} declined the remote share" : "{user} declinó el elemento compartido remoto",
+ "You received a new remote share {file} from {user}" : "Usted ha recibido un nuevo elemento compartido remoto {file} de {user}",
+ "{user} accepted the remote share of {file}" : "{user} aceptó el elemento compartido remoto de {file}",
+ "{user} declined the remote share of {file}" : "{user} declinó el elemento compartido remoto de {file}",
+ "{user} unshared {file} from you" : "{user} ha dejado de compartir {file} con usted",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for {user}" : "Dejó de compartir con {user}",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "{actor} removed share for {user}" : "{actor} dejó de compartir con {user}",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "{actor} removed share" : "{actor} dejó de compartir",
+ "You shared {file} with {user}" : "Usted ha compartido {file} con {user}",
+ "You removed {user} from {file}" : "Usted quitó {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}",
+ "{actor} removed {user} from {file}" : "{actor} ha eliminado a {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} ha compartido {file} con usted",
+ "{actor} removed you from {file}" : "{actor} lo quitó de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta comparitdo por correo o por liga pública ha sido <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Un archivo o carpeta fue compartido desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>",
+ "Please specify a file or folder path" : "Favor de especificar un archivo o ruta de carpeta",
+ "Wrong path, file/folder doesn't exist" : "La ruta es incorrecta, el correo / carpeta no existe ",
+ "invalid permissions" : "permisos inválidos",
+ "Please specify a valid user" : "Favor de especificar un usuario válido",
+ "Please specify a valid group" : "Favor de especificar un grupo valido",
+ "Public upload disabled by the administrator" : "Cargas públicas deshabilitadas por el administrador",
+ "Public upload is only possible for publicly shared folders" : "Las cargas públicas son posibles sólo para carpetas compartidas públicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, favor de seguir el formato AAAA-MM-DD",
+ "You cannot share to a Circle if the app is not enabled" : "Usted no puede compartir al Círculo si la aplicación no esta habilitada",
+ "Please specify a valid circle" : "Favor de especificar un círculo válido",
+ "Not a directory" : "No es una carpeta",
+ "Could not lock path" : "No fue posible bloquear la ruta",
+ "Wrong or no update parameter given" : "El parametro de actualización esta erróneo o faltante",
+ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas",
+ "Cannot increase permissions" : "No es posible incrementar los permisos",
+ "%s is publicly shared" : "%s está compartido públicamente",
+ "This share is password-protected" : "Este elemento compartido esta protegido con contraseña",
+ "The password is wrong. Try again." : "La contraseña es incorrecta. Favor de intentarlo de nuevo.",
"Password" : "Contraseña",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
"Name" : "Nombre",
- "Sorry, this link doesn’t seem to work anymore." : "Lo siento, este enlace al parecer ya no funciona.",
+ "Expiration date" : "Fecha de expiración",
+ "Sorry, this link doesn’t seem to work anymore." : "Lo sentimos, esta liga no parece funcionar más. ",
"Reasons might be:" : "Las causas podrían ser:",
"the item was removed" : "el elemento fue eliminado",
- "the link expired" : "el enlace expiró",
- "sharing is disabled" : "compartir está desactivado",
- "For more info, please ask the person who sent this link." : "Para mayor información, contacte a la persona que le envió el enlace.",
+ "the link expired" : "la liga expiró",
+ "sharing is disabled" : "compartir está deshabilitado",
+ "For more info, please ask the person who sent this link." : "Para mayores informes, contacte a la persona que le envió esta liga.",
+ "Add to your Nextcloud" : "Agregar a su Nextcloud",
"Download" : "Descargar",
- "Direct link" : "Enlace directo"
+ "Download %s" : "Descargar %s",
+ "Direct link" : "Liga directa",
+ "Upload files to %s" : "Cargar archivos a %s",
+ "Uploading files…" : "Cargando archivos...",
+ "Uploaded files:" : "Archivos cargados:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es_MX.json b/apps/files_sharing/l10n/es_MX.json
index 26f064e346a..829003bff02 100644
--- a/apps/files_sharing/l10n/es_MX.json
+++ b/apps/files_sharing/l10n/es_MX.json
@@ -1,18 +1,99 @@
{ "translations": {
- "Cancel" : "Cancelar",
+ "Shared with you" : "Compartido con usted",
+ "Shared with others" : "Compartido con otros",
+ "Shared by link" : "Compartido por liga",
+ "Nothing shared with you yet" : "Nada ha sido compartido aún con usted",
+ "Files and folders others share with you will show up here" : "Los archivos y carpetas que sean compartidos con usted se mostrarán aquí",
+ "Nothing shared yet" : "Nada compartido aún",
+ "Files and folders you share will show up here" : "Los archivos y carpetas que comparta se mostrarán aquí",
+ "No shared links" : "No hay ligas compartidas",
+ "Files and folders you share by link will show up here" : "Los archivos y carpetas que comparta por ligas se mostrarán aquí",
+ "You can upload into this folder" : "Usted puede cargar archivos dentro de esta carpeta",
+ "No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
+ "Invalid server URL" : "URL del servidor inválido",
+ "Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a su Nextcloud",
+ "Share" : "Compartir",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
"Shared by" : "Compartido por",
"Sharing" : "Compartiendo",
- "This share is password-protected" : "Este elemento compartido esta protegido por contraseña",
- "The password is wrong. Try again." : "La contraseña introducida es errónea. Inténtelo de nuevo.",
+ "Downloaded via public link" : "Descargado mediante una liga pública",
+ "Downloaded by {email}" : "Descargado por {email}",
+ "{file} downloaded via public link" : "{file} descargado mediante una liga pública",
+ "{email} downloaded {file}" : "{email} descargó {file}",
+ "Shared with group {group}" : "Compartido con el gupo {group}",
+ "{actor} shared with group {group}" : "{actor} compartió con el grupo {group}",
+ "{actor} removed share for group {group}" : "{actor} ha eliminado el elemento compartido del grupo {group}",
+ "You shared {file} with group {group}" : "Usted ha compartido {file} con el grupo {group}",
+ "You removed group {group} from {file}" : "Usted ha eliminado al grupo {group} de {file}",
+ "{actor} shared {file} with group {group}" : "{actor} compartió {file} con el grupo {group}",
+ "{actor} removed group {group} from {file}" : "{actor} lo ha eliminado del grupo {group} de {file}",
+ "Shared as public link" : "Compartir como una liga pública",
+ "Removed public link" : "Liga pública eliminada",
+ "Public link expired" : "La liga pública ha expirado",
+ "{actor} shared as public link" : "{actor} compartió como una liga pública",
+ "{actor} removed public link" : "{actor} eliminó la liga pública",
+ "Public link of {actor} expired" : "La liga pública de {actor} ha expirado",
+ "You shared {file} as public link" : "Usted ha compartido {file} como una liga pública",
+ "You removed public link for {file}" : "Usted ha eliminado la liga pública de {file}",
+ "Public link expired for {file}" : "La liga pública para {file} ha expirado",
+ "{actor} shared {file} as public link" : "{actor} ha compatido {file} como una liga pública",
+ "{actor} removed public link for {file}" : "{actor} eliminó la liga pública de {file}",
+ "Public link of {actor} for {file} expired" : "La liga pública de {actor} para {file} ha expirado",
+ "{user} accepted the remote share" : "{user} aceptó el elemento compartido remoto",
+ "{user} declined the remote share" : "{user} declinó el elemento compartido remoto",
+ "You received a new remote share {file} from {user}" : "Usted ha recibido un nuevo elemento compartido remoto {file} de {user}",
+ "{user} accepted the remote share of {file}" : "{user} aceptó el elemento compartido remoto de {file}",
+ "{user} declined the remote share of {file}" : "{user} declinó el elemento compartido remoto de {file}",
+ "{user} unshared {file} from you" : "{user} ha dejado de compartir {file} con usted",
+ "Shared with {user}" : "Compartido con {user}",
+ "Removed share for {user}" : "Dejó de compartir con {user}",
+ "{actor} shared with {user}" : "{actor} compartió con {user}",
+ "{actor} removed share for {user}" : "{actor} dejó de compartir con {user}",
+ "Shared by {actor}" : "Compartido por {actor}",
+ "{actor} removed share" : "{actor} dejó de compartir",
+ "You shared {file} with {user}" : "Usted ha compartido {file} con {user}",
+ "You removed {user} from {file}" : "Usted quitó {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartió {file} con {user}",
+ "{actor} removed {user} from {file}" : "{actor} ha eliminado a {user} de {file}",
+ "{actor} shared {file} with you" : "{actor} ha compartido {file} con usted",
+ "{actor} removed you from {file}" : "{actor} lo quitó de {file}",
+ "A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Un archivo o carpeta comparitdo por correo o por liga pública ha sido <strong>descargado</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Un archivo o carpeta fue compartido desde <strong>otro servidor</strong>",
+ "A file or folder has been <strong>shared</strong>" : "Un archivo o carpeta ha sido <strong>compartido</strong>",
+ "Please specify a file or folder path" : "Favor de especificar un archivo o ruta de carpeta",
+ "Wrong path, file/folder doesn't exist" : "La ruta es incorrecta, el correo / carpeta no existe ",
+ "invalid permissions" : "permisos inválidos",
+ "Please specify a valid user" : "Favor de especificar un usuario válido",
+ "Please specify a valid group" : "Favor de especificar un grupo valido",
+ "Public upload disabled by the administrator" : "Cargas públicas deshabilitadas por el administrador",
+ "Public upload is only possible for publicly shared folders" : "Las cargas públicas son posibles sólo para carpetas compartidas públicamente",
+ "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, favor de seguir el formato AAAA-MM-DD",
+ "You cannot share to a Circle if the app is not enabled" : "Usted no puede compartir al Círculo si la aplicación no esta habilitada",
+ "Please specify a valid circle" : "Favor de especificar un círculo válido",
+ "Not a directory" : "No es una carpeta",
+ "Could not lock path" : "No fue posible bloquear la ruta",
+ "Wrong or no update parameter given" : "El parametro de actualización esta erróneo o faltante",
+ "Can't change permissions for public share links" : "No es posible cambiar los permisos para ligas públicas compartidas",
+ "Cannot increase permissions" : "No es posible incrementar los permisos",
+ "%s is publicly shared" : "%s está compartido públicamente",
+ "This share is password-protected" : "Este elemento compartido esta protegido con contraseña",
+ "The password is wrong. Try again." : "La contraseña es incorrecta. Favor de intentarlo de nuevo.",
"Password" : "Contraseña",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
"Name" : "Nombre",
- "Sorry, this link doesn’t seem to work anymore." : "Lo siento, este enlace al parecer ya no funciona.",
+ "Expiration date" : "Fecha de expiración",
+ "Sorry, this link doesn’t seem to work anymore." : "Lo sentimos, esta liga no parece funcionar más. ",
"Reasons might be:" : "Las causas podrían ser:",
"the item was removed" : "el elemento fue eliminado",
- "the link expired" : "el enlace expiró",
- "sharing is disabled" : "compartir está desactivado",
- "For more info, please ask the person who sent this link." : "Para mayor información, contacte a la persona que le envió el enlace.",
+ "the link expired" : "la liga expiró",
+ "sharing is disabled" : "compartir está deshabilitado",
+ "For more info, please ask the person who sent this link." : "Para mayores informes, contacte a la persona que le envió esta liga.",
+ "Add to your Nextcloud" : "Agregar a su Nextcloud",
"Download" : "Descargar",
- "Direct link" : "Enlace directo"
+ "Download %s" : "Descargar %s",
+ "Direct link" : "Liga directa",
+ "Upload files to %s" : "Cargar archivos a %s",
+ "Uploading files…" : "Cargando archivos...",
+ "Uploaded files:" : "Archivos cargados:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js
index 19393d8d93a..809c2b76170 100644
--- a/apps/files_sharing/l10n/fi.js
+++ b/apps/files_sharing/l10n/fi.js
@@ -57,6 +57,7 @@ OC.L10N.register(
"{actor} removed share" : "{actor} lopetti jakamisen",
"You shared {file} with {user}" : "Jaoit kohteen {file} käyttäjälle {user}",
"You removed {user} from {file}" : "Poistit käyttäjän {user} kohteen {file} käyttöoikeudet",
+ "{actor} shared {file} with {user}" : "{actor} jakoi kohteen {file} käyttäjälle {user}",
"{actor} removed {user} from {file}" : "{actor} poisti käyttäjän {user} kohteen {file} käyttöoikeudet",
"{actor} shared {file} with you" : "{actor} jakoi kohteen {file} kanssasi",
"{actor} removed you from {file}" : "{actor} poisti käyttöoikeutesi kohteeseen {file}",
diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json
index 195db6370fc..276b09f5a6a 100644
--- a/apps/files_sharing/l10n/fi.json
+++ b/apps/files_sharing/l10n/fi.json
@@ -55,6 +55,7 @@
"{actor} removed share" : "{actor} lopetti jakamisen",
"You shared {file} with {user}" : "Jaoit kohteen {file} käyttäjälle {user}",
"You removed {user} from {file}" : "Poistit käyttäjän {user} kohteen {file} käyttöoikeudet",
+ "{actor} shared {file} with {user}" : "{actor} jakoi kohteen {file} käyttäjälle {user}",
"{actor} removed {user} from {file}" : "{actor} poisti käyttäjän {user} kohteen {file} käyttöoikeudet",
"{actor} shared {file} with you" : "{actor} jakoi kohteen {file} kanssasi",
"{actor} removed you from {file}" : "{actor} poisti käyttöoikeutesi kohteeseen {file}",
diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js
index 92328bf0beb..305ec8388dd 100644
--- a/apps/files_sharing/l10n/pt_BR.js
+++ b/apps/files_sharing/l10n/pt_BR.js
@@ -4,15 +4,15 @@ OC.L10N.register(
"Shared with you" : "Compartilhado com você",
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado por link",
- "Nothing shared with you yet" : "Nada compartilhado com você até agora",
+ "Nothing shared with you yet" : "Nada foi compartilhado com você até agora",
"Files and folders others share with you will show up here" : "Arquivos e pastas que outros compartilham com você são mostrados aqui",
"Nothing shared yet" : "Nada compartilhado até agora",
"Files and folders you share will show up here" : "Arquivos e pastas que você compartilha são mostrados aqui",
"No shared links" : "Nenhum link compartilhado",
"Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha com link são mostrados aqui",
"You can upload into this folder" : "Você não pode enviar arquivos para esta pasta",
- "No compatible server found at {remote}" : "Nenhum servidor compativel encnotrado em {remote}",
- "Invalid server URL" : "URL do servidor inválida",
+ "No compatible server found at {remote}" : "Nenhum servidor compativel encontrado em {remote}",
+ "Invalid server URL" : "URL inválida do servidor",
"Failed to add the public link to your Nextcloud" : "Ocorreu uma falha ao adicionar o link público ao seu Nextcloud",
"Share" : "Compartilhamento",
"No expiration date set" : "Nenhuma data de expiração definida",
@@ -36,19 +36,19 @@ OC.L10N.register(
"Public link expired" : "O link público expirou",
"{actor} shared as public link" : "{actor} compartilhado como um link publico",
"{actor} removed public link" : "{actor} removido link publico",
- "Public link of {actor} expired" : "O Link público de {actor} expirou.",
+ "Public link of {actor} expired" : "O link público de {actor} expirou.",
"You shared {file} as public link" : "Voce compartilhou {file} como um link publico",
"You removed public link for {file}" : "Voce removeu o link publico para {file}",
- "Public link expired for {file}" : "O Link Público para {file} expirou",
+ "Public link expired for {file}" : "O link público para {file} expirou",
"{actor} shared {file} as public link" : "{actor} compartilhado {file} como um link publico",
"{actor} removed public link for {file}" : "{actor} removido link publico para {file}",
- "Public link of {actor} for {file} expired" : "O Link Público de {actor} para {file} espirou",
+ "Public link of {actor} for {file} expired" : "O link público de {actor} para {file} espirou",
"{user} accepted the remote share" : "{user} aceitou o compartilhamento remoto",
"{user} declined the remote share" : "{user} declinou do compartilhamento remoto",
"You received a new remote share {file} from {user}" : "Voce recebeu um novo compartilhamento remoto {file} de {user}",
"{user} accepted the remote share of {file}" : "{user} aceitou o compartilhamento remoto de {file}",
- "{user} declined the remote share of {file}" : "{user} declinou o compartilhamento remoto de {file}",
- "{user} unshared {file} from you" : "{user} descompartilhou {file} de voce",
+ "{user} declined the remote share of {file}" : "{user} declinou do compartilhamento remoto de {file}",
+ "{user} unshared {file} from you" : "{user} descompartilhou {file} de você",
"Shared with {user}" : "Compartilhado com {user}",
"Removed share for {user}" : "Compartilhamento removido para {user}",
"{actor} shared with {user}" : "{actor} compartilhado com {user}",
@@ -57,17 +57,18 @@ OC.L10N.register(
"{actor} removed share" : "{actor} compartilhamento removido",
"You shared {file} with {user}" : "Voce compartilhou {arquivo} com {user}",
"You removed {user} from {file}" : "Voce removeu {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartilhado {file} com {user}",
"{actor} removed {user} from {file}" : "{actor} removido {user} de {file}",
- "{actor} shared {file} with you" : "{actor} compartilhado {file} com voce",
- "{actor} removed you from {file}" : "{actor} removeu voce de {file}",
+ "{actor} shared {file} with you" : "{actor} compartilhado {file} com você",
+ "{actor} removed you from {file}" : "{actor} removeu você de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado por email ou por link publico foi <strong>baixado</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>",
"A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ",
"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 excluir o compartilhamento",
- "Could not delete share" : "Não foi possível eliminar o compartilhamento",
+ "Could not delete share" : "Não foi possível excluir o compartilhamento",
"Please specify a file or folder path" : "Por favor especifique um arquivo ou caminho",
- "Wrong path, file/folder doesn't exist" : "Caminho errado, arquivo/pasta não existe",
+ "Wrong path, file/folder doesn't exist" : "Caminho errado, o arquivo ou pasta não existe",
"Could not create share" : "Não foi possível criar o compartilhamento",
"invalid permissions" : "permissões inválidas",
"Please specify a valid user" : "Por favor especifique um usuário válido",
@@ -78,27 +79,29 @@ OC.L10N.register(
"Public upload is only possible for publicly shared folders" : "Envio pública só é possível para pastas compartilhadas publicamente",
"Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato de data deve ser YYYY-MM-DD",
"Sharing %s failed because the back end does not allow shares from type %s" : "O compartilhando %s falhou porque o backend não permite ações de tipo %s",
+ "You cannot share to a Circle if the app is not enabled" : "Você não pode compartilhar para um círculo se o aplicativo não está habiltiado",
+ "Please specify a valid circle" : "Por favor especifique um círculo válido",
"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",
- "Wrong or no update parameter given" : "Está errado ou nenhum parâmetro de atualização foi fornecido",
+ "Wrong or no update parameter given" : "O parâmetro de atualização fornecido está errado ou desatualizado",
"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",
+ "Cannot increase permissions" : "Não é possível aumentar permissões",
"%s is publicly shared" : "%s é um compartilhamento publico",
"Share API is disabled" : "O compartilhamento de API está desabilitado.",
- "This share is password-protected" : "Este compartilhamento esta protegido por senha",
+ "This share is password-protected" : "Este compartilhamento é protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
"Password" : "Senha",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Name" : "Nome",
- "Share time" : "Data compartilhado",
+ "Share time" : "Data de compartilhamento",
"Expiration date" : "Data de expiração",
- "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
+ "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
"Reasons might be:" : "As razões podem ser:",
"the item was removed" : "o item foi removido",
"the link expired" : "o link expirou",
"sharing is disabled" : "o compartilhamento está desativado",
- "For more info, please ask the person who sent this link." : "Para mais informações, por favor, pergunte a pessoa que enviou este link.",
+ "For more info, please ask the person who sent this link." : "Para mais informações, por favor, pergunte à pessoa que lhe enviou este link.",
"Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
"Download" : "Baixar",
"Download %s" : "Baixar %s",
diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json
index 58ed59a7a69..cab191c7877 100644
--- a/apps/files_sharing/l10n/pt_BR.json
+++ b/apps/files_sharing/l10n/pt_BR.json
@@ -2,15 +2,15 @@
"Shared with you" : "Compartilhado com você",
"Shared with others" : "Compartilhado com outros",
"Shared by link" : "Compartilhado por link",
- "Nothing shared with you yet" : "Nada compartilhado com você até agora",
+ "Nothing shared with you yet" : "Nada foi compartilhado com você até agora",
"Files and folders others share with you will show up here" : "Arquivos e pastas que outros compartilham com você são mostrados aqui",
"Nothing shared yet" : "Nada compartilhado até agora",
"Files and folders you share will show up here" : "Arquivos e pastas que você compartilha são mostrados aqui",
"No shared links" : "Nenhum link compartilhado",
"Files and folders you share by link will show up here" : "Arquivos e pastas que você compartilha com link são mostrados aqui",
"You can upload into this folder" : "Você não pode enviar arquivos para esta pasta",
- "No compatible server found at {remote}" : "Nenhum servidor compativel encnotrado em {remote}",
- "Invalid server URL" : "URL do servidor inválida",
+ "No compatible server found at {remote}" : "Nenhum servidor compativel encontrado em {remote}",
+ "Invalid server URL" : "URL inválida do servidor",
"Failed to add the public link to your Nextcloud" : "Ocorreu uma falha ao adicionar o link público ao seu Nextcloud",
"Share" : "Compartilhamento",
"No expiration date set" : "Nenhuma data de expiração definida",
@@ -34,19 +34,19 @@
"Public link expired" : "O link público expirou",
"{actor} shared as public link" : "{actor} compartilhado como um link publico",
"{actor} removed public link" : "{actor} removido link publico",
- "Public link of {actor} expired" : "O Link público de {actor} expirou.",
+ "Public link of {actor} expired" : "O link público de {actor} expirou.",
"You shared {file} as public link" : "Voce compartilhou {file} como um link publico",
"You removed public link for {file}" : "Voce removeu o link publico para {file}",
- "Public link expired for {file}" : "O Link Público para {file} expirou",
+ "Public link expired for {file}" : "O link público para {file} expirou",
"{actor} shared {file} as public link" : "{actor} compartilhado {file} como um link publico",
"{actor} removed public link for {file}" : "{actor} removido link publico para {file}",
- "Public link of {actor} for {file} expired" : "O Link Público de {actor} para {file} espirou",
+ "Public link of {actor} for {file} expired" : "O link público de {actor} para {file} espirou",
"{user} accepted the remote share" : "{user} aceitou o compartilhamento remoto",
"{user} declined the remote share" : "{user} declinou do compartilhamento remoto",
"You received a new remote share {file} from {user}" : "Voce recebeu um novo compartilhamento remoto {file} de {user}",
"{user} accepted the remote share of {file}" : "{user} aceitou o compartilhamento remoto de {file}",
- "{user} declined the remote share of {file}" : "{user} declinou o compartilhamento remoto de {file}",
- "{user} unshared {file} from you" : "{user} descompartilhou {file} de voce",
+ "{user} declined the remote share of {file}" : "{user} declinou do compartilhamento remoto de {file}",
+ "{user} unshared {file} from you" : "{user} descompartilhou {file} de você",
"Shared with {user}" : "Compartilhado com {user}",
"Removed share for {user}" : "Compartilhamento removido para {user}",
"{actor} shared with {user}" : "{actor} compartilhado com {user}",
@@ -55,17 +55,18 @@
"{actor} removed share" : "{actor} compartilhamento removido",
"You shared {file} with {user}" : "Voce compartilhou {arquivo} com {user}",
"You removed {user} from {file}" : "Voce removeu {user} de {file}",
+ "{actor} shared {file} with {user}" : "{actor} compartilhado {file} com {user}",
"{actor} removed {user} from {file}" : "{actor} removido {user} de {file}",
- "{actor} shared {file} with you" : "{actor} compartilhado {file} com voce",
- "{actor} removed you from {file}" : "{actor} removeu voce de {file}",
+ "{actor} shared {file} with you" : "{actor} compartilhado {file} com você",
+ "{actor} removed you from {file}" : "{actor} removeu você de {file}",
"A file or folder shared by mail or by public link was <strong>downloaded</strong>" : "Um arquivo ou pasta compartilhado por email ou por link publico foi <strong>baixado</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>",
"A file or folder has been <strong>shared</strong>" : "Um arquivo ou pasta foi <strong>compartilhado</strong> ",
"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 excluir o compartilhamento",
- "Could not delete share" : "Não foi possível eliminar o compartilhamento",
+ "Could not delete share" : "Não foi possível excluir o compartilhamento",
"Please specify a file or folder path" : "Por favor especifique um arquivo ou caminho",
- "Wrong path, file/folder doesn't exist" : "Caminho errado, arquivo/pasta não existe",
+ "Wrong path, file/folder doesn't exist" : "Caminho errado, o arquivo ou pasta não existe",
"Could not create share" : "Não foi possível criar o compartilhamento",
"invalid permissions" : "permissões inválidas",
"Please specify a valid user" : "Por favor especifique um usuário válido",
@@ -76,27 +77,29 @@
"Public upload is only possible for publicly shared folders" : "Envio pública só é possível para pastas compartilhadas publicamente",
"Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato de data deve ser YYYY-MM-DD",
"Sharing %s failed because the back end does not allow shares from type %s" : "O compartilhando %s falhou porque o backend não permite ações de tipo %s",
+ "You cannot share to a Circle if the app is not enabled" : "Você não pode compartilhar para um círculo se o aplicativo não está habiltiado",
+ "Please specify a valid circle" : "Por favor especifique um círculo válido",
"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",
- "Wrong or no update parameter given" : "Está errado ou nenhum parâmetro de atualização foi fornecido",
+ "Wrong or no update parameter given" : "O parâmetro de atualização fornecido está errado ou desatualizado",
"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",
+ "Cannot increase permissions" : "Não é possível aumentar permissões",
"%s is publicly shared" : "%s é um compartilhamento publico",
"Share API is disabled" : "O compartilhamento de API está desabilitado.",
- "This share is password-protected" : "Este compartilhamento esta protegido por senha",
+ "This share is password-protected" : "Este compartilhamento é protegido por senha",
"The password is wrong. Try again." : "Senha incorreta. Tente novamente.",
"Password" : "Senha",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Name" : "Nome",
- "Share time" : "Data compartilhado",
+ "Share time" : "Data de compartilhamento",
"Expiration date" : "Data de expiração",
- "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
+ "Sorry, this link doesn’t seem to work anymore." : "Desculpe, este link parece não mais funcionar.",
"Reasons might be:" : "As razões podem ser:",
"the item was removed" : "o item foi removido",
"the link expired" : "o link expirou",
"sharing is disabled" : "o compartilhamento está desativado",
- "For more info, please ask the person who sent this link." : "Para mais informações, por favor, pergunte a pessoa que enviou este link.",
+ "For more info, please ask the person who sent this link." : "Para mais informações, por favor, pergunte à pessoa que lhe enviou este link.",
"Add to your Nextcloud" : "Adicionar ao seu Nextcloud",
"Download" : "Baixar",
"Download %s" : "Baixar %s",
diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js
index 7370d65f9d7..5065569f27a 100644
--- a/apps/files_sharing/l10n/ru.js
+++ b/apps/files_sharing/l10n/ru.js
@@ -19,7 +19,7 @@ OC.L10N.register(
"Shared by" : "Поделился",
"Sharing" : "Общий доступ",
"File shares" : "Файловые ресурсы общего доступа",
- "Downloaded via public link" : "Скачано по открытой ссылке",
+ "Downloaded via public link" : "Скачано по общедоступной ссылке",
"Downloaded by {email}" : "Скачано {email}",
"{file} downloaded via public link" : "{file} скачан по общедоступной ссылке",
"{email} downloaded {file}" : "{email} скачал {file}",
@@ -74,7 +74,7 @@ OC.L10N.register(
"Please specify a valid user" : "Пожалуйста, укажите допустимого пользователя",
"Group sharing is disabled by the administrator" : "Общий доступ для групп отключён администратором",
"Please specify a valid group" : "Пожалуйста, укажите допустимую группу",
- "Public link sharing is disabled by the administrator" : "Публикация через общие ссылки отключена администратором",
+ "Public link sharing is disabled by the administrator" : "Публикация через общедоступные ссылки отключена администратором",
"Public upload disabled by the administrator" : "Загрузка в общедоступную публикацию запрещена администратором",
"Public upload is only possible for publicly shared folders" : "Общедоступная загрузка возможна только в папки с общим доступом",
"Invalid date, date format must be YYYY-MM-DD" : "Неверная дата, формат даты должен быть ГГГГ-ММ-ДД",
@@ -85,9 +85,9 @@ OC.L10N.register(
"Not a directory" : "Это не каталог",
"Could not lock path" : "Не удалось заблокировать путь",
"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" : "Нельзя увеличить права",
- "%s is publicly shared" : "%s опубликован",
+ "%s is publicly shared" : "%s опубликован ",
"Share API is disabled" : "API общего доступа отключён",
"This share is password-protected" : "Общий ресурс защищен паролем",
"The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.",
diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json
index 230e4d78b4a..8330a55101d 100644
--- a/apps/files_sharing/l10n/ru.json
+++ b/apps/files_sharing/l10n/ru.json
@@ -17,7 +17,7 @@
"Shared by" : "Поделился",
"Sharing" : "Общий доступ",
"File shares" : "Файловые ресурсы общего доступа",
- "Downloaded via public link" : "Скачано по открытой ссылке",
+ "Downloaded via public link" : "Скачано по общедоступной ссылке",
"Downloaded by {email}" : "Скачано {email}",
"{file} downloaded via public link" : "{file} скачан по общедоступной ссылке",
"{email} downloaded {file}" : "{email} скачал {file}",
@@ -72,7 +72,7 @@
"Please specify a valid user" : "Пожалуйста, укажите допустимого пользователя",
"Group sharing is disabled by the administrator" : "Общий доступ для групп отключён администратором",
"Please specify a valid group" : "Пожалуйста, укажите допустимую группу",
- "Public link sharing is disabled by the administrator" : "Публикация через общие ссылки отключена администратором",
+ "Public link sharing is disabled by the administrator" : "Публикация через общедоступные ссылки отключена администратором",
"Public upload disabled by the administrator" : "Загрузка в общедоступную публикацию запрещена администратором",
"Public upload is only possible for publicly shared folders" : "Общедоступная загрузка возможна только в папки с общим доступом",
"Invalid date, date format must be YYYY-MM-DD" : "Неверная дата, формат даты должен быть ГГГГ-ММ-ДД",
@@ -83,9 +83,9 @@
"Not a directory" : "Это не каталог",
"Could not lock path" : "Не удалось заблокировать путь",
"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" : "Нельзя увеличить права",
- "%s is publicly shared" : "%s опубликован",
+ "%s is publicly shared" : "%s опубликован ",
"Share API is disabled" : "API общего доступа отключён",
"This share is password-protected" : "Общий ресурс защищен паролем",
"The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.",
diff --git a/apps/files_trashbin/l10n/es_MX.js b/apps/files_trashbin/l10n/es_MX.js
index 109427e9d80..62c1944a81f 100644
--- a/apps/files_trashbin/l10n/es_MX.js
+++ b/apps/files_trashbin/l10n/es_MX.js
@@ -1,15 +1,21 @@
OC.L10N.register(
"files_trashbin",
{
- "Couldn't delete %s permanently" : "No se puede eliminar %s permanentemente",
- "Couldn't restore %s" : "No se puede restaurar %s",
- "Deleted files" : "Archivos eliminados",
- "Restore" : "Recuperar",
- "Delete" : "Eliminar",
- "Delete permanently" : "Eliminar permanentemente",
+ "Couldn't delete %s permanently" : "No fue posible eliminar %s permanentemente",
+ "Couldn't restore %s" : "No fue posible restaurar %s",
+ "Deleted files" : "Archivos borrados",
+ "Restore" : "Restaurar",
+ "Delete" : "Borrar",
+ "Delete permanently" : "Borrar permanentemente",
"Error" : "Error",
- "restored" : "recuperado",
+ "This operation is forbidden" : "Esta opración está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio no está disponible, favor de verificar las bitácoras o contacte al administrador",
+ "restored" : "restaurado",
+ "No deleted files" : "No hay archivos borrados",
+ "You will be able to recover deleted files from here" : "Usted podrá recuperar archivos borrados desde aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
"Name" : "Nombre",
- "Deleted" : "Eliminado"
+ "Deleted" : "Borrado"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_trashbin/l10n/es_MX.json b/apps/files_trashbin/l10n/es_MX.json
index a1bbba28cde..294115a66e4 100644
--- a/apps/files_trashbin/l10n/es_MX.json
+++ b/apps/files_trashbin/l10n/es_MX.json
@@ -1,13 +1,19 @@
{ "translations": {
- "Couldn't delete %s permanently" : "No se puede eliminar %s permanentemente",
- "Couldn't restore %s" : "No se puede restaurar %s",
- "Deleted files" : "Archivos eliminados",
- "Restore" : "Recuperar",
- "Delete" : "Eliminar",
- "Delete permanently" : "Eliminar permanentemente",
+ "Couldn't delete %s permanently" : "No fue posible eliminar %s permanentemente",
+ "Couldn't restore %s" : "No fue posible restaurar %s",
+ "Deleted files" : "Archivos borrados",
+ "Restore" : "Restaurar",
+ "Delete" : "Borrar",
+ "Delete permanently" : "Borrar permanentemente",
"Error" : "Error",
- "restored" : "recuperado",
+ "This operation is forbidden" : "Esta opración está prohibida",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este directorio no está disponible, favor de verificar las bitácoras o contacte al administrador",
+ "restored" : "restaurado",
+ "No deleted files" : "No hay archivos borrados",
+ "You will be able to recover deleted files from here" : "Usted podrá recuperar archivos borrados desde aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
+ "Select all" : "Seleccionar todo",
"Name" : "Nombre",
- "Deleted" : "Eliminado"
+ "Deleted" : "Borrado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/pt_BR.js b/apps/files_trashbin/l10n/pt_BR.js
index 806200ea651..105b3f5a480 100644
--- a/apps/files_trashbin/l10n/pt_BR.js
+++ b/apps/files_trashbin/l10n/pt_BR.js
@@ -3,16 +3,16 @@ OC.L10N.register(
{
"Couldn't delete %s permanently" : "Não foi possível excluir %s permanentemente",
"Couldn't restore %s" : "Não foi possível restaurar %s",
- "Deleted files" : "Arquivos apagados",
+ "Deleted files" : "Arquivos excluídos",
"Restore" : "Restaurar",
"Delete" : "Excluir",
"Delete permanently" : "Excluir permanentemente",
"Error" : "Erro",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível. Por favor verifique os logs ou entre em contato com o administrador",
"restored" : "restaurado",
"No deleted files" : "Nenhum arquivo excluído",
- "You will be able to recover deleted files from here" : "Neste local, você será capaz de recuperar arquivos excluídos",
+ "You will be able to recover deleted files from here" : "Neste local, você pode recuperar arquivos excluídos",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Name" : "Nome",
diff --git a/apps/files_trashbin/l10n/pt_BR.json b/apps/files_trashbin/l10n/pt_BR.json
index 177a377bdfd..f9cad4f911d 100644
--- a/apps/files_trashbin/l10n/pt_BR.json
+++ b/apps/files_trashbin/l10n/pt_BR.json
@@ -1,16 +1,16 @@
{ "translations": {
"Couldn't delete %s permanently" : "Não foi possível excluir %s permanentemente",
"Couldn't restore %s" : "Não foi possível restaurar %s",
- "Deleted files" : "Arquivos apagados",
+ "Deleted files" : "Arquivos excluídos",
"Restore" : "Restaurar",
"Delete" : "Excluir",
"Delete permanently" : "Excluir permanentemente",
"Error" : "Erro",
"This operation is forbidden" : "Esta operação é proibida",
- "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível, por favor, verifique os logs ou entre em contato com o administrador",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Este diretório não está disponível. Por favor verifique os logs ou entre em contato com o administrador",
"restored" : "restaurado",
"No deleted files" : "Nenhum arquivo excluído",
- "You will be able to recover deleted files from here" : "Neste local, você será capaz de recuperar arquivos excluídos",
+ "You will be able to recover deleted files from here" : "Neste local, você pode recuperar arquivos excluídos",
"No entries found in this folder" : "Nenhuma entrada foi encontrada nesta pasta",
"Select all" : "Selecionar tudo",
"Name" : "Nome",
diff --git a/apps/files_trashbin/l10n/sr.js b/apps/files_trashbin/l10n/sr.js
index dc3c8b46bc7..0654dc5711f 100644
--- a/apps/files_trashbin/l10n/sr.js
+++ b/apps/files_trashbin/l10n/sr.js
@@ -9,7 +9,7 @@ OC.L10N.register(
"Delete permanently" : "Обриши заувек",
"Error" : "Грешка",
"This operation is forbidden" : "Ова радња је забрањена",
- "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записе или контактирајте администратора",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записнике или контактирајте администратора",
"restored" : "враћено",
"No deleted files" : "Нема обрисаних фајлова",
"You will be able to recover deleted files from here" : "Одавде ћете моћи да повратите обрисане фајлове",
diff --git a/apps/files_trashbin/l10n/sr.json b/apps/files_trashbin/l10n/sr.json
index c57bbdb83d4..237a384988e 100644
--- a/apps/files_trashbin/l10n/sr.json
+++ b/apps/files_trashbin/l10n/sr.json
@@ -7,7 +7,7 @@
"Delete permanently" : "Обриши заувек",
"Error" : "Грешка",
"This operation is forbidden" : "Ова радња је забрањена",
- "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записе или контактирајте администратора",
+ "This directory is unavailable, please check the logs or contact the administrator" : "Овај директоријум није доступан, проверите записнике или контактирајте администратора",
"restored" : "враћено",
"No deleted files" : "Нема обрисаних фајлова",
"You will be able to recover deleted files from here" : "Одавде ћете моћи да повратите обрисане фајлове",
diff --git a/apps/files_versions/l10n/es_MX.js b/apps/files_versions/l10n/es_MX.js
index 2af328055b1..8bda31e11d3 100644
--- a/apps/files_versions/l10n/es_MX.js
+++ b/apps/files_versions/l10n/es_MX.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"files_versions",
{
- "Could not revert: %s" : "No se pudo revertir: %s",
+ "Could not revert: %s" : "No fue posible revertir: %s",
"Versions" : "Versiones",
"Failed to revert {file} to revision {timestamp}." : "Falla al revertir {archivo} a revisión {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
diff --git a/apps/files_versions/l10n/es_MX.json b/apps/files_versions/l10n/es_MX.json
index 34348cde567..b31be35fcbc 100644
--- a/apps/files_versions/l10n/es_MX.json
+++ b/apps/files_versions/l10n/es_MX.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Could not revert: %s" : "No se pudo revertir: %s",
+ "Could not revert: %s" : "No fue posible revertir: %s",
"Versions" : "Versiones",
"Failed to revert {file} to revision {timestamp}." : "Falla al revertir {archivo} a revisión {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
diff --git a/apps/files_versions/l10n/fi.js b/apps/files_versions/l10n/fi.js
index cd42bef6d3e..b89debb63c1 100644
--- a/apps/files_versions/l10n/fi.js
+++ b/apps/files_versions/l10n/fi.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Tiedoston {file} palautus versioon {timestamp} epäonnistui.",
"_%n byte_::_%n bytes_" : ["%n tavu","%n tavua"],
"Restore" : "Palauta",
+ "No earlier versions available" : "Ei aikaisempia versioita saatavilla",
+ "More versions …" : "Lisää versioita...",
"No versions available" : "Ei versioita saatavilla",
"More versions..." : "Lisää versioita..."
},
diff --git a/apps/files_versions/l10n/fi.json b/apps/files_versions/l10n/fi.json
index 6ae01393eb4..58d3311b77c 100644
--- a/apps/files_versions/l10n/fi.json
+++ b/apps/files_versions/l10n/fi.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Tiedoston {file} palautus versioon {timestamp} epäonnistui.",
"_%n byte_::_%n bytes_" : ["%n tavu","%n tavua"],
"Restore" : "Palauta",
+ "No earlier versions available" : "Ei aikaisempia versioita saatavilla",
+ "More versions …" : "Lisää versioita...",
"No versions available" : "Ei versioita saatavilla",
"More versions..." : "Lisää versioita..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/hu.js b/apps/files_versions/l10n/hu.js
index 1f9b8bbef77..ecf008d08b0 100644
--- a/apps/files_versions/l10n/hu.js
+++ b/apps/files_versions/l10n/hu.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "{file} fájlt nem sikerült erre visszaállítani: {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"],
"Restore" : "Visszaállítás",
+ "No earlier versions available" : "Nincsenek elérhető korábbi verziók",
"More versions …" : "További változatok...",
"No versions available" : "Nincs elérhető verzió",
"More versions..." : "További változatok..."
diff --git a/apps/files_versions/l10n/hu.json b/apps/files_versions/l10n/hu.json
index 408cd2d1349..dd4042722b4 100644
--- a/apps/files_versions/l10n/hu.json
+++ b/apps/files_versions/l10n/hu.json
@@ -4,6 +4,7 @@
"Failed to revert {file} to revision {timestamp}." : "{file} fájlt nem sikerült erre visszaállítani: {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"],
"Restore" : "Visszaállítás",
+ "No earlier versions available" : "Nincsenek elérhető korábbi verziók",
"More versions …" : "További változatok...",
"No versions available" : "Nincs elérhető verzió",
"More versions..." : "További változatok..."
diff --git a/apps/files_versions/l10n/is.js b/apps/files_versions/l10n/is.js
index 0db905fec53..cf26daed813 100644
--- a/apps/files_versions/l10n/is.js
+++ b/apps/files_versions/l10n/is.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Mistókst að endurheimta {file} útgáfu {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bæti","%n bæti"],
"Restore" : "Endurheimta",
+ "No earlier versions available" : "Engar eldri útgáfur í boði",
+ "More versions …" : "Fleiri útgáfur ...",
"No versions available" : "Engar aðrar útgáfur í boði",
"More versions..." : "Fleiri útgáfur..."
},
diff --git a/apps/files_versions/l10n/is.json b/apps/files_versions/l10n/is.json
index 6b6d813bb42..b630cf52491 100644
--- a/apps/files_versions/l10n/is.json
+++ b/apps/files_versions/l10n/is.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Mistókst að endurheimta {file} útgáfu {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n bæti","%n bæti"],
"Restore" : "Endurheimta",
+ "No earlier versions available" : "Engar eldri útgáfur í boði",
+ "More versions …" : "Fleiri útgáfur ...",
"No versions available" : "Engar aðrar útgáfur í boði",
"More versions..." : "Fleiri útgáfur..."
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
diff --git a/apps/files_versions/l10n/nl.js b/apps/files_versions/l10n/nl.js
index 4095f26dd17..b20dfe45af5 100644
--- a/apps/files_versions/l10n/nl.js
+++ b/apps/files_versions/l10n/nl.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Kon {file} niet terugdraaien naar revisie {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Herstellen",
+ "No earlier versions available" : "Geen oudere versies beschikbaar",
+ "More versions …" : "Meer versies...",
"No versions available" : "Geen versies beschikbaar",
"More versions..." : "Meer versies..."
},
diff --git a/apps/files_versions/l10n/nl.json b/apps/files_versions/l10n/nl.json
index dbca3ba272c..4b6243f9be2 100644
--- a/apps/files_versions/l10n/nl.json
+++ b/apps/files_versions/l10n/nl.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Kon {file} niet terugdraaien naar revisie {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Herstellen",
+ "No earlier versions available" : "Geen oudere versies beschikbaar",
+ "More versions …" : "Meer versies...",
"No versions available" : "Geen versies beschikbaar",
"More versions..." : "Meer versies..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/files_versions/l10n/pt_BR.js b/apps/files_versions/l10n/pt_BR.js
index 8d3eaa411ae..08d063a2d2c 100644
--- a/apps/files_versions/l10n/pt_BR.js
+++ b/apps/files_versions/l10n/pt_BR.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Falha ao reverter {file} para a revisão {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Restaurar",
+ "No earlier versions available" : "Não há versões mais novas disponíveis",
+ "More versions …" : "Mais versões ...",
"No versions available" : "Não há versões disponíveis",
"More versions..." : "Mais versões..."
},
diff --git a/apps/files_versions/l10n/pt_BR.json b/apps/files_versions/l10n/pt_BR.json
index 2000ba2fd73..9da5f7efac2 100644
--- a/apps/files_versions/l10n/pt_BR.json
+++ b/apps/files_versions/l10n/pt_BR.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Falha ao reverter {file} para a revisão {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Restore" : "Restaurar",
+ "No earlier versions available" : "Não há versões mais novas disponíveis",
+ "More versions …" : "Mais versões ...",
"No versions available" : "Não há versões disponíveis",
"More versions..." : "Mais versões..."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/apps/files_versions/l10n/ru.js b/apps/files_versions/l10n/ru.js
index 2b1f0e8bed0..0d128bb0703 100644
--- a/apps/files_versions/l10n/ru.js
+++ b/apps/files_versions/l10n/ru.js
@@ -6,6 +6,8 @@ OC.L10N.register(
"Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байт","%n байт"],
"Restore" : "Откатить",
+ "No earlier versions available" : "Нет более ранних версий…",
+ "More versions …" : "Ещё версии…",
"No versions available" : "Нет доступных версий",
"More versions..." : "Ещё версии..."
},
diff --git a/apps/files_versions/l10n/ru.json b/apps/files_versions/l10n/ru.json
index 2dd932bb62f..d8577d33573 100644
--- a/apps/files_versions/l10n/ru.json
+++ b/apps/files_versions/l10n/ru.json
@@ -4,6 +4,8 @@
"Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.",
"_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байт","%n байт"],
"Restore" : "Откатить",
+ "No earlier versions available" : "Нет более ранних версий…",
+ "More versions …" : "Ещё версии…",
"No versions available" : "Нет доступных версий",
"More versions..." : "Ещё версии..."
},"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_versions/l10n/zh_CN.js b/apps/files_versions/l10n/zh_CN.js
index bc7c43ff1e2..cd3f22b2ba4 100644
--- a/apps/files_versions/l10n/zh_CN.js
+++ b/apps/files_versions/l10n/zh_CN.js
@@ -1,11 +1,13 @@
OC.L10N.register(
"files_versions",
{
- "Could not revert: %s" : "无法恢复: %s",
+ "Could not revert: %s" : "无法恢复:%s",
"Versions" : "版本",
"Failed to revert {file} to revision {timestamp}." : "无法恢复 {file} 到 {timestamp} 的版本。",
"_%n byte_::_%n bytes_" : ["%n 比特"],
"Restore" : "恢复",
+ "No earlier versions available" : "无可用的更早的版本",
+ "More versions …" : "更多版本…",
"No versions available" : "没有可用的版本",
"More versions..." : "更多版本..."
},
diff --git a/apps/files_versions/l10n/zh_CN.json b/apps/files_versions/l10n/zh_CN.json
index 5c7482c5e19..865d994e74f 100644
--- a/apps/files_versions/l10n/zh_CN.json
+++ b/apps/files_versions/l10n/zh_CN.json
@@ -1,9 +1,11 @@
{ "translations": {
- "Could not revert: %s" : "无法恢复: %s",
+ "Could not revert: %s" : "无法恢复:%s",
"Versions" : "版本",
"Failed to revert {file} to revision {timestamp}." : "无法恢复 {file} 到 {timestamp} 的版本。",
"_%n byte_::_%n bytes_" : ["%n 比特"],
"Restore" : "恢复",
+ "No earlier versions available" : "无可用的更早的版本",
+ "More versions …" : "更多版本…",
"No versions available" : "没有可用的版本",
"More versions..." : "更多版本..."
},"pluralForm" :"nplurals=1; plural=0;"
diff --git a/apps/sharebymail/l10n/es_MX.js b/apps/sharebymail/l10n/es_MX.js
new file mode 100644
index 00000000000..4140fdf7bec
--- /dev/null
+++ b/apps/sharebymail/l10n/es_MX.js
@@ -0,0 +1,24 @@
+OC.L10N.register(
+ "sharebymail",
+ {
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {email}" : "Compartido con {email}",
+ "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "You shared %1$s with %2$s by mail" : "Usted ha compartido %1$s con %2$s por correo",
+ "You shared {file} with {email} by mail" : "Usted ha compartido {file} con {email} por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s ha compartido %1$s con %2$s por correo ",
+ "{actor} shared {file} with {email} by mail" : "{actor} ha compartido {file} con {email} por correo",
+ "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s",
+ "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso ccompartido por correo electrónico",
+ "%s shared »%s« with you" : "%s ha compartido »%s« con usted",
+ "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« con usted a nombre de %s",
+ "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« con usted a nombre de %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« con usted.\n\n%s\n",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> con usted a nombre de %s.<br><br> ",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> con usted.<br><br> "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/sharebymail/l10n/es_MX.json b/apps/sharebymail/l10n/es_MX.json
new file mode 100644
index 00000000000..3c702e9f468
--- /dev/null
+++ b/apps/sharebymail/l10n/es_MX.json
@@ -0,0 +1,22 @@
+{ "translations": {
+ "Shared with %1$s" : "Compartido con %1$s",
+ "Shared with {email}" : "Compartido con {email}",
+ "Shared with %1$s by %2$s" : "Compartido con %1$s por %2$s",
+ "Shared with {email} by {actor}" : "Compartido con {email} por {actor}",
+ "You shared %1$s with %2$s by mail" : "Usted ha compartido %1$s con %2$s por correo",
+ "You shared {file} with {email} by mail" : "Usted ha compartido {file} con {email} por correo",
+ "%3$s shared %1$s with %2$s by mail" : "%3$s ha compartido %1$s con %2$s por correo ",
+ "{actor} shared {file} with {email} by mail" : "{actor} ha compartido {file} con {email} por correo",
+ "Sharing %s failed, this item is already shared with %s" : "Se presentó una falla al compartir %s, este elemento ya ha sido compartido con %s",
+ "Failed to send share by E-mail" : "Se presentó una falla al enviar el recurso ccompartido por correo electrónico",
+ "%s shared »%s« with you" : "%s ha compartido »%s« con usted",
+ "%s shared »%s« with you on behalf of %s" : "%s ha compartido »%s« con usted a nombre de %s",
+ "Failed to create the E-mail" : "Se presentó una falla al crear el correo electrónico",
+ "Could not find share" : "No fue posible encontrar el elemento compartido",
+ "Hey there,\n\n%s shared »%s« with you on behalf of %s.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« con usted a nombre de %s.\n\n%s\n",
+ "Hey there,\n\n%s shared »%s« with you.\n\n%s\n\n" : "Hola,\n\n%s ha compartido »%s« con usted.\n\n%s\n",
+ "Cheers!" : "¡Saludos!",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you on behalf of %s.<br><br>" : "Hola,<br><br>%s ha compartido <a href=\"%s\">%s</a> con usted a nombre de %s.<br><br> ",
+ "Hey there,<br><br>%s shared <a href=\"%s\">%s</a> with you.<br><br>" : "Hola, <br><br>%s ha compartido <a href=\"%s\">%s</a> con usted.<br><br> "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/systemtags/l10n/es_MX.js b/apps/systemtags/l10n/es_MX.js
index e5c543ce18b..1b66b2bf2be 100644
--- a/apps/systemtags/l10n/es_MX.js
+++ b/apps/systemtags/l10n/es_MX.js
@@ -2,7 +2,54 @@ OC.L10N.register(
"systemtags",
{
"Tags" : "Etiquetas",
+ "Update" : "Actualizar",
+ "Create" : "Crear",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Tagged files" : "Archivos etiquetados",
+ "Select tags to filter by" : "Seleccione las etiquetas para el filtro",
+ "No tags found" : "No se encontraron etiquetas",
+ "Please select tags to filter by" : "Favor de seleccionar etiquetas para el filtro",
+ "No files found for the selected tags" : "No se encontraron archivos para las etiquetas seleccionadas",
+ "Added system tag %1$s" : "Etiqueta del sistema %1$s agregada",
+ "Added system tag {systemtag}" : "Etiqueta del sistema {systemtag} agregada",
+ "%1$s added system tag %2$s" : "%1$s agregó la etiqueta del sistema %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} agregó la etiqueta del sistema {systemtag}",
+ "Removed system tag %1$s" : "Eliminó la etiqueta del sistema %1$s",
+ "Removed system tag {systemtag}" : "Etiqueta del sistema {systemtag} eliminada",
+ "%1$s removed system tag %2$s" : "%1$s eliminó la etiqueta del sistema %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} eliminó la etiqueta del sistema {systemtag}",
+ "You created system tag %1$s" : "Usted creó la etiqueta del sistema %1$s",
+ "You created system tag {systemtag}" : "Usted creó la etiqueta del sistema {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s creo la etiqueta del sistema %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} creó la etiqueta del sistema {systemtag}",
+ "You deleted system tag %1$s" : "Usted borró la etiqueta del sistema %1$s",
+ "You deleted system tag {systemtag}" : "Usted borró la etiqueta del sistema {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s borró la etiqueta del sistema %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} borró la etiqueta del sistema {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Usted actualizó la etiqueta del sistema %2$s a %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Usted actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s actualizó la etiqueta del sistema %3$s a %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Usted agregó la etiqueta del sistema %2$s a %1$s",
+ "You added system tag {systemtag} to {file}" : "Usted agregó la etiqueta del sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta del sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta del sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Usted eliminó la etiqueta del sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Usted eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s eliminó la etiqueta del sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%s (restricted)" : "%s (restringido)",
+ "%s (invisible)" : "%s (invisible) ",
+ "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas",
+ "Collaborative tags" : "Etiquetas colaborativas",
"Name" : "Nombre",
+ "Delete" : "Borrar",
+ "Public" : "Público",
+ "Restricted" : "Restringido",
+ "Invisible" : "Invisible",
+ "Reset" : "Restaurar",
+ "No files in here" : "No hay archivos aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
"Size" : "Tamaño",
"Modified" : "Modificado"
},
diff --git a/apps/systemtags/l10n/es_MX.json b/apps/systemtags/l10n/es_MX.json
index 5bae74d482d..6538237cd66 100644
--- a/apps/systemtags/l10n/es_MX.json
+++ b/apps/systemtags/l10n/es_MX.json
@@ -1,6 +1,53 @@
{ "translations": {
"Tags" : "Etiquetas",
+ "Update" : "Actualizar",
+ "Create" : "Crear",
+ "Select tag…" : "Seleccionar etiqueta...",
+ "Tagged files" : "Archivos etiquetados",
+ "Select tags to filter by" : "Seleccione las etiquetas para el filtro",
+ "No tags found" : "No se encontraron etiquetas",
+ "Please select tags to filter by" : "Favor de seleccionar etiquetas para el filtro",
+ "No files found for the selected tags" : "No se encontraron archivos para las etiquetas seleccionadas",
+ "Added system tag %1$s" : "Etiqueta del sistema %1$s agregada",
+ "Added system tag {systemtag}" : "Etiqueta del sistema {systemtag} agregada",
+ "%1$s added system tag %2$s" : "%1$s agregó la etiqueta del sistema %2$s",
+ "{actor} added system tag {systemtag}" : "{actor} agregó la etiqueta del sistema {systemtag}",
+ "Removed system tag %1$s" : "Eliminó la etiqueta del sistema %1$s",
+ "Removed system tag {systemtag}" : "Etiqueta del sistema {systemtag} eliminada",
+ "%1$s removed system tag %2$s" : "%1$s eliminó la etiqueta del sistema %2$s",
+ "{actor} removed system tag {systemtag}" : "{actor} eliminó la etiqueta del sistema {systemtag}",
+ "You created system tag %1$s" : "Usted creó la etiqueta del sistema %1$s",
+ "You created system tag {systemtag}" : "Usted creó la etiqueta del sistema {systemtag}",
+ "%1$s created system tag %2$s" : "%1$s creo la etiqueta del sistema %2$s",
+ "{actor} created system tag {systemtag}" : "{actor} creó la etiqueta del sistema {systemtag}",
+ "You deleted system tag %1$s" : "Usted borró la etiqueta del sistema %1$s",
+ "You deleted system tag {systemtag}" : "Usted borró la etiqueta del sistema {systemtag}",
+ "%1$s deleted system tag %2$s" : "%1$s borró la etiqueta del sistema %2$s",
+ "{actor} deleted system tag {systemtag}" : "{actor} borró la etiqueta del sistema {systemtag}",
+ "You updated system tag %2$s to %1$s" : "Usted actualizó la etiqueta del sistema %2$s a %1$s",
+ "You updated system tag {oldsystemtag} to {newsystemtag}" : "Usted actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "%1$s updated system tag %3$s to %2$s" : "%1$s actualizó la etiqueta del sistema %3$s a %2$s",
+ "{actor} updated system tag {oldsystemtag} to {newsystemtag}" : "{actor} actualizó la etiqueta del sistema {oldsystemtag} a {newsystemtag}",
+ "You added system tag %2$s to %1$s" : "Usted agregó la etiqueta del sistema %2$s a %1$s",
+ "You added system tag {systemtag} to {file}" : "Usted agregó la etiqueta del sistema {systemtag} a {file}",
+ "%1$s added system tag %3$s to %2$s" : "%1$s agregó la etiqueta del sistema %3$s a %2$s",
+ "{actor} added system tag {systemtag} to {file}" : "{actor} agregó la etiqueta del sistema {systemtag} a {file}",
+ "You removed system tag %2$s from %1$s" : "Usted eliminó la etiqueta del sistema %2$s de %1$s",
+ "You removed system tag {systemtag} from {file}" : "Usted eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%1$s removed system tag %3$s from %2$s" : "%1$s eliminó la etiqueta del sistema %3$s de %2$s",
+ "{actor} removed system tag {systemtag} from {file}" : "{actor} eliminó la etiqueta del sistema {systemtag} de {file}",
+ "%s (restricted)" : "%s (restringido)",
+ "%s (invisible)" : "%s (invisible) ",
+ "<strong>System tags</strong> for a file have been modified" : "Las <strong>etiquetas del sistema</strong> para un archivo han sido modificadas",
+ "Collaborative tags" : "Etiquetas colaborativas",
"Name" : "Nombre",
+ "Delete" : "Borrar",
+ "Public" : "Público",
+ "Restricted" : "Restringido",
+ "Invisible" : "Invisible",
+ "Reset" : "Restaurar",
+ "No files in here" : "No hay archivos aquí",
+ "No entries found in this folder" : "No se encontraron elementos en esta carpeta",
"Size" : "Tamaño",
"Modified" : "Modificado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/theming/l10n/bg.js b/apps/theming/l10n/bg.js
new file mode 100644
index 00000000000..a0fd44abeae
--- /dev/null
+++ b/apps/theming/l10n/bg.js
@@ -0,0 +1,27 @@
+OC.L10N.register(
+ "theming",
+ {
+ "Admin" : "Админ",
+ "a safe home for all your data" : "безопасен дом за всички ваши данни",
+ "The given name is too long" : "Името е прекалено дълго",
+ "The given web address is too long" : "web адреса е прекалено дълъг",
+ "The given slogan is too long" : "Избраният лозунг е твърде дълъг",
+ "The given color is invalid" : "Избраният цвят е невалиден",
+ "Saved" : "Запазено",
+ "No file uploaded" : "Няма качен файл",
+ "Unsupported image type" : "Неподдържан тип изображение",
+ "You are already using a custom theme" : "Вие вече използвате персонализирана тема",
+ "Theming" : "Теми",
+ "Name" : "Име",
+ "reset to default" : "възстановяване към стандартни",
+ "Web address" : "Уеб адрес",
+ "Web address https://…" : "Уеб адрес https://...",
+ "Slogan" : "Лозунг",
+ "Color" : "Цвят",
+ "Logo" : "Лого",
+ "Upload new logo" : "Качване на ново лого",
+ "Login image" : "Изображение при вписване",
+ "Upload new login background" : "Качване на нов фон за входа",
+ "Log in image" : "Изображение при вписване"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/theming/l10n/bg.json b/apps/theming/l10n/bg.json
new file mode 100644
index 00000000000..0b842b12b1a
--- /dev/null
+++ b/apps/theming/l10n/bg.json
@@ -0,0 +1,25 @@
+{ "translations": {
+ "Admin" : "Админ",
+ "a safe home for all your data" : "безопасен дом за всички ваши данни",
+ "The given name is too long" : "Името е прекалено дълго",
+ "The given web address is too long" : "web адреса е прекалено дълъг",
+ "The given slogan is too long" : "Избраният лозунг е твърде дълъг",
+ "The given color is invalid" : "Избраният цвят е невалиден",
+ "Saved" : "Запазено",
+ "No file uploaded" : "Няма качен файл",
+ "Unsupported image type" : "Неподдържан тип изображение",
+ "You are already using a custom theme" : "Вие вече използвате персонализирана тема",
+ "Theming" : "Теми",
+ "Name" : "Име",
+ "reset to default" : "възстановяване към стандартни",
+ "Web address" : "Уеб адрес",
+ "Web address https://…" : "Уеб адрес https://...",
+ "Slogan" : "Лозунг",
+ "Color" : "Цвят",
+ "Logo" : "Лого",
+ "Upload new logo" : "Качване на ново лого",
+ "Login image" : "Изображение при вписване",
+ "Upload new login background" : "Качване на нов фон за входа",
+ "Log in image" : "Изображение при вписване"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/theming/l10n/es_MX.js b/apps/theming/l10n/es_MX.js
new file mode 100644
index 00000000000..fd64e78c436
--- /dev/null
+++ b/apps/theming/l10n/es_MX.js
@@ -0,0 +1,26 @@
+OC.L10N.register(
+ "theming",
+ {
+ "Admin" : "Administración",
+ "a safe home for all your data" : "un lugar seguro para todos sus datos",
+ "The given name is too long" : "El nombre dado es demasiado largo",
+ "The given web address is too long" : "La dirección web dada es demasiado larga",
+ "The given slogan is too long" : "El lema dado es demasiado largo",
+ "The given color is invalid" : "El color dado es inválido",
+ "Saved" : "Guardado",
+ "No file uploaded" : "No hay archivos cargados",
+ "Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme" : "Usted ya se encuentra usando un tema personalizado",
+ "Name" : "Nombre",
+ "reset to default" : "restaurar a predeterminado",
+ "Web address" : "Dirección web",
+ "Web address https://…" : "Dirección web https://...",
+ "Slogan" : "Lema",
+ "Color" : "Color",
+ "Logo" : "Logotipo",
+ "Upload new logo" : "Cargar nuevo logotipo",
+ "Login image" : "Imágen de inicio de sesión",
+ "Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
+ "Log in image" : "Imagen de inicio de sesión"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/theming/l10n/es_MX.json b/apps/theming/l10n/es_MX.json
new file mode 100644
index 00000000000..9c0d2155075
--- /dev/null
+++ b/apps/theming/l10n/es_MX.json
@@ -0,0 +1,24 @@
+{ "translations": {
+ "Admin" : "Administración",
+ "a safe home for all your data" : "un lugar seguro para todos sus datos",
+ "The given name is too long" : "El nombre dado es demasiado largo",
+ "The given web address is too long" : "La dirección web dada es demasiado larga",
+ "The given slogan is too long" : "El lema dado es demasiado largo",
+ "The given color is invalid" : "El color dado es inválido",
+ "Saved" : "Guardado",
+ "No file uploaded" : "No hay archivos cargados",
+ "Unsupported image type" : "Tipo de imagen no soportado",
+ "You are already using a custom theme" : "Usted ya se encuentra usando un tema personalizado",
+ "Name" : "Nombre",
+ "reset to default" : "restaurar a predeterminado",
+ "Web address" : "Dirección web",
+ "Web address https://…" : "Dirección web https://...",
+ "Slogan" : "Lema",
+ "Color" : "Color",
+ "Logo" : "Logotipo",
+ "Upload new logo" : "Cargar nuevo logotipo",
+ "Login image" : "Imágen de inicio de sesión",
+ "Upload new login background" : "Cargar nueva imagen de fondo para inicio de sesión",
+ "Log in image" : "Imagen de inicio de sesión"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/el.js b/apps/twofactor_backupcodes/l10n/el.js
new file mode 100644
index 00000000000..c6d3817011d
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/el.js
@@ -0,0 +1,21 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Δημιουργία εφεδρικών κωδικών",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Οι εφεδρικοί κωδικοί έχουν δημιουργηθεί. {{χρησιμοποιούνται}} του {{συνολικού}} κωδικοί έχουν χρησιμοποιηθεί.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Αυτοί είναι είναι οι εφεδρικοί σας κωδικοί. Παρακαλούμε αποθηκεύστε τους και/ή εκτυπώστε τους καθώς δεν θα είστε σε θέση να τους διαβάσετε ξανά αργότερα.",
+ "Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
+ "Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
+ "Regenerate backup codes" : "Δημιουργία εφεδρικών κωδικών",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Εάν αναδημιουργήσετε εφεδρικούς κωδικούς, οι παλιοί κωδικοί ακυρώνονται αυτόματα.",
+ "An error occurred while generating your backup codes" : "Ένα σφάλμα προέκυψε κατά τη δημιουργία των εφεδρικών κωδικών.",
+ "Nextcloud backup codes" : "Εφεδρικοί κωδικοί Nextcloud",
+ "Two-factor authentication" : "Έλεγχος πιστοποίησης δύο βημάτων",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Έχετε συνδεθεί επιτυχώς με τη χρήση ελέγχου ταυτότητας δύο-παραγόντων (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Μία προσπάθεια σύνδεσης με τη χρήση ελέγχου ταυτότητας δύο-παραγόντων απέτυχε (%1$s)",
+ "You created two-factor backup codes for your account" : "Μπορείτε να δημιουργήσετε τον παράγοντα διπλού ελέγχου ταυτότητας για το λογαριασμό σας ΤΟΤΡ",
+ "Backup code" : "Εφεδρικός κωδικός",
+ "Use backup code" : "Χρησιμοποιήστε έναν εφεδρικό κωδικό",
+ "Second-factor backup codes" : "Εφεδρικοί κωδικοί δεύτερου-παράγοντα"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/el.json b/apps/twofactor_backupcodes/l10n/el.json
new file mode 100644
index 00000000000..ba0f6831a22
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/el.json
@@ -0,0 +1,19 @@
+{ "translations": {
+ "Generate backup codes" : "Δημιουργία εφεδρικών κωδικών",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Οι εφεδρικοί κωδικοί έχουν δημιουργηθεί. {{χρησιμοποιούνται}} του {{συνολικού}} κωδικοί έχουν χρησιμοποιηθεί.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Αυτοί είναι είναι οι εφεδρικοί σας κωδικοί. Παρακαλούμε αποθηκεύστε τους και/ή εκτυπώστε τους καθώς δεν θα είστε σε θέση να τους διαβάσετε ξανά αργότερα.",
+ "Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
+ "Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
+ "Regenerate backup codes" : "Δημιουργία εφεδρικών κωδικών",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Εάν αναδημιουργήσετε εφεδρικούς κωδικούς, οι παλιοί κωδικοί ακυρώνονται αυτόματα.",
+ "An error occurred while generating your backup codes" : "Ένα σφάλμα προέκυψε κατά τη δημιουργία των εφεδρικών κωδικών.",
+ "Nextcloud backup codes" : "Εφεδρικοί κωδικοί Nextcloud",
+ "Two-factor authentication" : "Έλεγχος πιστοποίησης δύο βημάτων",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Έχετε συνδεθεί επιτυχώς με τη χρήση ελέγχου ταυτότητας δύο-παραγόντων (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Μία προσπάθεια σύνδεσης με τη χρήση ελέγχου ταυτότητας δύο-παραγόντων απέτυχε (%1$s)",
+ "You created two-factor backup codes for your account" : "Μπορείτε να δημιουργήσετε τον παράγοντα διπλού ελέγχου ταυτότητας για το λογαριασμό σας ΤΟΤΡ",
+ "Backup code" : "Εφεδρικός κωδικός",
+ "Use backup code" : "Χρησιμοποιήστε έναν εφεδρικό κωδικό",
+ "Second-factor backup codes" : "Εφεδρικοί κωδικοί δεύτερου-παράγοντα"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/es_MX.js b/apps/twofactor_backupcodes/l10n/es_MX.js
new file mode 100644
index 00000000000..8ef88c0cef3
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_MX.js
@@ -0,0 +1,21 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Generar códigos de respaldo",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Los códigos de respaldo han sido generados. {{used}} de {{total}} códigos han sido usados.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Estos son sus códigos de respaldo. Favor de resguardarlos y/o imprimirlos ya que no podrá leerlos otra vez después. ",
+ "Save backup codes" : "Guardar códigos de respaldo",
+ "Print backup codes" : "Imprimir códigos de respaldo",
+ "Regenerate backup codes" : "Regenerar códigos de respaldo",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Si usted regenera los códigos de respaldo, automáticamente invalidará los anteriores. ",
+ "An error occurred while generating your backup codes" : "Se presentó un error al generar sus códigos de respaldo. ",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "Two-factor authentication" : "Autenticación de dos factores",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Usted ha iniciado sesión exitosamente usando autenticación de dos factores (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un intento por ingresar usando autenticación de dos factores falló (%1$s)",
+ "You created two-factor backup codes for your account" : "Usted ha creado códigos de respaldo de dos factores para su cuenta",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Use el código de respaldo",
+ "Second-factor backup codes" : "Códigos de respaldo del segundo factor"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/es_MX.json b/apps/twofactor_backupcodes/l10n/es_MX.json
new file mode 100644
index 00000000000..179b29fd060
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es_MX.json
@@ -0,0 +1,19 @@
+{ "translations": {
+ "Generate backup codes" : "Generar códigos de respaldo",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Los códigos de respaldo han sido generados. {{used}} de {{total}} códigos han sido usados.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Estos son sus códigos de respaldo. Favor de resguardarlos y/o imprimirlos ya que no podrá leerlos otra vez después. ",
+ "Save backup codes" : "Guardar códigos de respaldo",
+ "Print backup codes" : "Imprimir códigos de respaldo",
+ "Regenerate backup codes" : "Regenerar códigos de respaldo",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Si usted regenera los códigos de respaldo, automáticamente invalidará los anteriores. ",
+ "An error occurred while generating your backup codes" : "Se presentó un error al generar sus códigos de respaldo. ",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "Two-factor authentication" : "Autenticación de dos factores",
+ "You successfully logged in using two-factor authentication (%1$s)" : "Usted ha iniciado sesión exitosamente usando autenticación de dos factores (%1$s)",
+ "A login attempt using two-factor authentication failed (%1$s)" : "Un intento por ingresar usando autenticación de dos factores falló (%1$s)",
+ "You created two-factor backup codes for your account" : "Usted ha creado códigos de respaldo de dos factores para su cuenta",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Use el código de respaldo",
+ "Second-factor backup codes" : "Códigos de respaldo del segundo factor"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/es_MX.js b/apps/updatenotification/l10n/es_MX.js
new file mode 100644
index 00000000000..084dd1f1655
--- /dev/null
+++ b/apps/updatenotification/l10n/es_MX.js
@@ -0,0 +1,25 @@
+OC.L10N.register(
+ "updatenotification",
+ {
+ "Update notifications" : "Actualizar notificaciones",
+ "Could not start updater, please try the manual update" : "No fue posible iniciar el actualizador, favor de intentar la actualización manual",
+ "{version} is available. Get more information on how to update." : "{version} no está disponible. Obtenga más información acerca de cómo actualizar. ",
+ "Channel updated" : "Canal actualizado",
+ "The update server could not be reached since %d days to check for new updates." : "El servidor de actualización no ha podido ser alcanzado desde %d días para verificar actualizaciones. ",
+ "Please check the nextcloud and server log files for errors." : "Favor de verificar los archivos de bitacoras de nextcloud y del servidor por errores. ",
+ "Update to %1$s is available." : "La actualización a %1$s está disponible. ",
+ "Update for %1$s to version %2$s is available." : "La actualización para %1$s a la versión %2$s está disponible.",
+ "Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
+ "A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "Open updater" : "Abrir actualizador",
+ "Download now" : "Descargar ahora",
+ "Your version is up to date." : "Su verisón está actualizada.",
+ "Checked on %s" : "Verificado el %s",
+ "Update channel:" : "Actualizar el canal:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Siempre puede actualizar a una versión más reciente / canal experimental. Sinembargo nunca podrá desactualizar la versión a un canal más estable. ",
+ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos de las actualizaciones disponibles:",
+ "Only notification for app updates are available." : "Sólo se tienen disponibles notificaciones de actualizaciones de la aplicación.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
+ "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/es_MX.json b/apps/updatenotification/l10n/es_MX.json
new file mode 100644
index 00000000000..dcbfab39f99
--- /dev/null
+++ b/apps/updatenotification/l10n/es_MX.json
@@ -0,0 +1,23 @@
+{ "translations": {
+ "Update notifications" : "Actualizar notificaciones",
+ "Could not start updater, please try the manual update" : "No fue posible iniciar el actualizador, favor de intentar la actualización manual",
+ "{version} is available. Get more information on how to update." : "{version} no está disponible. Obtenga más información acerca de cómo actualizar. ",
+ "Channel updated" : "Canal actualizado",
+ "The update server could not be reached since %d days to check for new updates." : "El servidor de actualización no ha podido ser alcanzado desde %d días para verificar actualizaciones. ",
+ "Please check the nextcloud and server log files for errors." : "Favor de verificar los archivos de bitacoras de nextcloud y del servidor por errores. ",
+ "Update to %1$s is available." : "La actualización a %1$s está disponible. ",
+ "Update for %1$s to version %2$s is available." : "La actualización para %1$s a la versión %2$s está disponible.",
+ "Update for {app} to version %s is available." : "Actualización para {app} a la versión %s está disponible.",
+ "A new version is available: %s" : "Una nueva versión está disponible: %s",
+ "Open updater" : "Abrir actualizador",
+ "Download now" : "Descargar ahora",
+ "Your version is up to date." : "Su verisón está actualizada.",
+ "Checked on %s" : "Verificado el %s",
+ "Update channel:" : "Actualizar el canal:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Siempre puede actualizar a una versión más reciente / canal experimental. Sinembargo nunca podrá desactualizar la versión a un canal más estable. ",
+ "Notify members of the following groups about available updates:" : "Notificar a los miembros de los siguientes grupos de las actualizaciones disponibles:",
+ "Only notification for app updates are available." : "Sólo se tienen disponibles notificaciones de actualizaciones de la aplicación.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "El canal de actualización seleccionado hace que las notificaciones dedicadas al servidor sean obsoletas. ",
+ "The selected update channel does not support updates of the server." : "El canal de actualización seleccionado no soporta actualizaciones del servidor. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/fi.js b/apps/updatenotification/l10n/fi.js
new file mode 100644
index 00000000000..7b899362aec
--- /dev/null
+++ b/apps/updatenotification/l10n/fi.js
@@ -0,0 +1,23 @@
+OC.L10N.register(
+ "updatenotification",
+ {
+ "Update notifications" : "Päivitysilmoitukset",
+ "Could not start updater, please try the manual update" : "Ei voitu aloittaa päivitystä, kokeile päivittämistä manuaalisesti",
+ "{version} is available. Get more information on how to update." : "{version} on saatavilla. Tarjolla on lisätietoja päivittämisestä.",
+ "Channel updated" : "Päivityskanava päivitetty",
+ "The update server could not be reached since %d days to check for new updates." : "Päivityspalvelinta ei tavoitettu %d päivään, uusia päivityksiä ei voida tarkistaa.",
+ "Please check the nextcloud and server log files for errors." : "Tarkista nextcloudin ja palvelimen loki tiedostot virheiden varalta.",
+ "Update to %1$s is available." : "Kohteen %1$s päivitys on saatavilla.",
+ "Update for %1$s to version %2$s is available." : "Kohteen %1$s päivitys versioon %2$s on saatavilla.",
+ "Update for {app} to version %s is available." : "Sovelluksen {app} päivitys versioon %s on saatavilla.",
+ "A new version is available: %s" : "Uusi versio on saatavilla: %s",
+ "Open updater" : "Avaa päivittäjä",
+ "Download now" : "Lataa heti",
+ "Your version is up to date." : "Versiosi on ajan tasalla.",
+ "Checked on %s" : "Tarkistettu %s",
+ "Update channel:" : "Päivityskanava:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Voit aina päivittää uudempaan versioon tai kokeellisen jakelukanavan versioon. Et voi kuitenkaan palata aiempaan, vakaan julkaisukanavan versioon.",
+ "Notify members of the following groups about available updates:" : "Ilmoita seuraavien ryhmien jäsenille saatavilla olevista päivityksistä:",
+ "Only notification for app updates are available." : "Sovelluspäivityksiin on saatavilla vain huomautuksia."
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/fi.json b/apps/updatenotification/l10n/fi.json
new file mode 100644
index 00000000000..980b327b189
--- /dev/null
+++ b/apps/updatenotification/l10n/fi.json
@@ -0,0 +1,21 @@
+{ "translations": {
+ "Update notifications" : "Päivitysilmoitukset",
+ "Could not start updater, please try the manual update" : "Ei voitu aloittaa päivitystä, kokeile päivittämistä manuaalisesti",
+ "{version} is available. Get more information on how to update." : "{version} on saatavilla. Tarjolla on lisätietoja päivittämisestä.",
+ "Channel updated" : "Päivityskanava päivitetty",
+ "The update server could not be reached since %d days to check for new updates." : "Päivityspalvelinta ei tavoitettu %d päivään, uusia päivityksiä ei voida tarkistaa.",
+ "Please check the nextcloud and server log files for errors." : "Tarkista nextcloudin ja palvelimen loki tiedostot virheiden varalta.",
+ "Update to %1$s is available." : "Kohteen %1$s päivitys on saatavilla.",
+ "Update for %1$s to version %2$s is available." : "Kohteen %1$s päivitys versioon %2$s on saatavilla.",
+ "Update for {app} to version %s is available." : "Sovelluksen {app} päivitys versioon %s on saatavilla.",
+ "A new version is available: %s" : "Uusi versio on saatavilla: %s",
+ "Open updater" : "Avaa päivittäjä",
+ "Download now" : "Lataa heti",
+ "Your version is up to date." : "Versiosi on ajan tasalla.",
+ "Checked on %s" : "Tarkistettu %s",
+ "Update channel:" : "Päivityskanava:",
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Voit aina päivittää uudempaan versioon tai kokeellisen jakelukanavan versioon. Et voi kuitenkaan palata aiempaan, vakaan julkaisukanavan versioon.",
+ "Notify members of the following groups about available updates:" : "Ilmoita seuraavien ryhmien jäsenille saatavilla olevista päivityksistä:",
+ "Only notification for app updates are available." : "Sovelluspäivityksiin on saatavilla vain huomautuksia."
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/ja.js b/apps/updatenotification/l10n/ja.js
index 2f55b714507..967b81ec21f 100644
--- a/apps/updatenotification/l10n/ja.js
+++ b/apps/updatenotification/l10n/ja.js
@@ -5,6 +5,8 @@ OC.L10N.register(
"Could not start updater, please try the manual update" : "アップデータを起動できませんでした。手動アップデートをお試しください",
"{version} is available. Get more information on how to update." : "{version} が利用可能です。アップデート方法について詳細情報を確認してください。",
"Channel updated" : "チャンネルが更新されました",
+ "The update server could not be reached since %d days to check for new updates." : "%d日以降、新しい更新をチェックする更新サーバーにアクセスできませんでした。",
+ "Please check the nextcloud and server log files for errors." : "Nextcloudとサーバーログファイルでエラーがないか確認してください。",
"Update to %1$s is available." : "%1$s への更新が利用可能です。",
"Update for %1$s to version %2$s is available." : "%1$s に対するバージョン %2$s へアップデートが利用可能です。",
"Update for {app} to version %s is available." : " {app} に対するバージョン %s へアップデートが利用可能です。",
diff --git a/apps/updatenotification/l10n/ja.json b/apps/updatenotification/l10n/ja.json
index 25f9244798b..8ef6d433db3 100644
--- a/apps/updatenotification/l10n/ja.json
+++ b/apps/updatenotification/l10n/ja.json
@@ -3,6 +3,8 @@
"Could not start updater, please try the manual update" : "アップデータを起動できませんでした。手動アップデートをお試しください",
"{version} is available. Get more information on how to update." : "{version} が利用可能です。アップデート方法について詳細情報を確認してください。",
"Channel updated" : "チャンネルが更新されました",
+ "The update server could not be reached since %d days to check for new updates." : "%d日以降、新しい更新をチェックする更新サーバーにアクセスできませんでした。",
+ "Please check the nextcloud and server log files for errors." : "Nextcloudとサーバーログファイルでエラーがないか確認してください。",
"Update to %1$s is available." : "%1$s への更新が利用可能です。",
"Update for %1$s to version %2$s is available." : "%1$s に対するバージョン %2$s へアップデートが利用可能です。",
"Update for {app} to version %s is available." : " {app} に対するバージョン %s へアップデートが利用可能です。",
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index 9b24679831f..76905615bfa 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -148,8 +148,11 @@ OC.L10N.register(
"(New password is sent as plain text to LDAP)" : "(Das neue Passwort wurde als einfacher Text an LDAP gesendet)",
"Special Attributes" : "Spezielle Eigenschaften",
"Quota Field" : "Kontingent Feld",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird das Standard-Kontingent des Benutzers verwendet. Andernfall trage ein LDAP/AD-Attribut ein.",
"Quota Default" : "Standard Kontingent",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standard-Kontingent ignorieren für Benutzer von LDAP, die kein Kontingent festgelegt haben.",
"Email Field" : "E-Mail-Feld",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "E-Mail-Adresse des Benutzers aus seinem LDAP-Attribut generieren. Für Standard-Verhalten leer lassen.",
"User Home Folder Naming Rule" : "Benennungsregel für das Home-Verzeichnis des Benutzers",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein.",
"Internal Username" : "Interner Benutzername",
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index ebd8dd335e2..fedd3be08e8 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -146,8 +146,11 @@
"(New password is sent as plain text to LDAP)" : "(Das neue Passwort wurde als einfacher Text an LDAP gesendet)",
"Special Attributes" : "Spezielle Eigenschaften",
"Quota Field" : "Kontingent Feld",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird das Standard-Kontingent des Benutzers verwendet. Andernfall trage ein LDAP/AD-Attribut ein.",
"Quota Default" : "Standard Kontingent",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standard-Kontingent ignorieren für Benutzer von LDAP, die kein Kontingent festgelegt haben.",
"Email Field" : "E-Mail-Feld",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "E-Mail-Adresse des Benutzers aus seinem LDAP-Attribut generieren. Für Standard-Verhalten leer lassen.",
"User Home Folder Naming Rule" : "Benennungsregel für das Home-Verzeichnis des Benutzers",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfall trage ein LDAP/AD-Attribut ein.",
"Internal Username" : "Interner Benutzername",
diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js
index 2fecec1e16f..7f5a7633727 100644
--- a/apps/user_ldap/l10n/de_DE.js
+++ b/apps/user_ldap/l10n/de_DE.js
@@ -148,8 +148,11 @@ OC.L10N.register(
"(New password is sent as plain text to LDAP)" : "(Das neue Passwort wurde als einfacher Text an LDAP gesendet)",
"Special Attributes" : "Spezielle Eigenschaften",
"Quota Field" : "Kontingent-Feld",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird das Standard-Kontingent des Benutzers verwendet. Andernfall trage ein LDAP/AD-Attribut ein.",
"Quota Default" : "Standard-Kontingent",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standard-Kontingent ignorieren für Benutzer von LDAP, die kein Kontingent festgelegt haben.",
"Email Field" : "E-Mail-Feld",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "E-Mail-Adresse des Benutzers aus seinem LDAP-Attribut generieren. Für Standard-Verhalten leer lassen.",
"User Home Folder Naming Rule" : "Benennungsregel für das Home-Verzeichnis des Benutzers",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls tragen Sie bitte ein LDAP/AD-Attribut ein.",
"Internal Username" : "Interner Benutzername",
diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json
index 2a5182054d3..7ae3293e12a 100644
--- a/apps/user_ldap/l10n/de_DE.json
+++ b/apps/user_ldap/l10n/de_DE.json
@@ -146,8 +146,11 @@
"(New password is sent as plain text to LDAP)" : "(Das neue Passwort wurde als einfacher Text an LDAP gesendet)",
"Special Attributes" : "Spezielle Eigenschaften",
"Quota Field" : "Kontingent-Feld",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird das Standard-Kontingent des Benutzers verwendet. Andernfall trage ein LDAP/AD-Attribut ein.",
"Quota Default" : "Standard-Kontingent",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Standard-Kontingent ignorieren für Benutzer von LDAP, die kein Kontingent festgelegt haben.",
"Email Field" : "E-Mail-Feld",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "E-Mail-Adresse des Benutzers aus seinem LDAP-Attribut generieren. Für Standard-Verhalten leer lassen.",
"User Home Folder Naming Rule" : "Benennungsregel für das Home-Verzeichnis des Benutzers",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Ohne Eingabe wird der Benutzername (Standard) verwendet. Anderenfalls tragen Sie bitte ein LDAP/AD-Attribut ein.",
"Internal Username" : "Interner Benutzername",
diff --git a/apps/user_ldap/l10n/es_MX.js b/apps/user_ldap/l10n/es_MX.js
index 0b7eb8085b9..5f1c1bb28d9 100644
--- a/apps/user_ldap/l10n/es_MX.js
+++ b/apps/user_ldap/l10n/es_MX.js
@@ -1,90 +1,165 @@
OC.L10N.register(
"user_ldap",
{
- "Failed to clear the mappings." : "Ocurrió un fallo al borrar las asignaciones.",
- "Failed to delete the server configuration" : "No se pudo borrar la configuración del servidor",
- "The configuration is valid and the connection could be established!" : "¡La configuración es válida y la conexión puede establecerse!",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración es válida, pero falló el Enlace. Por favor, compruebe la configuración del servidor y las credenciales.",
- "The configuration is invalid. Please have a look at the logs for further details." : "La configuración no es válida. Por favor, busque en el log para más detalles.",
- "No action specified" : "No se ha especificado la acción",
- "No configuration specified" : "No se ha especificado la configuración",
- "No data specified" : "No se han especificado los datos",
- " Could not set configuration %s" : "No se pudo establecer la configuración %s",
+ "Failed to clear the mappings." : "Se presentó una falla al borrar los mapeos.",
+ "Failed to delete the server configuration" : "Se presentó una falla al borrar la configuración del servidor",
+ "The configuration is invalid: anonymous bind is not allowed." : "La configuración es inválida: No se permite hacer una vinculación anónima . ",
+ "The configuration is valid and the connection could be established!" : "¡La configuración es válida y la conexión pudo ser establecida!",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración es válida, pero falló la Vinculación. Favor de verificar los ajustes del servidor y las credenciales.",
+ "The configuration is invalid. Please have a look at the logs for further details." : "La configuración es inválida. Favor de consultar las bitácoras para más detalles.",
+ "No action specified" : "No se ha especificado una acción",
+ "No configuration specified" : "No se ha especificado una configuración",
+ "No data specified" : "No se han especificado datos",
+ " Could not set configuration %s" : "No fue posible establecer la configuración %s",
+ "Action does not exist" : "La acción no existe",
+ "The Base DN appears to be wrong" : "El DN Base parece estar incorrecto",
+ "Testing configuration…" : "Probando configuracion... ",
"Configuration incorrect" : "Configuración Incorrecta",
"Configuration incomplete" : "Configuración incompleta",
- "Configuration OK" : "Configuración OK",
+ "Configuration OK" : "Configuración correcta",
"Select groups" : "Seleccionar grupos",
- "Select object classes" : "Seleccionar la clase de objeto",
+ "Select object classes" : "Seleccionar las clases de objeto",
+ "Please check the credentials, they seem to be wrong." : "Favor de verificar sus credenciales, al parecer están equivocadas.",
+ "Please specify the port, it could not be auto-detected." : "No fue posible auto-detectar el puerto, favor de especificarlo.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "No fue posible auto detectar el DN base, favor de verificar las credenciales, servidor y puerto.",
+ "Could not detect Base DN, please enter it manually." : "No fue posible detectar el DN Base, favor de ingresarlo manualmente.",
+ "{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Favor de verificar. ",
+ "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ",
+ " entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Favor de verificar la Base DN, así como los ajustes de la conexión y las credenciales.",
"Do you really want to delete the current Server Configuration?" : "¿Realmente desea eliminar la configuración actual del servidor?",
- "Confirm Deletion" : "Confirmar eliminación",
+ "Confirm Deletion" : "Confirmar el borrado",
+ "Mappings cleared successfully!" : "¡Los mapeos se borraron exitosamente!",
+ "Error while clearing the mappings." : "Se presentó un error al limpiar los mapeos. ",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "La vinculación anónima no está permitida. Favor de proporcionar un Usuario DN y una Contaseña.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Error de Operaciones LDAP. Las vinculaciones anónimas pueden no estar permitidas. ",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Se presentó una falla en el guardado. Favor de verificar que la base de datos esté operando. Recargue antes de continuar. ",
+ "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?" : "Cambiar la modalidad habilitará las consultas automaticas de LDAP. Dependiendo del tamaño de su LDAP esto puede tomar algun tiempo. ¿Aún desea cambiar la modalidad?",
+ "Mode switch" : "Cambio de modo",
"Select attributes" : "Seleccionar atributos",
- "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","Grupos %s encontrados"],
- "_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"],
- "Could not find the desired feature" : "No se puede encontrar la función deseada.",
- "Invalid Host" : "Host inválido",
- "Users" : "Usuarios",
- "Groups" : "Grupos",
- "Test Configuration" : "Configuración de prueba",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "El usuario no fue encontrado. Favor de verficiar los atributos de inicio de sesión y su nombre de usuario. Filtrado efectivo (para copiar y pegar a la validación de línea de comandos): </br>",
+ "User found and settings verified." : "Usuario encontrado y ajustes verificados. ",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Ajustes verficados, pero más de un usuario fue encontrado. Sólo el primero será capaz de iniciar sesión. Considere un filtro más refinado.",
+ "An unspecified error occurred. Please check the settings and the log." : "Se presentó un error no especificado. Favor de verificar los ajustes y la bitácroa. ",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Favor de verificar. ",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, favor de verificar el servidor, puerto y credenciales. ",
+ "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar",
+ "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ",
+ "LDAP / AD integration" : "Integración con LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"],
+ "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "No fue posible detectar el atributo nombre a desplegar del usuario. Favor de especificarlo usted mismo en los ajustes avanzados de LDAP.",
+ "Could not find the desired feature" : "No fue posible encontrar la función deseada.",
+ "Invalid Host" : "Servidor inválido",
+ "Test Configuration" : "Probar configuración",
"Help" : "Ayuda",
- "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica que grupos LDAP tendrán acceso a %s.",
+ "Only these object classes:" : "Sólo estas clases de objetos:",
+ "Only from these groups:" : "Sólo desde estos grupos:",
+ "Search groups" : "Buscar grupos",
+ "Available groups" : "Grupos disponibles",
+ "Selected groups" : "Grupos seleccionados",
+ "Edit LDAP Query" : "Editar consulta a LDAP",
+ "LDAP Filter:" : "Filtro de LDAP:",
+ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count groups" : "Verificar ajustes y contar grupos",
+ "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:",
+ "LDAP / AD Username:" : "Nombre de usuario LDAP / AD",
+ "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Permite iniciar sesión contra el nombre de usuario LDAP / AD, que es el uid o el samaccountname y será detectado. ",
+ "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD",
+ "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Permite iniciar sesión contra el atributo correo electrónico. Mail y mailPrimaryAddress serán permitidos.",
"Other Attributes:" : "Otros atributos:",
- "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta identificar. %%uid remplazará al nombre de usuario en el proceso de identificación. Por ejemplo: \"uid=%%uid\"",
+ "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar al intentar ingresar. %% uid remplaza al nombre de usuario al intentar ingresar. Por ejemplo: \"uid=%%uid\"",
+ "Test Loginname" : "Probar nombre de usuario",
+ "Verify settings" : "Verificar ajustes",
+ "1. Server" : "1. Servidor",
+ "%s. Server:" : "%s. Servidor:",
+ "Add a new and blank configuration" : "Agregar una configuración nueva y en blanco",
+ "Copy current configuration into new directory binding" : "Copiar la configuración actual a un nuevo directorio de vinculación",
+ "Delete the current configuration" : "Borrar la configuración actual",
"Host" : "Servidor",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puede omitir el protocolo, excepto si requiere SSL. En ese caso, empiece con ldaps://",
"Port" : "Puerto",
- "User DN" : "DN usuario",
+ "Detect Port" : "Detectar Puerto",
+ "User DN" : "DN del usuario",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, deje DN y contraseña vacíos.",
"Password" : "Contraseña",
- "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deje DN y contraseña vacíos.",
+ "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deje la contraseña y DN vacíos.",
"One Base DN per line" : "Un DN Base por línea",
"You can specify Base DN for users and groups in the Advanced tab" : "Puede especificar el DN base para usuarios y grupos en la pestaña Avanzado",
- "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica que usuarios LDAP pueden tener acceso a %s.",
+ "Detect Base DN" : "Detectar DN Base",
+ "Test Base DN" : "Probar la base DN",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita solicitudes automaticas de LDAP. Es mejor para ambientes más grandes pero requiere mayor conocimiento de LDAP. ",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ingresar los filtros LDAP manualmente (recomendado para directorios grandes)",
+ "Listing and searching for users is constrained by these criteria:" : "Los enlistados y las busquedas para los usuarios están acotados por estos criterios:",
+ "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." : "Las clases de objetos más comunes para usuarios son organizationalPerson, person, user, and inetOrgPerson. Si no está seguro de cuál clase de objeto selecciónar, favor de consultar su directorio admin.",
+ "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica cuáles usuarios LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count users" : "Verificar ajustes y contar ususarios",
+ "Saving" : "Guardando",
"Back" : "Atrás",
"Continue" : "Continuar",
+ "LDAP" : "LDAP",
+ "Server" : "Servidor",
+ "Users" : "Usuarios",
+ "Login Attributes" : "Atriburos de Inicio de Sesión",
+ "Groups" : "Grupos",
+ "Expert" : "Experto",
"Advanced" : "Avanzado",
- "<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>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al su administrador de sistemas para desactivar uno de ellos.",
- "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Por favor consulte al administrador del sistema para instalarlo.",
- "Connection Settings" : "Configuración de conexión",
- "Configuration Active" : "Configuracion activa",
+ "<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>Advertencia:</b> Las aplicaciones user_ldap y user_webdavauth son incompatibles. Usted puede expermientar comportamientos inesperados. Favor de solicitar a su administrador del sistema deshabilitar alguno de ellos.",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Favor de solicitar su instalación a su administrador del sistema.",
+ "Connection Settings" : "Ajustes de la conexión",
+ "Configuration Active" : "Configuracion Activa",
"When unchecked, this configuration will be skipped." : "Cuando deseleccione, esta configuracion sera omitida.",
"Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)",
- "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Dar un servidor de copia de seguridad opcional. Debe ser una réplica del servidor principal LDAP / AD.",
- "Backup (Replica) Port" : "Puerto para copias de seguridad (Replica)",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Favor de proporcionar un servidor de copia de seguridad opcional. Debe ser una réplica del servidor LDAP / AD principal.",
+ "Backup (Replica) Port" : "Puerto para copias de seguridad (Réplica)",
"Disable Main Server" : "Deshabilitar servidor principal",
- "Only connect to the replica server." : "Conectar sólo con el servidor de réplica.",
+ "Only connect to the replica server." : "Sólo contectarse al servidor de réplica.",
"Turn off SSL certificate validation." : "Apagar la validación por certificado SSL.",
- "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." : "No se recomienda, ¡utilízalo únicamente para pruebas! Si la conexión únicamente funciona con esta opción, importa el certificado SSL del servidor LDAP en tu servidor %s.",
+ "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." : "¡No se recomienda, úselo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importe el certificado SSL del servidor LDAP a su servidor %s.",
"Cache Time-To-Live" : "Cache TTL",
"in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.",
- "Directory Settings" : "Configuración de directorio",
- "User Display Name Field" : "Campo de nombre de usuario a mostrar",
- "The LDAP attribute to use to generate the user's display name." : "El campo LDAP a usar para generar el nombre para mostrar del usuario.",
- "Base User Tree" : "Árbol base de usuario",
+ "Directory Settings" : "Ajustes del directorio",
+ "User Display Name Field" : "Campo de nombre del usuario a desplegar",
+ "The LDAP attribute to use to generate the user's display name." : "El atributo LDAP a usar para generar el nombre del usuario a desplegar.",
+ "2nd User Display Name Field" : "2do Campo de Nombre a Desplegar del Usuario",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP puede ser agregado al nombre a despelegar entre corchetes. Ejemplos de resultados »John Doe (john.doe@example.org)«.",
+ "Base User Tree" : "Árbol de Usuario Base",
"One User Base DN per line" : "Un DN Base de Usuario por línea",
- "User Search Attributes" : "Atributos de la busqueda de usuario",
+ "User Search Attributes" : "Atributos de búsqueda de usuario",
"Optional; one attribute per line" : "Opcional; un atributo por linea",
"Group Display Name Field" : "Campo de nombre de grupo a mostrar",
"The LDAP attribute to use to generate the groups's display name." : "El campo LDAP a usar para generar el nombre para mostrar del grupo.",
"Base Group Tree" : "Árbol base de grupo",
"One Group Base DN per line" : "Un DN Base de Grupo por línea",
- "Group Search Attributes" : "Atributos de busqueda de grupo",
+ "Group Search Attributes" : "Atributos de Búsqueda de Grupo",
"Group-Member association" : "Asociación Grupo-Miembro",
- "Special Attributes" : "Atributos especiales",
- "Quota Field" : "Cuota",
- "Quota Default" : "Cuota por defecto",
- "in bytes" : "en bytes",
- "Email Field" : "E-mail",
- "User Home Folder Naming Rule" : "Regla para la carpeta Home de usuario",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Vacío para el nombre de usuario (por defecto). En otro caso, especifique un atributo LDAP/AD.",
+ "Dynamic Group Member URL" : "URL de Miembro de Grupo Dinámico ",
+ "Nested Groups" : "Grupos Anidados",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se enciende, los grupos que contengan grupos están soportados. (Sólo funciona si el atributo de miembro de grupo contiene los DNs). ",
+ "Paging chunksize" : "Tamaño del chunk de paginación",
+ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
+ "Special Attributes" : "Atributos Especiales",
+ "Quota Field" : "Campo de cuota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, favor de especificar el atributo LDAP / AD.",
+ "Quota Default" : "Cuota predeterminada",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota. ",
+ "Email Field" : "Campo de correo electrónico",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Dejelo vacío para el comportamiento predeterminado. ",
+ "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Dejar vacío para el nombre de usuario (predeterminado). En otro caso, especifique un atributo LDAP/AD.",
"Internal Username" : "Nombre de usuario interno",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "El nombre de usuario interno será creado de forma predeterminada desde el atributo UUID. Esto asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. En el nombre de usuario interno sólo se pueden usar estos caracteres: [ a-zA-Z0-9_.@- ]. El resto de caracteres son sustituidos por su correspondiente en ASCII o simplemente omitidos. En caso de duplicidades, se añadirá o incrementará un número. El nombre de usuario interno es usado para identificar un usuario. Es también el nombre predeterminado para la carpeta personal del usuario en ownCloud. También es parte de URLs remotas, por ejemplo, para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser cambiado. Para conseguir un comportamiento similar a como era antes de ownCloud 5, introduzca el campo del nombre para mostrar del usuario en la siguiente caja. Déjelo vacío para el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente.",
- "Internal Username Attribute:" : "Atributo Nombre de usuario Interno:",
+ "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." : "Por defecto, el nombre de usuario interno se creará con base en el atributo UUID. Esto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El nombre de usuario intenro tiene la restricción de que sólo los siguienes caracteres están permitidos: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un numero. El nombre de usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Mantengalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ",
+ "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:",
"Override UUID detection" : "Sobrescribir la detección 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." : "Por defecto, el atributo UUID es autodetectado. Este atributo es usado para identificar indudablemente usuarios y grupos LDAP. Además, el nombre de usuario interno será creado en base al UUID, si no ha sido especificado otro comportamiento arriba. Puedes sobrescribir la configuración y pasar un atributo de tu elección. Debes asegurarte de que el atributo de tu elección sea accesible por los usuarios y grupos y ser único. Déjalo en blanco para usar el comportamiento por defecto. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.",
- "UUID Attribute for Users:" : "Atributo UUID para usuarios:",
+ "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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el nombre de usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puede anular el ajuste y proporcionar el atributo que desee. Debe asegurarse de que el atributo que desee sea accesible por los usuarios y grupos y que sea único. Mantengalo vacío para el comportamiento predeterminado . Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.",
+ "UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
"UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
- "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP",
- "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP"
+ "Username-LDAP User Mapping" : "Mapeo del Nombre del usuario al Usuario LDAP",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los nombres de usuario son usados para almacenar y asignar (meta) datos. Para poder identificar y reconocer con precisión a los usuarios, cada usuario LDAP contará con un Nombre de usuario interno. Esto requiere un mapeo del Nombre de usuario al usuario LDAP. El nombre de usuario creado se mapea al UUID del usuario LDAP. Adicionalmente el DN se guarda en caché para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, las modficaciones serán encontradas. El Nombre del usuario interno se usa en todos lados. Limpiar los mapeos dejará sobras en todos lados. ¡Limpiar los mapeos no es senible a la configuración, afecta a todas las configuraciones LDAP! Nunca limpie las configuraciones en el ambiente de producción, sólo hágalo en los ambientes de pruebas o de experimentación. ",
+ "Clear Username-LDAP User Mapping" : "Limpiar el mapeo de los Nombres de usuario a los Usuarios LDAP",
+ "Clear Groupname-LDAP Group Mapping" : "Limpiar el mapeo de los Nombres de grupo a los grupos de LDAP",
+ "in bytes" : "en bytes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/es_MX.json b/apps/user_ldap/l10n/es_MX.json
index d458644b137..bfaec835cf0 100644
--- a/apps/user_ldap/l10n/es_MX.json
+++ b/apps/user_ldap/l10n/es_MX.json
@@ -1,88 +1,163 @@
{ "translations": {
- "Failed to clear the mappings." : "Ocurrió un fallo al borrar las asignaciones.",
- "Failed to delete the server configuration" : "No se pudo borrar la configuración del servidor",
- "The configuration is valid and the connection could be established!" : "¡La configuración es válida y la conexión puede establecerse!",
- "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración es válida, pero falló el Enlace. Por favor, compruebe la configuración del servidor y las credenciales.",
- "The configuration is invalid. Please have a look at the logs for further details." : "La configuración no es válida. Por favor, busque en el log para más detalles.",
- "No action specified" : "No se ha especificado la acción",
- "No configuration specified" : "No se ha especificado la configuración",
- "No data specified" : "No se han especificado los datos",
- " Could not set configuration %s" : "No se pudo establecer la configuración %s",
+ "Failed to clear the mappings." : "Se presentó una falla al borrar los mapeos.",
+ "Failed to delete the server configuration" : "Se presentó una falla al borrar la configuración del servidor",
+ "The configuration is invalid: anonymous bind is not allowed." : "La configuración es inválida: No se permite hacer una vinculación anónima . ",
+ "The configuration is valid and the connection could be established!" : "¡La configuración es válida y la conexión pudo ser establecida!",
+ "The configuration is valid, but the Bind failed. Please check the server settings and credentials." : "La configuración es válida, pero falló la Vinculación. Favor de verificar los ajustes del servidor y las credenciales.",
+ "The configuration is invalid. Please have a look at the logs for further details." : "La configuración es inválida. Favor de consultar las bitácoras para más detalles.",
+ "No action specified" : "No se ha especificado una acción",
+ "No configuration specified" : "No se ha especificado una configuración",
+ "No data specified" : "No se han especificado datos",
+ " Could not set configuration %s" : "No fue posible establecer la configuración %s",
+ "Action does not exist" : "La acción no existe",
+ "The Base DN appears to be wrong" : "El DN Base parece estar incorrecto",
+ "Testing configuration…" : "Probando configuracion... ",
"Configuration incorrect" : "Configuración Incorrecta",
"Configuration incomplete" : "Configuración incompleta",
- "Configuration OK" : "Configuración OK",
+ "Configuration OK" : "Configuración correcta",
"Select groups" : "Seleccionar grupos",
- "Select object classes" : "Seleccionar la clase de objeto",
+ "Select object classes" : "Seleccionar las clases de objeto",
+ "Please check the credentials, they seem to be wrong." : "Favor de verificar sus credenciales, al parecer están equivocadas.",
+ "Please specify the port, it could not be auto-detected." : "No fue posible auto-detectar el puerto, favor de especificarlo.",
+ "Base DN could not be auto-detected, please revise credentials, host and port." : "No fue posible auto detectar el DN base, favor de verificar las credenciales, servidor y puerto.",
+ "Could not detect Base DN, please enter it manually." : "No fue posible detectar el DN Base, favor de ingresarlo manualmente.",
+ "{nthServer}. Server" : "{nthServer}. Servidor",
+ "No object found in the given Base DN. Please revise." : "No fue posible encontrar ningún objeto en el DN Base dado. Favor de verificar. ",
+ "More than 1,000 directory entries available." : "Se encuentran disponibles más de 1,000 elementos de directoiros. ",
+ " entries available within the provided Base DN" : "elementos disponibles dentro del DN Base proporcionado",
+ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Se presentó un error. Favor de verificar la Base DN, así como los ajustes de la conexión y las credenciales.",
"Do you really want to delete the current Server Configuration?" : "¿Realmente desea eliminar la configuración actual del servidor?",
- "Confirm Deletion" : "Confirmar eliminación",
+ "Confirm Deletion" : "Confirmar el borrado",
+ "Mappings cleared successfully!" : "¡Los mapeos se borraron exitosamente!",
+ "Error while clearing the mappings." : "Se presentó un error al limpiar los mapeos. ",
+ "Anonymous bind is not allowed. Please provide a User DN and Password." : "La vinculación anónima no está permitida. Favor de proporcionar un Usuario DN y una Contaseña.",
+ "LDAP Operations error. Anonymous bind might not be allowed." : "Error de Operaciones LDAP. Las vinculaciones anónimas pueden no estar permitidas. ",
+ "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Se presentó una falla en el guardado. Favor de verificar que la base de datos esté operando. Recargue antes de continuar. ",
+ "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?" : "Cambiar la modalidad habilitará las consultas automaticas de LDAP. Dependiendo del tamaño de su LDAP esto puede tomar algun tiempo. ¿Aún desea cambiar la modalidad?",
+ "Mode switch" : "Cambio de modo",
"Select attributes" : "Seleccionar atributos",
- "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","Grupos %s encontrados"],
- "_%s user found_::_%s users found_" : ["Usuario %s encontrado","Usuarios %s encontrados"],
- "Could not find the desired feature" : "No se puede encontrar la función deseada.",
- "Invalid Host" : "Host inválido",
- "Users" : "Usuarios",
- "Groups" : "Grupos",
- "Test Configuration" : "Configuración de prueba",
+ "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "El usuario no fue encontrado. Favor de verficiar los atributos de inicio de sesión y su nombre de usuario. Filtrado efectivo (para copiar y pegar a la validación de línea de comandos): </br>",
+ "User found and settings verified." : "Usuario encontrado y ajustes verificados. ",
+ "Settings verified, but more than one user found. Only the first will be able to login. Consider a more narrow filter." : "Ajustes verficados, pero más de un usuario fue encontrado. Sólo el primero será capaz de iniciar sesión. Considere un filtro más refinado.",
+ "An unspecified error occurred. Please check the settings and the log." : "Se presentó un error no especificado. Favor de verificar los ajustes y la bitácroa. ",
+ "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "El filtro de la búsqueda es inválido, posiblemente debido a temas de sintaxis como un número diferente de corchetes abiertos y cerrados. Favor de verificar. ",
+ "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Se presentó una falla con la conexión al servidor LDAP / AD, favor de verificar el servidor, puerto y credenciales. ",
+ "Please provide a login name to test against" : "Favor de proporcionar un nombre de usuario contra el cual probar",
+ "Password change rejected. Hint: " : "Cambio de contraseña rechazado. Pista: ",
+ "LDAP / AD integration" : "Integración con LDAP / AD",
+ "_%s group found_::_%s groups found_" : ["Grupo %s encontrado","%s grupos encontrados"],
+ "_%s user found_::_%s users found_" : ["Usuario %s encontrado","%s usuarios encontrados"],
+ "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "No fue posible detectar el atributo nombre a desplegar del usuario. Favor de especificarlo usted mismo en los ajustes avanzados de LDAP.",
+ "Could not find the desired feature" : "No fue posible encontrar la función deseada.",
+ "Invalid Host" : "Servidor inválido",
+ "Test Configuration" : "Probar configuración",
"Help" : "Ayuda",
- "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica que grupos LDAP tendrán acceso a %s.",
+ "Only these object classes:" : "Sólo estas clases de objetos:",
+ "Only from these groups:" : "Sólo desde estos grupos:",
+ "Search groups" : "Buscar grupos",
+ "Available groups" : "Grupos disponibles",
+ "Selected groups" : "Grupos seleccionados",
+ "Edit LDAP Query" : "Editar consulta a LDAP",
+ "LDAP Filter:" : "Filtro de LDAP:",
+ "The filter specifies which LDAP groups shall have access to the %s instance." : "El filtro especifica cuales grupos LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count groups" : "Verificar ajustes y contar grupos",
+ "When logging in, %s will find the user based on the following attributes:" : "Al iniciar sesion, %s encontrará al usuario con base en los siguientes atributos:",
+ "LDAP / AD Username:" : "Nombre de usuario LDAP / AD",
+ "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "Permite iniciar sesión contra el nombre de usuario LDAP / AD, que es el uid o el samaccountname y será detectado. ",
+ "LDAP / AD Email Address:" : "Dirección de correo electrónico LDAP / AD",
+ "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Permite iniciar sesión contra el atributo correo electrónico. Mail y mailPrimaryAddress serán permitidos.",
"Other Attributes:" : "Otros atributos:",
- "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar cuando se intenta identificar. %%uid remplazará al nombre de usuario en el proceso de identificación. Por ejemplo: \"uid=%%uid\"",
+ "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Define el filtro a aplicar al intentar ingresar. %% uid remplaza al nombre de usuario al intentar ingresar. Por ejemplo: \"uid=%%uid\"",
+ "Test Loginname" : "Probar nombre de usuario",
+ "Verify settings" : "Verificar ajustes",
+ "1. Server" : "1. Servidor",
+ "%s. Server:" : "%s. Servidor:",
+ "Add a new and blank configuration" : "Agregar una configuración nueva y en blanco",
+ "Copy current configuration into new directory binding" : "Copiar la configuración actual a un nuevo directorio de vinculación",
+ "Delete the current configuration" : "Borrar la configuración actual",
"Host" : "Servidor",
"You can omit the protocol, except you require SSL. Then start with ldaps://" : "Puede omitir el protocolo, excepto si requiere SSL. En ese caso, empiece con ldaps://",
"Port" : "Puerto",
- "User DN" : "DN usuario",
+ "Detect Port" : "Detectar Puerto",
+ "User DN" : "DN del usuario",
"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "El DN del usuario cliente con el que se hará la asociación, p.ej. uid=agente,dc=ejemplo,dc=com. Para acceso anónimo, deje DN y contraseña vacíos.",
"Password" : "Contraseña",
- "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deje DN y contraseña vacíos.",
+ "For anonymous access, leave DN and Password empty." : "Para acceso anónimo, deje la contraseña y DN vacíos.",
"One Base DN per line" : "Un DN Base por línea",
"You can specify Base DN for users and groups in the Advanced tab" : "Puede especificar el DN base para usuarios y grupos en la pestaña Avanzado",
- "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica que usuarios LDAP pueden tener acceso a %s.",
+ "Detect Base DN" : "Detectar DN Base",
+ "Test Base DN" : "Probar la base DN",
+ "Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Evita solicitudes automaticas de LDAP. Es mejor para ambientes más grandes pero requiere mayor conocimiento de LDAP. ",
+ "Manually enter LDAP filters (recommended for large directories)" : "Ingresar los filtros LDAP manualmente (recomendado para directorios grandes)",
+ "Listing and searching for users is constrained by these criteria:" : "Los enlistados y las busquedas para los usuarios están acotados por estos criterios:",
+ "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." : "Las clases de objetos más comunes para usuarios son organizationalPerson, person, user, and inetOrgPerson. Si no está seguro de cuál clase de objeto selecciónar, favor de consultar su directorio admin.",
+ "The filter specifies which LDAP users shall have access to the %s instance." : "El filtro especifica cuáles usuarios LDAP tendrán acceso a la instancia %s.",
+ "Verify settings and count users" : "Verificar ajustes y contar ususarios",
+ "Saving" : "Guardando",
"Back" : "Atrás",
"Continue" : "Continuar",
+ "LDAP" : "LDAP",
+ "Server" : "Servidor",
+ "Users" : "Usuarios",
+ "Login Attributes" : "Atriburos de Inicio de Sesión",
+ "Groups" : "Grupos",
+ "Expert" : "Experto",
"Advanced" : "Avanzado",
- "<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>Advertencia:</b> Las apps user_ldap y user_webdavauth son incompatibles. Puede que experimente un comportamiento inesperado. Pregunte al su administrador de sistemas para desactivar uno de ellos.",
- "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Por favor consulte al administrador del sistema para instalarlo.",
- "Connection Settings" : "Configuración de conexión",
- "Configuration Active" : "Configuracion activa",
+ "<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>Advertencia:</b> Las aplicaciones user_ldap y user_webdavauth son incompatibles. Usted puede expermientar comportamientos inesperados. Favor de solicitar a su administrador del sistema deshabilitar alguno de ellos.",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Advertencia:</b> El módulo LDAP de PHP no está instalado, el sistema no funcionará. Favor de solicitar su instalación a su administrador del sistema.",
+ "Connection Settings" : "Ajustes de la conexión",
+ "Configuration Active" : "Configuracion Activa",
"When unchecked, this configuration will be skipped." : "Cuando deseleccione, esta configuracion sera omitida.",
"Backup (Replica) Host" : "Servidor de copia de seguridad (Replica)",
- "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Dar un servidor de copia de seguridad opcional. Debe ser una réplica del servidor principal LDAP / AD.",
- "Backup (Replica) Port" : "Puerto para copias de seguridad (Replica)",
+ "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Favor de proporcionar un servidor de copia de seguridad opcional. Debe ser una réplica del servidor LDAP / AD principal.",
+ "Backup (Replica) Port" : "Puerto para copias de seguridad (Réplica)",
"Disable Main Server" : "Deshabilitar servidor principal",
- "Only connect to the replica server." : "Conectar sólo con el servidor de réplica.",
+ "Only connect to the replica server." : "Sólo contectarse al servidor de réplica.",
"Turn off SSL certificate validation." : "Apagar la validación por certificado SSL.",
- "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." : "No se recomienda, ¡utilízalo únicamente para pruebas! Si la conexión únicamente funciona con esta opción, importa el certificado SSL del servidor LDAP en tu servidor %s.",
+ "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." : "¡No se recomienda, úselo únicamente para pruebas! Si la conexión sólo funciona con esta opción, importe el certificado SSL del servidor LDAP a su servidor %s.",
"Cache Time-To-Live" : "Cache TTL",
"in seconds. A change empties the cache." : "en segundos. Un cambio vacía la caché.",
- "Directory Settings" : "Configuración de directorio",
- "User Display Name Field" : "Campo de nombre de usuario a mostrar",
- "The LDAP attribute to use to generate the user's display name." : "El campo LDAP a usar para generar el nombre para mostrar del usuario.",
- "Base User Tree" : "Árbol base de usuario",
+ "Directory Settings" : "Ajustes del directorio",
+ "User Display Name Field" : "Campo de nombre del usuario a desplegar",
+ "The LDAP attribute to use to generate the user's display name." : "El atributo LDAP a usar para generar el nombre del usuario a desplegar.",
+ "2nd User Display Name Field" : "2do Campo de Nombre a Desplegar del Usuario",
+ "Optional. An LDAP attribute to be added to the display name in brackets. Results in e.g. »John Doe (john.doe@example.org)«." : "Opcional. Un atributo LDAP puede ser agregado al nombre a despelegar entre corchetes. Ejemplos de resultados »John Doe (john.doe@example.org)«.",
+ "Base User Tree" : "Árbol de Usuario Base",
"One User Base DN per line" : "Un DN Base de Usuario por línea",
- "User Search Attributes" : "Atributos de la busqueda de usuario",
+ "User Search Attributes" : "Atributos de búsqueda de usuario",
"Optional; one attribute per line" : "Opcional; un atributo por linea",
"Group Display Name Field" : "Campo de nombre de grupo a mostrar",
"The LDAP attribute to use to generate the groups's display name." : "El campo LDAP a usar para generar el nombre para mostrar del grupo.",
"Base Group Tree" : "Árbol base de grupo",
"One Group Base DN per line" : "Un DN Base de Grupo por línea",
- "Group Search Attributes" : "Atributos de busqueda de grupo",
+ "Group Search Attributes" : "Atributos de Búsqueda de Grupo",
"Group-Member association" : "Asociación Grupo-Miembro",
- "Special Attributes" : "Atributos especiales",
- "Quota Field" : "Cuota",
- "Quota Default" : "Cuota por defecto",
- "in bytes" : "en bytes",
- "Email Field" : "E-mail",
- "User Home Folder Naming Rule" : "Regla para la carpeta Home de usuario",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Vacío para el nombre de usuario (por defecto). En otro caso, especifique un atributo LDAP/AD.",
+ "Dynamic Group Member URL" : "URL de Miembro de Grupo Dinámico ",
+ "Nested Groups" : "Grupos Anidados",
+ "When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Cuando se enciende, los grupos que contengan grupos están soportados. (Sólo funciona si el atributo de miembro de grupo contiene los DNs). ",
+ "Paging chunksize" : "Tamaño del chunk de paginación",
+ "Enable LDAP password changes per user" : "Habilitar cambio de contraseñas en LDAP por el usuario",
+ "(New password is sent as plain text to LDAP)" : "(La nueva contraseña se envía como texto plano a LDAP)",
+ "Special Attributes" : "Atributos Especiales",
+ "Quota Field" : "Campo de cuota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Dejar en blanco para usar la cuota predeterminada del usuario. En caso contrario, favor de especificar el atributo LDAP / AD.",
+ "Quota Default" : "Cuota predeterminada",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Anular la cuota predeterminada para usuarios LDAP que no tienen una cuota establecida en el Campo Cuota. ",
+ "Email Field" : "Campo de correo electrónico",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Establecer el correo electrónico del usuario con base en el atributo LDAP. Dejelo vacío para el comportamiento predeterminado. ",
+ "User Home Folder Naming Rule" : "Regla de Nomenclatura para la Carpeta Inicio del Usuario",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Dejar vacío para el nombre de usuario (predeterminado). En otro caso, especifique un atributo LDAP/AD.",
"Internal Username" : "Nombre de usuario interno",
- "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. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." : "El nombre de usuario interno será creado de forma predeterminada desde el atributo UUID. Esto asegura que el nombre de usuario es único y los caracteres no necesitan ser convertidos. En el nombre de usuario interno sólo se pueden usar estos caracteres: [ a-zA-Z0-9_.@- ]. El resto de caracteres son sustituidos por su correspondiente en ASCII o simplemente omitidos. En caso de duplicidades, se añadirá o incrementará un número. El nombre de usuario interno es usado para identificar un usuario. Es también el nombre predeterminado para la carpeta personal del usuario en ownCloud. También es parte de URLs remotas, por ejemplo, para todos los servicios *DAV. Con esta configuración el comportamiento predeterminado puede ser cambiado. Para conseguir un comportamiento similar a como era antes de ownCloud 5, introduzca el campo del nombre para mostrar del usuario en la siguiente caja. Déjelo vacío para el comportamiento predeterminado. Los cambios solo tendrán efecto en los usuarios LDAP mapeados (añadidos) recientemente.",
- "Internal Username Attribute:" : "Atributo Nombre de usuario Interno:",
+ "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." : "Por defecto, el nombre de usuario interno se creará con base en el atributo UUID. Esto asegura que el nombre de usuario sea único y que los caracteres no tengan que ser convertidos. El nombre de usuario intenro tiene la restricción de que sólo los siguienes caracteres están permitidos: [ a-zA-Z0-9_.@- ]. El resto de los caracteres son reemplazados con su correspondencia ASCII o simplemente se omiten. En caso de colisiones, se agregará/ incrementará un numero. El nombre de usuario interno se usa para identificar a un usuario internamente. Adicionalmente es el nombre predeterminado para la carpeta de inicio. También es parte de las URLs remotas, por ejemplo, para todos los servicios *DAV. Con este ajuste se puede anular el comportamiento predeterminado. Mantengalo vacío para mantener el comportamiento predeterminado. Los cambios surtiran efecto sólo en los usuarios mapeados (agregados) nuevos a LDAP. ",
+ "Internal Username Attribute:" : "Atributo de nombre de usuario Interno:",
"Override UUID detection" : "Sobrescribir la detección 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." : "Por defecto, el atributo UUID es autodetectado. Este atributo es usado para identificar indudablemente usuarios y grupos LDAP. Además, el nombre de usuario interno será creado en base al UUID, si no ha sido especificado otro comportamiento arriba. Puedes sobrescribir la configuración y pasar un atributo de tu elección. Debes asegurarte de que el atributo de tu elección sea accesible por los usuarios y grupos y ser único. Déjalo en blanco para usar el comportamiento por defecto. Los cambios tendrán efecto solo en los usuarios y grupos de LDAP mapeados (añadidos) recientemente.",
- "UUID Attribute for Users:" : "Atributo UUID para usuarios:",
+ "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." : "Por defecto, el atributo UUID se detecta automáticamente. Este atributo se usa para identificar, sin ninguna duda, a usuarios y grupos LDAP. Adicionalmente, el nombre de usuario interno se creará con base en el UUID, si no ha sido especificado otro comportamiento en la parte de arriba. Puede anular el ajuste y proporcionar el atributo que desee. Debe asegurarse de que el atributo que desee sea accesible por los usuarios y grupos y que sea único. Mantengalo vacío para el comportamiento predeterminado . Los cambios surtirán efecto sólo en los usuarios y grupos mapeados (agregados) nuevos a LDAP.",
+ "UUID Attribute for Users:" : "Atributo UUID para Usuarios:",
"UUID Attribute for Groups:" : "Atributo UUID para Grupos:",
- "Username-LDAP User Mapping" : "Asignación del Nombre de usuario de un usuario LDAP",
- "Clear Username-LDAP User Mapping" : "Borrar la asignación de los Nombres de usuario de los usuarios LDAP",
- "Clear Groupname-LDAP Group Mapping" : "Borrar la asignación de los Nombres de grupo de los grupos de LDAP"
+ "Username-LDAP User Mapping" : "Mapeo del Nombre del usuario al Usuario LDAP",
+ "Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have an internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." : "Los nombres de usuario son usados para almacenar y asignar (meta) datos. Para poder identificar y reconocer con precisión a los usuarios, cada usuario LDAP contará con un Nombre de usuario interno. Esto requiere un mapeo del Nombre de usuario al usuario LDAP. El nombre de usuario creado se mapea al UUID del usuario LDAP. Adicionalmente el DN se guarda en caché para reducir las interacciones con LDAP, pero no se usa para identificación. Si el DN cambia, las modficaciones serán encontradas. El Nombre del usuario interno se usa en todos lados. Limpiar los mapeos dejará sobras en todos lados. ¡Limpiar los mapeos no es senible a la configuración, afecta a todas las configuraciones LDAP! Nunca limpie las configuraciones en el ambiente de producción, sólo hágalo en los ambientes de pruebas o de experimentación. ",
+ "Clear Username-LDAP User Mapping" : "Limpiar el mapeo de los Nombres de usuario a los Usuarios LDAP",
+ "Clear Groupname-LDAP Group Mapping" : "Limpiar el mapeo de los Nombres de grupo a los grupos de LDAP",
+ "in bytes" : "en bytes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/fr.js b/apps/user_ldap/l10n/fr.js
index ca4599bb746..a6b99481bac 100644
--- a/apps/user_ldap/l10n/fr.js
+++ b/apps/user_ldap/l10n/fr.js
@@ -148,8 +148,11 @@ OC.L10N.register(
"(New password is sent as plain text to LDAP)" : "(Le nouveau mot de passe a été envoyé en tant que texte brut par LDAP)",
"Special Attributes" : "Attributs spéciaux",
"Quota Field" : "Champ du quota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Laissez vide pour appliquer le quota par défaut de l'utilisateur. Sinon, spécifiez un attribut LDAP / AD.",
"Quota Default" : "Quota par défaut",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Remplacez le quota par défaut des utilisateurs LDAP qui ne disposent pas d'un quota dans le champ Quota.",
"Email Field" : "Champ Email",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Définissez le courrier électronique de l'utilisateur à partir de leur attribut LDAP. Laissez le champ vide pour appliquer le comportement par défaut.",
"User Home Folder Naming Rule" : "Règle de nommage du répertoire utilisateur",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide pour user name (défaut). Vous pouvez aussi spécifier un attribut LDAP / AD.",
"Internal Username" : "Nom d'utilisateur interne",
diff --git a/apps/user_ldap/l10n/fr.json b/apps/user_ldap/l10n/fr.json
index 686e2cb2f10..76bd8597b50 100644
--- a/apps/user_ldap/l10n/fr.json
+++ b/apps/user_ldap/l10n/fr.json
@@ -146,8 +146,11 @@
"(New password is sent as plain text to LDAP)" : "(Le nouveau mot de passe a été envoyé en tant que texte brut par LDAP)",
"Special Attributes" : "Attributs spéciaux",
"Quota Field" : "Champ du quota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Laissez vide pour appliquer le quota par défaut de l'utilisateur. Sinon, spécifiez un attribut LDAP / AD.",
"Quota Default" : "Quota par défaut",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Remplacez le quota par défaut des utilisateurs LDAP qui ne disposent pas d'un quota dans le champ Quota.",
"Email Field" : "Champ Email",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Définissez le courrier électronique de l'utilisateur à partir de leur attribut LDAP. Laissez le champ vide pour appliquer le comportement par défaut.",
"User Home Folder Naming Rule" : "Règle de nommage du répertoire utilisateur",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Laisser vide pour user name (défaut). Vous pouvez aussi spécifier un attribut LDAP / AD.",
"Internal Username" : "Nom d'utilisateur interne",
diff --git a/apps/user_ldap/l10n/ja.js b/apps/user_ldap/l10n/ja.js
index bc75a76dec7..92a5e7b0d9a 100644
--- a/apps/user_ldap/l10n/ja.js
+++ b/apps/user_ldap/l10n/ja.js
@@ -148,8 +148,11 @@ OC.L10N.register(
"(New password is sent as plain text to LDAP)" : "(新しいパスワードは平文テキストで LDAP に送信されます)",
"Special Attributes" : "特殊属性",
"Quota Field" : "クォータ属性",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "ユーザーのデフォルトのクォータを空のままにしてください。 もしくは、LDAP/ADの属性を指定してください。",
"Quota Default" : "クォータのデフォルト",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "クォータフィールドでクォータが設定されていないLDAPユーザのデフォルトクォータを上書きします。",
"Email Field" : "メール属性",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "LDAP属性からユーザーのメールを設定します。 デフォルト動作では空のままにします。",
"User Home Folder Naming Rule" : "ユーザーのホームフォルダー命名規則",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "ユーザー名を空のままにしてください(デフォルト)。もしくは、LDAPもしくはADの属性を指定してください。",
"Internal Username" : "内部ユーザー名",
diff --git a/apps/user_ldap/l10n/ja.json b/apps/user_ldap/l10n/ja.json
index 2110a0d1738..196e90be766 100644
--- a/apps/user_ldap/l10n/ja.json
+++ b/apps/user_ldap/l10n/ja.json
@@ -146,8 +146,11 @@
"(New password is sent as plain text to LDAP)" : "(新しいパスワードは平文テキストで LDAP に送信されます)",
"Special Attributes" : "特殊属性",
"Quota Field" : "クォータ属性",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "ユーザーのデフォルトのクォータを空のままにしてください。 もしくは、LDAP/ADの属性を指定してください。",
"Quota Default" : "クォータのデフォルト",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "クォータフィールドでクォータが設定されていないLDAPユーザのデフォルトクォータを上書きします。",
"Email Field" : "メール属性",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "LDAP属性からユーザーのメールを設定します。 デフォルト動作では空のままにします。",
"User Home Folder Naming Rule" : "ユーザーのホームフォルダー命名規則",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "ユーザー名を空のままにしてください(デフォルト)。もしくは、LDAPもしくはADの属性を指定してください。",
"Internal Username" : "内部ユーザー名",
diff --git a/apps/user_ldap/l10n/pl.js b/apps/user_ldap/l10n/pl.js
index 45a4df5bed5..e3405374c48 100644
--- a/apps/user_ldap/l10n/pl.js
+++ b/apps/user_ldap/l10n/pl.js
@@ -147,9 +147,12 @@ OC.L10N.register(
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Pozwól użytkownikom LDAP-a na zmianę swoich haseł i pozwól Super Administratorom i Grupom Administratorów na zmianę haseł swoim użytkownikom LDAP-a. Działa tylko wtedy, kiedy polisy kontroli dostępu są prawidłowo skonfigurowane na serwerze LDAP. Jako że do serwera LDAP hasła są wysyłane czystym tekstem, na serwerze LDAP należy skonfigurować protokoł szyfrowania oraz haszowanie haseł.",
"(New password is sent as plain text to LDAP)" : "(Nowe hasło jest wysyłane do LDAP-a czystym tekstem)",
"Special Attributes" : "Specjalne atrybuty",
- "Quota Field" : "Pole przydziału",
- "Quota Default" : "Przydział domyślny",
- "Email Field" : "Pole email",
+ "Quota Field" : "Pole limitu przestrzeni",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Zostaw puste dla domyślnego limitu przestrzeni dla użytkowników lub określ atrybut LDAP/AD.",
+ "Quota Default" : "Domyślny limit przestrzeni",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Nadpisz domyślny limit przestrzeni dla użytkowników LDAP-a, którzy nie mają go ustawionego w \"Polu limitu prestrzeni\".",
+ "Email Field" : "Pole e-mail",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Ustaw adres e-mail użytkowników z ich atrybutu LDAP. Zostaw puste dla domyślnego zachowania.",
"User Home Folder Naming Rule" : "Reguły nazewnictwa folderu domowego użytkownika",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Pozostaw puste dla user name (domyślnie). W przeciwnym razie podaj atrybut LDAP/AD.",
"Internal Username" : "Wewnętrzna nazwa użytkownika",
diff --git a/apps/user_ldap/l10n/pl.json b/apps/user_ldap/l10n/pl.json
index d084ae79d0b..d9c5dab01b9 100644
--- a/apps/user_ldap/l10n/pl.json
+++ b/apps/user_ldap/l10n/pl.json
@@ -145,9 +145,12 @@
"Allow LDAP users to change their password and allow Super Administrators and Group Administrators to change the password of their LDAP users. Only works when access control policies are configured accordingly on the LDAP server. As passwords are sent in plaintext to the LDAP server, transport encryption must be used and password hashing should be configured on the LDAP server." : "Pozwól użytkownikom LDAP-a na zmianę swoich haseł i pozwól Super Administratorom i Grupom Administratorów na zmianę haseł swoim użytkownikom LDAP-a. Działa tylko wtedy, kiedy polisy kontroli dostępu są prawidłowo skonfigurowane na serwerze LDAP. Jako że do serwera LDAP hasła są wysyłane czystym tekstem, na serwerze LDAP należy skonfigurować protokoł szyfrowania oraz haszowanie haseł.",
"(New password is sent as plain text to LDAP)" : "(Nowe hasło jest wysyłane do LDAP-a czystym tekstem)",
"Special Attributes" : "Specjalne atrybuty",
- "Quota Field" : "Pole przydziału",
- "Quota Default" : "Przydział domyślny",
- "Email Field" : "Pole email",
+ "Quota Field" : "Pole limitu przestrzeni",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Zostaw puste dla domyślnego limitu przestrzeni dla użytkowników lub określ atrybut LDAP/AD.",
+ "Quota Default" : "Domyślny limit przestrzeni",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Nadpisz domyślny limit przestrzeni dla użytkowników LDAP-a, którzy nie mają go ustawionego w \"Polu limitu prestrzeni\".",
+ "Email Field" : "Pole e-mail",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Ustaw adres e-mail użytkowników z ich atrybutu LDAP. Zostaw puste dla domyślnego zachowania.",
"User Home Folder Naming Rule" : "Reguły nazewnictwa folderu domowego użytkownika",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Pozostaw puste dla user name (domyślnie). W przeciwnym razie podaj atrybut LDAP/AD.",
"Internal Username" : "Wewnętrzna nazwa użytkownika",
diff --git a/apps/user_ldap/l10n/pt_BR.js b/apps/user_ldap/l10n/pt_BR.js
index 7396a1c7495..b6b18a302d8 100644
--- a/apps/user_ldap/l10n/pt_BR.js
+++ b/apps/user_ldap/l10n/pt_BR.js
@@ -148,8 +148,11 @@ OC.L10N.register(
"(New password is sent as plain text to LDAP)" : "(Nova senha é enviada como texto puro para LDAP)",
"Special Attributes" : "Atributos Especiais",
"Quota Field" : "Campo de Cota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixe vazio para a cota padrão do usuário. Caso contrário, especifique um atributo LDAP/AD",
"Quota Default" : "Cota Padrão",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Substituir a cota padrão para usuários LDAP que não têm um conjunto de cotas no Campo Quota.",
"Email Field" : "Campo de Email",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Defina o email do usuário de seu atributo LDAP. Deixe vazio para o comportamento padrão.",
"User Home Folder Naming Rule" : "Regra para Nome da Pasta Pessoal do Usuário",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Deixe vazio para nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD.",
"Internal Username" : "Nome de usuário interno",
diff --git a/apps/user_ldap/l10n/pt_BR.json b/apps/user_ldap/l10n/pt_BR.json
index e567d6fbdd5..ea819064b37 100644
--- a/apps/user_ldap/l10n/pt_BR.json
+++ b/apps/user_ldap/l10n/pt_BR.json
@@ -146,8 +146,11 @@
"(New password is sent as plain text to LDAP)" : "(Nova senha é enviada como texto puro para LDAP)",
"Special Attributes" : "Atributos Especiais",
"Quota Field" : "Campo de Cota",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Deixe vazio para a cota padrão do usuário. Caso contrário, especifique um atributo LDAP/AD",
"Quota Default" : "Cota Padrão",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Substituir a cota padrão para usuários LDAP que não têm um conjunto de cotas no Campo Quota.",
"Email Field" : "Campo de Email",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Defina o email do usuário de seu atributo LDAP. Deixe vazio para o comportamento padrão.",
"User Home Folder Naming Rule" : "Regra para Nome da Pasta Pessoal do Usuário",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Deixe vazio para nome de usuário (padrão). Caso contrário, especifique um atributo LDAP/AD.",
"Internal Username" : "Nome de usuário interno",
diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js
index 3b47288f834..9d295a1d0b1 100644
--- a/apps/user_ldap/l10n/ru.js
+++ b/apps/user_ldap/l10n/ru.js
@@ -148,8 +148,11 @@ OC.L10N.register(
"(New password is sent as plain text to LDAP)" : "(Новый пароль отправлен в LDAP простым текстом)",
"Special Attributes" : "Специальные атрибуты",
"Quota Field" : "Поле квоты",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования квоты по умолчанию. Иначе укажите атрибут LDAP/AD.",
"Quota Default" : "Квота по умолчанию",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Переопределить стандартную квоту для пользователей LDAP, у которых не указано значение в поле «Квота».",
"Email Field" : "Поле адреса email",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Устанавливать адрес email пользователя из атрибута LDAP. Оставьте поле пустым для поведения по умолчанию.",
"User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.",
"Internal Username" : "Внутреннее имя пользователя",
diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json
index 956b983a1b3..b0352ba3d67 100644
--- a/apps/user_ldap/l10n/ru.json
+++ b/apps/user_ldap/l10n/ru.json
@@ -146,8 +146,11 @@
"(New password is sent as plain text to LDAP)" : "(Новый пароль отправлен в LDAP простым текстом)",
"Special Attributes" : "Специальные атрибуты",
"Quota Field" : "Поле квоты",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования квоты по умолчанию. Иначе укажите атрибут LDAP/AD.",
"Quota Default" : "Квота по умолчанию",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Переопределить стандартную квоту для пользователей LDAP, у которых не указано значение в поле «Квота».",
"Email Field" : "Поле адреса email",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Устанавливать адрес email пользователя из атрибута LDAP. Оставьте поле пустым для поведения по умолчанию.",
"User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя",
"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.",
"Internal Username" : "Внутреннее имя пользователя",
diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js
index 07c4fa0838e..25ca5dd3fa0 100644
--- a/apps/user_ldap/l10n/tr.js
+++ b/apps/user_ldap/l10n/tr.js
@@ -109,7 +109,7 @@ OC.L10N.register(
"Expert" : "Uzman",
"Advanced" : "Gelişmiş",
"<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>Uyarı:</b> user_ldap ve user_webdavauth uygulamaları uyumlu değil. Beklenmedik bir davranışla karşılaşabilirsiniz. Lütfen ikisinden birini devre dışı bırakmak için sistem yöneticinizle görüşün.",
- "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Uyarı:</b> PHP LDAP modülü kurulu değil, arka uç çalışmayacak. Lütfen kurulumu için sistem yöneticinizle görüşün.",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Uyarı:</b> PHP LDAP modülü kurulmamış, arka uç çalışmayacak. Lütfen kurulumu için sistem yöneticinizle görüşün.",
"Connection Settings" : "Bağlantı Ayarları",
"Configuration Active" : "Yapılandırma Etkin",
"When unchecked, this configuration will be skipped." : "Bu seçenek işaretli değilse, bu yapılandırma atlanır.",
@@ -148,10 +148,13 @@ OC.L10N.register(
"(New password is sent as plain text to LDAP)" : "(Yeni parola LDAP üzerine düz metin olarak gönderildi)",
"Special Attributes" : "Özel Öznitelikler",
"Quota Field" : "Kota Alanı",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Kullanıcının varsayılan kotasının kullanılması için boş bırakın ya da bir LDAP/AD özniteliği belirtin.",
"Quota Default" : "Varsayılan Kota",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Kota Alanına bir kota değeri yazılmamış olan LDAP kullanıcıları için kullanılacak varsayılan kota değerini yazın.",
"Email Field" : "E-posta Alanı",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Kullanıcı varsayılan e-posta adresinin kullanılması için boş bırakın ya da bir LDAP/AD özniteliği belirtin.",
"User Home Folder Naming Rule" : "Kullanıcı Ana Klasörünü Adlandırma Kuralı",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Kullanıcı adının kullanılması için boş bırakın (varsayılan). Ya da bir LDAP/AD özniteliği belirtin.",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Kullanıcı adının kullanılması için boş bırakın (varsayılan) ya da bir LDAP/AD özniteliği belirtin.",
"Internal Username" : "İç 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." : "Varsayılan olarak, iç kullanıcı adı UUID özniteliğinden oluşturulur. Böylece kullanıcı adının eşsiz olması ve dönüştürülmesi gereken karakterler içermediğinden emin olunur. İç kullanıcı adında kısıtlaması yalnız şu karakterleri kullanılabilir: [ a-zA-Z0-9_.@- ]. Diğer karakterler ASCII karşılıklarına dönüştürülür ya da yok sayılır. Çakışmalarda ada bir sayı eklenir. İç kullanıcı adı bir kullanıcıyı içsel olarak belirlemeye yarar. Aynı zamanda kullanıcı ana klasörünün varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin *DAV servislerinin bir parçasıdır. Bu seçenek ile varsayılan davranış değiştirilebilir. Varsayılan davranışı kullanmak için boş bırakın. Değişiklikler yalnız yeni eşleştirilecek (eklenecek) LDAP kullanıcılarını etkiler.",
"Internal Username Attribute:" : "İç Kullanıcı Adı Özniteliği:",
diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json
index 864cb0ed8a2..0e7cc764814 100644
--- a/apps/user_ldap/l10n/tr.json
+++ b/apps/user_ldap/l10n/tr.json
@@ -107,7 +107,7 @@
"Expert" : "Uzman",
"Advanced" : "Gelişmiş",
"<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>Uyarı:</b> user_ldap ve user_webdavauth uygulamaları uyumlu değil. Beklenmedik bir davranışla karşılaşabilirsiniz. Lütfen ikisinden birini devre dışı bırakmak için sistem yöneticinizle görüşün.",
- "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Uyarı:</b> PHP LDAP modülü kurulu değil, arka uç çalışmayacak. Lütfen kurulumu için sistem yöneticinizle görüşün.",
+ "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>Uyarı:</b> PHP LDAP modülü kurulmamış, arka uç çalışmayacak. Lütfen kurulumu için sistem yöneticinizle görüşün.",
"Connection Settings" : "Bağlantı Ayarları",
"Configuration Active" : "Yapılandırma Etkin",
"When unchecked, this configuration will be skipped." : "Bu seçenek işaretli değilse, bu yapılandırma atlanır.",
@@ -146,10 +146,13 @@
"(New password is sent as plain text to LDAP)" : "(Yeni parola LDAP üzerine düz metin olarak gönderildi)",
"Special Attributes" : "Özel Öznitelikler",
"Quota Field" : "Kota Alanı",
+ "Leave empty for user's default quota. Otherwise, specify an LDAP/AD attribute." : "Kullanıcının varsayılan kotasının kullanılması için boş bırakın ya da bir LDAP/AD özniteliği belirtin.",
"Quota Default" : "Varsayılan Kota",
+ "Override default quota for LDAP users who do not have a quota set in the Quota Field." : "Kota Alanına bir kota değeri yazılmamış olan LDAP kullanıcıları için kullanılacak varsayılan kota değerini yazın.",
"Email Field" : "E-posta Alanı",
+ "Set the user's email from their LDAP attribute. Leave it empty for default behaviour." : "Kullanıcı varsayılan e-posta adresinin kullanılması için boş bırakın ya da bir LDAP/AD özniteliği belirtin.",
"User Home Folder Naming Rule" : "Kullanıcı Ana Klasörünü Adlandırma Kuralı",
- "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Kullanıcı adının kullanılması için boş bırakın (varsayılan). Ya da bir LDAP/AD özniteliği belirtin.",
+ "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "Kullanıcı adının kullanılması için boş bırakın (varsayılan) ya da bir LDAP/AD özniteliği belirtin.",
"Internal Username" : "İç 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." : "Varsayılan olarak, iç kullanıcı adı UUID özniteliğinden oluşturulur. Böylece kullanıcı adının eşsiz olması ve dönüştürülmesi gereken karakterler içermediğinden emin olunur. İç kullanıcı adında kısıtlaması yalnız şu karakterleri kullanılabilir: [ a-zA-Z0-9_.@- ]. Diğer karakterler ASCII karşılıklarına dönüştürülür ya da yok sayılır. Çakışmalarda ada bir sayı eklenir. İç kullanıcı adı bir kullanıcıyı içsel olarak belirlemeye yarar. Aynı zamanda kullanıcı ana klasörünün varsayılan adı olarak da kullanılır. İnternet adreslerinin, örneğin *DAV servislerinin bir parçasıdır. Bu seçenek ile varsayılan davranış değiştirilebilir. Varsayılan davranışı kullanmak için boş bırakın. Değişiklikler yalnız yeni eşleştirilecek (eklenecek) LDAP kullanıcılarını etkiler.",
"Internal Username Attribute:" : "İç Kullanıcı Adı Özniteliği:",
diff --git a/apps/workflowengine/l10n/es_MX.js b/apps/workflowengine/l10n/es_MX.js
index 93337ee293a..3d54e7915a8 100644
--- a/apps/workflowengine/l10n/es_MX.js
+++ b/apps/workflowengine/l10n/es_MX.js
@@ -14,6 +14,10 @@ OC.L10N.register(
"less or equals" : "menor o igual",
"greater or equals" : "mayor o igual",
"greater" : "mayor",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Select tag…" : "Seleccionar etiqueta...",
"Request remote address" : "Solicitar dirección remota",
"matches IPv4" : "coincide con IPv4",
"does not match IPv4" : "no coincide con IPv4",
@@ -27,19 +31,23 @@ OC.L10N.register(
"Select timezone…" : "Seleccionar zona horaria...",
"Request URL" : "Solicitar URL",
"Predefined URLs" : "URLs predefinidos",
+ "Files WebDAV" : "Archivos WebDAV",
"Request user agent" : "Solicitar agente de usuario",
"Sync clients" : "Sincronizar clientes",
"Android client" : "Cliente Android",
"iOS client" : "Cliente iOS",
"Desktop client" : "Cliente de escritorio",
+ "User group membership" : "Membresia al grupo de usuarios",
"is member of" : "es miembro de",
"is not member of" : "no es miembro de",
"The given operator is invalid" : "El operador indicado es inválido",
"The given regular expression is invalid" : "La expresión regular indicada es inválida",
"The given file size is invalid" : "El tamaño de archivo indicado es inválido",
+ "The given tag id is invalid" : "El id de la etiqueta es inválido",
"The given IP range is invalid" : "El rango de IP's es inválido",
"The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
"The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
+ "The given time span is invalid" : "El espacio de tiempo dado es inválido",
"The given start time is invalid" : "El tiempo inicial dado no es válido",
"The given end time is invalid" : "El tiempo final dado no es válido",
"The given group does not exist" : "El grupo dado no existe",
diff --git a/apps/workflowengine/l10n/es_MX.json b/apps/workflowengine/l10n/es_MX.json
index 410a5e49207..5003c44aeeb 100644
--- a/apps/workflowengine/l10n/es_MX.json
+++ b/apps/workflowengine/l10n/es_MX.json
@@ -12,6 +12,10 @@
"less or equals" : "menor o igual",
"greater or equals" : "mayor o igual",
"greater" : "mayor",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Select tag…" : "Seleccionar etiqueta...",
"Request remote address" : "Solicitar dirección remota",
"matches IPv4" : "coincide con IPv4",
"does not match IPv4" : "no coincide con IPv4",
@@ -25,19 +29,23 @@
"Select timezone…" : "Seleccionar zona horaria...",
"Request URL" : "Solicitar URL",
"Predefined URLs" : "URLs predefinidos",
+ "Files WebDAV" : "Archivos WebDAV",
"Request user agent" : "Solicitar agente de usuario",
"Sync clients" : "Sincronizar clientes",
"Android client" : "Cliente Android",
"iOS client" : "Cliente iOS",
"Desktop client" : "Cliente de escritorio",
+ "User group membership" : "Membresia al grupo de usuarios",
"is member of" : "es miembro de",
"is not member of" : "no es miembro de",
"The given operator is invalid" : "El operador indicado es inválido",
"The given regular expression is invalid" : "La expresión regular indicada es inválida",
"The given file size is invalid" : "El tamaño de archivo indicado es inválido",
+ "The given tag id is invalid" : "El id de la etiqueta es inválido",
"The given IP range is invalid" : "El rango de IP's es inválido",
"The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
"The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
+ "The given time span is invalid" : "El espacio de tiempo dado es inválido",
"The given start time is invalid" : "El tiempo inicial dado no es válido",
"The given end time is invalid" : "El tiempo final dado no es válido",
"The given group does not exist" : "El grupo dado no existe",
diff --git a/build/integration/run.sh b/build/integration/run.sh
index 282a4303395..45c2bcdaf2b 100755
--- a/build/integration/run.sh
+++ b/build/integration/run.sh
@@ -44,7 +44,7 @@ if [ "$INSTALLED" == "true" ]; then
$OCC app:enable files_external
mkdir -p work/local_storage
- OUTPUT_CREATE_STORAGE=`$OCC files_external:create local_storage local null::null -c datadir=./build/integration/work/local_storage`
+ OUTPUT_CREATE_STORAGE=`$OCC files_external:create local_storage local null::null -c datadir=$PWD/work/local_storage`
ID_STORAGE=`echo $OUTPUT_CREATE_STORAGE | tr ' ' '\n' | tail -n1`
diff --git a/build/mergejs.php b/build/mergejs.php
index 5ffca9d496f..85820c19795 100644
--- a/build/mergejs.php
+++ b/build/mergejs.php
@@ -31,5 +31,6 @@ $vendors = $data['vendor'];
$vendorjs = fopen(__DIR__.'/../core/vendor/core.js', 'w');
foreach($vendors as $vendor) {
fwrite($vendorjs, file_get_contents(__DIR__.'/../core/vendor/'.$vendor));
+ fwrite($vendorjs, PHP_EOL);
}
fclose($vendorjs);
diff --git a/core/Command/Db/ConvertType.php b/core/Command/Db/ConvertType.php
index a8969251bab..4ca7899fec6 100644
--- a/core/Command/Db/ConvertType.php
+++ b/core/Command/Db/ConvertType.php
@@ -28,6 +28,7 @@
namespace OC\Core\Command\Db;
+use OCP\DB\QueryBuilder\IQueryBuilder;
use \OCP\IConfig;
use OC\DB\Connection;
use OC\DB\ConnectionFactory;
@@ -54,6 +55,9 @@ class ConvertType extends Command implements CompletionAwareInterface {
*/
protected $connectionFactory;
+ /** @var array */
+ protected $columnTypes;
+
/**
* @param \OCP\IConfig $config
* @param \OC\DB\ConnectionFactory $connectionFactory
@@ -304,7 +308,12 @@ class ConvertType extends Command implements CompletionAwareInterface {
}
foreach ($row as $key => $value) {
- $insertQuery->setParameter($key, $value);
+ $type = $this->getColumnType($table, $key);
+ if ($type !== false) {
+ $insertQuery->setParameter($key, $value, $type);
+ } else {
+ $insertQuery->setParameter($key, $value);
+ }
}
$insertQuery->execute();
}
@@ -313,6 +322,26 @@ class ConvertType extends Command implements CompletionAwareInterface {
$progress->finish();
}
+ protected function getColumnType($table, $column) {
+ if (isset($this->columnTypes[$table][$column])) {
+ return $this->columnTypes[$table][$column];
+ }
+ $prefix = $this->config->getSystemValue('dbtableprefix', 'oc_');
+
+ $this->columnTypes[$table][$column] = false;
+
+ if ($table === $prefix . 'cards' && $column === 'carddata') {
+ $this->columnTypes[$table][$column] = IQueryBuilder::PARAM_LOB;
+ } else if ($column === 'calendardata') {
+ if ($table === $prefix . 'calendarobjects' ||
+ $table === $prefix . 'schedulingobjects') {
+ $this->columnTypes[$table][$column] = IQueryBuilder::PARAM_LOB;
+ }
+ }
+
+ return $this->columnTypes[$table][$column];
+ }
+
protected function convertDB(Connection $fromDB, Connection $toDB, array $tables, InputInterface $input, OutputInterface $output) {
$this->config->setSystemValue('maintenance', true);
try {
diff --git a/core/Controller/LostController.php b/core/Controller/LostController.php
index 8a8a50343ed..4de1cf5eb00 100644
--- a/core/Controller/LostController.php
+++ b/core/Controller/LostController.php
@@ -39,6 +39,7 @@ use \OCP\IURLGenerator;
use \OCP\IRequest;
use \OCP\IL10N;
use \OCP\IConfig;
+use OCP\IUser;
use OCP\IUserManager;
use OCP\Mail\IMailer;
use OCP\Security\ICrypto;
@@ -253,16 +254,12 @@ class LostController extends Controller {
}
/**
- * @param string $user
+ * @param string $input
* @throws \Exception
*/
- protected function sendEmail($user) {
- if (!$this->userManager->userExists($user)) {
- throw new \Exception($this->l10n->t('Couldn\'t send reset email. Please make sure your username is correct.'));
- }
-
- $userObject = $this->userManager->get($user);
- $email = $userObject->getEMailAddress();
+ protected function sendEmail($input) {
+ $user = $this->findUserByIdOrMail($input);
+ $email = $user->getEMailAddress();
if (empty($email)) {
throw new \Exception(
@@ -281,11 +278,10 @@ class LostController extends Controller {
ISecureRandom::CHAR_UPPER
);
$tokenValue = $this->timeFactory->getTime() .':'. $token;
- $mailAddress = !is_null($userObject->getEMailAddress()) ? $userObject->getEMailAddress() : '';
- $encryptedValue = $this->crypto->encrypt($tokenValue, $mailAddress.$this->config->getSystemValue('secret'));
- $this->config->setUserValue($user, 'core', 'lostpassword', $encryptedValue);
+ $encryptedValue = $this->crypto->encrypt($tokenValue, $email . $this->config->getSystemValue('secret'));
+ $this->config->setUserValue($user->getUID(), 'core', 'lostpassword', $encryptedValue);
- $link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user, 'token' => $token));
+ $link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user->getUID(), 'token' => $token));
$tmpl = new \OC_Template('core', 'lostpassword/email');
$tmpl->assign('link', $link);
@@ -293,7 +289,7 @@ class LostController extends Controller {
try {
$message = $this->mailer->createMessage();
- $message->setTo([$email => $user]);
+ $message->setTo([$email => $user->getUID()]);
$message->setSubject($this->l10n->t('%s password reset', [$this->defaults->getName()]));
$message->setPlainBody($msg);
$message->setFrom([$this->from => $this->defaults->getName()]);
@@ -305,4 +301,21 @@ class LostController extends Controller {
}
}
+ /**
+ * @param string $input
+ * @return IUser
+ * @throws \Exception
+ */
+ protected function findUserByIdOrMail($input) {
+ $user = $this->userManager->get($input);
+ if ($user instanceof IUser) {
+ return $user;
+ }
+ $users = $this->userManager->getByEmail($input);
+ if (count($users) === 1) {
+ return $users[0];
+ }
+
+ throw new \InvalidArgumentException($this->l10n->t('Couldn\'t send reset email. Please make sure your username is correct.'));
+ }
}
diff --git a/core/css/apps.scss b/core/css/apps.scss
index 898a18ae9c9..0c31e5bae44 100644
--- a/core/css/apps.scss
+++ b/core/css/apps.scss
@@ -16,7 +16,7 @@
*
*/
-/* HEADING STYLING ---------------------------------------------------------- */
+/* BASE STYLING ---------------------------------------------------------- */
h2 {
font-size: 20px;
@@ -24,11 +24,13 @@ h2 {
margin-bottom: 12px;
line-height: 140%;
}
+
h3 {
font-size: 15px;
font-weight: 300;
margin: 12px 0;
}
+
/* do not use italic typeface style, instead lighter color */
em {
font-style: normal;
@@ -36,6 +38,33 @@ em {
opacity: .5;
}
+dl {
+ padding: 12px 0;
+}
+
+dt,
+dd {
+ display: inline-block;
+ padding: 12px;
+ padding-left: 0;
+}
+
+dt {
+ width: 130px;
+ white-space: nowrap;
+ text-align: right;
+}
+
+kbd {
+ padding: 4px 10px;
+ border: 1px solid #ccc;
+ box-shadow: 0 1px 0 rgba(0, 0, 0, .2);
+ border-radius: 3px;
+ display: inline-block;
+ white-space: nowrap;
+}
+
+
/* APP STYLING -------------------------------------------------------------- */
#app {
diff --git a/core/css/inputs.scss b/core/css/inputs.scss
index 37405172d3a..13a164e13f2 100644
--- a/core/css/inputs.scss
+++ b/core/css/inputs.scss
@@ -1,12 +1,12 @@
/**
* @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
* @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
- * @copyright Copyright (c) 2016, Jan-Christoph Borchardt <hey@jancborchardt.net>
* @copyright Copyright (c) 2016, Joas Schilling <coding@schilljs.com>
* @copyright Copyright (c) 2016, Julius Haertl <jus@bitgrid.net>
* @copyright Copyright (c) 2016, jowi <sjw@gmx.ch>
* @copyright Copyright (c) 2015, Joas Schilling <nickvergessen@owncloud.com>
* @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
+ * @copyright Copyright (c) 2014-2017, Jan-Christoph Borchardt <hey@jancborchardt.net>
*
* @license GNU AGPL version 3 or any later version
*
@@ -301,6 +301,21 @@ input {
}
}
}
+#app-settings-content {
+ input {
+ &[type='checkbox'],
+ &[type='radio'] {
+ &.radio,
+ &.checkbox {
+ + label {
+ display: inline-block;
+ width: 100%;
+ padding: 5px 0;
+ }
+ }
+ }
+ }
+}
/* Select2 overriding. Merged to core with vendor stylesheet */
.select2-drop {
diff --git a/core/js/core.json b/core/js/core.json
index 828dd71f611..e03d4cce190 100644
--- a/core/js/core.json
+++ b/core/js/core.json
@@ -12,7 +12,7 @@
"es6-promise/dist/es6-promise.js",
"davclient.js/lib/client.js",
"clipboard/dist/clipboard.min.js",
- "autosize/dist/autosize.js",
+ "autosize/dist/autosize.min.js",
"DOMPurify/dist/purify.min.js",
"snapjs/dist/latest/snap.js",
"select2/select2.js"
diff --git a/core/js/shareconfigmodel.js b/core/js/shareconfigmodel.js
index 98388cbd508..1ead631db4d 100644
--- a/core/js/shareconfigmodel.js
+++ b/core/js/shareconfigmodel.js
@@ -22,6 +22,7 @@
defaults: {
publicUploadEnabled: false,
enforcePasswordForPublicLink: oc_appconfig.core.enforcePasswordForPublicLink,
+ enableLinkPasswordByDefault: oc_appconfig.core.enableLinkPasswordByDefault,
isDefaultExpireDateEnforced: oc_appconfig.core.defaultExpireDateEnforced === true,
isDefaultExpireDateEnabled: oc_appconfig.core.defaultExpireDateEnabled === true,
isRemoteShareAllowed: oc_appconfig.core.remoteShareAllowed,
diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js
index d881b85f70f..36f15a7269d 100644
--- a/core/js/sharedialoglinkshareview.js
+++ b/core/js/sharedialoglinkshareview.js
@@ -17,6 +17,7 @@
var PASSWORD_PLACEHOLDER = '**********';
var PASSWORD_PLACEHOLDER_MESSAGE = t('core', 'Choose a password for the public link');
+ var PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL = t('core', 'Choose a password for the public link or press enter');
var TEMPLATE =
'{{#if shareAllowed}}' +
@@ -30,7 +31,7 @@
'{{#if singleAction}}' +
'<a class="{{#unless isLinkShare}}hidden-visually{{/unless}} clipboardButton icon icon-clippy" data-clipboard-target="#linkText-{{cid}}"></a>' +
'{{else}}' +
- '<a href="#"><span class="linkMore icon icon-more"></span></a>' +
+ '<a class="{{#unless isLinkShare}}hidden-visually{{/unless}}" href="#"><span class="linkMore icon icon-more"></span></a>' +
'{{{popoverMenu}}}' +
'{{/if}}' +
'</div>' +
@@ -61,7 +62,11 @@
' {{/if}}' +
'<div id="linkPass" class="linkPass {{#unless isPasswordSet}}hidden{{/unless}}">' +
' <label for="linkPassText-{{cid}}" class="hidden-visually">{{passwordLabel}}</label>' +
+ ' {{#if showPasswordCheckBox}}' +
' <input id="linkPassText-{{cid}}" class="linkPassText" type="password" placeholder="{{passwordPlaceholder}}" />' +
+ ' {{else}}' +
+ ' <input id="linkPassText-{{cid}}" class="linkPassText" type="password" placeholder="{{passwordPlaceholderInitial}}" />' +
+ ' {{/if}}' +
' <span class="icon-loading-small hidden"></span>' +
'</div>' +
'{{else}}' +
@@ -228,7 +233,7 @@
}
if($checkBox.is(':checked')) {
- if(this.configModel.get('enforcePasswordForPublicLink') === false) {
+ if(this.configModel.get('enforcePasswordForPublicLink') === false && this.configModel.get('enableLinkPasswordByDefault') === false) {
$loading.removeClass('hidden');
// this will create it
this.model.saveLinkShare();
@@ -280,9 +285,19 @@
var $input = this.$el.find('.linkPassText');
$input.removeClass('error');
var password = $input.val();
- // in IE9 the password might be the placeholder due to bugs in the placeholders polyfill
- if(password === '' || password === PASSWORD_PLACEHOLDER || password === PASSWORD_PLACEHOLDER_MESSAGE) {
- return;
+
+ if (this.$el.find('.linkPassText').attr('placeholder') === PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL) {
+
+ // in IE9 the password might be the placeholder due to bugs in the placeholders polyfill
+ if(password === PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL) {
+ password = '';
+ }
+ } else {
+
+ // in IE9 the password might be the placeholder due to bugs in the placeholders polyfill
+ if(password === '' || password === PASSWORD_PLACEHOLDER || password === PASSWORD_PLACEHOLDER_MESSAGE) {
+ return;
+ }
}
$loading
@@ -391,6 +406,8 @@
var showPasswordCheckBox = isLinkShare
&& ( !this.configModel.get('enforcePasswordForPublicLink')
|| !this.model.get('linkShare').password);
+ var passwordPlaceholderInitial = this.configModel.get('enforcePasswordForPublicLink')
+ ? PASSWORD_PLACEHOLDER_MESSAGE : PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL;
var publicEditable =
!this.model.isFolder()
@@ -428,6 +445,7 @@
enablePasswordLabel: t('core', 'Password protect'),
passwordLabel: t('core', 'Password'),
passwordPlaceholder: isPasswordSet ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE,
+ passwordPlaceholderInitial: passwordPlaceholderInitial,
isPasswordSet: isPasswordSet,
showPasswordCheckBox: showPasswordCheckBox,
publicUpload: publicUpload && isLinkShare,
diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js
new file mode 100644
index 00000000000..b4ec89f3c67
--- /dev/null
+++ b/core/l10n/es_MX.js
@@ -0,0 +1,288 @@
+OC.L10N.register(
+ "core",
+ {
+ "Please select a file." : "Favor de seleccionar un archivo.",
+ "File is too big" : "El archivo es demasiado grande.",
+ "The selected file is not an image." : "El archivo seleccionado no es una imagen.",
+ "The selected file cannot be read." : "El archivo seleccionado no se puede leer.",
+ "Invalid file provided" : "Archivo proporcionado inválido",
+ "No image or file provided" : "No se especificó un archivo o imagen",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "An error occurred. Please contact your admin." : "Se presentó un error. Favor de contactar a su adminsitrador. ",
+ "No temporary profile picture available, try again" : "No hay una imagen de perfil temporal disponible, favor de intentarlo de nuevo",
+ "No crop data provided" : "No se proporcionó datos del recorte",
+ "Couldn't send reset email. Please make sure your username is correct." : "No fue posible restablecer el correo electrónico. Favor de asegurarse que su nombre de usuario sea correcto. ",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No fue posible enviar el correo electrónico para restablecer porque no hay una dirección de correo electrónico para este usuario. Favor de contactar a su adminsitrador. ",
+ "%s password reset" : "%s restablecer la contraseña",
+ "Couldn't send reset email. Please contact your administrator." : "No fue posible enviar el correo de restauración. Favor de contactar a su adminsitrador. ",
+ "Preparing update" : "Preparando actualización",
+ "[%d / %d]: %s" : "[%d / %d]: %s ",
+ "Repair warning: " : "Advertencia de reparación:",
+ "Repair error: " : "Error de reparación: ",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Favor de usar el actualizador de línea de comandos ya que el actualizador automático se encuentra deshabilitado en config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Verificando tabla %s",
+ "Turned on maintenance mode" : "Activar modo mantenimiento",
+ "Turned off maintenance mode" : "Desactivar modo mantenimiento",
+ "Maintenance mode is kept active" : "El modo mantenimiento sigue activo",
+ "Updating database schema" : "Actualizando esquema de base de datos",
+ "Updated database" : "Base de datos actualizada",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificando si el archivo del esquema de base de datos puede ser actualizado (esto puedo tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update" : "Actualización del esquema de base de datos verificada",
+ "Checking updates of apps" : "Verificando actualizaciónes para aplicaciones",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando si el esquema de la base de datos para %s puede ser actualizado (esto puede tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update for apps" : "Se verificó la actualización del esquema de la base de datos para las aplicaciones",
+ "Updated \"%s\" to %s" : "Actualizando \"%s\" a %s",
+ "Set log level to debug" : "Establecer nivel de bitacora a depurar",
+ "Reset log level" : "Restablecer nivel de bitácora",
+ "Starting code integrity check" : "Comenzando verificación de integridad del código",
+ "Finished code integrity check" : "Verificación de integridad del código terminó",
+ "%s (3rdparty)" : "%s (de3ros)",
+ "%s (incompatible)" : "%s (incompatible)",
+ "Following apps have been disabled: %s" : "Las siguientes aplicaciones han sido deshabilitadas: %s",
+ "Already up to date" : "Ya está actualizado",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Se presentaron problemas con la verificación de integridad del código. Mayor información ...</a>",
+ "Settings" : "Ajustes",
+ "Connection to server lost" : "Se ha perdido la conexión con el servidor",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Se presentó un erorr al cargar la página, recargando en %n segundo","Se presentó un erorr al cargar la página, recargando en %n segundo"],
+ "Saving..." : "Guardando...",
+ "Dismiss" : "Descartar",
+ "This action requires you to confirm your password" : "Esta acción requiere que confirme su contraseña",
+ "Authentication required" : "Se requiere autenticación",
+ "Password" : "Contraseña",
+ "Cancel" : "Cancelar",
+ "Confirm" : "Confirmar",
+ "Failed to authenticate, try again" : "Falla en la autenticación, favor de reintentar",
+ "seconds ago" : "hace segundos",
+ "Logging in …" : "Ingresando ...",
+ "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." : "La liga para restablecer su contraseña ha sido enviada a su correo electrónico. Si no lo recibe dentro de un tiempo razonable, verifique las carpetas de spam/basura.<br>Si no la encuentra consulte a su adminstrador local.",
+ "Your files are encrypted. 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?" : "Sus archivos están encriptados. No habrá manera de recuperar sus datos una vez que restablezca su contraseña. <br />Si no está seguro de qué hacer, favor de contactar a su administrador antes de continuar. <br />¿Realmente desea continuar?",
+ "I know what I'm doing" : "Sé lo que estoy haciendo",
+ "Password can not be changed. Please contact your administrator." : "Las contraseñas no se pueden cambiar. Favor de contactar a su adminstrador",
+ "No" : "No",
+ "Yes" : "Sí",
+ "No files in here" : "No hay archivos",
+ "Choose" : "Seleccionar",
+ "Error loading file picker template: {error}" : "Se presentó un error al cargar la plantilla del seleccionador de archivos: {error}",
+ "Ok" : "Ok",
+ "Error loading message template: {error}" : "Se presentó un error al cargar la plantilla del mensaje: {error}",
+ "read-only" : "sólo-lectura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de archivo","{count} conflictos en el archivo"],
+ "One file conflict" : "Un conflicto en el archivo",
+ "New Files" : "Archivos Nuevos",
+ "Already existing files" : "Archivos ya existentes",
+ "Which files do you want to keep?" : "¿Cuales archivos desea mantener?",
+ "If you select both versions, the copied file will have a number added to its name." : "Si selecciona ambas versiones, se le agregará un número al nombre del archivo copiado.",
+ "Continue" : "Continuar",
+ "(all selected)" : "(todos seleccionados)",
+ "({count} selected)" : "({count} seleccionados)",
+ "Error loading file exists template" : "Se presentó un error al cargar la plantilla de archivo existente",
+ "Pending" : "Pendiente",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "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 se encuentra correctamente configurado para permitir la sincronización de archivos porque la interface de WebDAV parece estar rota. ",
+ "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 web no está 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 cuenta con una conexión a Internet: No fue posible alcanzar diversos puntos de acceso <EndPoints>. Esto significa que diversas funcionalidades como el montaje de almacenamiento extern, notificaciónes de actualizaciones o la instalación de aplicaciones de terceros no funcionarán. Acceder archivos de forma remota y el envío de correos electrónicos de notificación puede que tampoco funcionen. Le sugerimos habilitar la conexión a Internet para este servidor si desea contar con todas las características.",
+ "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>." : "No ha sido configurada la memoria caché. Favor de configurar un memechache si está disponible para mejorar el desempeño. Puede encontrar información adicional en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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>." : "No fue posible leer /dev/urandom por PHP que es altamente desalentado por razones de seguridad. Puede consultar mayores informes en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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." : "Usted se encuentra usando PHP {version}. Le recomendamos actualizar su versión de PHP para aprovechar <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">las actualizaciones de seguridad y desempeño suministradas por el Grupo PHP</a> tan pronto como su distribución lo soporte. ",
+ "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 está configurado como un caché distribuido, pero el módulo equivocado PHP \"memcache\" está instalado. \\OC\\Memcache\\Memcached sólo soporta \"memchached\" y no \"memchache\". Favor de ver el <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki de ambos módulos</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>)" : "Algunos archivos no pasaron la verificación de integridad. Para mayor información de cómo resolver este tema consulte nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listado de archivos inválidos …</a> / <a href=\"{rescanEndpoint}\">Volver a escanear…</a>)",
+ "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "PHP Opcache no se encuentra correctamente configurado. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Para un mejor desempelo le recomendamos↗</a> usar los siguientes ajustes en el archivo <code>php.ini</code>:",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "La fución PHP \"set_time_limit\" no está disponible. Esto podría generar scripts que se interrumpan a media ejecución, rompiendo la instalación. Le recomendamos ámpliamente habilitar esta función.",
+ "Error occurred while checking server setup" : "Se presentó un error al verificar la configuración del servidor",
+ "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." : "Posiblemente sus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Le recomendamos ámpliamente que configure su servidor web de tal modo que el directorio de datos no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor 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." : "El encabezado HTTP \"{header}\" no está configurado como \"{expected}\". Esta es un riesgo potencial de seguridad o privacidad y le recomendamos cambiar este ajuste.",
+ "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>." : "Usted está accediendo este sitio via HTTP. Le recomendamos ámpliamente que configure su servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
+ "Shared" : "Compartido",
+ "Shared with {recipients}" : "Compartido con {recipients}",
+ "Error" : "Error",
+ "Error while sharing" : "Se presentó un error al compartir",
+ "Error while unsharing" : "Se presentó un error al dejar de compartir",
+ "Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
+ "The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
+ "Set expiration date" : "Establecer la fecha de expiración",
+ "Expiration" : "Expiración",
+ "Expiration date" : "Fecha de expiración",
+ "Choose a password for the public link" : "Seleccione una contraseña para la liga pública",
+ "Copied!" : "¡Copiado!",
+ "Copy" : "Copiar",
+ "Not supported!" : "¡No está soportado!",
+ "Press ⌘-C to copy." : "Presione ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presione Ctrl-C para copiar.",
+ "Resharing is not allowed" : "No se permite volver a compartir",
+ "Share to {name}" : "Compartir con {name}",
+ "Share link" : "Compartir enlace",
+ "Link" : "Liga",
+ "Password protect" : "Proteger con contraseña",
+ "Allow upload and editing" : "Permitir cargar y editar",
+ "Allow editing" : "Permitir editar",
+ "upload only" : "sólo cargar",
+ "Email link to person" : "Enviar la liga por correo electrónico a una persona",
+ "Send" : "Enviar",
+ "Shared with you and the group {group} by {owner}" : "Compartido con usted y el grupo {group} por {owner}",
+ "Shared with you by {owner}" : "Compartido con usted por {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha compatido mediante una liga",
+ "group" : "grupo",
+ "remote" : "remoto",
+ "email" : "correo electrónico",
+ "Unshare" : "Dejar de compartir",
+ "can reshare" : "pruede volver a compartir",
+ "can edit" : "puede editar",
+ "can create" : "puede crear",
+ "can change" : "puede modificar",
+ "can delete" : "puede borrar",
+ "access control" : "control de acceso",
+ "Could not unshare" : "No fue posible dejar de compartir",
+ "Share details could not be loaded for this item." : "Los detalles del recurso compartido no se pudieron cargar para este elemento. ",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se requiere de la menos {count} caracter para el auto completar","Se requieren de la menos {count} caracteres para el auto completar"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Esta lista puede estar truncada - favor de refinar sus términos de búsqueda para poder ver más resultados. ",
+ "No users or groups found for {search}" : "No se encontraron usuarios o gurpos para {search}",
+ "No users found for {search}" : "No se encontraron usuarios para {search}",
+ "An error occurred. Please try again" : "Se presentó un error. Favor de volver a intentar",
+ "{sharee} (group)" : "{sharee} (grupo)",
+ "{sharee} (remote)" : "{sharee} (remoto)",
+ "{sharee} (email)" : "{sharee} (correo electrónico)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
+ "Share" : "Compartir",
+ "Share with users or by mail..." : "Compartir con otros usuarios o por correo electrónico...",
+ "Share with users or remote users..." : "Compartir con otros usuarios o con otros usuarios remotos...",
+ "Share with users, remote users or by mail..." : "Compartir con otros usuarios, otros usuarios remotos o por correo electrónico...",
+ "Share with users or groups..." : "Compartir con otros usuarios o grupos...",
+ "Share with users, groups or by mail..." : "Compartir con otros usuarios, grupos o por correo electrónico...",
+ "Share with users, groups or remote users..." : "Compartir con otros usuarios, otros usuarios remotos o grupos...",
+ "Share with users, groups, remote users or by mail..." : "Compartir con usuarios, grupos, usuarios rempotos o por correo...",
+ "Share with users..." : "Compartir con otros usuarios...",
+ "Error removing share" : "Se presentó un error al dejar de compartir",
+ "Non-existing tag #{tag}" : "Etiqueta #{tag} no-existente",
+ "restricted" : "restringido",
+ "invisible" : "invisible",
+ "({scope})" : "({scope})",
+ "Delete" : "Borrar",
+ "Rename" : "Renombrar",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "No tags found" : "No se encontraron etiquetas",
+ "The object type is not specified." : "El tipo del objeto no está especificado.",
+ "Enter new" : "Ingresar nuevo",
+ "Add" : "Agregar",
+ "Edit tags" : "Editar etiquetas",
+ "Error loading dialog template: {error}" : "Se presentó un error al cargar la plantilla de diálogo: {error}",
+ "No tags selected for deletion." : "No hay etiquetas seleccionadas para borrar.",
+ "unknown text" : "texto desconocido",
+ "Hello world!" : "¡Hola mundo!",
+ "sunny" : "soleado",
+ "Hello {name}, the weather is {weather}" : "Hola {name}, el clima es {weather}",
+ "Hello {name}" : "Hola {name}",
+ "new" : "nuevo",
+ "_download %n file_::_download %n files_" : ["Descargar %n archivos","Descargar %n archivos"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, abandonar esta página puede interrumpir el proceso en algunos ambientes. ",
+ "Update to {version}" : "Actualizar a {version}",
+ "An error occurred." : "Se presentó un error.",
+ "Please reload the page." : "Favor de volver a cargar la página.",
+ "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 no fue exitosa. Favor de reportar este tema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Comunidad Nextcloud</a>.",
+ "Continue to Nextcloud" : "Continuar a Nextcloud",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["La actualización fue exitosa. Lo estamos redireccionando a Nextcloud en %n segundo. ","La actualización fue exitosa. Lo estamos redireccionando a Nextcloud en %n segundos."],
+ "Searching other places" : "Buscando en otras ubicaciones",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados para la búsqueda en otras carpetas para {tag}{filter}{endtag}",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado de la búsqueda en otra carpeta","{count} resultados de la búsqueda en otras carpetas"],
+ "Personal" : "Personal",
+ "Users" : "Usuarios",
+ "Apps" : "Aplicaciones",
+ "Admin" : "Administración",
+ "Help" : "Ayuda",
+ "Access forbidden" : "Acceso denegado",
+ "File not found" : "Archivo no encontrado",
+ "The specified document has not been found on the server." : "El documento especificado no ha sido encontrado en el servidor. ",
+ "You can click here to return to %s." : "Puede hacer click aquí para regresar a %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola,\n\nsólo queremos informarle que %s ha compartido %s con usted.\n\nConsúltelo aquí: %s\n\n",
+ "The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Internal Server Error" : "Error interno del servidor",
+ "The server encountered an internal error and was unable to complete your request." : "Se presentó un error interno en el servidor y no fue posilbe completar su solicitud. ",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Favor de contactar al administrador del servidor si este problema se presenta en múltiples ocasiones, favor de incluir los detalles técnicos a continuación en su reporte. ",
+ "More details can be found in the server log." : "Puede consultar más detalles en la bitácora del servidor. ",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección Remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "Type: %s" : "Tipo: %s",
+ "Code: %s" : "Código: %s",
+ "Message: %s" : "Mensaje: %s",
+ "File: %s" : "Archivo: %s",
+ "Line: %s" : "Línea: %s",
+ "Security warning" : "Advertencia de seguridad",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet ya que el archivo .htaccess no funciona.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Para más información de cómo configurar propiamente su servidor, favor de ver la <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentación</a>.",
+ "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Nombre de usuario",
+ "Storage & database" : "Almacenamiento & base de datos",
+ "Data folder" : "Carpeta de datos",
+ "Configure the database" : "Configurar la base de datos",
+ "Only %s is available." : "Sólo %s está disponible.",
+ "Install and activate additional PHP modules to choose other database types." : "Instalar y activar los módulos adicionales de PHP para seleccioanr los otros tipos de bases de datos. ",
+ "For more details check out the documentation." : "Favor de consultar la documentación para mayores detalles. ",
+ "Database user" : "Usuario de la base de datos",
+ "Database password" : "Contraseña de la base de datos",
+ "Database name" : "Nombre de la base de datos",
+ "Database tablespace" : "Espacio de tablas de la base de datos",
+ "Database host" : "Servidor de base de datos",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Favor de especificar el número de puerto así como el nombre del servidor (ejem., localhost:5432).",
+ "Performance warning" : "Advertencia de desempeño",
+ "SQLite will be used as database." : "SQLite será usado como la base de datos.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLiite es especialmente desalentado al usar el cliente de escritorio para sincrionizar. ",
+ "Finish setup" : "Terminar configuración",
+ "Finishing …" : "Terminando …",
+ "Need help?" : "¿Necesita ayuda?",
+ "See the documentation" : "Ver la documentación",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere de JavaScript para su correcta operación. Favor de {linkstart}habilitar JavaScript{linkend} y vuelva a cargar la página. ",
+ "More apps" : "Más aplicaciones",
+ "Search" : "Buscar",
+ "This action requires you to confirm your password:" : "Esta acción requiere que confirme su contraseña:",
+ "Confirm your password" : "Confirme su contraseña",
+ "Server side authentication failed!" : "¡Falló la autenticación del lado del servidor!",
+ "Please contact your administrator." : "Favor de contactar al administrador.",
+ "An internal error occurred." : "Se presentó un error interno.",
+ "Please try again or contact your administrator." : "Favor de volver a intentarlo o contacte a su adminsitrador. ",
+ "Username or email" : "Nombre de usuario o contraseña",
+ "Wrong password. Reset it?" : "Contraseña equivocada. ¿Desea reestablecerla?",
+ "Wrong password." : "Contraseña inválida. ",
+ "Log in" : "Ingresar",
+ "Stay logged in" : "Mantener la sesión abierta",
+ "Alternative Logins" : "Accesos Alternativos",
+ "Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
+ "New password" : "Nueva contraseña",
+ "New Password" : "Nueva Contraseña",
+ "Reset password" : "Restablecer contraseña",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola,<br><br> sólo queremos informarle que %s ha compartido <strong>%s</strong> con usted. <br><a href=\"%s\">¡Véalo!</a><br><br>",
+ "This Nextcloud instance is currently in single user mode." : "Esta instalación de Nextcloud se encuentra en modo de usuario único.",
+ "This means only administrators can use the instance." : "Esto significa que sólo los administradores pueden usar la instancia.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte con su administrador de sistemas si este mensaje persiste o aparece de forma inesperada.",
+ "Thank you for your patience." : "Gracias por su paciencia.",
+ "Log out" : "Salir",
+ "Two-factor authentication" : "Autenticación de dos-factores",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada está habilitada para su cuenta. Favor de autenticarse usando un segundo factor. ",
+ "Cancel log in" : "Cancelar inicio de sesión",
+ "Use backup code" : "Usar código de respaldo",
+ "Error while validating your second factor" : "Se presentó un error al validar su segundo factor",
+ "You are accessing the server from an untrusted domain." : "Se encuentra accediendo al servidor desde un dominio no confiable. ",
+ "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." : "Favor de contactar a su administrador. Si usted es el administrador de esta instancia, configure la opción \"trusted_domains\" en config/config.php. Un ejemplo de configuración se proporciona en 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." : "Dependiendo de su configuración, como adminsitrador podría llegar a usar el botón inferior para confiar en este dominio. ",
+ "Add \"%s\" as trusted domain" : "Agregar \"%s\" como un dominio de confianza",
+ "App update required" : "Se requiere una actualización de la aplicación",
+ "%s will be updated to version %s" : "%s será actualizado a la versión %s",
+ "These apps will be updated:" : "Las siguientes apllicaciones se actualizarán:",
+ "These incompatible apps will be disabled:" : "Las siguientes aplicaciones incompatibles serán deshabilitadas:",
+ "Start update" : "Iniciar actualización",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar que la expiración de tiempo en instalaciones grandes, usted puede ejeuctar el siguiente comando desde su directorio de instalación:",
+ "Detailed logs" : "Bitácoras detalladas",
+ "Update needed" : "Actualización requerida",
+ "Please use the command line updater because you have a big instance." : "Favor de usar el actualizador de línea de comando porque usted tiene una instancia grande. ",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para más ayuda, consulte la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">doccumentación</a>.",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Esta instancia %s se encuentra actualmente en modo mantenimiento, que podría tomar algo de tiempo. ",
+ "This page will refresh itself when the %s instance is available again." : "Esta página se actualizará sola cuando la instancia %s esté disponible de nuevo. ",
+ "Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
+ "The update was successful. Redirecting you to Nextcloud now." : "La actualización fue exitosa. Redirigiendolo a su Nextcloud ahora. "
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json
new file mode 100644
index 00000000000..b9d60929127
--- /dev/null
+++ b/core/l10n/es_MX.json
@@ -0,0 +1,286 @@
+{ "translations": {
+ "Please select a file." : "Favor de seleccionar un archivo.",
+ "File is too big" : "El archivo es demasiado grande.",
+ "The selected file is not an image." : "El archivo seleccionado no es una imagen.",
+ "The selected file cannot be read." : "El archivo seleccionado no se puede leer.",
+ "Invalid file provided" : "Archivo proporcionado inválido",
+ "No image or file provided" : "No se especificó un archivo o imagen",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "An error occurred. Please contact your admin." : "Se presentó un error. Favor de contactar a su adminsitrador. ",
+ "No temporary profile picture available, try again" : "No hay una imagen de perfil temporal disponible, favor de intentarlo de nuevo",
+ "No crop data provided" : "No se proporcionó datos del recorte",
+ "Couldn't send reset email. Please make sure your username is correct." : "No fue posible restablecer el correo electrónico. Favor de asegurarse que su nombre de usuario sea correcto. ",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "No fue posible enviar el correo electrónico para restablecer porque no hay una dirección de correo electrónico para este usuario. Favor de contactar a su adminsitrador. ",
+ "%s password reset" : "%s restablecer la contraseña",
+ "Couldn't send reset email. Please contact your administrator." : "No fue posible enviar el correo de restauración. Favor de contactar a su adminsitrador. ",
+ "Preparing update" : "Preparando actualización",
+ "[%d / %d]: %s" : "[%d / %d]: %s ",
+ "Repair warning: " : "Advertencia de reparación:",
+ "Repair error: " : "Error de reparación: ",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Favor de usar el actualizador de línea de comandos ya que el actualizador automático se encuentra deshabilitado en config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Verificando tabla %s",
+ "Turned on maintenance mode" : "Activar modo mantenimiento",
+ "Turned off maintenance mode" : "Desactivar modo mantenimiento",
+ "Maintenance mode is kept active" : "El modo mantenimiento sigue activo",
+ "Updating database schema" : "Actualizando esquema de base de datos",
+ "Updated database" : "Base de datos actualizada",
+ "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Verificando si el archivo del esquema de base de datos puede ser actualizado (esto puedo tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update" : "Actualización del esquema de base de datos verificada",
+ "Checking updates of apps" : "Verificando actualizaciónes para aplicaciones",
+ "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando si el esquema de la base de datos para %s puede ser actualizado (esto puede tomar mucho tiempo dependiendo del tamaño de la base de datos)",
+ "Checked database schema update for apps" : "Se verificó la actualización del esquema de la base de datos para las aplicaciones",
+ "Updated \"%s\" to %s" : "Actualizando \"%s\" a %s",
+ "Set log level to debug" : "Establecer nivel de bitacora a depurar",
+ "Reset log level" : "Restablecer nivel de bitácora",
+ "Starting code integrity check" : "Comenzando verificación de integridad del código",
+ "Finished code integrity check" : "Verificación de integridad del código terminó",
+ "%s (3rdparty)" : "%s (de3ros)",
+ "%s (incompatible)" : "%s (incompatible)",
+ "Following apps have been disabled: %s" : "Las siguientes aplicaciones han sido deshabilitadas: %s",
+ "Already up to date" : "Ya está actualizado",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Se presentaron problemas con la verificación de integridad del código. Mayor información ...</a>",
+ "Settings" : "Ajustes",
+ "Connection to server lost" : "Se ha perdido la conexión con el servidor",
+ "_Problem loading page, reloading in %n second_::_Problem loading page, reloading in %n seconds_" : ["Se presentó un erorr al cargar la página, recargando en %n segundo","Se presentó un erorr al cargar la página, recargando en %n segundo"],
+ "Saving..." : "Guardando...",
+ "Dismiss" : "Descartar",
+ "This action requires you to confirm your password" : "Esta acción requiere que confirme su contraseña",
+ "Authentication required" : "Se requiere autenticación",
+ "Password" : "Contraseña",
+ "Cancel" : "Cancelar",
+ "Confirm" : "Confirmar",
+ "Failed to authenticate, try again" : "Falla en la autenticación, favor de reintentar",
+ "seconds ago" : "hace segundos",
+ "Logging in …" : "Ingresando ...",
+ "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." : "La liga para restablecer su contraseña ha sido enviada a su correo electrónico. Si no lo recibe dentro de un tiempo razonable, verifique las carpetas de spam/basura.<br>Si no la encuentra consulte a su adminstrador local.",
+ "Your files are encrypted. 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?" : "Sus archivos están encriptados. No habrá manera de recuperar sus datos una vez que restablezca su contraseña. <br />Si no está seguro de qué hacer, favor de contactar a su administrador antes de continuar. <br />¿Realmente desea continuar?",
+ "I know what I'm doing" : "Sé lo que estoy haciendo",
+ "Password can not be changed. Please contact your administrator." : "Las contraseñas no se pueden cambiar. Favor de contactar a su adminstrador",
+ "No" : "No",
+ "Yes" : "Sí",
+ "No files in here" : "No hay archivos",
+ "Choose" : "Seleccionar",
+ "Error loading file picker template: {error}" : "Se presentó un error al cargar la plantilla del seleccionador de archivos: {error}",
+ "Ok" : "Ok",
+ "Error loading message template: {error}" : "Se presentó un error al cargar la plantilla del mensaje: {error}",
+ "read-only" : "sólo-lectura",
+ "_{count} file conflict_::_{count} file conflicts_" : ["{count} conflicto de archivo","{count} conflictos en el archivo"],
+ "One file conflict" : "Un conflicto en el archivo",
+ "New Files" : "Archivos Nuevos",
+ "Already existing files" : "Archivos ya existentes",
+ "Which files do you want to keep?" : "¿Cuales archivos desea mantener?",
+ "If you select both versions, the copied file will have a number added to its name." : "Si selecciona ambas versiones, se le agregará un número al nombre del archivo copiado.",
+ "Continue" : "Continuar",
+ "(all selected)" : "(todos seleccionados)",
+ "({count} selected)" : "({count} seleccionados)",
+ "Error loading file exists template" : "Se presentó un error al cargar la plantilla de archivo existente",
+ "Pending" : "Pendiente",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
+ "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 se encuentra correctamente configurado para permitir la sincronización de archivos porque la interface de WebDAV parece estar rota. ",
+ "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 web no está 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 cuenta con una conexión a Internet: No fue posible alcanzar diversos puntos de acceso <EndPoints>. Esto significa que diversas funcionalidades como el montaje de almacenamiento extern, notificaciónes de actualizaciones o la instalación de aplicaciones de terceros no funcionarán. Acceder archivos de forma remota y el envío de correos electrónicos de notificación puede que tampoco funcionen. Le sugerimos habilitar la conexión a Internet para este servidor si desea contar con todas las características.",
+ "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>." : "No ha sido configurada la memoria caché. Favor de configurar un memechache si está disponible para mejorar el desempeño. Puede encontrar información adicional en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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>." : "No fue posible leer /dev/urandom por PHP que es altamente desalentado por razones de seguridad. Puede consultar mayores informes en nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</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." : "Usted se encuentra usando PHP {version}. Le recomendamos actualizar su versión de PHP para aprovechar <a target=\"_blank\" rel=\"noreferrer\" href=\"{phpLink}\">las actualizaciones de seguridad y desempeño suministradas por el Grupo PHP</a> tan pronto como su distribución lo soporte. ",
+ "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 está configurado como un caché distribuido, pero el módulo equivocado PHP \"memcache\" está instalado. \\OC\\Memcache\\Memcached sólo soporta \"memchached\" y no \"memchache\". Favor de ver el <a target=\"_blank\" rel=\"noreferrer\" href=\"{wikiLink}\">wiki de ambos módulos</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>)" : "Algunos archivos no pasaron la verificación de integridad. Para mayor información de cómo resolver este tema consulte nuestra <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">documentación</a>. (<a href=\"{codeIntegrityDownloadEndpoint}\">Listado de archivos inválidos …</a> / <a href=\"{rescanEndpoint}\">Volver a escanear…</a>)",
+ "The PHP Opcache is not properly configured. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">For better performance we recommend ↗</a> to use following settings in the <code>php.ini</code>:" : "PHP Opcache no se encuentra correctamente configurado. <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">Para un mejor desempelo le recomendamos↗</a> usar los siguientes ajustes en el archivo <code>php.ini</code>:",
+ "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. We strongly recommend enabling this function." : "La fución PHP \"set_time_limit\" no está disponible. Esto podría generar scripts que se interrumpan a media ejecución, rompiendo la instalación. Le recomendamos ámpliamente habilitar esta función.",
+ "Error occurred while checking server setup" : "Se presentó un error al verificar la configuración del servidor",
+ "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." : "Posiblemente sus directorios de datos y archivos son accesibles desde Internet. El archivo .htaccess no está funcionando. Le recomendamos ámpliamente que configure su servidor web de tal modo que el directorio de datos no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor 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." : "El encabezado HTTP \"{header}\" no está configurado como \"{expected}\". Esta es un riesgo potencial de seguridad o privacidad y le recomendamos cambiar este ajuste.",
+ "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>." : "Usted está accediendo este sitio via HTTP. Le recomendamos ámpliamente que configure su servidor para que en su lugar, el uso de HTTPS sea requerido como está descrito en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.",
+ "Shared" : "Compartido",
+ "Shared with {recipients}" : "Compartido con {recipients}",
+ "Error" : "Error",
+ "Error while sharing" : "Se presentó un error al compartir",
+ "Error while unsharing" : "Se presentó un error al dejar de compartir",
+ "Error setting expiration date" : "Se presentó un error al establecer la fecha de expiración",
+ "The public link will expire no later than {days} days after it is created" : "La liga pública expirará a los {days} días de haber sido creada",
+ "Set expiration date" : "Establecer la fecha de expiración",
+ "Expiration" : "Expiración",
+ "Expiration date" : "Fecha de expiración",
+ "Choose a password for the public link" : "Seleccione una contraseña para la liga pública",
+ "Copied!" : "¡Copiado!",
+ "Copy" : "Copiar",
+ "Not supported!" : "¡No está soportado!",
+ "Press ⌘-C to copy." : "Presione ⌘-C para copiar.",
+ "Press Ctrl-C to copy." : "Presione Ctrl-C para copiar.",
+ "Resharing is not allowed" : "No se permite volver a compartir",
+ "Share to {name}" : "Compartir con {name}",
+ "Share link" : "Compartir enlace",
+ "Link" : "Liga",
+ "Password protect" : "Proteger con contraseña",
+ "Allow upload and editing" : "Permitir cargar y editar",
+ "Allow editing" : "Permitir editar",
+ "upload only" : "sólo cargar",
+ "Email link to person" : "Enviar la liga por correo electrónico a una persona",
+ "Send" : "Enviar",
+ "Shared with you and the group {group} by {owner}" : "Compartido con usted y el grupo {group} por {owner}",
+ "Shared with you by {owner}" : "Compartido con usted por {owner}",
+ "{{shareInitiatorDisplayName}} shared via link" : "{{shareInitiatorDisplayName}} ha compatido mediante una liga",
+ "group" : "grupo",
+ "remote" : "remoto",
+ "email" : "correo electrónico",
+ "Unshare" : "Dejar de compartir",
+ "can reshare" : "pruede volver a compartir",
+ "can edit" : "puede editar",
+ "can create" : "puede crear",
+ "can change" : "puede modificar",
+ "can delete" : "puede borrar",
+ "access control" : "control de acceso",
+ "Could not unshare" : "No fue posible dejar de compartir",
+ "Share details could not be loaded for this item." : "Los detalles del recurso compartido no se pudieron cargar para este elemento. ",
+ "_At least {count} character is needed for autocompletion_::_At least {count} characters are needed for autocompletion_" : ["Se requiere de la menos {count} caracter para el auto completar","Se requieren de la menos {count} caracteres para el auto completar"],
+ "This list is maybe truncated - please refine your search term to see more results." : "Esta lista puede estar truncada - favor de refinar sus términos de búsqueda para poder ver más resultados. ",
+ "No users or groups found for {search}" : "No se encontraron usuarios o gurpos para {search}",
+ "No users found for {search}" : "No se encontraron usuarios para {search}",
+ "An error occurred. Please try again" : "Se presentó un error. Favor de volver a intentar",
+ "{sharee} (group)" : "{sharee} (grupo)",
+ "{sharee} (remote)" : "{sharee} (remoto)",
+ "{sharee} (email)" : "{sharee} (correo electrónico)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
+ "Share" : "Compartir",
+ "Share with users or by mail..." : "Compartir con otros usuarios o por correo electrónico...",
+ "Share with users or remote users..." : "Compartir con otros usuarios o con otros usuarios remotos...",
+ "Share with users, remote users or by mail..." : "Compartir con otros usuarios, otros usuarios remotos o por correo electrónico...",
+ "Share with users or groups..." : "Compartir con otros usuarios o grupos...",
+ "Share with users, groups or by mail..." : "Compartir con otros usuarios, grupos o por correo electrónico...",
+ "Share with users, groups or remote users..." : "Compartir con otros usuarios, otros usuarios remotos o grupos...",
+ "Share with users, groups, remote users or by mail..." : "Compartir con usuarios, grupos, usuarios rempotos o por correo...",
+ "Share with users..." : "Compartir con otros usuarios...",
+ "Error removing share" : "Se presentó un error al dejar de compartir",
+ "Non-existing tag #{tag}" : "Etiqueta #{tag} no-existente",
+ "restricted" : "restringido",
+ "invisible" : "invisible",
+ "({scope})" : "({scope})",
+ "Delete" : "Borrar",
+ "Rename" : "Renombrar",
+ "Collaborative tags" : "Etiquetas colaborativas",
+ "No tags found" : "No se encontraron etiquetas",
+ "The object type is not specified." : "El tipo del objeto no está especificado.",
+ "Enter new" : "Ingresar nuevo",
+ "Add" : "Agregar",
+ "Edit tags" : "Editar etiquetas",
+ "Error loading dialog template: {error}" : "Se presentó un error al cargar la plantilla de diálogo: {error}",
+ "No tags selected for deletion." : "No hay etiquetas seleccionadas para borrar.",
+ "unknown text" : "texto desconocido",
+ "Hello world!" : "¡Hola mundo!",
+ "sunny" : "soleado",
+ "Hello {name}, the weather is {weather}" : "Hola {name}, el clima es {weather}",
+ "Hello {name}" : "Hola {name}",
+ "new" : "nuevo",
+ "_download %n file_::_download %n files_" : ["Descargar %n archivos","Descargar %n archivos"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "La actualización está en curso, abandonar esta página puede interrumpir el proceso en algunos ambientes. ",
+ "Update to {version}" : "Actualizar a {version}",
+ "An error occurred." : "Se presentó un error.",
+ "Please reload the page." : "Favor de volver a cargar la página.",
+ "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 no fue exitosa. Favor de reportar este tema a la <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Comunidad Nextcloud</a>.",
+ "Continue to Nextcloud" : "Continuar a Nextcloud",
+ "_The update was successful. Redirecting you to Nextcloud in %n second._::_The update was successful. Redirecting you to Nextcloud in %n seconds._" : ["La actualización fue exitosa. Lo estamos redireccionando a Nextcloud en %n segundo. ","La actualización fue exitosa. Lo estamos redireccionando a Nextcloud en %n segundos."],
+ "Searching other places" : "Buscando en otras ubicaciones",
+ "No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados para la búsqueda en otras carpetas para {tag}{filter}{endtag}",
+ "_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} resultado de la búsqueda en otra carpeta","{count} resultados de la búsqueda en otras carpetas"],
+ "Personal" : "Personal",
+ "Users" : "Usuarios",
+ "Apps" : "Aplicaciones",
+ "Admin" : "Administración",
+ "Help" : "Ayuda",
+ "Access forbidden" : "Acceso denegado",
+ "File not found" : "Archivo no encontrado",
+ "The specified document has not been found on the server." : "El documento especificado no ha sido encontrado en el servidor. ",
+ "You can click here to return to %s." : "Puede hacer click aquí para regresar a %s.",
+ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola,\n\nsólo queremos informarle que %s ha compartido %s con usted.\n\nConsúltelo aquí: %s\n\n",
+ "The share will expire on %s." : "El recurso dejará de ser compartido el %s.",
+ "Cheers!" : "¡Saludos!",
+ "Internal Server Error" : "Error interno del servidor",
+ "The server encountered an internal error and was unable to complete your request." : "Se presentó un error interno en el servidor y no fue posilbe completar su solicitud. ",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Favor de contactar al administrador del servidor si este problema se presenta en múltiples ocasiones, favor de incluir los detalles técnicos a continuación en su reporte. ",
+ "More details can be found in the server log." : "Puede consultar más detalles en la bitácora del servidor. ",
+ "Technical details" : "Detalles técnicos",
+ "Remote Address: %s" : "Dirección Remota: %s",
+ "Request ID: %s" : "ID de solicitud: %s",
+ "Type: %s" : "Tipo: %s",
+ "Code: %s" : "Código: %s",
+ "Message: %s" : "Mensaje: %s",
+ "File: %s" : "Archivo: %s",
+ "Line: %s" : "Línea: %s",
+ "Security warning" : "Advertencia de seguridad",
+ "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet ya que el archivo .htaccess no funciona.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "Para más información de cómo configurar propiamente su servidor, favor de ver la <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentación</a>.",
+ "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>",
+ "Username" : "Nombre de usuario",
+ "Storage & database" : "Almacenamiento & base de datos",
+ "Data folder" : "Carpeta de datos",
+ "Configure the database" : "Configurar la base de datos",
+ "Only %s is available." : "Sólo %s está disponible.",
+ "Install and activate additional PHP modules to choose other database types." : "Instalar y activar los módulos adicionales de PHP para seleccioanr los otros tipos de bases de datos. ",
+ "For more details check out the documentation." : "Favor de consultar la documentación para mayores detalles. ",
+ "Database user" : "Usuario de la base de datos",
+ "Database password" : "Contraseña de la base de datos",
+ "Database name" : "Nombre de la base de datos",
+ "Database tablespace" : "Espacio de tablas de la base de datos",
+ "Database host" : "Servidor de base de datos",
+ "Please specify the port number along with the host name (e.g., localhost:5432)." : "Favor de especificar el número de puerto así como el nombre del servidor (ejem., localhost:5432).",
+ "Performance warning" : "Advertencia de desempeño",
+ "SQLite will be used as database." : "SQLite será usado como la base de datos.",
+ "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLiite es especialmente desalentado al usar el cliente de escritorio para sincrionizar. ",
+ "Finish setup" : "Terminar configuración",
+ "Finishing …" : "Terminando …",
+ "Need help?" : "¿Necesita ayuda?",
+ "See the documentation" : "Ver la documentación",
+ "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere de JavaScript para su correcta operación. Favor de {linkstart}habilitar JavaScript{linkend} y vuelva a cargar la página. ",
+ "More apps" : "Más aplicaciones",
+ "Search" : "Buscar",
+ "This action requires you to confirm your password:" : "Esta acción requiere que confirme su contraseña:",
+ "Confirm your password" : "Confirme su contraseña",
+ "Server side authentication failed!" : "¡Falló la autenticación del lado del servidor!",
+ "Please contact your administrator." : "Favor de contactar al administrador.",
+ "An internal error occurred." : "Se presentó un error interno.",
+ "Please try again or contact your administrator." : "Favor de volver a intentarlo o contacte a su adminsitrador. ",
+ "Username or email" : "Nombre de usuario o contraseña",
+ "Wrong password. Reset it?" : "Contraseña equivocada. ¿Desea reestablecerla?",
+ "Wrong password." : "Contraseña inválida. ",
+ "Log in" : "Ingresar",
+ "Stay logged in" : "Mantener la sesión abierta",
+ "Alternative Logins" : "Accesos Alternativos",
+ "Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}",
+ "New password" : "Nueva contraseña",
+ "New Password" : "Nueva Contraseña",
+ "Reset password" : "Restablecer contraseña",
+ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hola,<br><br> sólo queremos informarle que %s ha compartido <strong>%s</strong> con usted. <br><a href=\"%s\">¡Véalo!</a><br><br>",
+ "This Nextcloud instance is currently in single user mode." : "Esta instalación de Nextcloud se encuentra en modo de usuario único.",
+ "This means only administrators can use the instance." : "Esto significa que sólo los administradores pueden usar la instancia.",
+ "Contact your system administrator if this message persists or appeared unexpectedly." : "Contacte con su administrador de sistemas si este mensaje persiste o aparece de forma inesperada.",
+ "Thank you for your patience." : "Gracias por su paciencia.",
+ "Log out" : "Salir",
+ "Two-factor authentication" : "Autenticación de dos-factores",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada está habilitada para su cuenta. Favor de autenticarse usando un segundo factor. ",
+ "Cancel log in" : "Cancelar inicio de sesión",
+ "Use backup code" : "Usar código de respaldo",
+ "Error while validating your second factor" : "Se presentó un error al validar su segundo factor",
+ "You are accessing the server from an untrusted domain." : "Se encuentra accediendo al servidor desde un dominio no confiable. ",
+ "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." : "Favor de contactar a su administrador. Si usted es el administrador de esta instancia, configure la opción \"trusted_domains\" en config/config.php. Un ejemplo de configuración se proporciona en 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." : "Dependiendo de su configuración, como adminsitrador podría llegar a usar el botón inferior para confiar en este dominio. ",
+ "Add \"%s\" as trusted domain" : "Agregar \"%s\" como un dominio de confianza",
+ "App update required" : "Se requiere una actualización de la aplicación",
+ "%s will be updated to version %s" : "%s será actualizado a la versión %s",
+ "These apps will be updated:" : "Las siguientes apllicaciones se actualizarán:",
+ "These incompatible apps will be disabled:" : "Las siguientes aplicaciones incompatibles serán deshabilitadas:",
+ "Start update" : "Iniciar actualización",
+ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Para evitar que la expiración de tiempo en instalaciones grandes, usted puede ejeuctar el siguiente comando desde su directorio de instalación:",
+ "Detailed logs" : "Bitácoras detalladas",
+ "Update needed" : "Actualización requerida",
+ "Please use the command line updater because you have a big instance." : "Favor de usar el actualizador de línea de comando porque usted tiene una instancia grande. ",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "Para más ayuda, consulte la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">doccumentación</a>.",
+ "This %s instance is currently in maintenance mode, which may take a while." : "Esta instancia %s se encuentra actualmente en modo mantenimiento, que podría tomar algo de tiempo. ",
+ "This page will refresh itself when the %s instance is available again." : "Esta página se actualizará sola cuando la instancia %s esté disponible de nuevo. ",
+ "Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
+ "The update was successful. Redirecting you to Nextcloud now." : "La actualización fue exitosa. Redirigiendolo a su Nextcloud ahora. "
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/core/l10n/fi.js b/core/l10n/fi.js
index 65cbfa4d4a8..6b7db276129 100644
--- a/core/l10n/fi.js
+++ b/core/l10n/fi.js
@@ -124,6 +124,7 @@ OC.L10N.register(
"Password protect" : "Suojaa salasanalla",
"Allow upload and editing" : "Salli lähetys ja muokkaus",
"Allow editing" : "Salli muokkaus",
+ "upload only" : "vain lähetys",
"Email link to person" : "Lähetä linkki sähköpostitse",
"Send" : "Lähetä",
"Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjältä {owner}",
@@ -149,6 +150,7 @@ OC.L10N.register(
"{sharee} (group)" : "{sharee} (ryhmä)",
"{sharee} (remote)" : "{sharee} (etä)",
"{sharee} (email)" : "{sharee} (sähköposti)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Jaa",
"Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Jaa toisia Nextcloud-järjestelmiä käyttäville Federated Cloud ID -tunnuksella muodossa käyttäjätunnus@example.com/nextcloud",
"Share with users or by mail..." : "Jaa käyttäjille tai sähköpostilla...",
@@ -179,6 +181,7 @@ OC.L10N.register(
"sunny" : "aurinkoinen",
"Hello {name}, the weather is {weather}" : "Hei {name}, sää on {weather}",
"Hello {name}" : "Hei {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Nämä ovat hakutulokset<script>alert(1)</script></strong>",
"new" : "uusi",
"_download %n file_::_download %n files_" : ["lataa %n tiedosto","lataa %n tiedostoa"],
"The update 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ä.",
diff --git a/core/l10n/fi.json b/core/l10n/fi.json
index 06f1762cbcb..299a89203e4 100644
--- a/core/l10n/fi.json
+++ b/core/l10n/fi.json
@@ -122,6 +122,7 @@
"Password protect" : "Suojaa salasanalla",
"Allow upload and editing" : "Salli lähetys ja muokkaus",
"Allow editing" : "Salli muokkaus",
+ "upload only" : "vain lähetys",
"Email link to person" : "Lähetä linkki sähköpostitse",
"Send" : "Lähetä",
"Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjältä {owner}",
@@ -147,6 +148,7 @@
"{sharee} (group)" : "{sharee} (ryhmä)",
"{sharee} (remote)" : "{sharee} (etä)",
"{sharee} (email)" : "{sharee} (sähköposti)",
+ "{sharee} ({type}, {owner})" : "{sharee} ({type}, {owner})",
"Share" : "Jaa",
"Share with people on other servers using their Federated Cloud ID username@example.com/nextcloud" : "Jaa toisia Nextcloud-järjestelmiä käyttäville Federated Cloud ID -tunnuksella muodossa käyttäjätunnus@example.com/nextcloud",
"Share with users or by mail..." : "Jaa käyttäjille tai sähköpostilla...",
@@ -177,6 +179,7 @@
"sunny" : "aurinkoinen",
"Hello {name}, the weather is {weather}" : "Hei {name}, sää on {weather}",
"Hello {name}" : "Hei {name}",
+ "<strong>These are your search results<script>alert(1)</script></strong>" : "<strong>Nämä ovat hakutulokset<script>alert(1)</script></strong>",
"new" : "uusi",
"_download %n file_::_download %n files_" : ["lataa %n tiedosto","lataa %n tiedostoa"],
"The update 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ä.",
diff --git a/core/l10n/ja.js b/core/l10n/ja.js
index 3b1151095ee..19bf338ef2f 100644
--- a/core/l10n/ja.js
+++ b/core/l10n/ja.js
@@ -126,6 +126,7 @@ OC.L10N.register(
"Password protect" : "パスワード保護を有効化",
"Allow upload and editing" : "アップロードと編集を許可する",
"Allow editing" : "編集を許可",
+ "upload only" : "アップロードのみ",
"Email link to person" : "メールリンク",
"Send" : "送信",
"Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中",
diff --git a/core/l10n/ja.json b/core/l10n/ja.json
index 8b39189fc96..64c1e5e415c 100644
--- a/core/l10n/ja.json
+++ b/core/l10n/ja.json
@@ -124,6 +124,7 @@
"Password protect" : "パスワード保護を有効化",
"Allow upload and editing" : "アップロードと編集を許可する",
"Allow editing" : "編集を許可",
+ "upload only" : "アップロードのみ",
"Email link to person" : "メールリンク",
"Send" : "送信",
"Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中",
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index 1811fcc5613..52cd2d09c42 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -126,6 +126,7 @@ OC.L10N.register(
"Password protect" : "Wachtwoord beveiligd",
"Allow upload and editing" : "Toestaan uploaden en bewerken",
"Allow editing" : "Bewerken toestaan",
+ "upload only" : "alleen uploaden",
"Email link to person" : "E-mail link naar persoon",
"Send" : "Versturen",
"Shared with you and the group {group} by {owner}" : "Gedeeld met jou en de groep {group} door {owner}",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index 79ad6a4db5d..9c04ea36e30 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -124,6 +124,7 @@
"Password protect" : "Wachtwoord beveiligd",
"Allow upload and editing" : "Toestaan uploaden en bewerken",
"Allow editing" : "Bewerken toestaan",
+ "upload only" : "alleen uploaden",
"Email link to person" : "E-mail link naar persoon",
"Send" : "Versturen",
"Shared with you and the group {group} by {owner}" : "Gedeeld met jou en de groep {group} door {owner}",
diff --git a/core/shipped.json b/core/shipped.json
index d325117c67e..679e1c7f706 100644
--- a/core/shipped.json
+++ b/core/shipped.json
@@ -2,6 +2,7 @@
"shippedApps": [
"activity",
"admin_audit",
+ "bruteforcesettings",
"comments",
"dav",
"encryption",
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index 8c8bc0312e1..4e33cfa586b 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -155,7 +155,7 @@ clipboard/**
# autosize
autosize/**
!autosize/dist
-!autosize/dist/autosize.js
+!autosize/dist/autosize.min.js
!autosize/.bower.json
!autosize/LICENCE.md
diff --git a/core/vendor/autosize/.bower.json b/core/vendor/autosize/.bower.json
index 56e4b46a162..4cea0da89ea 100644
--- a/core/vendor/autosize/.bower.json
+++ b/core/vendor/autosize/.bower.json
@@ -26,15 +26,14 @@
"amd",
"node"
],
- "version": "3.0.17",
- "_release": "3.0.17",
+ "version": "3.0.20",
+ "_release": "3.0.20",
"_resolution": {
"type": "version",
- "tag": "3.0.17",
- "commit": "144040e4f545fbea9b304706a5200eba9961ee3f"
+ "tag": "3.0.20",
+ "commit": "2277ca66ae8e466c5159faf81069b94575db87aa"
},
"_source": "https://github.com/jackmoore/autosize.git",
"_target": "^3.0.17",
- "_originalSource": "autosize",
- "_direct": true
+ "_originalSource": "autosize"
} \ No newline at end of file
diff --git a/core/vendor/autosize/dist/autosize.js b/core/vendor/autosize/dist/autosize.js
deleted file mode 100644
index 49b8b0b957f..00000000000
--- a/core/vendor/autosize/dist/autosize.js
+++ /dev/null
@@ -1,262 +0,0 @@
-/*!
- Autosize 3.0.17
- license: MIT
- http://www.jacklmoore.com/autosize
-*/
-(function (global, factory) {
- if (typeof define === 'function' && define.amd) {
- define(['exports', 'module'], factory);
- } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
- factory(exports, module);
- } else {
- var mod = {
- exports: {}
- };
- factory(mod.exports, mod);
- global.autosize = mod.exports;
- }
-})(this, function (exports, module) {
- 'use strict';
-
- var set = typeof Set === 'function' ? new Set() : (function () {
- var list = [];
-
- return {
- has: function has(key) {
- return Boolean(list.indexOf(key) > -1);
- },
- add: function add(key) {
- list.push(key);
- },
- 'delete': function _delete(key) {
- list.splice(list.indexOf(key), 1);
- } };
- })();
-
- var createEvent = function createEvent(name) {
- return new Event(name);
- };
- try {
- new Event('test');
- } catch (e) {
- // IE does not support `new Event()`
- createEvent = function (name) {
- var evt = document.createEvent('Event');
- evt.initEvent(name, true, false);
- return evt;
- };
- }
-
- function assign(ta) {
- if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || set.has(ta)) return;
-
- var heightOffset = null;
- var clientWidth = ta.clientWidth;
- var cachedHeight = null;
-
- function init() {
- var style = window.getComputedStyle(ta, null);
-
- if (style.resize === 'vertical') {
- ta.style.resize = 'none';
- } else if (style.resize === 'both') {
- ta.style.resize = 'horizontal';
- }
-
- if (style.boxSizing === 'content-box') {
- heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
- } else {
- heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
- }
- // Fix when a textarea is not on document body and heightOffset is Not a Number
- if (isNaN(heightOffset)) {
- heightOffset = 0;
- }
-
- update();
- }
-
- function changeOverflow(value) {
- {
- // Chrome/Safari-specific fix:
- // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
- // made available by removing the scrollbar. The following forces the necessary text reflow.
- var width = ta.style.width;
- ta.style.width = '0px';
- // Force reflow:
- /* jshint ignore:start */
- ta.offsetWidth;
- /* jshint ignore:end */
- ta.style.width = width;
- }
-
- ta.style.overflowY = value;
-
- resize();
- }
-
- function getParentOverflows(el) {
- var arr = [];
-
- while (el && el.parentNode && el.parentNode instanceof Element) {
- if (el.parentNode.scrollTop) {
- arr.push({
- node: el.parentNode,
- scrollTop: el.parentNode.scrollTop });
- }
- el = el.parentNode;
- }
-
- return arr;
- }
-
- function resize() {
- var originalHeight = ta.style.height;
- var overflows = getParentOverflows(ta);
- var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
-
- ta.style.height = 'auto';
-
- var endHeight = ta.scrollHeight + heightOffset;
-
- if (ta.scrollHeight === 0) {
- // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
- ta.style.height = originalHeight;
- return;
- }
-
- ta.style.height = endHeight + 'px';
-
- // used to check if an update is actually necessary on window.resize
- clientWidth = ta.clientWidth;
-
- // prevents scroll-position jumping
- overflows.forEach(function (el) {
- el.node.scrollTop = el.scrollTop;
- });
-
- if (docTop) {
- document.documentElement.scrollTop = docTop;
- }
- }
-
- function update() {
- resize();
-
- var computed = window.getComputedStyle(ta, null);
- var computedHeight = Math.round(parseFloat(computed.height));
- var styleHeight = Math.round(parseFloat(ta.style.height));
-
- // The computed height not matching the height set via resize indicates that
- // the max-height has been exceeded, in which case the overflow should be set to visible.
- if (computedHeight !== styleHeight) {
- if (computed.overflowY !== 'visible') {
- changeOverflow('visible');
- }
- } else {
- // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
- if (computed.overflowY !== 'hidden') {
- changeOverflow('hidden');
- }
- }
-
- if (cachedHeight !== computedHeight) {
- cachedHeight = computedHeight;
- var evt = createEvent('autosize:resized');
- ta.dispatchEvent(evt);
- }
- }
-
- var pageResize = function pageResize() {
- if (ta.clientWidth !== clientWidth) {
- update();
- }
- };
-
- var destroy = (function (style) {
- window.removeEventListener('resize', pageResize, false);
- ta.removeEventListener('input', update, false);
- ta.removeEventListener('keyup', update, false);
- ta.removeEventListener('autosize:destroy', destroy, false);
- ta.removeEventListener('autosize:update', update, false);
- set['delete'](ta);
-
- Object.keys(style).forEach(function (key) {
- ta.style[key] = style[key];
- });
- }).bind(ta, {
- height: ta.style.height,
- resize: ta.style.resize,
- overflowY: ta.style.overflowY,
- overflowX: ta.style.overflowX,
- wordWrap: ta.style.wordWrap });
-
- ta.addEventListener('autosize:destroy', destroy, false);
-
- // IE9 does not fire onpropertychange or oninput for deletions,
- // so binding to onkeyup to catch most of those events.
- // There is no way that I know of to detect something like 'cut' in IE9.
- if ('onpropertychange' in ta && 'oninput' in ta) {
- ta.addEventListener('keyup', update, false);
- }
-
- window.addEventListener('resize', pageResize, false);
- ta.addEventListener('input', update, false);
- ta.addEventListener('autosize:update', update, false);
- set.add(ta);
- ta.style.overflowX = 'hidden';
- ta.style.wordWrap = 'break-word';
-
- init();
- }
-
- function destroy(ta) {
- if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
- var evt = createEvent('autosize:destroy');
- ta.dispatchEvent(evt);
- }
-
- function update(ta) {
- if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
- var evt = createEvent('autosize:update');
- ta.dispatchEvent(evt);
- }
-
- var autosize = null;
-
- // Do nothing in Node.js environment and IE8 (or lower)
- if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
- autosize = function (el) {
- return el;
- };
- autosize.destroy = function (el) {
- return el;
- };
- autosize.update = function (el) {
- return el;
- };
- } else {
- autosize = function (el, options) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], function (x) {
- return assign(x, options);
- });
- }
- return el;
- };
- autosize.destroy = function (el) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], destroy);
- }
- return el;
- };
- autosize.update = function (el) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], update);
- }
- return el;
- };
- }
-
- module.exports = autosize;
-}); \ No newline at end of file
diff --git a/core/vendor/autosize/dist/autosize.min.js b/core/vendor/autosize/dist/autosize.min.js
new file mode 100644
index 00000000000..3d8366b57f4
--- /dev/null
+++ b/core/vendor/autosize/dist/autosize.min.js
@@ -0,0 +1,6 @@
+/*!
+ Autosize 3.0.20
+ license: MIT
+ http://www.jacklmoore.com/autosize
+*/
+!function(e,t){if("function"==typeof define&&define.amd)define(["exports","module"],t);else if("undefined"!=typeof exports&&"undefined"!=typeof module)t(exports,module);else{var n={exports:{}};t(n.exports,n),e.autosize=n.exports}}(this,function(e,t){"use strict";function n(e){function t(){var t=window.getComputedStyle(e,null);"vertical"===t.resize?e.style.resize="none":"both"===t.resize&&(e.style.resize="horizontal"),s="content-box"===t.boxSizing?-(parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)):parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),isNaN(s)&&(s=0),l()}function n(t){var n=e.style.width;e.style.width="0px",e.offsetWidth,e.style.width=n,e.style.overflowY=t}function o(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}function r(){var t=e.style.height,n=o(e),r=document.documentElement&&document.documentElement.scrollTop;e.style.height="auto";var i=e.scrollHeight+s;return 0===e.scrollHeight?void(e.style.height=t):(e.style.height=i+"px",u=e.clientWidth,n.forEach(function(e){e.node.scrollTop=e.scrollTop}),void(r&&(document.documentElement.scrollTop=r)))}function l(){r();var t=Math.round(parseFloat(e.style.height)),o=window.getComputedStyle(e,null),i=Math.round(parseFloat(o.height));if(i!==t?"visible"!==o.overflowY&&(n("visible"),r(),i=Math.round(parseFloat(window.getComputedStyle(e,null).height))):"hidden"!==o.overflowY&&(n("hidden"),r(),i=Math.round(parseFloat(window.getComputedStyle(e,null).height))),a!==i){a=i;var l=d("autosize:resized");try{e.dispatchEvent(l)}catch(e){}}}if(e&&e.nodeName&&"TEXTAREA"===e.nodeName&&!i.has(e)){var s=null,u=e.clientWidth,a=null,p=function(){e.clientWidth!==u&&l()},c=function(t){window.removeEventListener("resize",p,!1),e.removeEventListener("input",l,!1),e.removeEventListener("keyup",l,!1),e.removeEventListener("autosize:destroy",c,!1),e.removeEventListener("autosize:update",l,!1),Object.keys(t).forEach(function(n){e.style[n]=t[n]}),i.delete(e)}.bind(e,{height:e.style.height,resize:e.style.resize,overflowY:e.style.overflowY,overflowX:e.style.overflowX,wordWrap:e.style.wordWrap});e.addEventListener("autosize:destroy",c,!1),"onpropertychange"in e&&"oninput"in e&&e.addEventListener("keyup",l,!1),window.addEventListener("resize",p,!1),e.addEventListener("input",l,!1),e.addEventListener("autosize:update",l,!1),e.style.overflowX="hidden",e.style.wordWrap="break-word",i.set(e,{destroy:c,update:l}),t()}}function o(e){var t=i.get(e);t&&t.destroy()}function r(e){var t=i.get(e);t&&t.update()}var i="function"==typeof Map?new Map:function(){var e=[],t=[];return{has:function(t){return e.indexOf(t)>-1},get:function(n){return t[e.indexOf(n)]},set:function(n,o){e.indexOf(n)===-1&&(e.push(n),t.push(o))},delete:function(n){var o=e.indexOf(n);o>-1&&(e.splice(o,1),t.splice(o,1))}}}(),d=function(e){return new Event(e,{bubbles:!0})};try{new Event("test")}catch(e){d=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!1),t}}var l=null;"undefined"==typeof window||"function"!=typeof window.getComputedStyle?(l=function(e){return e},l.destroy=function(e){return e},l.update=function(e){return e}):(l=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return n(e,t)}),e},l.destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],o),e},l.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],r),e}),t.exports=l}); \ No newline at end of file
diff --git a/core/vendor/core.js b/core/vendor/core.js
index 2186df5a233..aae3d90d2fd 100644
--- a/core/vendor/core.js
+++ b/core/vendor/core.js
@@ -1,9 +1,11 @@
-/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){
-return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ia={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qa[0].contentDocument,b.write(),b.close(),c=sa(a,b),qa.detach()),ra[a]=c),c}var ua=/^margin/,va=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wa=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xa(a,b,c){var d,e,f,g,h=a.style;return c=c||wa(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),va.test(g)&&ua.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function ya(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var za=/^(none|table(?!-c[ea]).+)/,Aa=new RegExp("^("+Q+")(.*)$","i"),Ba=new RegExp("^([+-])=("+Q+")","i"),Ca={position:"absolute",visibility:"hidden",display:"block"},Da={letterSpacing:"0",fontWeight:"400"},Ea=["Webkit","O","Moz","ms"];function Fa(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Ea.length;while(e--)if(b=Ea[e]+c,b in a)return b;return d}function Ga(a,b,c){var d=Aa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ha(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ia(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wa(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xa(a,b,f),(0>e||null==e)&&(e=a.style[b]),va.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Ha(a,b,c||(g?"border":"content"),d,f)+"px"}function Ja(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",ta(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fa(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ba.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fa(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xa(a,b,d)),"normal"===e&&b in Da&&(e=Da[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?za.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Ca,function(){return Ia(a,b,d)}):Ia(a,b,d):void 0},set:function(a,c,d){var e=d&&wa(a);return Ga(a,c,d?Ha(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=ya(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ua.test(a)||(n.cssHooks[a+b].set=Ga)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wa(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Ja(this,!0)},hide:function(){return Ja(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Ka(a,b,c,d,e){return new Ka.prototype.init(a,b,c,d,e)}n.Tween=Ka,Ka.prototype={constructor:Ka,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ka.propHooks[this.prop];return a&&a.get?a.get(this):Ka.propHooks._default.get(this)},run:function(a){var b,c=Ka.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ka.propHooks._default.set(this),this}},Ka.prototype.init.prototype=Ka.prototype,Ka.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Ka.propHooks.scrollTop=Ka.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Ka.prototype.init,n.fx.step={};var La,Ma,Na=/^(?:toggle|show|hide)$/,Oa=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pa=/queueHooks$/,Qa=[Va],Ra={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Oa.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Oa.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sa(){return setTimeout(function(){La=void 0}),La=n.now()}function Ta(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ua(a,b,c){for(var d,e=(Ra[b]||[]).concat(Ra["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Va(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||ta(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Na.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?ta(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ua(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wa(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xa(a,b,c){var d,e,f=0,g=Qa.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=La||Sa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:La||Sa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wa(k,j.opts.specialEasing);g>f;f++)if(d=Qa[f].call(j,a,k,j.opts))return d;return n.map(k,Ua,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xa,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Ra[c]=Ra[c]||[],Ra[c].unshift(b)},prefilter:function(a,b){b?Qa.unshift(a):Qa.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xa(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pa.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Ta(b,!0),a,d,e)}}),n.each({slideDown:Ta("show"),slideUp:Ta("hide"),slideToggle:Ta("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(La=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),La=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Ma||(Ma=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Ma),Ma=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Ya,Za,$a=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Za:Ya)),
-void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Za={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$a[b]||n.find.attr;$a[b]=function(a,b,d){var e,f;return d||(f=$a[b],$a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$a[b]=f),e}});var _a=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_a.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ab=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ab," ").indexOf(b)>=0)return!0;return!1}});var bb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cb=n.now(),db=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var eb=/#.*$/,fb=/([?&])_=[^&]*/,gb=/^(.*?):[ \t]*([^\r\n]*)$/gm,hb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ib=/^(?:GET|HEAD)$/,jb=/^\/\//,kb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lb={},mb={},nb="*/".concat("*"),ob=a.location.href,pb=kb.exec(ob.toLowerCase())||[];function qb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rb(a,b,c,d){var e={},f=a===mb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function ub(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ob,type:"GET",isLocal:hb.test(pb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sb(sb(a,n.ajaxSettings),b):sb(n.ajaxSettings,a)},ajaxPrefilter:qb(lb),ajaxTransport:qb(mb),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gb.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||ob)+"").replace(eb,"").replace(jb,pb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kb.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pb[1]&&h[2]===pb[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pb[3]||("http:"===pb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rb(lb,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ib.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(db.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fb.test(d)?d.replace(fb,"$1_="+cb++):d+(db.test(d)?"&":"?")+"_="+cb++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nb+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rb(mb,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tb(k,v,f)),u=ub(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vb=/%20/g,wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&").replace(vb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bb=0,Cb={},Db={0:200,1223:204},Eb=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cb)Cb[a]()}),k.cors=!!Eb&&"withCredentials"in Eb,k.ajax=Eb=!!Eb,n.ajaxTransport(function(a){var b;return k.cors||Eb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Db[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cb[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fb=[],Gb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fb.pop()||n.expando+"_"+cb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gb,"$1"+e):b.jsonp!==!1&&(b.url+=(db.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hb)return Hb.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ib=a.document.documentElement;function Jb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jb(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ib;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ib})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jb(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=ya(k.pixelPosition,function(a,c){return c?(c=xa(a,b),va.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kb=a.jQuery,Lb=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lb),b&&a.jQuery===n&&(a.jQuery=Kb),n},typeof b===U&&(a.jQuery=a.$=n),n});
-//# sourceMappingURL=jquery.min.map/*! jQuery Migrate v1.4.0 | (c) jQuery Foundation and other contributors | jquery.org/license */
-"undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b,c){function d(c){var d=b.console;f[c]||(f[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function e(b,c,e,f){if(Object.defineProperty)try{return void Object.defineProperty(b,c,{configurable:!0,enumerable:!0,get:function(){return d(f),e},set:function(a){d(f),e=a}})}catch(g){}a._definePropertyBroken=!0,b[c]=e}a.migrateVersion="1.4.0";var f={};a.migrateWarnings=[],b.console&&b.console.log&&b.console.log("JQMIGRATE: Migrate is installed"+(a.migrateMute?"":" with logging active")+", version "+a.migrateVersion),a.migrateTrace===c&&(a.migrateTrace=!0),a.migrateReset=function(){f={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&d("jQuery is not compatible with Quirks Mode");var g=a("<input/>",{size:1}).attr("size")&&a.attrFn,h=a.attr,i=a.attrHooks.value&&a.attrHooks.value.get||function(){return null},j=a.attrHooks.value&&a.attrHooks.value.set||function(){return c},k=/^(?:input|button)$/i,l=/^[238]$/,m=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,n=/^(?:checked|selected)$/i;e(a,"attrFn",g||{},"jQuery.attrFn is deprecated"),a.attr=function(b,e,f,i){var j=e.toLowerCase(),o=b&&b.nodeType;return i&&(h.length<4&&d("jQuery.fn.attr( props, pass ) is deprecated"),b&&!l.test(o)&&(g?e in g:a.isFunction(a.fn[e])))?a(b)[e](f):("type"===e&&f!==c&&k.test(b.nodeName)&&b.parentNode&&d("Can't change the 'type' of an input or button in IE 6/7/8"),!a.attrHooks[j]&&m.test(j)&&(a.attrHooks[j]={get:function(b,d){var e,f=a.prop(b,d);return f===!0||"boolean"!=typeof f&&(e=b.getAttributeNode(d))&&e.nodeValue!==!1?d.toLowerCase():c},set:function(b,c,d){var e;return c===!1?a.removeAttr(b,d):(e=a.propFix[d]||d,e in b&&(b[e]=!0),b.setAttribute(d,d.toLowerCase())),d}},n.test(j)&&d("jQuery.fn.attr('"+j+"') might use property instead of attribute")),h.call(a,b,e,f))},a.attrHooks.value={get:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?i.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value') no longer gets properties"),b in a?a.value:null)},set:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?j.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value', val) no longer sets properties"),void(a.value=b))}};var o,p,q=a.fn.init,r=a.parseJSON,s=/^\s*</,t=/\[\s*\w+\s*[~|^$*]?=\s*(?![\s'"])[^#\]]*#/,u=/^([^<]*)(<[\w\W]+>)([^>]*)$/;a.fn.init=function(b,e,f){var g,h;return b&&"string"==typeof b&&!a.isPlainObject(e)&&(g=u.exec(a.trim(b)))&&g[0]&&(s.test(b)||d("$(html) HTML strings must start with '<' character"),g[3]&&d("$(html) HTML text after last tag is ignored"),"#"===g[0].charAt(0)&&(d("HTML string cannot start with a '#' character"),a.error("JQMIGRATE: Invalid selector string (XSS)")),e&&e.context&&(e=e.context),a.parseHTML)?q.call(this,a.parseHTML(g[2],e&&e.ownerDocument||e||document,!0),e,f):("#"===b?(d("jQuery( '#' ) is not a valid selector"),b=[]):t.test(b)&&d("Attribute selectors with '#' must be quoted: '"+b+"'"),h=q.apply(this,arguments),b&&b.selector!==c?(h.selector=b.selector,h.context=b.context):(h.selector="string"==typeof b?b:"",b&&(h.context=b.nodeType?b:e||document)),h)},a.fn.init.prototype=a.fn,a.parseJSON=function(a){return a?r.apply(this,arguments):(d("jQuery.parseJSON requires a valid JSON string"),null)},a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a.browser||(o=a.uaMatch(navigator.userAgent),p={},o.browser&&(p[o.browser]=!0,p.version=o.version),p.chrome?p.webkit=!0:p.webkit&&(p.safari=!0),a.browser=p),e(a,"browser",a.browser,"jQuery.browser is deprecated"),a.boxModel=a.support.boxModel="CSS1Compat"===document.compatMode,e(a,"boxModel",a.boxModel,"jQuery.boxModel is deprecated"),e(a.support,"boxModel",a.support.boxModel,"jQuery.support.boxModel is deprecated"),a.sub=function(){function b(a,c){return new b.fn.init(a,c)}a.extend(!0,b,this),b.superclass=this,b.fn=b.prototype=this(),b.fn.constructor=b,b.sub=this.sub,b.fn.init=function(d,e){var f=a.fn.init.call(this,d,e,c);return f instanceof b?f:b(f)},b.fn.init.prototype=b.fn;var c=b(document);return d("jQuery.sub() is deprecated"),b},a.fn.size=function(){return d("jQuery.fn.size() is deprecated; use the .length property"),this.length};var v=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return v=!0,a=d.apply(this,arguments),v=!1,a})}),a.swap=function(a,b,c,e){var f,g,h={};v||d("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=c.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f},a.ajaxSetup({converters:{"text json":a.parseJSON}});var w=a.fn.data;a.fn.data=function(b){var e,f,g=this[0];return!g||"events"!==b||1!==arguments.length||(e=a.data(g,b),f=a._data(g,b),e!==c&&e!==f||f===c)?w.apply(this,arguments):(d("Use of jQuery.fn.data('events') is deprecated"),f)};var x=/\/(java|ecma)script/i;a.clean||(a.clean=function(b,c,e,f){c=c||document,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,d("jQuery.clean() is deprecated");var g,h,i,j,k=[];if(a.merge(k,a.buildFragment(b,c).childNodes),e)for(i=function(a){return!a.type||x.test(a.type)?f?f.push(a.parentNode?a.parentNode.removeChild(a):a):e.appendChild(a):void 0},g=0;null!=(h=k[g]);g++)a.nodeName(h,"script")&&i(h)||(e.appendChild(h),"undefined"!=typeof h.getElementsByTagName&&(j=a.grep(a.merge([],h.getElementsByTagName("script")),i),k.splice.apply(k,[g+1,0].concat(j)),g+=j.length));return k});var y=a.event.add,z=a.event.remove,A=a.event.trigger,B=a.fn.toggle,C=a.fn.live,D=a.fn.die,E=a.fn.load,F="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",G=new RegExp("\\b(?:"+F+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,I=function(b){return"string"!=typeof b||a.event.special.hover?b:(H.test(b)&&d("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),b&&b.replace(H,"mouseenter$1 mouseleave$1"))};a.event.props&&"attrChange"!==a.event.props[0]&&a.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),a.event.dispatch&&e(a.event,"handle",a.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),a.event.add=function(a,b,c,e,f){a!==document&&G.test(b)&&d("AJAX events should be attached to document: "+b),y.call(this,a,I(b||""),c,e,f)},a.event.remove=function(a,b,c,d,e){z.call(this,a,I(b)||"",c,d,e)},a.each(["load","unload","error"],function(b,c){a.fn[c]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===c&&"string"==typeof a[0]?E.apply(this,a):(d("jQuery.fn."+c+"() is deprecated"),a.splice(0,0,c),arguments.length?this.bind.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a.fn.toggle=function(b,c){if(!a.isFunction(b)||!a.isFunction(c))return B.apply(this,arguments);d("jQuery.fn.toggle(handler, handler...) is deprecated");var e=arguments,f=b.guid||a.guid++,g=0,h=function(c){var d=(a._data(this,"lastToggle"+b.guid)||0)%g;return a._data(this,"lastToggle"+b.guid,d+1),c.preventDefault(),e[d].apply(this,arguments)||!1};for(h.guid=f;g<e.length;)e[g++].guid=f;return this.click(h)},a.fn.live=function(b,c,e){return d("jQuery.fn.live() is deprecated"),C?C.apply(this,arguments):(a(this.context).on(b,this.selector,c,e),this)},a.fn.die=function(b,c){return d("jQuery.fn.die() is deprecated"),D?D.apply(this,arguments):(a(this.context).off(b,this.selector||"**",c),this)},a.event.trigger=function(a,b,c,e){return c||G.test(a)||d("Global events are undocumented and deprecated"),A.call(this,a,b,c||document,e)},a.each(F.split("|"),function(b,c){a.event.special[c]={setup:function(){var b=this;return b!==document&&(a.event.add(document,c+"."+a.guid,function(){a.event.trigger(c,Array.prototype.slice.call(arguments,1),b,!0)}),a._data(this,c,a.guid++)),!1},teardown:function(){return this!==document&&a.event.remove(document,c+"."+a._data(this,c)),!1}}}),a.event.special.ready={setup:function(){this===document&&d("'ready' event is deprecated")}};var J=a.fn.andSelf||a.fn.addBack,K=a.fn.find;if(a.fn.andSelf=function(){return d("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),J.apply(this,arguments)},a.fn.find=function(a){var b=K.apply(this,arguments);return b.context=this.context,b.selector=this.selector?this.selector+" "+a:a,b},a.Callbacks){var L=a.Deferred,M=[["resolve","done",a.Callbacks("once memory"),a.Callbacks("once memory"),"resolved"],["reject","fail",a.Callbacks("once memory"),a.Callbacks("once memory"),"rejected"],["notify","progress",a.Callbacks("memory"),a.Callbacks("memory")]];a.Deferred=function(b){var c=L(),e=c.promise();return c.pipe=e.pipe=function(){var b=arguments;return d("deferred.pipe() is deprecated"),a.Deferred(function(d){a.each(M,function(f,g){var h=a.isFunction(b[f])&&b[f];c[g[1]](function(){var b=h&&h.apply(this,arguments);b&&a.isFunction(b.promise)?b.promise().done(d.resolve).fail(d.reject).progress(d.notify):d[g[0]+"With"](this===e?d.promise():this,h?[b]:arguments)})}),b=null}).promise()},c.isResolved=function(){return d("deferred.isResolved is deprecated"),"resolved"===c.state()},c.isRejected=function(){return d("deferred.isRejected is deprecated"),"rejected"===c.state()},b&&b.call(c,c),c}}}(jQuery,window);/*! jQuery UI - v1.10.0 - 2013-01-18
+/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c;
+}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=N.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function W(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&T.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var X=/^(?:checkbox|radio)$/i,Y=/<([\w:-]+)/,Z=/^$|\/(?:java|ecma)script/i,$={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||d,e=c.documentElement,f=c.body,a.pageX=b.clientX+(e&&e.scrollLeft||f&&f.scrollLeft||0)-(e&&e.clientLeft||f&&f.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||f&&f.scrollTop||0)-(e&&e.clientTop||f&&f.clientTop||0)),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ea.test(f)?this.mouseHooks:da.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=d),3===a.target.nodeType&&(a.target=a.target.parentNode),h.filter?h.filter(a,g):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==ia()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===ia()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ga:ha):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:ha,isPropagationStopped:ha,isImmediatePropagationStopped:ha,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ga,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ga,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ga,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),n.fn.extend({on:function(a,b,c,d){return ja(this,a,b,c,d)},one:function(a,b,c,d){return ja(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=ha),this.each(function(){n.event.remove(this,a,c,b)})}});var ka=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,la=/<script|<style|<link/i,ma=/checked\s*(?:[^=]|=\s*.checked.)/i,na=/^true\/(.*)/,oa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=wa[0].contentDocument,b.write(),b.close(),c=ya(a,b),wa.detach()),xa[a]=c),c}var Aa=/^margin/,Ba=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ca=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Da=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Ea=d.documentElement;!function(){var b,c,e,f,g=d.createElement("div"),h=d.createElement("div");if(h.style){h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,g.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",g.appendChild(h);function i(){h.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",h.innerHTML="",Ea.appendChild(g);var d=a.getComputedStyle(h);b="1%"!==d.top,f="2px"===d.marginLeft,c="4px"===d.width,h.style.marginRight="50%",e="4px"===d.marginRight,Ea.removeChild(g)}n.extend(l,{pixelPosition:function(){return i(),b},boxSizingReliable:function(){return null==c&&i(),c},pixelMarginRight:function(){return null==c&&i(),e},reliableMarginLeft:function(){return null==c&&i(),f},reliableMarginRight:function(){var b,c=h.appendChild(d.createElement("div"));return c.style.cssText=h.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",h.style.width="1px",Ea.appendChild(g),b=!parseFloat(a.getComputedStyle(c).marginRight),Ea.removeChild(g),h.removeChild(c),b}})}}();function Fa(a,b,c){var d,e,f,g,h=a.style;return c=c||Ca(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Ba.test(g)&&Aa.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0!==g?g+"":g}function Ga(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Ha=/^(none|table(?!-c[ea]).+)/,Ia={position:"absolute",visibility:"hidden",display:"block"},Ja={letterSpacing:"0",fontWeight:"400"},Ka=["Webkit","O","Moz","ms"],La=d.createElement("div").style;function Ma(a){if(a in La)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ka.length;while(c--)if(a=Ka[c]+b,a in La)return a}function Na(a,b,c){var d=T.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Oa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Pa(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ca(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Fa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ba.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Oa(a,b,c||(g?"border":"content"),d,f)+"px"}function Qa(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=N.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=N.access(d,"olddisplay",za(d.nodeName)))):(e=V(d),"none"===c&&e||N.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Fa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Ma(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=T.exec(c))&&e[1]&&(c=W(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Ma(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Fa(a,b,d)),"normal"===e&&b in Ja&&(e=Ja[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Ha.test(n.css(a,"display"))&&0===a.offsetWidth?Da(a,Ia,function(){return Pa(a,b,d)}):Pa(a,b,d):void 0},set:function(a,c,d){var e,f=d&&Ca(a),g=d&&Oa(a,b,d,"border-box"===n.css(a,"boxSizing",!1,f),f);return g&&(e=T.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=n.css(a,b)),Na(a,c,g)}}}),n.cssHooks.marginLeft=Ga(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Fa(a,"marginLeft"))||a.getBoundingClientRect().left-Da(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px":void 0}),n.cssHooks.marginRight=Ga(l.reliableMarginRight,function(a,b){return b?Da(a,{display:"inline-block"},Fa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Aa.test(a)||(n.cssHooks[a+b].set=Na)}),n.fn.extend({css:function(a,b){return K(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ca(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Qa(this,!0)},hide:function(){return Qa(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function Ra(a,b,c,d,e){return new Ra.prototype.init(a,b,c,d,e)}n.Tween=Ra,Ra.prototype={constructor:Ra,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ra.propHooks[this.prop];return a&&a.get?a.get(this):Ra.propHooks._default.get(this)},run:function(a){var b,c=Ra.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ra.propHooks._default.set(this),this}},Ra.prototype.init.prototype=Ra.prototype,Ra.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},Ra.propHooks.scrollTop=Ra.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=Ra.prototype.init,n.fx.step={};var Sa,Ta,Ua=/^(?:toggle|show|hide)$/,Va=/queueHooks$/;function Wa(){return a.setTimeout(function(){Sa=void 0}),Sa=n.now()}function Xa(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=U[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ya(a,b,c){for(var d,e=(_a.tweeners[b]||[]).concat(_a.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Za(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&V(a),q=N.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?N.get(a,"olddisplay")||za(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Ua.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?za(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=N.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;N.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ya(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function $a(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function _a(a,b,c){var d,e,f=0,g=_a.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Sa||Wa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:Sa||Wa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for($a(k,j.opts.specialEasing);g>f;f++)if(d=_a.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,Ya,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(_a,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return W(c.elem,a,T.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],_a.tweeners[c]=_a.tweeners[c]||[],_a.tweeners[c].unshift(b)},prefilters:[Za],prefilter:function(a,b){b?_a.prefilters.unshift(a):_a.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=_a(this,n.extend({},a),f);(e||N.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=N.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Va.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=N.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Xa(b,!0),a,d,e)}}),n.each({slideDown:Xa("show"),slideUp:Xa("hide"),slideToggle:Xa("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Sa=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Sa=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Ta||(Ta=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(Ta),Ta=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",l.checkOn=""!==a.value,l.optSelected=c.selected,b.disabled=!0,l.optDisabled=!c.disabled,a=d.createElement("input"),a.value="t",a.type="radio",l.radioValue="t"===a.value}();var ab,bb=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return K(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ab:void 0)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)}}),ab={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=bb[b]||n.find.attr;bb[b]=function(a,b,d){var e,f;return d||(f=bb[b],bb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,bb[b]=f),e}});var cb=/^(?:input|select|textarea|button)$/i,db=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return K(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),
+void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):cb.test(a.nodeName)||db.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var eb=/[\t\r\n\f]/g;function fb(a){return a.getAttribute&&a.getAttribute("class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,fb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=fb(c),d=1===c.nodeType&&(" "+e+" ").replace(eb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,fb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=fb(c),d=1===c.nodeType&&(" "+e+" ").replace(eb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,fb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=fb(this),b&&N.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":N.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+fb(c)+" ").replace(eb," ").indexOf(b)>-1)return!0;return!1}});var gb=/\r/g,hb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(gb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(hb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(n.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var ib=/^(?:focusinfocus|focusoutblur)$/;n.extend(n.event,{trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!ib.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),l=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},f||!o.trigger||o.trigger.apply(e,c)!==!1)){if(!f&&!o.noBubble&&!n.isWindow(e)){for(j=o.delegateType||q,ib.test(j+q)||(h=h.parentNode);h;h=h.parentNode)p.push(h),i=h;i===(e.ownerDocument||d)&&p.push(i.defaultView||i.parentWindow||a)}g=0;while((h=p[g++])&&!b.isPropagationStopped())b.type=g>1?j:o.bindType||q,m=(N.get(h,"events")||{})[b.type]&&N.get(h,"handle"),m&&m.apply(h,c),m=l&&h[l],m&&m.apply&&L(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=q,f||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!L(e)||l&&n.isFunction(e[q])&&!n.isWindow(e)&&(i=e[l],i&&(e[l]=null),n.event.triggered=q,e[q](),n.event.triggered=void 0,i&&(e[l]=i)),b.result}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b)}}),n.fn.extend({trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),l.focusin="onfocusin"in a,l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=N.access(d,b);e||d.addEventListener(a,c,!0),N.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=N.access(d,b)-1;e?N.access(d,b,e):(d.removeEventListener(a,c,!0),N.remove(d,b))}}});var jb=a.location,kb=n.now(),lb=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var mb=/#.*$/,nb=/([?&])_=[^&]*/,ob=/^(.*?):[ \t]*([^\r\n]*)$/gm,pb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,qb=/^(?:GET|HEAD)$/,rb=/^\/\//,sb={},tb={},ub="*/".concat("*"),vb=d.createElement("a");vb.href=jb.href;function wb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function xb(a,b,c,d){var e={},f=a===tb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function yb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function zb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Ab(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:jb.href,type:"GET",isLocal:pb.test(jb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ub,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?yb(yb(a,n.ajaxSettings),b):yb(n.ajaxSettings,a)},ajaxPrefilter:wb(sb),ajaxTransport:wb(tb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m=n.ajaxSetup({},c),o=m.context||m,p=m.context&&(o.nodeType||o.jquery)?n(o):n.event,q=n.Deferred(),r=n.Callbacks("once memory"),s=m.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,getResponseHeader:function(a){var b;if(2===v){if(!h){h={};while(b=ob.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===v?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return v||(a=u[c]=u[c]||a,t[a]=b),this},overrideMimeType:function(a){return v||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>v)for(b in a)s[b]=[s[b],a[b]];else x.always(a[x.status]);return this},abort:function(a){var b=a||w;return e&&e.abort(b),z(0,b),this}};if(q.promise(x).complete=r.add,x.success=x.done,x.error=x.fail,m.url=((b||m.url||jb.href)+"").replace(mb,"").replace(rb,jb.protocol+"//"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=n.trim(m.dataType||"*").toLowerCase().match(G)||[""],null==m.crossDomain){j=d.createElement("a");try{j.href=m.url,j.href=j.href,m.crossDomain=vb.protocol+"//"+vb.host!=j.protocol+"//"+j.host}catch(y){m.crossDomain=!0}}if(m.data&&m.processData&&"string"!=typeof m.data&&(m.data=n.param(m.data,m.traditional)),xb(sb,m,c,x),2===v)return x;k=n.event&&m.global,k&&0===n.active++&&n.event.trigger("ajaxStart"),m.type=m.type.toUpperCase(),m.hasContent=!qb.test(m.type),f=m.url,m.hasContent||(m.data&&(f=m.url+=(lb.test(f)?"&":"?")+m.data,delete m.data),m.cache===!1&&(m.url=nb.test(f)?f.replace(nb,"$1_="+kb++):f+(lb.test(f)?"&":"?")+"_="+kb++)),m.ifModified&&(n.lastModified[f]&&x.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&x.setRequestHeader("If-None-Match",n.etag[f])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",m.contentType),x.setRequestHeader("Accept",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+("*"!==m.dataTypes[0]?", "+ub+"; q=0.01":""):m.accepts["*"]);for(l in m.headers)x.setRequestHeader(l,m.headers[l]);if(m.beforeSend&&(m.beforeSend.call(o,x,m)===!1||2===v))return x.abort();w="abort";for(l in{success:1,error:1,complete:1})x[l](m[l]);if(e=xb(tb,m,c,x)){if(x.readyState=1,k&&p.trigger("ajaxSend",[x,m]),2===v)return x;m.async&&m.timeout>0&&(i=a.setTimeout(function(){x.abort("timeout")},m.timeout));try{v=1,e.send(t,z)}catch(y){if(!(2>v))throw y;z(-1,y)}}else z(-1,"No Transport");function z(b,c,d,h){var j,l,t,u,w,y=c;2!==v&&(v=2,i&&a.clearTimeout(i),e=void 0,g=h||"",x.readyState=b>0?4:0,j=b>=200&&300>b||304===b,d&&(u=zb(m,x,d)),u=Ab(m,u,x,j),j?(m.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(n.lastModified[f]=w),w=x.getResponseHeader("etag"),w&&(n.etag[f]=w)),204===b||"HEAD"===m.type?y="nocontent":304===b?y="notmodified":(y=u.state,l=u.data,t=u.error,j=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),x.status=b,x.statusText=(c||y)+"",j?q.resolveWith(o,[l,y,x]):q.rejectWith(o,[x,y,t]),x.statusCode(s),s=void 0,k&&p.trigger(j?"ajaxSuccess":"ajaxError",[x,m,j?l:t]),r.fireWith(o,[x,y]),k&&(p.trigger("ajaxComplete",[x,m]),--n.active||n.event.trigger("ajaxStop")))}return x},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return!n.expr.filters.visible(a)},n.expr.filters.visible=function(a){return a.offsetWidth>0||a.offsetHeight>0||a.getClientRects().length>0};var Bb=/%20/g,Cb=/\[\]$/,Db=/\r?\n/g,Eb=/^(?:submit|button|image|reset|file)$/i,Fb=/^(?:input|select|textarea|keygen)/i;function Gb(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Cb.test(a)?d(a,e):Gb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Gb(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Gb(c,a[c],b,e);return d.join("&").replace(Bb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Fb.test(this.nodeName)&&!Eb.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Db,"\r\n")}}):{name:b.name,value:c.replace(Db,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Hb={0:200,1223:204},Ib=n.ajaxSettings.xhr();l.cors=!!Ib&&"withCredentials"in Ib,l.ajax=Ib=!!Ib,n.ajaxTransport(function(b){var c,d;return l.cors||Ib&&!b.crossDomain?{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Hb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=n("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Jb=[],Kb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Jb.pop()||n.expando+"_"+kb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Kb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Kb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Kb,"$1"+e):b.jsonp!==!1&&(b.url+=(lb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Jb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ca([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var Lb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Lb)return Lb.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function Mb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(e=d.getBoundingClientRect(),c=Mb(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ea})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;n.fn[a]=function(d){return K(this,function(a,d,e){var f=Mb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ga(l.pixelPosition,function(a,c){return c?(c=Fa(a,b),Ba.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return K(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},size:function(){return this.length}}),n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Nb=a.jQuery,Ob=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Ob),b&&a.jQuery===n&&(a.jQuery=Nb),n},b||(a.jQuery=a.$=n),n});
+
+/*! jQuery Migrate v1.4.0 | (c) jQuery Foundation and other contributors | jquery.org/license */
+"undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b,c){function d(c){var d=b.console;f[c]||(f[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function e(b,c,e,f){if(Object.defineProperty)try{return void Object.defineProperty(b,c,{configurable:!0,enumerable:!0,get:function(){return d(f),e},set:function(a){d(f),e=a}})}catch(g){}a._definePropertyBroken=!0,b[c]=e}a.migrateVersion="1.4.0";var f={};a.migrateWarnings=[],b.console&&b.console.log&&b.console.log("JQMIGRATE: Migrate is installed"+(a.migrateMute?"":" with logging active")+", version "+a.migrateVersion),a.migrateTrace===c&&(a.migrateTrace=!0),a.migrateReset=function(){f={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&d("jQuery is not compatible with Quirks Mode");var g=a("<input/>",{size:1}).attr("size")&&a.attrFn,h=a.attr,i=a.attrHooks.value&&a.attrHooks.value.get||function(){return null},j=a.attrHooks.value&&a.attrHooks.value.set||function(){return c},k=/^(?:input|button)$/i,l=/^[238]$/,m=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,n=/^(?:checked|selected)$/i;e(a,"attrFn",g||{},"jQuery.attrFn is deprecated"),a.attr=function(b,e,f,i){var j=e.toLowerCase(),o=b&&b.nodeType;return i&&(h.length<4&&d("jQuery.fn.attr( props, pass ) is deprecated"),b&&!l.test(o)&&(g?e in g:a.isFunction(a.fn[e])))?a(b)[e](f):("type"===e&&f!==c&&k.test(b.nodeName)&&b.parentNode&&d("Can't change the 'type' of an input or button in IE 6/7/8"),!a.attrHooks[j]&&m.test(j)&&(a.attrHooks[j]={get:function(b,d){var e,f=a.prop(b,d);return f===!0||"boolean"!=typeof f&&(e=b.getAttributeNode(d))&&e.nodeValue!==!1?d.toLowerCase():c},set:function(b,c,d){var e;return c===!1?a.removeAttr(b,d):(e=a.propFix[d]||d,e in b&&(b[e]=!0),b.setAttribute(d,d.toLowerCase())),d}},n.test(j)&&d("jQuery.fn.attr('"+j+"') might use property instead of attribute")),h.call(a,b,e,f))},a.attrHooks.value={get:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?i.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value') no longer gets properties"),b in a?a.value:null)},set:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?j.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value', val) no longer sets properties"),void(a.value=b))}};var o,p,q=a.fn.init,r=a.parseJSON,s=/^\s*</,t=/\[\s*\w+\s*[~|^$*]?=\s*(?![\s'"])[^#\]]*#/,u=/^([^<]*)(<[\w\W]+>)([^>]*)$/;a.fn.init=function(b,e,f){var g,h;return b&&"string"==typeof b&&!a.isPlainObject(e)&&(g=u.exec(a.trim(b)))&&g[0]&&(s.test(b)||d("$(html) HTML strings must start with '<' character"),g[3]&&d("$(html) HTML text after last tag is ignored"),"#"===g[0].charAt(0)&&(d("HTML string cannot start with a '#' character"),a.error("JQMIGRATE: Invalid selector string (XSS)")),e&&e.context&&(e=e.context),a.parseHTML)?q.call(this,a.parseHTML(g[2],e&&e.ownerDocument||e||document,!0),e,f):("#"===b?(d("jQuery( '#' ) is not a valid selector"),b=[]):t.test(b)&&d("Attribute selectors with '#' must be quoted: '"+b+"'"),h=q.apply(this,arguments),b&&b.selector!==c?(h.selector=b.selector,h.context=b.context):(h.selector="string"==typeof b?b:"",b&&(h.context=b.nodeType?b:e||document)),h)},a.fn.init.prototype=a.fn,a.parseJSON=function(a){return a?r.apply(this,arguments):(d("jQuery.parseJSON requires a valid JSON string"),null)},a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a.browser||(o=a.uaMatch(navigator.userAgent),p={},o.browser&&(p[o.browser]=!0,p.version=o.version),p.chrome?p.webkit=!0:p.webkit&&(p.safari=!0),a.browser=p),e(a,"browser",a.browser,"jQuery.browser is deprecated"),a.boxModel=a.support.boxModel="CSS1Compat"===document.compatMode,e(a,"boxModel",a.boxModel,"jQuery.boxModel is deprecated"),e(a.support,"boxModel",a.support.boxModel,"jQuery.support.boxModel is deprecated"),a.sub=function(){function b(a,c){return new b.fn.init(a,c)}a.extend(!0,b,this),b.superclass=this,b.fn=b.prototype=this(),b.fn.constructor=b,b.sub=this.sub,b.fn.init=function(d,e){var f=a.fn.init.call(this,d,e,c);return f instanceof b?f:b(f)},b.fn.init.prototype=b.fn;var c=b(document);return d("jQuery.sub() is deprecated"),b},a.fn.size=function(){return d("jQuery.fn.size() is deprecated; use the .length property"),this.length};var v=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return v=!0,a=d.apply(this,arguments),v=!1,a})}),a.swap=function(a,b,c,e){var f,g,h={};v||d("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=c.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f},a.ajaxSetup({converters:{"text json":a.parseJSON}});var w=a.fn.data;a.fn.data=function(b){var e,f,g=this[0];return!g||"events"!==b||1!==arguments.length||(e=a.data(g,b),f=a._data(g,b),e!==c&&e!==f||f===c)?w.apply(this,arguments):(d("Use of jQuery.fn.data('events') is deprecated"),f)};var x=/\/(java|ecma)script/i;a.clean||(a.clean=function(b,c,e,f){c=c||document,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,d("jQuery.clean() is deprecated");var g,h,i,j,k=[];if(a.merge(k,a.buildFragment(b,c).childNodes),e)for(i=function(a){return!a.type||x.test(a.type)?f?f.push(a.parentNode?a.parentNode.removeChild(a):a):e.appendChild(a):void 0},g=0;null!=(h=k[g]);g++)a.nodeName(h,"script")&&i(h)||(e.appendChild(h),"undefined"!=typeof h.getElementsByTagName&&(j=a.grep(a.merge([],h.getElementsByTagName("script")),i),k.splice.apply(k,[g+1,0].concat(j)),g+=j.length));return k});var y=a.event.add,z=a.event.remove,A=a.event.trigger,B=a.fn.toggle,C=a.fn.live,D=a.fn.die,E=a.fn.load,F="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",G=new RegExp("\\b(?:"+F+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,I=function(b){return"string"!=typeof b||a.event.special.hover?b:(H.test(b)&&d("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),b&&b.replace(H,"mouseenter$1 mouseleave$1"))};a.event.props&&"attrChange"!==a.event.props[0]&&a.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),a.event.dispatch&&e(a.event,"handle",a.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),a.event.add=function(a,b,c,e,f){a!==document&&G.test(b)&&d("AJAX events should be attached to document: "+b),y.call(this,a,I(b||""),c,e,f)},a.event.remove=function(a,b,c,d,e){z.call(this,a,I(b)||"",c,d,e)},a.each(["load","unload","error"],function(b,c){a.fn[c]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===c&&"string"==typeof a[0]?E.apply(this,a):(d("jQuery.fn."+c+"() is deprecated"),a.splice(0,0,c),arguments.length?this.bind.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a.fn.toggle=function(b,c){if(!a.isFunction(b)||!a.isFunction(c))return B.apply(this,arguments);d("jQuery.fn.toggle(handler, handler...) is deprecated");var e=arguments,f=b.guid||a.guid++,g=0,h=function(c){var d=(a._data(this,"lastToggle"+b.guid)||0)%g;return a._data(this,"lastToggle"+b.guid,d+1),c.preventDefault(),e[d].apply(this,arguments)||!1};for(h.guid=f;g<e.length;)e[g++].guid=f;return this.click(h)},a.fn.live=function(b,c,e){return d("jQuery.fn.live() is deprecated"),C?C.apply(this,arguments):(a(this.context).on(b,this.selector,c,e),this)},a.fn.die=function(b,c){return d("jQuery.fn.die() is deprecated"),D?D.apply(this,arguments):(a(this.context).off(b,this.selector||"**",c),this)},a.event.trigger=function(a,b,c,e){return c||G.test(a)||d("Global events are undocumented and deprecated"),A.call(this,a,b,c||document,e)},a.each(F.split("|"),function(b,c){a.event.special[c]={setup:function(){var b=this;return b!==document&&(a.event.add(document,c+"."+a.guid,function(){a.event.trigger(c,Array.prototype.slice.call(arguments,1),b,!0)}),a._data(this,c,a.guid++)),!1},teardown:function(){return this!==document&&a.event.remove(document,c+"."+a._data(this,c)),!1}}}),a.event.special.ready={setup:function(){this===document&&d("'ready' event is deprecated")}};var J=a.fn.andSelf||a.fn.addBack,K=a.fn.find;if(a.fn.andSelf=function(){return d("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),J.apply(this,arguments)},a.fn.find=function(a){var b=K.apply(this,arguments);return b.context=this.context,b.selector=this.selector?this.selector+" "+a:a,b},a.Callbacks){var L=a.Deferred,M=[["resolve","done",a.Callbacks("once memory"),a.Callbacks("once memory"),"resolved"],["reject","fail",a.Callbacks("once memory"),a.Callbacks("once memory"),"rejected"],["notify","progress",a.Callbacks("memory"),a.Callbacks("memory")]];a.Deferred=function(b){var c=L(),e=c.promise();return c.pipe=e.pipe=function(){var b=arguments;return d("deferred.pipe() is deprecated"),a.Deferred(function(d){a.each(M,function(f,g){var h=a.isFunction(b[f])&&b[f];c[g[1]](function(){var b=h&&h.apply(this,arguments);b&&a.isFunction(b.promise)?b.promise().done(d.resolve).fail(d.reject).progress(d.notify):d[g[0]+"With"](this===e?d.promise():this,h?[b]:arguments)})}),b=null}).promise()},c.isResolved=function(){return d("deferred.isResolved is deprecated"),"resolved"===c.state()},c.isRejected=function(){return d("deferred.isRejected is deprecated"),"rejected"===c.state()},b&&b.call(c,c),c}}}(jQuery,window);
+/*! jQuery UI - v1.10.0 - 2013-01-18
* http://jqueryui.com
* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
@@ -14853,6 +14855,7 @@ $.effects.effect.transfer = function( o, done ) {
};
})(jQuery);
+
// Underscore.js 1.8.3
// http://underscorejs.org
// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
@@ -16401,6 +16404,7 @@ $.effects.effect.transfer = function( o, done ) {
});
}
}.call(this));
+
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return re.apply(null,arguments)}function b(a){re=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a)return!1;return!0}function f(a){return void 0===a}function g(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function h(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function i(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function j(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function k(a,b){for(var c in b)j(b,c)&&(a[c]=b[c]);return j(b,"toString")&&(a.toString=b.toString),j(b,"valueOf")&&(a.valueOf=b.valueOf),a}function l(a,b,c,d){return sb(a,b,c,d,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function n(a){return null==a._pf&&(a._pf=m()),a._pf}function o(a){if(null==a._isValid){var b=n(a),c=te.call(b.parsedDateParts,function(a){return null!=a}),d=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c);if(a._strict&&(d=d&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour),null!=Object.isFrozen&&Object.isFrozen(a))return d;a._isValid=d}return a._isValid}function p(a){var b=l(NaN);return null!=a?k(n(b),a):n(b).userInvalidated=!0,b}function q(a,b){var c,d,e;if(f(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),f(b._i)||(a._i=b._i),f(b._f)||(a._f=b._f),f(b._l)||(a._l=b._l),f(b._strict)||(a._strict=b._strict),f(b._tzm)||(a._tzm=b._tzm),f(b._isUTC)||(a._isUTC=b._isUTC),f(b._offset)||(a._offset=b._offset),f(b._pf)||(a._pf=n(b)),f(b._locale)||(a._locale=b._locale),ue.length>0)for(c=0;c<ue.length;c++)d=ue[c],e=b[d],f(e)||(a[d]=e);return a}function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),ve===!1&&(ve=!0,a.updateOffset(this),ve=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c}function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d<e;d++)(c&&a[d]!==b[d]||!c&&u(a[d])!==u(b[d]))&&g++;return g+f}function w(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function x(b,c){var d=!0;return k(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,b),d){for(var e,f=[],g=0;g<arguments.length;g++){if(e="","object"==typeof arguments[g]){e+="\n["+g+"] ";for(var h in arguments[0])e+=h+": "+arguments[0][h]+", ";e=e.slice(0,-2)}else e=arguments[g];f.push(e)}w(b+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),d=!1}return c.apply(this,arguments)},c)}function y(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),we[b]||(w(c),we[b]=!0)}function z(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function A(a){var b,c;for(c in a)b=a[c],z(b)?this[c]=b:this["_"+c]=b;this._config=a,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function B(a,b){var c,e=k({},a);for(c in b)j(b,c)&&(d(a[c])&&d(b[c])?(e[c]={},k(e[c],a[c]),k(e[c],b[c])):null!=b[c]?e[c]=b[c]:delete e[c]);for(c in a)j(a,c)&&!j(b,c)&&d(a[c])&&(e[c]=k({},e[c]));return e}function C(a){null!=a&&this.set(a)}function D(a,b,c){var d=this._calendar[a]||this._calendar.sameElse;return z(d)?d.call(b,c):d}function E(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function F(){return this._invalidDate}function G(a){return this._ordinal.replace("%d",a)}function H(a,b,c,d){var e=this._relativeTime[c];return z(e)?e(a,b,c,d):e.replace(/%d/i,a)}function I(a,b){var c=this._relativeTime[a>0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Ge[c]=Ge[c+"s"]=Ge[b]=a}function K(a){return"string"==typeof a?Ge[a]||Ge[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)j(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){He[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:He[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d<c.length;d++)this[c[d].unit](a[c[d].unit])}else if(a=K(a),z(this[a]))return this[a](b);return this}function T(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Le[a]=e),b&&(Le[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Le[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Ie);for(b=0,c=d.length;b<c;b++)Le[d[b]]?d[b]=Le[d[b]]:d[b]=V(d[b]);return function(b){var e,f="";for(e=0;e<c;e++)f+=z(d[e])?d[e].call(b,a):d[e];return f}}function X(a,b){return a.isValid()?(b=Y(b,a.localeData()),Ke[b]=Ke[b]||W(b),Ke[b](a)):a.localeData().invalidDate()}function Y(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Je.lastIndex=0;d>=0&&Je.test(a);)a=a.replace(Je,c),Je.lastIndex=0,d-=1;return a}function Z(a,b,c){bf[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return j(bf,a)?bf[a](b._strict,b._locale):new RegExp(_(a))}function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),g(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c<a.length;c++)cf[a[c]]=d}function ca(a,b){ba(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function da(a,b,c){null!=b&&j(cf,a)&&cf[a](b,c._a,c,a)}function ea(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function fa(a,b){return a?c(this._months)?this._months[a.month()]:this._months[(this._months.isFormat||of).test(b)?"format":"standalone"][a.month()]:c(this._months)?this._months:this._months.standalone}function ga(a,b){return a?c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[of.test(b)?"format":"standalone"][a.month()]:c(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ha(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)f=l([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=nf.call(this._shortMonthsParse,g),e!==-1?e:null):(e=nf.call(this._longMonthsParse,g),e!==-1?e:null):"MMM"===b?(e=nf.call(this._shortMonthsParse,g),e!==-1?e:(e=nf.call(this._longMonthsParse,g),e!==-1?e:null)):(e=nf.call(this._longMonthsParse,g),e!==-1?e:(e=nf.call(this._shortMonthsParse,g),e!==-1?e:null))}function ia(a,b,c){var d,e,f;if(this._monthsParseExact)return ha.call(this,a,b,c);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){if(e=l([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function ja(a,b){var c;if(!a.isValid())return a;if("string"==typeof b)if(/^\d+$/.test(b))b=u(b);else if(b=a.localeData().monthsParse(b),!g(b))return a;return c=Math.min(a.date(),ea(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ka(b){return null!=b?(ja(this,b),a.updateOffset(this,!0),this):P(this,"Month")}function la(){return ea(this.year(),this.month())}function ma(a){return this._monthsParseExact?(j(this,"_monthsRegex")||oa.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):(j(this,"_monthsShortRegex")||(this._monthsShortRegex=rf),this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex)}function na(a){return this._monthsParseExact?(j(this,"_monthsRegex")||oa.call(this),a?this._monthsStrictRegex:this._monthsRegex):(j(this,"_monthsRegex")||(this._monthsRegex=sf),this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex)}function oa(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;b<12;b++)c=l([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(d.sort(a),e.sort(a),f.sort(a),b=0;b<12;b++)d[b]=aa(d[b]),e[b]=aa(e[b]);for(b=0;b<24;b++)f[b]=aa(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}function pa(a){return qa(a)?366:365}function qa(a){return a%4===0&&a%100!==0||a%400===0}function ra(){return qa(this.year())}function sa(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return a<100&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments));return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}function ua(a,b,c){var d=7+b-c,e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1}function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7}function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy}function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:c(this._weekdays)?this._weekdays:this._weekdays.standalone}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=l([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=nf.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=nf.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=nf.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=nf.call(this._weekdaysParse,g),e!==-1?e:(e=nf.call(this._shortWeekdaysParse,g),e!==-1?e:(e=nf.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=nf.call(this._shortWeekdaysParse,g),e!==-1?e:(e=nf.call(this._weekdaysParse,g),e!==-1?e:(e=nf.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=nf.call(this._minWeekdaysParse,g),e!==-1?e:(e=nf.call(this._weekdaysParse,g),e!==-1?e:(e=nf.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){if(e=l([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN;if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(j(this,"_weekdaysRegex")||(this._weekdaysRegex=yf),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(j(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=zf),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(j(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(j(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Af),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++)c=l([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for(g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Ua(a,b){return b._meridiemParse}function Va(a){return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a}function Ya(a){for(var b,c,d,e,f=0;f<a.length;){for(e=Xa(a[f]).split("-"),b=e.length,c=Xa(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function Za(a){var b=null;if(!Ff[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Bf._abbr,require("./locale/"+a),$a(b)}catch(a){}return Ff[a]}function $a(a,b){var c;return a&&(c=f(b)?bb(a):_a(a,b),c&&(Bf=c)),Bf._abbr}function _a(a,b){if(null!==b){var c=Ef;if(b.abbr=a,null!=Ff[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=Ff[a]._config;else if(null!=b.parentLocale){if(null==Ff[b.parentLocale])return Gf[b.parentLocale]||(Gf[b.parentLocale]=[]),Gf[b.parentLocale].push({name:a,config:b}),null;c=Ff[b.parentLocale]._config}return Ff[a]=new C(B(c,b)),Gf[a]&&Gf[a].forEach(function(a){_a(a.name,a.config)}),$a(a),Ff[a]}return delete Ff[a],null}function ab(a,b){if(null!=b){var c,d=Ef;null!=Ff[a]&&(d=Ff[a]._config),b=B(d,b),c=new C(b),c.parentLocale=Ff[a],Ff[a]=c,$a(a)}else null!=Ff[a]&&(null!=Ff[a].parentLocale?Ff[a]=Ff[a].parentLocale:null!=Ff[a]&&delete Ff[a]);return Ff[a]}function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Bf;if(!c(a)){if(b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return ze(Ff)}function db(a){var b,c=a._a;return c&&n(a).overflow===-2&&(b=c[ef]<0||c[ef]>11?ef:c[ff]<1||c[ff]>ea(c[df],c[ef])?ff:c[gf]<0||c[gf]>24||24===c[gf]&&(0!==c[hf]||0!==c[jf]||0!==c[kf])?gf:c[hf]<0||c[hf]>59?hf:c[jf]<0||c[jf]>59?jf:c[kf]<0||c[kf]>999?kf:-1,n(a)._overflowDayOfYear&&(b<df||b>ff)&&(b=ff),n(a)._overflowWeeks&&b===-1&&(b=lf),n(a)._overflowWeekday&&b===-1&&(b=mf),n(a).overflow=b),a}function eb(a){var b,c,d,e,f,g,h=a._i,i=Hf.exec(h)||If.exec(h);if(i){for(n(a).iso=!0,b=0,c=Kf.length;b<c;b++)if(Kf[b][1].exec(i[1])){e=Kf[b][0],d=Kf[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=Lf.length;b<c;b++)if(Lf[b][1].exec(i[3])){f=(i[2]||" ")+Lf[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Jf.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),lb(a)}else a._isValid=!1}function fb(a){var b,c,d,e,f,g,h,i,j={" GMT":" +0000"," EDT":" -0400"," EST":" -0500"," CDT":" -0500"," CST":" -0600"," MDT":" -0600"," MST":" -0700"," PDT":" -0700"," PST":" -0800"},k="YXWVUTSRQPONZABCDEFGHIKLM";if(b=a._i.replace(/\([^\)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s|\s$/g,""),c=Nf.exec(b)){if(d=c[1]?"ddd"+(5===c[1].length?", ":" "):"",e="D MMM "+(c[2].length>10?"YYYY ":"YY "),f="HH:mm"+(c[4]?":ss":""),c[1]){var l=new Date(c[2]),m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][l.getDay()];if(c[1].substr(0,3)!==m)return n(a).weekdayMismatch=!0,void(a._isValid=!1)}switch(c[5].length){case 2:0===i?h=" +0000":(i=k.indexOf(c[5][1].toUpperCase())-12,h=(i<0?" -":" +")+(""+i).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:h=j[c[5]];break;default:h=j[" GMT"]}c[5]=h,a._i=c.splice(1).join(""),g=" ZZ",a._f=d+e+f+g,lb(a),n(a).rfc2822=!0}else a._isValid=!1}function gb(b){var c=Mf.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(eb(b),void(b._isValid===!1&&(delete b._isValid,fb(b),b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b)))))}function hb(a,b,c){return null!=a?a:null!=b?b:c}function ib(b){var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}function jb(a){var b,c,d,e,f=[];if(!a._d){for(d=ib(a),a._w&&null==a._a[ff]&&null==a._a[ef]&&kb(a),null!=a._dayOfYear&&(e=hb(a._a[df],d[df]),(a._dayOfYear>pa(e)||0===a._dayOfYear)&&(n(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[ef]=c.getUTCMonth(),a._a[ff]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[gf]&&0===a._a[hf]&&0===a._a[jf]&&0===a._a[kf]&&(a._nextDay=!0,a._a[gf]=0),a._d=(a._useUTC?ta:sa).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[gf]=24)}}function kb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4,c=hb(b.GG,a._a[df],wa(tb(),1,4).year),d=hb(b.W,1),e=hb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(tb(),f,g);c=hb(b.gg,a._a[df],j.year),d=hb(b.w,j.week),null!=b.d?(e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?(e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):e=f}d<1||d>xa(c,f,g)?n(a)._overflowWeeks=!0:null!=i?n(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[df]=h.year,a._dayOfYear=h.dayOfYear)}function lb(b){if(b._f===a.ISO_8601)return void eb(b);if(b._f===a.RFC_2822)return void fb(b);b._a=[],n(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Ie)||[],c=0;c<e.length;c++)f=e[c],d=(h.match($(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&n(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),Le[f]?(d?n(b).empty=!1:n(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&n(b).unusedTokens.push(f);n(b).charsLeftOver=i-j,h.length>0&&n(b).unusedInput.push(h),b._a[gf]<=12&&n(b).bigHour===!0&&b._a[gf]>0&&(n(b).bigHour=void 0),n(b).parsedDateParts=b._a.slice(0),n(b).meridiem=b._meridiem,b._a[gf]=mb(b._locale,b._a[gf],b._meridiem),jb(b),db(b)}function mb(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b}function nb(a){var b,c,d,e,f;if(0===a._f.length)return n(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e<a._f.length;e++)f=0,b=q({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],lb(b),o(b)&&(f+=n(b).charsLeftOver,f+=10*n(b).unusedTokens.length,n(b).score=f,(null==d||f<d)&&(d=f,c=b));k(a,c||b)}function ob(a){if(!a._d){var b=L(a._i);a._a=i([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),jb(a)}}function pb(a){var b=new r(db(qb(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function qb(a){var b=a._i,d=a._f;return a._locale=a._locale||bb(a._l),null===b||void 0===d&&""===b?p({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),s(b)?new r(db(b)):(h(b)?a._d=b:c(d)?nb(a):d?lb(a):rb(a),o(a)||(a._d=null),a))}function rb(b){var e=b._i;f(e)?b._d=new Date(a.now()):h(e)?b._d=new Date(e.valueOf()):"string"==typeof e?gb(b):c(e)?(b._a=i(e.slice(0),function(a){return parseInt(a,10)}),jb(b)):d(e)?ob(b):g(e)?b._d=new Date(e):a.createFromInputFallback(b)}function sb(a,b,f,g,h){var i={};return f!==!0&&f!==!1||(g=f,f=void 0),(d(a)&&e(a)||c(a)&&0===a.length)&&(a=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=h,i._l=f,i._i=a,i._f=b,i._strict=g,pb(i)}function tb(a,b,c,d){return sb(a,b,c,d,!1)}function ub(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return tb();for(d=b[0],e=1;e<b.length;++e)b[e].isValid()&&!b[e][a](d)||(d=b[e]);return d}function vb(){var a=[].slice.call(arguments,0);return ub("isBefore",a)}function wb(){var a=[].slice.call(arguments,0);return ub("isAfter",a)}function xb(a){for(var b in a)if(Rf.indexOf(b)===-1||null!=a[b]&&isNaN(a[b]))return!1;for(var c=!1,d=0;d<Rf.length;++d)if(a[Rf[d]]){if(c)return!1;parseFloat(a[Rf[d]])!==u(a[Rf[d]])&&(c=!0)}return!0}function yb(){return this._isValid}function zb(){return Sb(NaN)}function Ab(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._isValid=xb(b),this._milliseconds=+k+1e3*j+6e4*i+1e3*h*60*60,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=bb(),this._bubble()}function Bb(a){return a instanceof Ab}function Cb(a){return a<0?Math.round(-1*a)*-1:Math.round(a)}function Db(a,b){U(a,0,0,function(){var a=this.utcOffset(),c="+";return a<0&&(a=-a,c="-"),c+T(~~(a/60),2)+b+T(~~a%60,2)})}function Eb(a,b){var c=(b||"").match(a);if(null===c)return null;var d=c[c.length-1]||[],e=(d+"").match(Sf)||["-",0,0],f=+(60*e[1])+u(e[2]);return 0===f?0:"+"===e[0]?f:-f}function Fb(b,c){var d,e;return c._isUTC?(d=c.clone(),e=(s(b)||h(b)?b.valueOf():tb(b).valueOf())-d.valueOf(),d._d.setTime(d._d.valueOf()+e),a.updateOffset(d,!1),d):tb(b).local()}function Gb(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Hb(b,c,d){var e,f=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Eb($e,b),null===b)return this}else Math.abs(b)<16&&!d&&(b=60*b);return!this._isUTC&&c&&(e=Gb(this)),this._offset=b,this._isUTC=!0,null!=e&&this.add(e,"m"),f!==b&&(!c||this._changeInProgress?Xb(this,Sb(b-f,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?f:Gb(this)}function Ib(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Jb(a){return this.utcOffset(0,a)}function Kb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Gb(this),"m")),this}function Lb(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var a=Eb(Ze,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Mb(a){return!!this.isValid()&&(a=a?tb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Nb(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ob(){if(!f(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=qb(a),a._a){var b=a._isUTC?l(a._a):tb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Pb(){return!!this.isValid()&&!this._isUTC}function Qb(){return!!this.isValid()&&this._isUTC}function Rb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Sb(a,b){var c,d,e,f=a,h=null;return Bb(a)?f={ms:a._milliseconds,d:a._days,M:a._months}:g(a)?(f={},b?f[b]=a:f.milliseconds=a):(h=Tf.exec(a))?(c="-"===h[1]?-1:1,f={y:0,d:u(h[ff])*c,h:u(h[gf])*c,m:u(h[hf])*c,s:u(h[jf])*c,ms:u(Cb(1e3*h[kf]))*c}):(h=Uf.exec(a))?(c="-"===h[1]?-1:1,f={y:Tb(h[2],c),M:Tb(h[3],c),w:Tb(h[4],c),d:Tb(h[5],c),h:Tb(h[6],c),m:Tb(h[7],c),s:Tb(h[8],c)}):null==f?f={}:"object"==typeof f&&("from"in f||"to"in f)&&(e=Vb(tb(f.from),tb(f.to)),f={},f.ms=e.milliseconds,f.M=e.months),d=new Ab(f),Bb(a)&&j(a,"_locale")&&(d._locale=a._locale),d}function Tb(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function Ub(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Vb(a,b){var c;return a.isValid()&&b.isValid()?(b=Fb(b,a),a.isBefore(b)?c=Ub(a,b):(c=Ub(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}function Wb(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Sb(c,d),Xb(this,e,a),this}}function Xb(b,c,d,e){var f=c._milliseconds,g=Cb(c._days),h=Cb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Yb(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Zb(b,c){var d=b||tb(),e=Fb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,tb(d)))}function $b(){return new r(this)}function _b(a,b){var c=s(a)?a:tb(a);return!(!this.isValid()||!c.isValid())&&(b=K(f(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(b).valueOf())}function ac(a,b){var c=s(a)?a:tb(a);return!(!this.isValid()||!c.isValid())&&(b=K(f(b)?"millisecond":b),"millisecond"===b?this.valueOf()<c.valueOf():this.clone().endOf(b).valueOf()<c.valueOf())}function bc(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function cc(a,b){var c,d=s(a)?a:tb(a);return!(!this.isValid()||!d.isValid())&&(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf()))}function dc(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function ec(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function fc(a,b,c){var d,e,f,g;return this.isValid()?(d=Fb(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=gc(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:t(g)):NaN):NaN}function gc(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return b-f<0?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function hc(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ic(){if(!this.isValid())return null;var a=this.clone().utc();return a.year()<0||a.year()>9999?X(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):z(Date.prototype.toISOString)?this.toDate().toISOString():X(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function jc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var a="moment",b="";this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",b="Z");var c="["+a+'("]',d=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",e="-MM-DD[T]HH:mm:ss.SSS",f=b+'[")]';return this.format(c+d+e+f)}function kc(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=X(this,b);return this.localeData().postformat(c)}function lc(a,b){return this.isValid()&&(s(a)&&a.isValid()||tb(a).isValid())?Sb({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function mc(a){return this.from(tb(),a)}function nc(a,b){return this.isValid()&&(s(a)&&a.isValid()||tb(a).isValid())?Sb({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function oc(a){return this.to(tb(),a)}function pc(a){var b;return void 0===a?this._locale._abbr:(b=bb(a),null!=b&&(this._locale=b),this)}function qc(){return this._locale}function rc(a){switch(a=K(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function sc(a){return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function tc(){return this._d.valueOf()-6e4*(this._offset||0)}function uc(){return Math.floor(this.valueOf()/1e3)}function vc(){return new Date(this.valueOf())}function wc(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function xc(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function yc(){return this.isValid()?this.toISOString():null}function zc(){return o(this)}function Ac(){
return k({},n(this))}function Bc(){return n(this).overflow}function Cc(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Dc(a,b){U(0,[a,a.length],0,b)}function Ec(a){return Ic.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Fc(a){return Ic.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Gc(){return xa(this.year(),1,4)}function Hc(){var a=this.localeData()._week;return xa(this.year(),a.dow,a.doy)}function Ic(a,b,c,d,e){var f;return null==a?wa(this,d,e).year:(f=xa(a,d,e),b>f&&(b=f),Jc.call(this,a,b,c,d,e))}function Jc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}function Kc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Lc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Mc(a,b){b[kf]=u(1e3*("0."+a))}function Nc(){return this._isUTC?"UTC":""}function Oc(){return this._isUTC?"Coordinated Universal Time":""}function Pc(a){return tb(1e3*a)}function Qc(){return tb.apply(null,arguments).parseZone()}function Rc(a){return a}function Sc(a,b,c,d){var e=bb(),f=l().set(d,b);return e[c](f,a)}function Tc(a,b,c){if(g(a)&&(b=a,a=void 0),a=a||"",null!=b)return Sc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Sc(a,d,c,"month");return e}function Uc(a,b,c,d){"boolean"==typeof a?(g(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,g(b)&&(c=b,b=void 0),b=b||"");var e=bb(),f=a?e._week.dow:0;if(null!=c)return Sc(b,(c+f)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Sc(b,(h+f)%7,d,"day");return i}function Vc(a,b){return Tc(a,b,"months")}function Wc(a,b){return Tc(a,b,"monthsShort")}function Xc(a,b,c){return Uc(a,b,c,"weekdays")}function Yc(a,b,c){return Uc(a,b,c,"weekdaysShort")}function Zc(a,b,c){return Uc(a,b,c,"weekdaysMin")}function $c(){var a=this._data;return this._milliseconds=dg(this._milliseconds),this._days=dg(this._days),this._months=dg(this._months),a.milliseconds=dg(a.milliseconds),a.seconds=dg(a.seconds),a.minutes=dg(a.minutes),a.hours=dg(a.hours),a.months=dg(a.months),a.years=dg(a.years),this}function _c(a,b,c,d){var e=Sb(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function ad(a,b){return _c(this,a,b,1)}function bd(a,b){return _c(this,a,b,-1)}function cd(a){return a<0?Math.floor(a):Math.ceil(a)}function dd(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*cd(fd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ed(g)),h+=e,g-=cd(fd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ed(a){return 4800*a/146097}function fd(a){return 146097*a/4800}function gd(a){if(!this.isValid())return NaN;var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ed(b),"month"===a?c:c/12;switch(b=this._days+Math.round(fd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function hd(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12):NaN}function id(a){return function(){return this.as(a)}}function jd(a){return a=K(a),this.isValid()?this[a+"s"]():NaN}function kd(a){return function(){return this.isValid()?this._data[a]:NaN}}function ld(){return t(this.days()/7)}function md(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function nd(a,b,c){var d=Sb(a).abs(),e=tg(d.as("s")),f=tg(d.as("m")),g=tg(d.as("h")),h=tg(d.as("d")),i=tg(d.as("M")),j=tg(d.as("y")),k=e<=ug.ss&&["s",e]||e<ug.s&&["ss",e]||f<=1&&["m"]||f<ug.m&&["mm",f]||g<=1&&["h"]||g<ug.h&&["hh",g]||h<=1&&["d"]||h<ug.d&&["dd",h]||i<=1&&["M"]||i<ug.M&&["MM",i]||j<=1&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,md.apply(null,k)}function od(a){return void 0===a?tg:"function"==typeof a&&(tg=a,!0)}function pd(a,b){return void 0!==ug[a]&&(void 0===b?ug[a]:(ug[a]=b,"s"===a&&(ug.ss=b-1),!0))}function qd(a){if(!this.isValid())return this.localeData().invalidDate();var b=this.localeData(),c=nd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function rd(){if(!this.isValid())return this.localeData().invalidDate();var a,b,c,d=vg(this._milliseconds)/1e3,e=vg(this._days),f=vg(this._months);a=t(d/60),b=t(a/60),d%=60,a%=60,c=t(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}
//! moment.js locale configuration
@@ -16905,7 +16909,8 @@ var Th=["جنوری","فروری","مارچ","اپریل","مئی","جون","ج
//! locale : Chinese (Taiwan) [zh-tw]
//! author : Ben : https://github.com/ben-lin
//! author : Chris Lam : https://github.com/hehachris
-return a.defineLocale("ur",{months:Th,monthsShort:Th,weekdays:Uh,weekdaysShort:Uh,weekdaysMin:Uh,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(a){return"شام"===a},meridiem:function(a,b,c){return a<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:1,doy:4}}),a.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),a.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}}),a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),a.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),a.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}}),a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}}),a.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.locale("en"),a});/*!
+return a.defineLocale("ur",{months:Th,monthsShort:Th,weekdays:Uh,weekdaysShort:Uh,weekdaysMin:Uh,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(a){return"شام"===a},meridiem:function(a,b,c){return a<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:1,doy:4}}),a.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),a.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}}),a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,doy:4}}),a.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,doy:4}}),a.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}}),a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}}),a.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.locale("en"),a});
+/*!
handlebars v4.0.5
@@ -21512,7 +21517,8 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ }
/******/ ])
});
-;/*
+;
+/*
* JavaScript MD5 1.0.1
* https://github.com/blueimp/JavaScript-MD5
*
@@ -21786,6 +21792,7 @@ return /******/ (function(modules) { // webpackBootstrap
$.md5 = md5;
}
}(this));
+
/* ========================================================================
* Bootstrap: tooltip.js v3.3.6
* http://getbootstrap.com/javascript/#tooltip
@@ -22300,6 +22307,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
}(jQuery);
+
// Backbone.js 1.2.3
// (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
@@ -24194,6 +24202,7 @@ return /******/ (function(modules) { // webpackBootstrap
return Backbone;
}));
+
/*!
* @overview es6-promise - a tiny implementation of Promises/A+.
* @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
@@ -25166,6 +25175,7 @@ return /******/ (function(modules) { // webpackBootstrap
lib$es6$promise$polyfill$$default();
}).call(this);
+
/*
* vim: expandtab shiftwidth=4 softtabstop=4
*/
@@ -25621,275 +25631,23 @@ dav.Client.prototype = {
};
+
/*!
* clipboard.js v1.6.1
* https://zenorocha.github.io/clipboard.js
*
* Licensed MIT © Zeno Rocha
*/
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e,t,n;return function e(t,n,o){function i(a,c){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!c&&l)return l(a,!0);if(r)return r(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var s=n[a]={exports:{}};t[a][0].call(s.exports,function(e){var n=t[a][1][e];return i(n?n:e)},s,s.exports,e,t,n,o)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a<o.length;a++)i(o[a]);return i}({1:[function(e,t,n){function o(e,t){for(;e&&e.nodeType!==i;){if(e.matches(t))return e;e=e.parentNode}}var i=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=o},{}],2:[function(e,t,n){function o(e,t,n,o,r){var a=i.apply(this,arguments);return e.addEventListener(n,a,r),{destroy:function(){e.removeEventListener(n,a,r)}}}function i(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}var r=e("./closest");t.exports=o},{"./closest":1}],3:[function(e,t,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){var t=Object.prototype.toString.call(e);return"[object Function]"===t}},{}],4:[function(e,t,n){function o(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!c.string(t))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(e))return i(e,t,n);if(c.nodeList(e))return r(e,t,n);if(c.string(e))return a(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}function r(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}function a(e,t,n){return l(document.body,e,t,n)}var c=e("./is"),l=e("delegate");t.exports=o},{"./is":3,delegate:2}],5:[function(e,t,n){function o(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var o=window.getSelection(),i=document.createRange();i.selectNodeContents(e),o.removeAllRanges(),o.addRange(i),t=o.toString()}return t}t.exports=o},{}],6:[function(e,t,n){function o(){}o.prototype={on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function o(){i.off(e,o),t.apply(n,arguments)}var i=this;return o._=t,this.on(e,o,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,i=n.length;for(o;o<i;o++)n[o].fn.apply(n[o].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),o=n[e],i=[];if(o&&t)for(var r=0,a=o.length;r<a;r++)o[r].fn!==t&&o[r].fn._!==t&&i.push(o[r]);return i.length?n[e]=i:delete n[e],this}},t.exports=o},{}],7:[function(t,n,o){!function(i,r){if("function"==typeof e&&e.amd)e(["module","select"],r);else if("undefined"!=typeof o)r(n,t("select"));else{var a={exports:{}};r(a,i.select),i.clipboardAction=a.exports}}(this,function(e,t){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=n(t),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),c=function(){function e(t){o(this,e),this.resolveOptions(t),this.initSelection()}return a(e,[{key:"resolveOptions",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function e(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function e(){var t=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px";var o=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=o+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function e(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function e(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function e(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function e(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function e(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function e(){this.removeFake()}},{key:"action",set:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function e(){return this._action}},{key:"target",set:function e(t){if(void 0!==t){if(!t||"object"!==("undefined"==typeof t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function e(){return this._target}}]),e}();e.exports=c})},{select:5}],8:[function(t,n,o){!function(i,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if("undefined"!=typeof o)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,i.clipboardAction,i.tinyEmitter,i.goodListener),i.clipboard=a.exports}}(this,function(e,t,n,o){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var u=i(t),s=i(n),f=i(o),d=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),h=function(e){function t(e,n){r(this,t);var o=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return o.resolveOptions(n),o.listenClick(e),o}return c(t,e),d(t,[{key:"resolveOptions",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText}},{key:"listenClick",value:function e(t){var n=this;this.listener=(0,f.default)(t,"click",function(e){return n.onClick(e)})}},{key:"onClick",value:function e(t){var n=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})}},{key:"defaultAction",value:function e(t){return l("action",t)}},{key:"defaultTarget",value:function e(t){var n=l("target",t);if(n)return document.querySelector(n)}},{key:"defaultText",value:function e(t){return l("text",t)}},{key:"destroy",value:function e(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],n="string"==typeof t?[t]:t,o=!!document.queryCommandSupported;return n.forEach(function(e){o=o&&!!document.queryCommandSupported(e)}),o}}]),t}(s.default);e.exports=h})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)});/*!
- Autosize 3.0.17
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e,t,n;return function e(t,n,o){function i(a,c){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!c&&l)return l(a,!0);if(r)return r(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var s=n[a]={exports:{}};t[a][0].call(s.exports,function(e){var n=t[a][1][e];return i(n?n:e)},s,s.exports,e,t,n,o)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a<o.length;a++)i(o[a]);return i}({1:[function(e,t,n){function o(e,t){for(;e&&e.nodeType!==i;){if(e.matches(t))return e;e=e.parentNode}}var i=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=o},{}],2:[function(e,t,n){function o(e,t,n,o,r){var a=i.apply(this,arguments);return e.addEventListener(n,a,r),{destroy:function(){e.removeEventListener(n,a,r)}}}function i(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}var r=e("./closest");t.exports=o},{"./closest":1}],3:[function(e,t,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){var t=Object.prototype.toString.call(e);return"[object Function]"===t}},{}],4:[function(e,t,n){function o(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!c.string(t))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(e))return i(e,t,n);if(c.nodeList(e))return r(e,t,n);if(c.string(e))return a(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}function r(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}function a(e,t,n){return l(document.body,e,t,n)}var c=e("./is"),l=e("delegate");t.exports=o},{"./is":3,delegate:2}],5:[function(e,t,n){function o(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var o=window.getSelection(),i=document.createRange();i.selectNodeContents(e),o.removeAllRanges(),o.addRange(i),t=o.toString()}return t}t.exports=o},{}],6:[function(e,t,n){function o(){}o.prototype={on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function o(){i.off(e,o),t.apply(n,arguments)}var i=this;return o._=t,this.on(e,o,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,i=n.length;for(o;o<i;o++)n[o].fn.apply(n[o].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),o=n[e],i=[];if(o&&t)for(var r=0,a=o.length;r<a;r++)o[r].fn!==t&&o[r].fn._!==t&&i.push(o[r]);return i.length?n[e]=i:delete n[e],this}},t.exports=o},{}],7:[function(t,n,o){!function(i,r){if("function"==typeof e&&e.amd)e(["module","select"],r);else if("undefined"!=typeof o)r(n,t("select"));else{var a={exports:{}};r(a,i.select),i.clipboardAction=a.exports}}(this,function(e,t){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=n(t),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),c=function(){function e(t){o(this,e),this.resolveOptions(t),this.initSelection()}return a(e,[{key:"resolveOptions",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function e(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function e(){var t=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px";var o=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=o+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function e(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function e(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function e(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function e(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function e(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function e(){this.removeFake()}},{key:"action",set:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function e(){return this._action}},{key:"target",set:function e(t){if(void 0!==t){if(!t||"object"!==("undefined"==typeof t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function e(){return this._target}}]),e}();e.exports=c})},{select:5}],8:[function(t,n,o){!function(i,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if("undefined"!=typeof o)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,i.clipboardAction,i.tinyEmitter,i.goodListener),i.clipboard=a.exports}}(this,function(e,t,n,o){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var u=i(t),s=i(n),f=i(o),d=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),h=function(e){function t(e,n){r(this,t);var o=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return o.resolveOptions(n),o.listenClick(e),o}return c(t,e),d(t,[{key:"resolveOptions",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText}},{key:"listenClick",value:function e(t){var n=this;this.listener=(0,f.default)(t,"click",function(e){return n.onClick(e)})}},{key:"onClick",value:function e(t){var n=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})}},{key:"defaultAction",value:function e(t){return l("action",t)}},{key:"defaultTarget",value:function e(t){var n=l("target",t);if(n)return document.querySelector(n)}},{key:"defaultText",value:function e(t){return l("text",t)}},{key:"destroy",value:function e(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],n="string"==typeof t?[t]:t,o=!!document.queryCommandSupported;return n.forEach(function(e){o=o&&!!document.queryCommandSupported(e)}),o}}]),t}(s.default);e.exports=h})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)});
+/*!
+ Autosize 3.0.20
license: MIT
http://www.jacklmoore.com/autosize
*/
-(function (global, factory) {
- if (typeof define === 'function' && define.amd) {
- define(['exports', 'module'], factory);
- } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
- factory(exports, module);
- } else {
- var mod = {
- exports: {}
- };
- factory(mod.exports, mod);
- global.autosize = mod.exports;
- }
-})(this, function (exports, module) {
- 'use strict';
-
- var set = typeof Set === 'function' ? new Set() : (function () {
- var list = [];
-
- return {
- has: function has(key) {
- return Boolean(list.indexOf(key) > -1);
- },
- add: function add(key) {
- list.push(key);
- },
- 'delete': function _delete(key) {
- list.splice(list.indexOf(key), 1);
- } };
- })();
-
- var createEvent = function createEvent(name) {
- return new Event(name);
- };
- try {
- new Event('test');
- } catch (e) {
- // IE does not support `new Event()`
- createEvent = function (name) {
- var evt = document.createEvent('Event');
- evt.initEvent(name, true, false);
- return evt;
- };
- }
-
- function assign(ta) {
- if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || set.has(ta)) return;
-
- var heightOffset = null;
- var clientWidth = ta.clientWidth;
- var cachedHeight = null;
-
- function init() {
- var style = window.getComputedStyle(ta, null);
-
- if (style.resize === 'vertical') {
- ta.style.resize = 'none';
- } else if (style.resize === 'both') {
- ta.style.resize = 'horizontal';
- }
-
- if (style.boxSizing === 'content-box') {
- heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
- } else {
- heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
- }
- // Fix when a textarea is not on document body and heightOffset is Not a Number
- if (isNaN(heightOffset)) {
- heightOffset = 0;
- }
-
- update();
- }
-
- function changeOverflow(value) {
- {
- // Chrome/Safari-specific fix:
- // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
- // made available by removing the scrollbar. The following forces the necessary text reflow.
- var width = ta.style.width;
- ta.style.width = '0px';
- // Force reflow:
- /* jshint ignore:start */
- ta.offsetWidth;
- /* jshint ignore:end */
- ta.style.width = width;
- }
-
- ta.style.overflowY = value;
-
- resize();
- }
-
- function getParentOverflows(el) {
- var arr = [];
-
- while (el && el.parentNode && el.parentNode instanceof Element) {
- if (el.parentNode.scrollTop) {
- arr.push({
- node: el.parentNode,
- scrollTop: el.parentNode.scrollTop });
- }
- el = el.parentNode;
- }
-
- return arr;
- }
-
- function resize() {
- var originalHeight = ta.style.height;
- var overflows = getParentOverflows(ta);
- var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
-
- ta.style.height = 'auto';
-
- var endHeight = ta.scrollHeight + heightOffset;
-
- if (ta.scrollHeight === 0) {
- // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
- ta.style.height = originalHeight;
- return;
- }
-
- ta.style.height = endHeight + 'px';
-
- // used to check if an update is actually necessary on window.resize
- clientWidth = ta.clientWidth;
-
- // prevents scroll-position jumping
- overflows.forEach(function (el) {
- el.node.scrollTop = el.scrollTop;
- });
-
- if (docTop) {
- document.documentElement.scrollTop = docTop;
- }
- }
-
- function update() {
- resize();
-
- var computed = window.getComputedStyle(ta, null);
- var computedHeight = Math.round(parseFloat(computed.height));
- var styleHeight = Math.round(parseFloat(ta.style.height));
-
- // The computed height not matching the height set via resize indicates that
- // the max-height has been exceeded, in which case the overflow should be set to visible.
- if (computedHeight !== styleHeight) {
- if (computed.overflowY !== 'visible') {
- changeOverflow('visible');
- }
- } else {
- // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
- if (computed.overflowY !== 'hidden') {
- changeOverflow('hidden');
- }
- }
-
- if (cachedHeight !== computedHeight) {
- cachedHeight = computedHeight;
- var evt = createEvent('autosize:resized');
- ta.dispatchEvent(evt);
- }
- }
-
- var pageResize = function pageResize() {
- if (ta.clientWidth !== clientWidth) {
- update();
- }
- };
-
- var destroy = (function (style) {
- window.removeEventListener('resize', pageResize, false);
- ta.removeEventListener('input', update, false);
- ta.removeEventListener('keyup', update, false);
- ta.removeEventListener('autosize:destroy', destroy, false);
- ta.removeEventListener('autosize:update', update, false);
- set['delete'](ta);
-
- Object.keys(style).forEach(function (key) {
- ta.style[key] = style[key];
- });
- }).bind(ta, {
- height: ta.style.height,
- resize: ta.style.resize,
- overflowY: ta.style.overflowY,
- overflowX: ta.style.overflowX,
- wordWrap: ta.style.wordWrap });
-
- ta.addEventListener('autosize:destroy', destroy, false);
-
- // IE9 does not fire onpropertychange or oninput for deletions,
- // so binding to onkeyup to catch most of those events.
- // There is no way that I know of to detect something like 'cut' in IE9.
- if ('onpropertychange' in ta && 'oninput' in ta) {
- ta.addEventListener('keyup', update, false);
- }
-
- window.addEventListener('resize', pageResize, false);
- ta.addEventListener('input', update, false);
- ta.addEventListener('autosize:update', update, false);
- set.add(ta);
- ta.style.overflowX = 'hidden';
- ta.style.wordWrap = 'break-word';
-
- init();
- }
-
- function destroy(ta) {
- if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
- var evt = createEvent('autosize:destroy');
- ta.dispatchEvent(evt);
- }
-
- function update(ta) {
- if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
- var evt = createEvent('autosize:update');
- ta.dispatchEvent(evt);
- }
-
- var autosize = null;
-
- // Do nothing in Node.js environment and IE8 (or lower)
- if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
- autosize = function (el) {
- return el;
- };
- autosize.destroy = function (el) {
- return el;
- };
- autosize.update = function (el) {
- return el;
- };
- } else {
- autosize = function (el, options) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], function (x) {
- return assign(x, options);
- });
- }
- return el;
- };
- autosize.destroy = function (el) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], destroy);
- }
- return el;
- };
- autosize.update = function (el) {
- if (el) {
- Array.prototype.forEach.call(el.length ? el : [el], update);
- }
- return el;
- };
- }
-
- module.exports = autosize;
-});(function(e){"use strict";var t=typeof window==="undefined"?null:window;if(typeof define==="function"&&define.amd){define(function(){return e(t)})}else if(typeof module!=="undefined"){module.exports=e(t)}else{t.DOMPurify=e(t)}})(function e(t){"use strict";var r=function(t){return e(t)};r.version="0.8.5";r.removed=[];if(!t||!t.document||t.document.nodeType!==9){r.isSupported=false;return r}var n=t.document;var a=n;var i=t.DocumentFragment;var o=t.HTMLTemplateElement;var l=t.Node;var s=t.NodeFilter;var f=t.NamedNodeMap||t.MozNamedAttrMap;var c=t.Text;var u=t.Comment;var d=t.DOMParser;if(typeof o==="function"){var m=n.createElement("template");if(m.content&&m.content.ownerDocument){n=m.content.ownerDocument}}var p=n.implementation;var v=n.createNodeIterator;var h=n.getElementsByTagName;var g=n.createDocumentFragment;var y=a.importNode;var b={};r.isSupported=typeof p.createHTMLDocument!=="undefined"&&n.documentMode!==9;var T=function(e,t){var r=t.length;while(r--){if(typeof t[r]==="string"){t[r]=t[r].toLowerCase()}e[t[r]]=true}return e};var A=function(e){var t={};var r;for(r in e){if(e.hasOwnProperty(r)){t[r]=e[r]}}return t};var x=null;var k=T({},["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr","svg","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","switch","symbol","text","textpath","title","tref","tspan","view","vkern","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmuliscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mpspace","msqrt","mystyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","#text"]);var w=null;var E=T({},["accept","action","align","alt","autocomplete","background","bgcolor","border","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","coords","datetime","default","dir","disabled","download","enctype","face","for","headers","height","hidden","high","href","hreflang","id","ismap","label","lang","list","loop","low","max","maxlength","media","method","min","multiple","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","rows","rowspan","spellcheck","scope","selected","shape","size","span","srclang","start","src","step","style","summary","tabindex","title","type","usemap","valign","value","width","xmlns","accent-height","accumulate","additivive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mode","min","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","surfacescale","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","u1","u2","unicode","values","viewbox","visibility","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","y","y1","y2","z","zoomandpan","accent","accentunder","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","display","displaystyle","fence","frame","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]);var S=null;var N=null;var D=true;var M=false;var O=false;var L=false;var _=/\{\{[\s\S]*|[\s\S]*\}\}/gm;var C=/<%[\s\S]*|[\s\S]*%>/gm;var R=false;var z=false;var F=false;var H=false;var j=true;var B=true;var I=T({},["audio","head","math","script","style","svg","video"]);var W=T({},["audio","video","img","source"]);var G=T({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]);var q=null;var P=n.createElement("form");var U=function(e){if(typeof e!=="object"){e={}}x="ALLOWED_TAGS"in e?T({},e.ALLOWED_TAGS):k;w="ALLOWED_ATTR"in e?T({},e.ALLOWED_ATTR):E;S="FORBID_TAGS"in e?T({},e.FORBID_TAGS):{};N="FORBID_ATTR"in e?T({},e.FORBID_ATTR):{};D=e.ALLOW_DATA_ATTR!==false;M=e.ALLOW_UNKNOWN_PROTOCOLS||false;O=e.SAFE_FOR_JQUERY||false;L=e.SAFE_FOR_TEMPLATES||false;R=e.WHOLE_DOCUMENT||false;z=e.RETURN_DOM||false;F=e.RETURN_DOM_FRAGMENT||false;H=e.RETURN_DOM_IMPORT||false;j=e.SANITIZE_DOM!==false;B=e.KEEP_CONTENT!==false;if(L){D=false}if(F){z=true}if(e.ADD_TAGS){if(x===k){x=A(x)}T(x,e.ADD_TAGS)}if(e.ADD_ATTR){if(w===E){w=A(w)}T(w,e.ADD_ATTR)}if(e.ADD_URI_SAFE_ATTR){T(G,e.ADD_URI_SAFE_ATTR)}if(B){x["#text"]=true}if(Object&&"freeze"in Object){Object.freeze(e)}q=e};var V=function(e){r.removed.push({element:e});try{e.parentNode.removeChild(e)}catch(t){e.outerHTML=""}};var K=function(e,t){r.removed.push({attribute:t.getAttributeNode(e),from:t});t.removeAttribute(e)};var Y=function(e){var t,r;try{t=(new d).parseFromString(e,"text/html")}catch(n){}if(!t||!t.documentElement){t=p.createHTMLDocument("");r=t.body;r.parentNode.removeChild(r.parentNode.firstElementChild);r.outerHTML=e}if(typeof t.getElementsByTagName==="function"){return t.getElementsByTagName(R?"html":"body")[0]}return h.call(t,R?"html":"body")[0]};var J=function(e){return v.call(e.ownerDocument||e,e,s.SHOW_ELEMENT|s.SHOW_COMMENT|s.SHOW_TEXT,function(){return s.FILTER_ACCEPT},false)};var Q=function(e){if(e instanceof c||e instanceof u){return false}if(typeof e.nodeName!=="string"||typeof e.textContent!=="string"||typeof e.removeChild!=="function"||!(e.attributes instanceof f)||typeof e.removeAttribute!=="function"||typeof e.setAttribute!=="function"){return true}return false};var X=function(e){return typeof l==="object"?e instanceof l:e&&typeof e==="object"&&typeof e.nodeType==="number"&&typeof e.nodeName==="string"};var Z=function(e){var t,n;ie("beforeSanitizeElements",e,null);if(Q(e)){V(e);return true}t=e.nodeName.toLowerCase();ie("uponSanitizeElement",e,{tagName:t,allowedTags:x});if(!x[t]||S[t]){if(B&&!I[t]&&typeof e.insertAdjacentHTML==="function"){try{e.insertAdjacentHTML("AfterEnd",e.innerHTML)}catch(a){}}V(e);return true}if(O&&!e.firstElementChild&&(!e.content||!e.content.firstElementChild)&&/</g.test(e.textContent)){r.removed.push({element:e.cloneNode()});e.innerHTML=e.textContent.replace(/</g,"&lt;")}if(L&&e.nodeType===3){n=e.textContent;n=n.replace(_," ");n=n.replace(C," ");if(e.textContent!==n){r.removed.push({element:e.cloneNode()});e.textContent=n}}ie("afterSanitizeElements",e,null);return false};var $=/^data-[\-\w.\u00B7-\uFFFF]/;var ee=/^(?:(?:(?:f|ht)tps?|mailto|tel):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i;var te=/^(?:\w+script|data):/i;var re=/[\x00-\x20\xA0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;var ne=function(e){var a,i,o,l,s,f,c,u;ie("beforeSanitizeAttributes",e,null);f=e.attributes;if(!f){return}c={attrName:"",attrValue:"",keepAttr:true,allowedAttributes:w};u=f.length;while(u--){a=f[u];i=a.name;o=a.value.trim();l=i.toLowerCase();c.attrName=l;c.attrValue=o;c.keepAttr=true;ie("uponSanitizeAttribute",e,c);o=c.attrValue;if(l==="name"&&e.nodeName==="IMG"&&f.id){s=f.id;f=Array.prototype.slice.apply(f);K("id",e);K(i,e);if(f.indexOf(s)>u){e.setAttribute("id",s.value)}}else{if(i==="id"){e.setAttribute(i,"")}K(i,e)}if(!c.keepAttr){continue}if(j&&(l==="id"||l==="name")&&(o in t||o in n||o in P)){continue}if(L){o=o.replace(_," ");o=o.replace(C," ")}if(D&&$.test(l)){}else if(!w[l]||N[l]){continue}else if(G[l]){}else if(ee.test(o.replace(re,""))){}else if(l==="src"&&o.indexOf("data:")===0&&W[e.nodeName.toLowerCase()]){}else if(M&&!te.test(o.replace(re,""))){}else if(!o){}else{continue}try{e.setAttribute(i,o);r.removed.pop()}catch(d){}}ie("afterSanitizeAttributes",e,null)};var ae=function(e){var t;var r=J(e);ie("beforeSanitizeShadowDOM",e,null);while(t=r.nextNode()){ie("uponSanitizeShadowNode",t,null);if(Z(t)){continue}if(t.content instanceof i){ae(t.content)}ne(t)}ie("afterSanitizeShadowDOM",e,null)};var ie=function(e,t,n){if(!b[e]){return}b[e].forEach(function(e){e.call(r,t,n,q)})};r.sanitize=function(e,n){var o,s,f,c,u,d;if(!e){e="<!-->"}if(typeof e!=="string"&&!X(e)){if(typeof e.toString!=="function"){throw new TypeError("toString is not a function")}else{e=e.toString()}}if(!r.isSupported){if(typeof t.toStaticHTML==="object"||typeof t.toStaticHTML==="function"){if(typeof e==="string"){return t.toStaticHTML(e)}else if(X(e)){return t.toStaticHTML(e.outerHTML)}}return e}U(n);r.removed=[];if(e instanceof l){o=Y("<!-->");s=o.ownerDocument.importNode(e,true);if(s.nodeType===1&&s.nodeName==="BODY"){o=s}else{o.appendChild(s)}}else{if(!z&&!R&&e.indexOf("<")===-1){return e}o=Y(e);if(!o){return z?null:""}}u=J(o);while(f=u.nextNode()){if(f.nodeType===3&&f===c){continue}if(Z(f)){continue}if(f.content instanceof i){ae(f.content)}ne(f);c=f}if(z){if(F){d=g.call(o.ownerDocument);while(o.firstChild){d.appendChild(o.firstChild)}}else{d=o}if(H){d=y.call(a,d,true)}return d}return R?o.outerHTML:o.innerHTML};r.addHook=function(e,t){if(typeof t!=="function"){return}b[e]=b[e]||[];b[e].push(t)};r.removeHook=function(e){if(b[e]){b[e].pop()}};r.removeHooks=function(e){if(b[e]){b[e]=[]}};r.removeAllHooks=function(){b={}};return r});
-//# sourceMappingURL=./dist/purify.min.js.map/*! Snap.js v2.0.0-rc1 */
+!function(e,t){if("function"==typeof define&&define.amd)define(["exports","module"],t);else if("undefined"!=typeof exports&&"undefined"!=typeof module)t(exports,module);else{var n={exports:{}};t(n.exports,n),e.autosize=n.exports}}(this,function(e,t){"use strict";function n(e){function t(){var t=window.getComputedStyle(e,null);"vertical"===t.resize?e.style.resize="none":"both"===t.resize&&(e.style.resize="horizontal"),s="content-box"===t.boxSizing?-(parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)):parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),isNaN(s)&&(s=0),l()}function n(t){var n=e.style.width;e.style.width="0px",e.offsetWidth,e.style.width=n,e.style.overflowY=t}function o(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}function r(){var t=e.style.height,n=o(e),r=document.documentElement&&document.documentElement.scrollTop;e.style.height="auto";var i=e.scrollHeight+s;return 0===e.scrollHeight?void(e.style.height=t):(e.style.height=i+"px",u=e.clientWidth,n.forEach(function(e){e.node.scrollTop=e.scrollTop}),void(r&&(document.documentElement.scrollTop=r)))}function l(){r();var t=Math.round(parseFloat(e.style.height)),o=window.getComputedStyle(e,null),i=Math.round(parseFloat(o.height));if(i!==t?"visible"!==o.overflowY&&(n("visible"),r(),i=Math.round(parseFloat(window.getComputedStyle(e,null).height))):"hidden"!==o.overflowY&&(n("hidden"),r(),i=Math.round(parseFloat(window.getComputedStyle(e,null).height))),a!==i){a=i;var l=d("autosize:resized");try{e.dispatchEvent(l)}catch(e){}}}if(e&&e.nodeName&&"TEXTAREA"===e.nodeName&&!i.has(e)){var s=null,u=e.clientWidth,a=null,p=function(){e.clientWidth!==u&&l()},c=function(t){window.removeEventListener("resize",p,!1),e.removeEventListener("input",l,!1),e.removeEventListener("keyup",l,!1),e.removeEventListener("autosize:destroy",c,!1),e.removeEventListener("autosize:update",l,!1),Object.keys(t).forEach(function(n){e.style[n]=t[n]}),i.delete(e)}.bind(e,{height:e.style.height,resize:e.style.resize,overflowY:e.style.overflowY,overflowX:e.style.overflowX,wordWrap:e.style.wordWrap});e.addEventListener("autosize:destroy",c,!1),"onpropertychange"in e&&"oninput"in e&&e.addEventListener("keyup",l,!1),window.addEventListener("resize",p,!1),e.addEventListener("input",l,!1),e.addEventListener("autosize:update",l,!1),e.style.overflowX="hidden",e.style.wordWrap="break-word",i.set(e,{destroy:c,update:l}),t()}}function o(e){var t=i.get(e);t&&t.destroy()}function r(e){var t=i.get(e);t&&t.update()}var i="function"==typeof Map?new Map:function(){var e=[],t=[];return{has:function(t){return e.indexOf(t)>-1},get:function(n){return t[e.indexOf(n)]},set:function(n,o){e.indexOf(n)===-1&&(e.push(n),t.push(o))},delete:function(n){var o=e.indexOf(n);o>-1&&(e.splice(o,1),t.splice(o,1))}}}(),d=function(e){return new Event(e,{bubbles:!0})};try{new Event("test")}catch(e){d=function(e){var t=document.createEvent("Event");return t.initEvent(e,!0,!1),t}}var l=null;"undefined"==typeof window||"function"!=typeof window.getComputedStyle?(l=function(e){return e},l.destroy=function(e){return e},l.update=function(e){return e}):(l=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return n(e,t)}),e},l.destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],o),e},l.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],r),e}),t.exports=l});
+(function(e){"use strict";var t=typeof window==="undefined"?null:window;if(typeof define==="function"&&define.amd){define(function(){return e(t)})}else if(typeof module!=="undefined"){module.exports=e(t)}else{t.DOMPurify=e(t)}})(function e(t){"use strict";var r=function(t){return e(t)};r.version="0.8.5";r.removed=[];if(!t||!t.document||t.document.nodeType!==9){r.isSupported=false;return r}var n=t.document;var a=n;var i=t.DocumentFragment;var o=t.HTMLTemplateElement;var l=t.Node;var s=t.NodeFilter;var f=t.NamedNodeMap||t.MozNamedAttrMap;var c=t.Text;var u=t.Comment;var d=t.DOMParser;if(typeof o==="function"){var m=n.createElement("template");if(m.content&&m.content.ownerDocument){n=m.content.ownerDocument}}var p=n.implementation;var v=n.createNodeIterator;var h=n.getElementsByTagName;var g=n.createDocumentFragment;var y=a.importNode;var b={};r.isSupported=typeof p.createHTMLDocument!=="undefined"&&n.documentMode!==9;var T=function(e,t){var r=t.length;while(r--){if(typeof t[r]==="string"){t[r]=t[r].toLowerCase()}e[t[r]]=true}return e};var A=function(e){var t={};var r;for(r in e){if(e.hasOwnProperty(r)){t[r]=e[r]}}return t};var x=null;var k=T({},["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr","svg","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","switch","symbol","text","textpath","title","tref","tspan","view","vkern","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmuliscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mpspace","msqrt","mystyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","#text"]);var w=null;var E=T({},["accept","action","align","alt","autocomplete","background","bgcolor","border","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","coords","datetime","default","dir","disabled","download","enctype","face","for","headers","height","hidden","high","href","hreflang","id","ismap","label","lang","list","loop","low","max","maxlength","media","method","min","multiple","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","rows","rowspan","spellcheck","scope","selected","shape","size","span","srclang","start","src","step","style","summary","tabindex","title","type","usemap","valign","value","width","xmlns","accent-height","accumulate","additivive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mode","min","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","surfacescale","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","u1","u2","unicode","values","viewbox","visibility","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","y","y1","y2","z","zoomandpan","accent","accentunder","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","display","displaystyle","fence","frame","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]);var S=null;var N=null;var D=true;var M=false;var O=false;var L=false;var _=/\{\{[\s\S]*|[\s\S]*\}\}/gm;var C=/<%[\s\S]*|[\s\S]*%>/gm;var R=false;var z=false;var F=false;var H=false;var j=true;var B=true;var I=T({},["audio","head","math","script","style","svg","video"]);var W=T({},["audio","video","img","source"]);var G=T({},["alt","class","for","id","label","name","pattern","placeholder","summary","title","value","style","xmlns"]);var q=null;var P=n.createElement("form");var U=function(e){if(typeof e!=="object"){e={}}x="ALLOWED_TAGS"in e?T({},e.ALLOWED_TAGS):k;w="ALLOWED_ATTR"in e?T({},e.ALLOWED_ATTR):E;S="FORBID_TAGS"in e?T({},e.FORBID_TAGS):{};N="FORBID_ATTR"in e?T({},e.FORBID_ATTR):{};D=e.ALLOW_DATA_ATTR!==false;M=e.ALLOW_UNKNOWN_PROTOCOLS||false;O=e.SAFE_FOR_JQUERY||false;L=e.SAFE_FOR_TEMPLATES||false;R=e.WHOLE_DOCUMENT||false;z=e.RETURN_DOM||false;F=e.RETURN_DOM_FRAGMENT||false;H=e.RETURN_DOM_IMPORT||false;j=e.SANITIZE_DOM!==false;B=e.KEEP_CONTENT!==false;if(L){D=false}if(F){z=true}if(e.ADD_TAGS){if(x===k){x=A(x)}T(x,e.ADD_TAGS)}if(e.ADD_ATTR){if(w===E){w=A(w)}T(w,e.ADD_ATTR)}if(e.ADD_URI_SAFE_ATTR){T(G,e.ADD_URI_SAFE_ATTR)}if(B){x["#text"]=true}if(Object&&"freeze"in Object){Object.freeze(e)}q=e};var V=function(e){r.removed.push({element:e});try{e.parentNode.removeChild(e)}catch(t){e.outerHTML=""}};var K=function(e,t){r.removed.push({attribute:t.getAttributeNode(e),from:t});t.removeAttribute(e)};var Y=function(e){var t,r;try{t=(new d).parseFromString(e,"text/html")}catch(n){}if(!t||!t.documentElement){t=p.createHTMLDocument("");r=t.body;r.parentNode.removeChild(r.parentNode.firstElementChild);r.outerHTML=e}if(typeof t.getElementsByTagName==="function"){return t.getElementsByTagName(R?"html":"body")[0]}return h.call(t,R?"html":"body")[0]};var J=function(e){return v.call(e.ownerDocument||e,e,s.SHOW_ELEMENT|s.SHOW_COMMENT|s.SHOW_TEXT,function(){return s.FILTER_ACCEPT},false)};var Q=function(e){if(e instanceof c||e instanceof u){return false}if(typeof e.nodeName!=="string"||typeof e.textContent!=="string"||typeof e.removeChild!=="function"||!(e.attributes instanceof f)||typeof e.removeAttribute!=="function"||typeof e.setAttribute!=="function"){return true}return false};var X=function(e){return typeof l==="object"?e instanceof l:e&&typeof e==="object"&&typeof e.nodeType==="number"&&typeof e.nodeName==="string"};var Z=function(e){var t,n;ie("beforeSanitizeElements",e,null);if(Q(e)){V(e);return true}t=e.nodeName.toLowerCase();ie("uponSanitizeElement",e,{tagName:t,allowedTags:x});if(!x[t]||S[t]){if(B&&!I[t]&&typeof e.insertAdjacentHTML==="function"){try{e.insertAdjacentHTML("AfterEnd",e.innerHTML)}catch(a){}}V(e);return true}if(O&&!e.firstElementChild&&(!e.content||!e.content.firstElementChild)&&/</g.test(e.textContent)){r.removed.push({element:e.cloneNode()});e.innerHTML=e.textContent.replace(/</g,"&lt;")}if(L&&e.nodeType===3){n=e.textContent;n=n.replace(_," ");n=n.replace(C," ");if(e.textContent!==n){r.removed.push({element:e.cloneNode()});e.textContent=n}}ie("afterSanitizeElements",e,null);return false};var $=/^data-[\-\w.\u00B7-\uFFFF]/;var ee=/^(?:(?:(?:f|ht)tps?|mailto|tel):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i;var te=/^(?:\w+script|data):/i;var re=/[\x00-\x20\xA0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;var ne=function(e){var a,i,o,l,s,f,c,u;ie("beforeSanitizeAttributes",e,null);f=e.attributes;if(!f){return}c={attrName:"",attrValue:"",keepAttr:true,allowedAttributes:w};u=f.length;while(u--){a=f[u];i=a.name;o=a.value.trim();l=i.toLowerCase();c.attrName=l;c.attrValue=o;c.keepAttr=true;ie("uponSanitizeAttribute",e,c);o=c.attrValue;if(l==="name"&&e.nodeName==="IMG"&&f.id){s=f.id;f=Array.prototype.slice.apply(f);K("id",e);K(i,e);if(f.indexOf(s)>u){e.setAttribute("id",s.value)}}else{if(i==="id"){e.setAttribute(i,"")}K(i,e)}if(!c.keepAttr){continue}if(j&&(l==="id"||l==="name")&&(o in t||o in n||o in P)){continue}if(L){o=o.replace(_," ");o=o.replace(C," ")}if(D&&$.test(l)){}else if(!w[l]||N[l]){continue}else if(G[l]){}else if(ee.test(o.replace(re,""))){}else if(l==="src"&&o.indexOf("data:")===0&&W[e.nodeName.toLowerCase()]){}else if(M&&!te.test(o.replace(re,""))){}else if(!o){}else{continue}try{e.setAttribute(i,o);r.removed.pop()}catch(d){}}ie("afterSanitizeAttributes",e,null)};var ae=function(e){var t;var r=J(e);ie("beforeSanitizeShadowDOM",e,null);while(t=r.nextNode()){ie("uponSanitizeShadowNode",t,null);if(Z(t)){continue}if(t.content instanceof i){ae(t.content)}ne(t)}ie("afterSanitizeShadowDOM",e,null)};var ie=function(e,t,n){if(!b[e]){return}b[e].forEach(function(e){e.call(r,t,n,q)})};r.sanitize=function(e,n){var o,s,f,c,u,d;if(!e){e="<!-->"}if(typeof e!=="string"&&!X(e)){if(typeof e.toString!=="function"){throw new TypeError("toString is not a function")}else{e=e.toString()}}if(!r.isSupported){if(typeof t.toStaticHTML==="object"||typeof t.toStaticHTML==="function"){if(typeof e==="string"){return t.toStaticHTML(e)}else if(X(e)){return t.toStaticHTML(e.outerHTML)}}return e}U(n);r.removed=[];if(e instanceof l){o=Y("<!-->");s=o.ownerDocument.importNode(e,true);if(s.nodeType===1&&s.nodeName==="BODY"){o=s}else{o.appendChild(s)}}else{if(!z&&!R&&e.indexOf("<")===-1){return e}o=Y(e);if(!o){return z?null:""}}u=J(o);while(f=u.nextNode()){if(f.nodeType===3&&f===c){continue}if(Z(f)){continue}if(f.content instanceof i){ae(f.content)}ne(f);c=f}if(z){if(F){d=g.call(o.ownerDocument);while(o.firstChild){d.appendChild(o.firstChild)}}else{d=o}if(H){d=y.call(a,d,true)}return d}return R?o.outerHTML:o.innerHTML};r.addHook=function(e,t){if(typeof t!=="function"){return}b[e]=b[e]||[];b[e].push(t)};r.removeHook=function(e){if(b[e]){b[e].pop()}};r.removeHooks=function(e){if(b[e]){b[e]=[]}};r.removeAllHooks=function(){b={}};return r});
+//# sourceMappingURL=./dist/purify.min.js.map
+/*! Snap.js v2.0.0-rc1 */
(function(win, doc) {
'use strict';
@@ -26674,6 +26432,7 @@ dav.Client.prototype = {
this[Namespace] = Core;
}).call(this, window, document);
+
/*
Copyright 2012 Igor Vaynberg
@@ -30122,3 +29881,4 @@ the specific language governing permissions and limitations under the Apache Lic
};
}(jQuery));
+
diff --git a/issue_template.md b/issue_template.md
index 6714371a4eb..ecf2f62ea68 100644
--- a/issue_template.md
+++ b/issue_template.md
@@ -5,7 +5,8 @@ This is the bug tracker for the Server component. Find other components at https
For reporting potential security issues please see https://nextcloud.com/security/
-To make it possible for us to help you please fill out below information carefully.
+To make it possible for us to help you please fill out below information carefully.
+You can also use the Issue Template application to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate
-->
### Steps to reproduce
1.
@@ -19,6 +20,7 @@ Tell us what should happen
Tell us what happens instead
### Server configuration
+
**Operating system**:
**Web server:**
@@ -55,7 +57,7 @@ from within your Nextcloud installation folder
```
</details>
-**The content of config/config.php:**
+**Nextcloud configuration:**
<details>
<summary>Config report</summary>
@@ -66,8 +68,8 @@ from within your Nextcloud installation folder
or
-Insert your config.php content here
-(Without the database password, passwordsalt and secret)
+Insert your config.php content here.
+Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …)
```
</details>
diff --git a/lib/l10n/es_MX.js b/lib/l10n/es_MX.js
new file mode 100644
index 00000000000..70d10beb1af
--- /dev/null
+++ b/lib/l10n/es_MX.js
@@ -0,0 +1,188 @@
+OC.L10N.register(
+ "lib",
+ {
+ "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Esto generalmente se soluciona dándole al servidor web acceso para escribir en el directorio config. ",
+ "See %s" : "Ver %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto generalmente se soluciona %s dándole al servidor web acceso para escribir en el directorio config %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Los archivos de la aplicación %$1s no fueron correctamente remplazados. Favor de asegurarse de que la versión sea compatible con el servidor.",
+ "Sample configuration detected" : "Se ha detectado la configuración de muestra",
+ "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" : "Se ha detectado que la configuración de muestra ha sido copiada. Esto puede descomponer su instalacón y no está soportado. Favor de leer la documentación antes de hacer cambios en el archivo config.php",
+ "%1$s and %2$s" : "%1$s y %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s",
+ "PHP %s or higher is required." : "Se requiere de PHPH %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ",
+ "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No fue posible encontar la herramienta de línea de comando %s",
+ "The library %s is not available." : "La biblioteca %s no está disponible. ",
+ "Library %s with a version higher than %s is required - available version %s." : "La biblitoteca %s con una versión superiror a la %s es requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Se requiere de la biblioteca %s con una versión inferiror a la %s - la versión %s está disponible. ",
+ "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s",
+ "Server version %s or higher is required." : "Se requiere la versión del servidor %s o superior. ",
+ "Server version %s or lower is required." : "La versión del servidor %s o inferior es requerdia. ",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "Avatar image is not square" : "La imagen del avatar no es un cuadrado",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%n day ago_::_%n days ago_" : ["hace %n día","hace %n días"],
+ "last month" : "mes pasado",
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "last year" : "año pasado",
+ "_%n year ago_::_%n years ago_" : ["hace %n año","hace %n años"],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "seconds ago" : "hace segundos",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Favor de habilitarlo en sus ajustes de aplicación o contacte a su administrador. ",
+ "File name is a reserved word" : "Nombre de archivo es una palabra reservada",
+ "File name contains at least one invalid character" : "El nombre del archivo contiene al menos un caracter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
+ "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Personal" : "Personal",
+ "Log out" : "Salir de la sesión",
+ "Users" : "Usuarios",
+ "Admin" : "Administración",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Ajustes del servidor",
+ "Sharing" : "Compartiendo",
+ "Encryption" : "Encripción",
+ "Additional settings" : "Ajustes adicionales",
+ "Tips & tricks" : "Consejos y trucos",
+ "%s enter the database username and name." : "%s ingrese el nombre del usuario y nombre de la base de datos",
+ "%s enter the database username." : "%s ingresar el nombre de usuario de la base de datos.",
+ "%s enter the database name." : "%s ingresar el nombre de la base de datos",
+ "%s you may not use dots in the database name" : "%s no puede utilizar puntos en el nombre de la base de datos",
+ "Oracle connection could not be established" : "No fue posible establecer la conexión a Oracle",
+ "Oracle username and/or password not valid" : "El nombre de usuario y/o contraseña de Oracle inválidos",
+ "DB Error: \"%s\"" : "Error de BD: \"%s\"",
+ "Offending command was: \"%s\"" : "Comando infractor: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Tiene que ingresar una cuenta existente o la del administrador.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Comando infractor: \"%s\", nombre: %s, contraseña: %s",
+ "PostgreSQL username and/or password not valid" : "El nombre de usuario y/o contraseña de PostgreSQL inválidos",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "OS X de Mac no está soportado y %s no funcionará correctamente en esta plataforma ¡Uselo bajo su propio riesgo!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para mejores resultados, favor de cosiderar usar en su lugar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Al parecer esta instancia %s está corriendo en un ambiente PHP de 32-bits y el open_basedir ha sido configurado en el archivo php.ini. Esto generará problemas con archivos de más de 4GB de tamaño y es altamente desalentado. ",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Favor de eliminar el ajuste open_basedir de su archivo php.ini o cambie a PHP de 64 bits. ",
+ "Set an admin username." : "Configurar un nombre de usuario del administrador",
+ "Set an admin password." : "Establecer la contraseña del administrador.",
+ "Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
+ "%s shared »%s« with you" : "%s ha compartido »%s« con usted",
+ "%s via %s" : "%s por %s",
+ "You are not allowed to share %s" : "No tiene permitido compartir %s",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se presentó una falla al compartir %s debido a que %s no es un miembro del grupo %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Usted necesita proporcionar una contraseña para crear una liga pública, sólo las ligas protegidas están permitidas. ",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Se persentó una falla al establecer los permisos para %s, porque los permisos exceden los permisos otorgados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Se persentó una falla al establecer los permisos para %s, porque no se encontró el elemento ",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No ha sido posible establecer la fecha de expiración. Los recursos compartidos no pueden expirar después de %s tras haber sido compartidos",
+ "Cannot set expiration date. Expiration date is in the past" : "No ha sido posible establecer la fecha de expiración. La fecha de expiración ya ha pasado",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "No ha sido posible quitar la fecha de expiración. Los recursos compartidos deben tener una fecha de expiración.",
+ "Sharing %s failed, because resharing is not allowed" : "Falla al compartir %s debído a que no se permite volver a compartir",
+ "Cannot increase permissions of %s" : "No se pueden incrementar los permisos de %s",
+ "Files can't be shared with delete permissions" : "No es posible compartir archivos con permisos de borrado",
+ "Files can't be shared with create permissions" : "No es posible compartir archivos con permisos de creación",
+ "Expiration date is in the past" : "La fecha de expiración ya ha pasado",
+ "Cannot set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "Could not find category \"%s\"" : "No fue posible encontrar la categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Lunes",
+ "Tuesday" : "Martes",
+ "Wednesday" : "Miércoles",
+ "Thursday" : "Jueves",
+ "Friday" : "Viernes",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Lun.",
+ "Tue." : "Mar.",
+ "Wed." : "Mie.",
+ "Thu." : "Jue.",
+ "Fri." : "Vie.",
+ "Sat." : "Sab.",
+ "Su" : "Do",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Mi",
+ "Th" : "Ju",
+ "Fr" : "Vi",
+ "Sa" : "Sa",
+ "January" : "Enero",
+ "February" : "Febrero",
+ "March" : "Marzo",
+ "April" : "Abril",
+ "May" : "Mayo",
+ "June" : "Junio",
+ "July" : "Julio",
+ "August" : "Agosto",
+ "September" : "Septiembre",
+ "October" : "Octubre",
+ "November" : "Noviembre",
+ "December" : "Diciembre",
+ "Jan." : "Ene.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "May.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Sep.",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Dic.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Sólo se permiten los siguientes caracteres en el nombre de usuario: \"a-z\", \"A-Z\", \"0-9\" y \"_.@-'\"",
+ "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
+ "Username contains whitespace at the beginning or at the end" : "El nombre del usuario contiene un espacio en blanco al inicio o al final",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "The username is already being used" : "Ese nombre de usuario ya está en uso",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
+ "User disabled" : "Usuario deshabilitado",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
+ "No app name specified" : "No se ha especificado el nombre de la aplicación",
+ "App '%s' could not be installed!" : "¡La aplicación \"%s\" no puede ser instalada!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \"%s\" no puede ser instalada porque las siguientes dependencias no están satisfechas: %s ",
+ "a safe home for all your data" : "un lugar seguro para todos sus datos",
+ "File is currently busy, please try again later" : "El archivo se encuentra actualmente en uso, favor de intentarlo más tarde. ",
+ "Can't read file" : "No se puede leer el archivo",
+ "Application is not enabled" : "La aplicación está deshabilitada",
+ "Authentication error" : "Error de autenticación",
+ "Token expired. Please reload page." : "Token expirado. Por favor, recarga la página.",
+ "Unknown user" : "Ususario desconocido",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No cuenta con controladores de base de datos (sqlite, mysql o postgresql) instalados. ",
+ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"",
+ "Cannot write into \"apps\" directory" : "No fue posible escribir en el directorio \"apps\"",
+ "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.",
+ "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s",
+ "Please ask your server administrator to install the module." : "Favor de solicitar a su adminsitrador la instalación del módulo. ",
+ "PHP module %s not installed." : "El módulo de PHP %s no está instalado. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "El ajuste PHP \"%s\" no esta establecido a \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "El cambiar este ajuste del archivo php.ini hará que Nextcloud corra de nuevo.",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está establecido como \"%s\" en lugar del valor esperado de \"0\"",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Se requiere de por lo menos libxml2 2.7.0. Actualmente %s esta instalado. ",
+ "To fix this issue update your libxml2 version and restart your web server." : "Para corregir este tema, favor de actualizar la versión de su libxml2 y reinicie su servidor web. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto ha sido causado probablemente por un acelerador de caché como Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "¿Los módulos de PHP han sido instalados, pero se siguen enlistando como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Favor de solicitar al administrador reiniciar el servidor web. ",
+ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9",
+ "Please upgrade your database version" : "Favor de actualizar la versión de la base de datos",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Favor de cambiar los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifique el valor de \"datadirectory\" en su configuración",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Favor de verificar que el directorio de datos tenga un archivo \".ocdata\" en su raíz. ",
+ "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s",
+ "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s",
+ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible",
+ "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/es_MX.json b/lib/l10n/es_MX.json
new file mode 100644
index 00000000000..4338358e395
--- /dev/null
+++ b/lib/l10n/es_MX.json
@@ -0,0 +1,186 @@
+{ "translations": {
+ "Cannot write into \"config\" directory!" : "¡No se puede escribir en el directorio \"config\"!",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Esto generalmente se soluciona dándole al servidor web acceso para escribir en el directorio config. ",
+ "See %s" : "Ver %s",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Esto generalmente se soluciona %s dándole al servidor web acceso para escribir en el directorio config %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Los archivos de la aplicación %$1s no fueron correctamente remplazados. Favor de asegurarse de que la versión sea compatible con el servidor.",
+ "Sample configuration detected" : "Se ha detectado la configuración de muestra",
+ "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" : "Se ha detectado que la configuración de muestra ha sido copiada. Esto puede descomponer su instalacón y no está soportado. Favor de leer la documentación antes de hacer cambios en el archivo config.php",
+ "%1$s and %2$s" : "%1$s y %2$s",
+ "%1$s, %2$s and %3$s" : "%1$s, %2$s y %3$s",
+ "%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s y %4$s",
+ "%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s y %5$s",
+ "PHP %s or higher is required." : "Se requiere de PHPH %s o superior.",
+ "PHP with a version lower than %s is required." : "PHP con una versión inferiror a la %s es requerido. ",
+ "%sbit or higher PHP required." : "se requiere PHP para %sbit o superior.",
+ "Following databases are supported: %s" : "Las siguientes bases de datos están soportadas: %s",
+ "The command line tool %s could not be found" : "No fue posible encontar la herramienta de línea de comando %s",
+ "The library %s is not available." : "La biblioteca %s no está disponible. ",
+ "Library %s with a version higher than %s is required - available version %s." : "La biblitoteca %s con una versión superiror a la %s es requerida - versión disponible %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "Se requiere de la biblioteca %s con una versión inferiror a la %s - la versión %s está disponible. ",
+ "Following platforms are supported: %s" : "Las siguientes plataformas están soportadas: %s",
+ "Server version %s or higher is required." : "Se requiere la versión del servidor %s o superior. ",
+ "Server version %s or lower is required." : "La versión del servidor %s o inferior es requerdia. ",
+ "Unknown filetype" : "Tipo de archivo desconocido",
+ "Invalid image" : "Imagen inválida",
+ "Avatar image is not square" : "La imagen del avatar no es un cuadrado",
+ "today" : "hoy",
+ "yesterday" : "ayer",
+ "_%n day ago_::_%n days ago_" : ["hace %n día","hace %n días"],
+ "last month" : "mes pasado",
+ "_%n month ago_::_%n months ago_" : ["Hace %n mes","Hace %n meses"],
+ "last year" : "año pasado",
+ "_%n year ago_::_%n years ago_" : ["hace %n año","hace %n años"],
+ "_%n hour ago_::_%n hours ago_" : ["Hace %n hora","Hace %n horas"],
+ "_%n minute ago_::_%n minutes ago_" : ["Hace %n minuto","Hace %n minutos"],
+ "seconds ago" : "hace segundos",
+ "Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "El módulo con id: %s no existe. Favor de habilitarlo en sus ajustes de aplicación o contacte a su administrador. ",
+ "File name is a reserved word" : "Nombre de archivo es una palabra reservada",
+ "File name contains at least one invalid character" : "El nombre del archivo contiene al menos un caracter inválido",
+ "File name is too long" : "El nombre del archivo es demasiado largo",
+ "Empty filename is not allowed" : "El uso de nombres de archivo vacíos no está permitido",
+ "Help" : "Ayuda",
+ "Apps" : "Aplicaciones",
+ "Personal" : "Personal",
+ "Log out" : "Salir de la sesión",
+ "Users" : "Usuarios",
+ "Admin" : "Administración",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Ajustes del servidor",
+ "Sharing" : "Compartiendo",
+ "Encryption" : "Encripción",
+ "Additional settings" : "Ajustes adicionales",
+ "Tips & tricks" : "Consejos y trucos",
+ "%s enter the database username and name." : "%s ingrese el nombre del usuario y nombre de la base de datos",
+ "%s enter the database username." : "%s ingresar el nombre de usuario de la base de datos.",
+ "%s enter the database name." : "%s ingresar el nombre de la base de datos",
+ "%s you may not use dots in the database name" : "%s no puede utilizar puntos en el nombre de la base de datos",
+ "Oracle connection could not be established" : "No fue posible establecer la conexión a Oracle",
+ "Oracle username and/or password not valid" : "El nombre de usuario y/o contraseña de Oracle inválidos",
+ "DB Error: \"%s\"" : "Error de BD: \"%s\"",
+ "Offending command was: \"%s\"" : "Comando infractor: \"%s\"",
+ "You need to enter either an existing account or the administrator." : "Tiene que ingresar una cuenta existente o la del administrador.",
+ "Offending command was: \"%s\", name: %s, password: %s" : "Comando infractor: \"%s\", nombre: %s, contraseña: %s",
+ "PostgreSQL username and/or password not valid" : "El nombre de usuario y/o contraseña de PostgreSQL inválidos",
+ "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "OS X de Mac no está soportado y %s no funcionará correctamente en esta plataforma ¡Uselo bajo su propio riesgo!",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para mejores resultados, favor de cosiderar usar en su lugar un servidor GNU/Linux.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Al parecer esta instancia %s está corriendo en un ambiente PHP de 32-bits y el open_basedir ha sido configurado en el archivo php.ini. Esto generará problemas con archivos de más de 4GB de tamaño y es altamente desalentado. ",
+ "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Favor de eliminar el ajuste open_basedir de su archivo php.ini o cambie a PHP de 64 bits. ",
+ "Set an admin username." : "Configurar un nombre de usuario del administrador",
+ "Set an admin password." : "Establecer la contraseña del administrador.",
+ "Can't create or write into the data directory %s" : "No es posible crear o escribir en el directorio de datos %s",
+ "%s shared »%s« with you" : "%s ha compartido »%s« con usted",
+ "%s via %s" : "%s por %s",
+ "You are not allowed to share %s" : "No tiene permitido compartir %s",
+ "Sharing %s failed, because %s is not a member of the group %s" : "Se presentó una falla al compartir %s debido a que %s no es un miembro del grupo %s",
+ "You need to provide a password to create a public link, only protected links are allowed" : "Usted necesita proporcionar una contraseña para crear una liga pública, sólo las ligas protegidas están permitidas. ",
+ "Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Se persentó una falla al establecer los permisos para %s, porque los permisos exceden los permisos otorgados a %s",
+ "Setting permissions for %s failed, because the item was not found" : "Se persentó una falla al establecer los permisos para %s, porque no se encontró el elemento ",
+ "Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "No ha sido posible establecer la fecha de expiración. Los recursos compartidos no pueden expirar después de %s tras haber sido compartidos",
+ "Cannot set expiration date. Expiration date is in the past" : "No ha sido posible establecer la fecha de expiración. La fecha de expiración ya ha pasado",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "No ha sido posible quitar la fecha de expiración. Los recursos compartidos deben tener una fecha de expiración.",
+ "Sharing %s failed, because resharing is not allowed" : "Falla al compartir %s debído a que no se permite volver a compartir",
+ "Cannot increase permissions of %s" : "No se pueden incrementar los permisos de %s",
+ "Files can't be shared with delete permissions" : "No es posible compartir archivos con permisos de borrado",
+ "Files can't be shared with create permissions" : "No es posible compartir archivos con permisos de creación",
+ "Expiration date is in the past" : "La fecha de expiración ya ha pasado",
+ "Cannot set expiration date more than %s days in the future" : "No es posible establecer la fecha de expiración más allá de %s días en el futuro",
+ "Could not find category \"%s\"" : "No fue posible encontrar la categoria \"%s\"",
+ "Sunday" : "Domingo",
+ "Monday" : "Lunes",
+ "Tuesday" : "Martes",
+ "Wednesday" : "Miércoles",
+ "Thursday" : "Jueves",
+ "Friday" : "Viernes",
+ "Saturday" : "Sábado",
+ "Sun." : "Dom.",
+ "Mon." : "Lun.",
+ "Tue." : "Mar.",
+ "Wed." : "Mie.",
+ "Thu." : "Jue.",
+ "Fri." : "Vie.",
+ "Sat." : "Sab.",
+ "Su" : "Do",
+ "Mo" : "Lu",
+ "Tu" : "Ma",
+ "We" : "Mi",
+ "Th" : "Ju",
+ "Fr" : "Vi",
+ "Sa" : "Sa",
+ "January" : "Enero",
+ "February" : "Febrero",
+ "March" : "Marzo",
+ "April" : "Abril",
+ "May" : "Mayo",
+ "June" : "Junio",
+ "July" : "Julio",
+ "August" : "Agosto",
+ "September" : "Septiembre",
+ "October" : "Octubre",
+ "November" : "Noviembre",
+ "December" : "Diciembre",
+ "Jan." : "Ene.",
+ "Feb." : "Feb.",
+ "Mar." : "Mar.",
+ "Apr." : "Abr.",
+ "May." : "May.",
+ "Jun." : "Jun.",
+ "Jul." : "Jul.",
+ "Aug." : "Ago.",
+ "Sep." : "Sep.",
+ "Oct." : "Oct.",
+ "Nov." : "Nov.",
+ "Dec." : "Dic.",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "Sólo se permiten los siguientes caracteres en el nombre de usuario: \"a-z\", \"A-Z\", \"0-9\" y \"_.@-'\"",
+ "A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
+ "Username contains whitespace at the beginning or at the end" : "El nombre del usuario contiene un espacio en blanco al inicio o al final",
+ "A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "The username is already being used" : "Ese nombre de usuario ya está en uso",
+ "Login canceled by app" : "Inicio de sesión cancelado por la aplicación",
+ "User disabled" : "Usuario deshabilitado",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "La aplicación \"%s\" no puede ser instalada porque el archivo appinfo no se puede leer. ",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "La aplicación \"%s\" no puede ser instalada porque no es compatible con esta versión del servidor. ",
+ "No app name specified" : "No se ha especificado el nombre de la aplicación",
+ "App '%s' could not be installed!" : "¡La aplicación \"%s\" no puede ser instalada!",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "La aplicación \"%s\" no puede ser instalada porque las siguientes dependencias no están satisfechas: %s ",
+ "a safe home for all your data" : "un lugar seguro para todos sus datos",
+ "File is currently busy, please try again later" : "El archivo se encuentra actualmente en uso, favor de intentarlo más tarde. ",
+ "Can't read file" : "No se puede leer el archivo",
+ "Application is not enabled" : "La aplicación está deshabilitada",
+ "Authentication error" : "Error de autenticación",
+ "Token expired. Please reload page." : "Token expirado. Por favor, recarga la página.",
+ "Unknown user" : "Ususario desconocido",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "No cuenta con controladores de base de datos (sqlite, mysql o postgresql) instalados. ",
+ "Cannot write into \"config\" directory" : "No fue posible escribir en el directorio \"config\"",
+ "Cannot write into \"apps\" directory" : "No fue posible escribir en el directorio \"apps\"",
+ "Cannot create \"data\" directory (%s)" : "No fue posible crear el directorio (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esto se puede arreglar generalmente al <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">darle al servidor web accesos al directorio raíz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Los permisos se pueden arreglar generalmente al %s darle al servidor web accesos al direcotiro raíz %s.",
+ "Setting locale to %s failed" : "Se presentó una falla al establecer la regionalización a %s",
+ "Please ask your server administrator to install the module." : "Favor de solicitar a su adminsitrador la instalación del módulo. ",
+ "PHP module %s not installed." : "El módulo de PHP %s no está instalado. ",
+ "PHP setting \"%s\" is not set to \"%s\"." : "El ajuste PHP \"%s\" no esta establecido a \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "El cambiar este ajuste del archivo php.ini hará que Nextcloud corra de nuevo.",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está establecido como \"%s\" en lugar del valor esperado de \"0\"",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Se requiere de por lo menos libxml2 2.7.0. Actualmente %s esta instalado. ",
+ "To fix this issue update your libxml2 version and restart your web server." : "Para corregir este tema, favor de actualizar la versión de su libxml2 y reinicie su servidor web. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto ha sido causado probablemente por un acelerador de caché como Zend OPcache o eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "¿Los módulos de PHP han sido instalados, pero se siguen enlistando como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Favor de solicitar al administrador reiniciar el servidor web. ",
+ "PostgreSQL >= 9 required" : "Se requiere PostgreSQL >= 9",
+ "Please upgrade your database version" : "Favor de actualizar la versión de la base de datos",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Favor de cambiar los permisos a 0770 para que el directorio no pueda ser enlistado por otros usuarios. ",
+ "Data directory (%s) is readable by other users" : "El directorio de datos (%s) puede ser leído por otros usuarios",
+ "Data directory (%s) must be an absolute path" : "El directorio de datos (%s) debe ser una ruta absoluta",
+ "Check the value of \"datadirectory\" in your configuration" : "Verifique el valor de \"datadirectory\" en su configuración",
+ "Data directory (%s) is invalid" : "El directorio de datos (%s) es inválido",
+ "Please check that the data directory contains a file \".ocdata\" in its root." : "Favor de verificar que el directorio de datos tenga un archivo \".ocdata\" en su raíz. ",
+ "Could not obtain lock type %d on \"%s\"." : "No fue posible obtener el tipo de bloqueo %d en \"%s\". ",
+ "Storage unauthorized. %s" : "Almacenamiento no autorizado. %s",
+ "Storage incomplete configuration. %s" : "Configuración incompleta del almacenamiento. %s",
+ "Storage connection error. %s" : "Se presentó un error con la conexión al almacenamiento. %s",
+ "Storage is temporarily not available" : "El almacenamieto se encuentra temporalmente no disponible",
+ "Storage connection timeout. %s" : "Se agotó el tiempo de conexión del almacenamiento. %s"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/lib/l10n/ja.js b/lib/l10n/ja.js
index 22bd07b209d..2241c73c8c7 100644
--- a/lib/l10n/ja.js
+++ b/lib/l10n/ja.js
@@ -45,6 +45,7 @@ OC.L10N.register(
"Help" : "ヘルプ",
"Apps" : "アプリ",
"Personal" : "個人",
+ "Log out" : "ログアウト",
"Users" : "ユーザー",
"Admin" : "管理",
"APCu" : "APCu",
diff --git a/lib/l10n/ja.json b/lib/l10n/ja.json
index c6a9929940d..bf805117141 100644
--- a/lib/l10n/ja.json
+++ b/lib/l10n/ja.json
@@ -43,6 +43,7 @@
"Help" : "ヘルプ",
"Apps" : "アプリ",
"Personal" : "個人",
+ "Log out" : "ログアウト",
"Users" : "ユーザー",
"Admin" : "管理",
"APCu" : "APCu",
diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js
index a9f3ddaf2e0..583cce5e257 100644
--- a/lib/l10n/pt_BR.js
+++ b/lib/l10n/pt_BR.js
@@ -4,25 +4,25 @@ OC.L10N.register(
"Cannot write into \"config\" directory!" : "Não é possível gravar no diretório \"config\"!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Isso geralmente pode ser corrigido dando o acesso de gravação ao webserver para o diretório de configuração",
"See %s" : "Ver %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido dando permissão de gravação %sgiving ao webserver para o directory%s de configuração.",
- "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Os arquivos do app %$1s não foram substituídos corretamente. Certifique-se de que é uma versão compatível com o servidor.",
- "Sample configuration detected" : "Exemplo de configuração detectada",
- "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" : "Foi detectado que a configuração exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido por %s dando permissão de gravação ao servidor web para o diretório de configuração %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Os arquivos do aplicativo %$1s não foram substituídos corretamente. Certifique-se de que é uma versão compatível com o servidor.",
+ "Sample configuration detected" : "Configuração de exemplo detectada",
+ "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" : "Foi detectado que a configuração de exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor leia a documentação antes de realizar mudanças no config.php",
"%1$s and %2$s" : "%1$s e %2$s",
"%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s",
"%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s",
"%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s",
- "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
+ "PHP %s or higher is required." : "PHP %s ou superior é requerido.",
"PHP with a version lower than %s is required." : "É requerida uma versão PHP mais antiga que a %s .",
"%sbit or higher PHP required." : "%sbit ou maior é requerido.",
- "Following databases are supported: %s" : "Following databases are supported: %s",
+ "Following databases are supported: %s" : "Os seguintes bancos de dados são suportsdos: %s",
"The command line tool %s could not be found" : "A ferramenta de linha de comando %s não pode ser encontrada",
"The library %s is not available." : "A biblioteca %s não está disponível.",
"Library %s with a version higher than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão maior que %s - versão disponível %s.",
"Library %s with a version lower than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão menor que %s - versão disponível %s.",
"Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s",
- "Server version %s or higher is required." : "É requerido um Servidor da versão %s ou superior.",
- "Server version %s or lower is required." : "É requerido um Servidor da versão %s ou anterior.",
+ "Server version %s or higher is required." : "É requerido um servidor da versão %s ou superior.",
+ "Server version %s or lower is required." : "É requerido um servidor da versão %s ou anterior.",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
"Avatar image is not square" : "A imagem do avatar não é quadrada",
@@ -38,22 +38,23 @@ OC.L10N.register(
"seconds ago" : "segundos atrás",
"Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo com id: %s não existe. Ative-o em suas configurações de aplicativos ou contate o administrador.",
"File name is a reserved word" : "O nome do arquivo é uma palavra reservada",
- "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caractere inválido",
+ "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caracter inválido",
"File name is too long" : "O nome do arquivo é muito longo",
- "Dot files are not allowed" : "Dot arquivos não são permitidos",
- "Empty filename is not allowed" : "Um nome de arquivo vazio não é permitido.",
+ "Dot files are not allowed" : "Arquivos Dot não são permitidos",
+ "Empty filename is not allowed" : "Nome de arquivo vazio não é permitido.",
"Help" : "Ajuda",
"Apps" : "Aplicações",
"Personal" : "Pessoal",
+ "Log out" : "Saída",
"Users" : "Usuários",
"Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
- "Server settings" : "Configurações de servidor",
+ "Server settings" : "Configurações do servidor",
"Sharing" : "Compartilhamento",
"Encryption" : "Criptografia",
"Additional settings" : "Configurações adicionais",
- "Tips & tricks" : "Dias & truques",
+ "Tips & tricks" : "Dicas & truques",
"%s enter the database username and name." : "%s insira o nome de usuário e o nome do banco de dados.",
"%s enter the database username." : "%s insira o nome de usuário do banco de dados.",
"%s enter the database name." : "%s insira o nome do banco de dados.",
@@ -66,13 +67,13 @@ OC.L10N.register(
"Offending command was: \"%s\", name: %s, password: %s" : "Comando ofensivo era: \"%s\", nome: %s, senha: %s",
"PostgreSQL username and/or password not valid" : "Nome de usuário e/ou senha PostgreSQL inválido(s)",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X não é suportado e %s não funcionará corretamente nesta plataforma. Use-o por sua conta e risco!",
- "For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para obter melhores resultados, por favor considere o uso de um servidor GNU/Linux em seu lugar.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32 bits e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, remova a configuração de open_basedir de seu php.ini ou altere o PHP para 64bit.",
"Set an admin username." : "Defina um nome do usuário administrador.",
"Set an admin password." : "Defina uma senha de administrador.",
"Can't create or write into the data directory %s" : "Não é possível criar ou gravar no diretório de dados %s",
- "Invalid Federated Cloud ID" : "Associação Inválida de Nuvem ID",
+ "Invalid Federated Cloud ID" : "ID inválida de Nuvem Federada",
"%s shared »%s« with you" : "%s compartilhou »%s« com você",
"%s via %s" : "%s via %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "O compartilhamento %s falhou, porque o processo interno não permite ações de tipo %i",
@@ -88,21 +89,21 @@ OC.L10N.register(
"You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos",
"Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido",
"Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s. Talvez o servidor esteja inacessível.",
"Share type %s is not valid for %s" : "Tipo de compartilhamento %s não é válido para %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s",
"Setting permissions for %s failed, because the item was not found" : "Definir permissões para %s falhou, porque o item não foi encontrado",
"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Não é possível definir a data de expiração. Compartilhamentos não podem expirar mais tarde que %s depois de terem sido compartilhados",
"Cannot set expiration date. Expiration date is in the past" : "Não é possível definir a data de validade. Data de expiração está no passado",
- "Cannot clear expiration date. Shares are required to have an expiration date." : "Não é possível eliminar a data de expiração. Ações são obrigados a ter uma data de expiração.",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "Não é possível eliminar a data de expiração. Compartilhamentos devem ter uma data de expiração.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "Compartilhando backend %s deve implementar a interface OCP\\Share_Backend",
"Sharing backend %s not found" : "Compartilhamento backend %s não encontrado",
"Sharing backend for %s not found" : "Compartilhamento backend para %s não encontrado",
"Sharing failed, because the user %s is the original sharer" : "O compartilhamento falhou, porque o usuário %s é o compartilhador original",
"Sharing %s failed, because the permissions exceed permissions granted to %s" : "Compartilhamento %s falhou, porque as permissões excedem as permissões concedidas a %s",
"Sharing %s failed, because resharing is not allowed" : "Compartilhamento %s falhou, porque recompartilhamentos não são permitidos",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartilhamento %s falhou, porque a infra-estrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
- "Sharing %s failed, because the file could not be found in the file cache" : "Compartilhamento %s falhou, porque o arquivo não pôde ser encontrado no cache de arquivos",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartilhamento %s falhou, porque a infraestrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Compartilhamento %s falhou, porque o arquivo não pode ser encontrado no cache de arquivos",
"Cannot increase permissions of %s" : "Não é possível aumentar as permissões de %s",
"Files can't be shared with delete permissions" : "Os arquivos não podem ser compartilhadas com permissões de exclusão",
"Files can't be shared with create permissions" : "Os arquivos não podem ser compartilhados com permissões de criação",
@@ -113,7 +114,7 @@ OC.L10N.register(
"Monday" : "Segunda-feira",
"Tuesday" : "Terça-feira",
"Wednesday" : "Quarta-feira",
- "Thursday" : "Quita-feira",
+ "Thursday" : "Quinta-feira",
"Friday" : "Sexta-feira",
"Saturday" : "Sabado",
"Sun." : "Dom.",
@@ -161,11 +162,11 @@ 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",
- "App \"%s\" cannot be installed because appinfo file cannot be read." : "O App \"%s\" não pode ser instalado porque o arquivo appinfo não pode ser lido.",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "O aplicativo \"%s\" não pode ser instalado porque o arquivo appinfo não pode ser lido.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "O aplicativo \"%s\" não pode ser instalado pois não é compatível com a versão do servidor.",
"No app name specified" : "O nome do aplicativo não foi especificado.",
"App '%s' could not be installed!" : "O aplicativo '%s' pode não estar instalado!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" não pode ser instalado porque as seguintes dependências não foram cumpridas: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "O aplicativo \"%s\" não pode ser instalado porque as seguintes dependências não foram cumpridas: %s",
"a safe home for all your data" : "um local seguro para todos os seus dados",
"File is currently busy, please try again later" : "O arquivo está ocupado, tente novamente mais tarde",
"Can't read file" : "Não é possível ler arquivo",
@@ -176,27 +177,27 @@ OC.L10N.register(
"No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhum driver de banco de dados (sqlite, mysql, or postgresql) instalado.",
"Cannot write into \"config\" directory" : "Não é possível gravar no diretório \"config\"",
"Cannot write into \"apps\" directory" : "Não é possível gravar no diretório \"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." : "Isto pode ser corrigido dando ao webserver permissão de escrita %sgiving para o diretório apps directory%s ou desabilitando o appstore no arquivo de configuração.",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Isto pode ser corrigido por %sdando ao servidor web permissão de escrita para o diretório app%s ou desabilitando o appstore no arquivo de configuração.",
"Cannot create \"data\" directory (%s)" : "Não pode ser criado \"dados\" no diretório (%s)",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esta geralmente pode ser fixado por <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dando permissão de gravação ao diretório raiz do servidor</a>.",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas dando permissão de escita %sgiving ao webserver para o diretório raiz directory%s",
- "Setting locale to %s failed" : "Falha ao configurar localidade para %s",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Isto geralmente pode ser corrigido ao <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dar permissão de gravação no diretório raiz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas por %sdando permissão de escrita ao servidor web para o diretório raiz %s",
+ "Setting locale to %s failed" : "Falha ao configurar localização para %s",
"Please install one of these locales on your system and restart your webserver." : "Por favor, defina uma dessas localizações em seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor, peça ao seu administrador do servidor para instalar o módulo.",
"PHP module %s not installed." : "Módulo PHP %s não instalado.",
- "PHP setting \"%s\" is not set to \"%s\"." : "Configurações \"%s\" PHP não está configurado para \"%s\".",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Configuração PHP \"%s\" não está configurado para \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Ajustar a configuração no php.ini fará com que o Nextcloud execute novamente",
- "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está definido para \"%s\" em vez do valor esperado \"0\"",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está definido para \"%s\" ao invés do valor esperado \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corrigir esse problema defina <code>mbstring.func_overload</code> para <code>0</code> em seu php.ini",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "A libxml2 2.7.0 é a mínima versão requerida. Atualmente a versão %s está instalada.",
"To fix this issue update your libxml2 version and restart your web server." : "Para corrigir este problema, atualize a versão da sua libxml2 e reinicie seu servidor web.",
- "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está, aparentemente, configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.",
- "PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como desaparecidos?",
- "Please ask your server administrator to restart the web server." : "Por favor, peça ao seu administrador do servidor para reiniciar o servidor web.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP aparentemente está configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por um cache/acelerador, como Zend OPcache ou eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Por favor peça ao seu administrador do servidor para reiniciar o servidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requirido",
- "Please upgrade your database version" : "Por favor, atualize sua versão do banco de dados",
- "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor, altere as permissões para 0770 para que o diretório não possa ser listado por outros usuários.",
+ "Please upgrade your database version" : "Por favor atualize sua versão do banco de dados",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor altere as permissões para 0770 para que o diretório não possa ser listado por outros usuários.",
"Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários",
"Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto",
"Check the value of \"datadirectory\" in your configuration" : "Verifique o valor do \"diretóriodedados\" na sua configuração",
diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json
index 8ba757466f6..389fc60c882 100644
--- a/lib/l10n/pt_BR.json
+++ b/lib/l10n/pt_BR.json
@@ -2,25 +2,25 @@
"Cannot write into \"config\" directory!" : "Não é possível gravar no diretório \"config\"!",
"This can usually be fixed by giving the webserver write access to the config directory" : "Isso geralmente pode ser corrigido dando o acesso de gravação ao webserver para o diretório de configuração",
"See %s" : "Ver %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido dando permissão de gravação %sgiving ao webserver para o directory%s de configuração.",
- "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Os arquivos do app %$1s não foram substituídos corretamente. Certifique-se de que é uma versão compatível com o servidor.",
- "Sample configuration detected" : "Exemplo de configuração detectada",
- "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" : "Foi detectado que a configuração exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor, leia a documentação antes de realizar mudanças no config.php",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Isso geralmente pode ser corrigido por %s dando permissão de gravação ao servidor web para o diretório de configuração %s.",
+ "The files of the app %$1s were not replaced correctly. Make sure it is a version compatible with the server." : "Os arquivos do aplicativo %$1s não foram substituídos corretamente. Certifique-se de que é uma versão compatível com o servidor.",
+ "Sample configuration detected" : "Configuração de exemplo detectada",
+ "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" : "Foi detectado que a configuração de exemplo foi copiada. Isso pode desestabilizar sua instalação e não é suportado. Por favor leia a documentação antes de realizar mudanças no config.php",
"%1$s and %2$s" : "%1$s e %2$s",
"%1$s, %2$s and %3$s" : "%1$s, %2$s e %3$s",
"%1$s, %2$s, %3$s and %4$s" : "%1$s, %2$s, %3$s e %4$s",
"%1$s, %2$s, %3$s, %4$s and %5$s" : "%1$s, %2$s, %3$s, %4$s e %5$s",
- "PHP %s or higher is required." : "É requerido PHP %s ou superior.",
+ "PHP %s or higher is required." : "PHP %s ou superior é requerido.",
"PHP with a version lower than %s is required." : "É requerida uma versão PHP mais antiga que a %s .",
"%sbit or higher PHP required." : "%sbit ou maior é requerido.",
- "Following databases are supported: %s" : "Following databases are supported: %s",
+ "Following databases are supported: %s" : "Os seguintes bancos de dados são suportsdos: %s",
"The command line tool %s could not be found" : "A ferramenta de linha de comando %s não pode ser encontrada",
"The library %s is not available." : "A biblioteca %s não está disponível.",
"Library %s with a version higher than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão maior que %s - versão disponível %s.",
"Library %s with a version lower than %s is required - available version %s." : "É requerida uma biblioteca %s com uma versão menor que %s - versão disponível %s.",
"Following platforms are supported: %s" : "As seguintes plataformas são suportadas: %s",
- "Server version %s or higher is required." : "É requerido um Servidor da versão %s ou superior.",
- "Server version %s or lower is required." : "É requerido um Servidor da versão %s ou anterior.",
+ "Server version %s or higher is required." : "É requerido um servidor da versão %s ou superior.",
+ "Server version %s or lower is required." : "É requerido um servidor da versão %s ou anterior.",
"Unknown filetype" : "Tipo de arquivo desconhecido",
"Invalid image" : "Imagem inválida",
"Avatar image is not square" : "A imagem do avatar não é quadrada",
@@ -36,22 +36,23 @@
"seconds ago" : "segundos atrás",
"Module with id: %s does not exist. Please enable it in your apps settings or contact your administrator." : "Módulo com id: %s não existe. Ative-o em suas configurações de aplicativos ou contate o administrador.",
"File name is a reserved word" : "O nome do arquivo é uma palavra reservada",
- "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caractere inválido",
+ "File name contains at least one invalid character" : "O nome do arquivo contém pelo menos um caracter inválido",
"File name is too long" : "O nome do arquivo é muito longo",
- "Dot files are not allowed" : "Dot arquivos não são permitidos",
- "Empty filename is not allowed" : "Um nome de arquivo vazio não é permitido.",
+ "Dot files are not allowed" : "Arquivos Dot não são permitidos",
+ "Empty filename is not allowed" : "Nome de arquivo vazio não é permitido.",
"Help" : "Ajuda",
"Apps" : "Aplicações",
"Personal" : "Pessoal",
+ "Log out" : "Saída",
"Users" : "Usuários",
"Admin" : "Admin",
"APCu" : "APCu",
"Redis" : "Redis",
- "Server settings" : "Configurações de servidor",
+ "Server settings" : "Configurações do servidor",
"Sharing" : "Compartilhamento",
"Encryption" : "Criptografia",
"Additional settings" : "Configurações adicionais",
- "Tips & tricks" : "Dias & truques",
+ "Tips & tricks" : "Dicas & truques",
"%s enter the database username and name." : "%s insira o nome de usuário e o nome do banco de dados.",
"%s enter the database username." : "%s insira o nome de usuário do banco de dados.",
"%s enter the database name." : "%s insira o nome do banco de dados.",
@@ -64,13 +65,13 @@
"Offending command was: \"%s\", name: %s, password: %s" : "Comando ofensivo era: \"%s\", nome: %s, senha: %s",
"PostgreSQL username and/or password not valid" : "Nome de usuário e/ou senha PostgreSQL inválido(s)",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X não é suportado e %s não funcionará corretamente nesta plataforma. Use-o por sua conta e risco!",
- "For the best results, please consider using a GNU/Linux server instead." : "Para obter os melhores resultados, por favor, considere o uso de um servidor GNU/Linux em seu lugar.",
- "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32bit e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
+ "For the best results, please consider using a GNU/Linux server instead." : "Para obter melhores resultados, por favor considere o uso de um servidor GNU/Linux em seu lugar.",
+ "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4 GB and is highly discouraged." : "Aparentemente a instância %s está rodando em um ambiente PHP de 32 bits e o open_basedir foi configurado no php.ini. Isto pode gerar problemas com arquivos maiores que 4GB e é altamente desencorajado.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Por favor, remova a configuração de open_basedir de seu php.ini ou altere o PHP para 64bit.",
"Set an admin username." : "Defina um nome do usuário administrador.",
"Set an admin password." : "Defina uma senha de administrador.",
"Can't create or write into the data directory %s" : "Não é possível criar ou gravar no diretório de dados %s",
- "Invalid Federated Cloud ID" : "Associação Inválida de Nuvem ID",
+ "Invalid Federated Cloud ID" : "ID inválida de Nuvem Federada",
"%s shared »%s« with you" : "%s compartilhou »%s« com você",
"%s via %s" : "%s via %s",
"Sharing %s failed, because the backend does not allow shares from type %i" : "O compartilhamento %s falhou, porque o processo interno não permite ações de tipo %i",
@@ -86,21 +87,21 @@
"You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos",
"Sharing %s failed, because sharing with links is not allowed" : "Compartilhamento %s falhou, porque compartilhamento com links não é permitido",
"Not allowed to create a federated share with the same user" : "Não é permitido criar um compartilhamento associado com o mesmo usuário",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s, talvez o servidor esteja inacessível.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "O compartilhamento %s falhou, porque não foi possível encontrar %s. Talvez o servidor esteja inacessível.",
"Share type %s is not valid for %s" : "Tipo de compartilhamento %s não é válido para %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Definir permissões para %s falhou, porque as permissões excedem as permissões concedidas a %s",
"Setting permissions for %s failed, because the item was not found" : "Definir permissões para %s falhou, porque o item não foi encontrado",
"Cannot set expiration date. Shares cannot expire later than %s after they have been shared" : "Não é possível definir a data de expiração. Compartilhamentos não podem expirar mais tarde que %s depois de terem sido compartilhados",
"Cannot set expiration date. Expiration date is in the past" : "Não é possível definir a data de validade. Data de expiração está no passado",
- "Cannot clear expiration date. Shares are required to have an expiration date." : "Não é possível eliminar a data de expiração. Ações são obrigados a ter uma data de expiração.",
+ "Cannot clear expiration date. Shares are required to have an expiration date." : "Não é possível eliminar a data de expiração. Compartilhamentos devem ter uma data de expiração.",
"Sharing backend %s must implement the interface OCP\\Share_Backend" : "Compartilhando backend %s deve implementar a interface OCP\\Share_Backend",
"Sharing backend %s not found" : "Compartilhamento backend %s não encontrado",
"Sharing backend for %s not found" : "Compartilhamento backend para %s não encontrado",
"Sharing failed, because the user %s is the original sharer" : "O compartilhamento falhou, porque o usuário %s é o compartilhador original",
"Sharing %s failed, because the permissions exceed permissions granted to %s" : "Compartilhamento %s falhou, porque as permissões excedem as permissões concedidas a %s",
"Sharing %s failed, because resharing is not allowed" : "Compartilhamento %s falhou, porque recompartilhamentos não são permitidos",
- "Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartilhamento %s falhou, porque a infra-estrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
- "Sharing %s failed, because the file could not be found in the file cache" : "Compartilhamento %s falhou, porque o arquivo não pôde ser encontrado no cache de arquivos",
+ "Sharing %s failed, because the sharing backend for %s could not find its source" : "Compartilhamento %s falhou, porque a infraestrutura de compartilhamento para %s não conseguiu encontrar a sua fonte",
+ "Sharing %s failed, because the file could not be found in the file cache" : "Compartilhamento %s falhou, porque o arquivo não pode ser encontrado no cache de arquivos",
"Cannot increase permissions of %s" : "Não é possível aumentar as permissões de %s",
"Files can't be shared with delete permissions" : "Os arquivos não podem ser compartilhadas com permissões de exclusão",
"Files can't be shared with create permissions" : "Os arquivos não podem ser compartilhados com permissões de criação",
@@ -111,7 +112,7 @@
"Monday" : "Segunda-feira",
"Tuesday" : "Terça-feira",
"Wednesday" : "Quarta-feira",
- "Thursday" : "Quita-feira",
+ "Thursday" : "Quinta-feira",
"Friday" : "Sexta-feira",
"Saturday" : "Sabado",
"Sun." : "Dom.",
@@ -159,11 +160,11 @@
"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",
- "App \"%s\" cannot be installed because appinfo file cannot be read." : "O App \"%s\" não pode ser instalado porque o arquivo appinfo não pode ser lido.",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "O aplicativo \"%s\" não pode ser instalado porque o arquivo appinfo não pode ser lido.",
"App \"%s\" cannot be installed because it is not compatible with this version of the server." : "O aplicativo \"%s\" não pode ser instalado pois não é compatível com a versão do servidor.",
"No app name specified" : "O nome do aplicativo não foi especificado.",
"App '%s' could not be installed!" : "O aplicativo '%s' pode não estar instalado!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" não pode ser instalado porque as seguintes dependências não foram cumpridas: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "O aplicativo \"%s\" não pode ser instalado porque as seguintes dependências não foram cumpridas: %s",
"a safe home for all your data" : "um local seguro para todos os seus dados",
"File is currently busy, please try again later" : "O arquivo está ocupado, tente novamente mais tarde",
"Can't read file" : "Não é possível ler arquivo",
@@ -174,27 +175,27 @@
"No database drivers (sqlite, mysql, or postgresql) installed." : "Nenhum driver de banco de dados (sqlite, mysql, or postgresql) instalado.",
"Cannot write into \"config\" directory" : "Não é possível gravar no diretório \"config\"",
"Cannot write into \"apps\" directory" : "Não é possível gravar no diretório \"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." : "Isto pode ser corrigido dando ao webserver permissão de escrita %sgiving para o diretório apps directory%s ou desabilitando o appstore no arquivo de configuração.",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Isto pode ser corrigido por %sdando ao servidor web permissão de escrita para o diretório app%s ou desabilitando o appstore no arquivo de configuração.",
"Cannot create \"data\" directory (%s)" : "Não pode ser criado \"dados\" no diretório (%s)",
- "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Esta geralmente pode ser fixado por <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dando permissão de gravação ao diretório raiz do servidor</a>.",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas dando permissão de escita %sgiving ao webserver para o diretório raiz directory%s",
- "Setting locale to %s failed" : "Falha ao configurar localidade para %s",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Isto geralmente pode ser corrigido ao <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dar permissão de gravação no diretório raiz</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Permissões podem ser corrigidas por %sdando permissão de escrita ao servidor web para o diretório raiz %s",
+ "Setting locale to %s failed" : "Falha ao configurar localização para %s",
"Please install one of these locales on your system and restart your webserver." : "Por favor, defina uma dessas localizações em seu sistema e reinicie o seu servidor web.",
"Please ask your server administrator to install the module." : "Por favor, peça ao seu administrador do servidor para instalar o módulo.",
"PHP module %s not installed." : "Módulo PHP %s não instalado.",
- "PHP setting \"%s\" is not set to \"%s\"." : "Configurações \"%s\" PHP não está configurado para \"%s\".",
+ "PHP setting \"%s\" is not set to \"%s\"." : "Configuração PHP \"%s\" não está configurado para \"%s\".",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Ajustar a configuração no php.ini fará com que o Nextcloud execute novamente",
- "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está definido para \"%s\" em vez do valor esperado \"0\"",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload está definido para \"%s\" ao invés do valor esperado \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Para corrigir esse problema defina <code>mbstring.func_overload</code> para <code>0</code> em seu php.ini",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "A libxml2 2.7.0 é a mínima versão requerida. Atualmente a versão %s está instalada.",
"To fix this issue update your libxml2 version and restart your web server." : "Para corrigir este problema, atualize a versão da sua libxml2 e reinicie seu servidor web.",
- "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está, aparentemente, configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
- "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.",
- "PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como desaparecidos?",
- "Please ask your server administrator to restart the web server." : "Por favor, peça ao seu administrador do servidor para reiniciar o servidor web.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP aparentemente está configurado para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por um cache/acelerador, como Zend OPcache ou eAccelerator.",
+ "PHP modules have been installed, but they are still listed as missing?" : "Módulos do PHP foram instalados, mas eles ainda estão listados como faltantes?",
+ "Please ask your server administrator to restart the web server." : "Por favor peça ao seu administrador do servidor para reiniciar o servidor web.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 requirido",
- "Please upgrade your database version" : "Por favor, atualize sua versão do banco de dados",
- "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor, altere as permissões para 0770 para que o diretório não possa ser listado por outros usuários.",
+ "Please upgrade your database version" : "Por favor atualize sua versão do banco de dados",
+ "Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Por favor altere as permissões para 0770 para que o diretório não possa ser listado por outros usuários.",
"Data directory (%s) is readable by other users" : "Diretório de dados (%s) pode ser lido por outros usuários",
"Data directory (%s) must be an absolute path" : "Diretório de dados (%s) deve ser um caminho absoluto",
"Check the value of \"datadirectory\" in your configuration" : "Verifique o valor do \"diretóriodedados\" na sua configuração",
diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js
index d57025f5991..5998e8c770f 100644
--- a/lib/l10n/tr.js
+++ b/lib/l10n/tr.js
@@ -162,11 +162,11 @@ OC.L10N.register(
"The username is already being used" : "Bu kullanıcı adı zaten var",
"Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
"User disabled" : "Kullanıcı devre dışı",
- "App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması yüklenemez.",
- "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından yüklenemez.",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması kurulamaz.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından kurulamaz.",
"No app name specified" : "Uygulama adı belirtilmemiş",
"App '%s' could not be installed!" : "'%s' uygulaması kurulamadı!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu gereklilikler sağlanmadığı için yüklenemiyor: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu gereklilikler sağlanmadığı için kurulamıyor: %s",
"a safe home for all your data" : "verileriniz için güvenli bir barınak",
"File is currently busy, please try again later" : "Dosya şu anda meşgul, lütfen daha sonra deneyin",
"Can't read file" : "Dosya okunamadı",
@@ -174,7 +174,7 @@ OC.L10N.register(
"Authentication error" : "Kimlik doğrulama hatası",
"Token expired. Please reload page." : "Kodun süresi dolmuş. Lütfen sayfayı yenileyin.",
"Unknown user" : "Kullanıcı bilinmiyor",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "Herhangi bir veritabanı sürücüsü (sqlite, mysql ya da postgresql) yüklü değil.",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Herhangi bir veritabanı sürücüsü (sqlite, mysql ya da postgresql) kurulmamış.",
"Cannot write into \"config\" directory" : "\"config\" klasörüne yazılamıyor",
"Cannot write into \"apps\" directory" : "\"apps\" klasörüne 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 sorun genellikle, %sweb sunucusuna apps klasörüne yazma izni verilerek%s çözülebilir.",
@@ -182,9 +182,9 @@ OC.L10N.register(
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Bu sorun genellikle, <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">web sunucusuna kök klasöre yazma izni verilerek</a> çözülebilir.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "İzinler genellikle, %sweb sunucusuna kök klasöre yazma izni verilerek%s düzeltilebilir.",
"Setting locale to %s failed" : "Dil %s olarak ayarlanamadı",
- "Please install one of these locales on your system and restart your webserver." : "Lütfen bu dillerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.",
+ "Please install one of these locales on your system and restart your webserver." : "Lütfen bu dillerden birini sisteminize kurun ve web sunucunuzu yeniden başlatın.",
"Please ask your server administrator to install the module." : "Lütfen modülü kurması için sunucu yöneticinizle görüşün.",
- "PHP module %s not installed." : "PHP %s modülü yüklü değil.",
+ "PHP module %s not installed." : "PHP %s modülü kurulmamış.",
"PHP setting \"%s\" is not set to \"%s\"." : "\"%s\" PHP ayarı \"%s\" olarak ayarlanmamış.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "php.ini dosyasında bu ayar yapıldığında Nextcloud yeniden çalışır",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload, beklenen \"0\" değeri yerine \"%s\" olarak ayarlanmış",
diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json
index b855bca1e08..d5b9078f629 100644
--- a/lib/l10n/tr.json
+++ b/lib/l10n/tr.json
@@ -160,11 +160,11 @@
"The username is already being used" : "Bu kullanıcı adı zaten var",
"Login canceled by app" : "Oturum açma işlemi uygulama tarafından iptal edildi",
"User disabled" : "Kullanıcı devre dışı",
- "App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması yüklenemez.",
- "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından yüklenemez.",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "appinfo dosyası okunamadığından \"%s\" uygulaması kurulamaz.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" uygulaması sunucu sürümüyle uyumlu olmadığından kurulamaz.",
"No app name specified" : "Uygulama adı belirtilmemiş",
"App '%s' could not be installed!" : "'%s' uygulaması kurulamadı!",
- "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu gereklilikler sağlanmadığı için yüklenemiyor: %s",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" uygulaması, şu gereklilikler sağlanmadığı için kurulamıyor: %s",
"a safe home for all your data" : "verileriniz için güvenli bir barınak",
"File is currently busy, please try again later" : "Dosya şu anda meşgul, lütfen daha sonra deneyin",
"Can't read file" : "Dosya okunamadı",
@@ -172,7 +172,7 @@
"Authentication error" : "Kimlik doğrulama hatası",
"Token expired. Please reload page." : "Kodun süresi dolmuş. Lütfen sayfayı yenileyin.",
"Unknown user" : "Kullanıcı bilinmiyor",
- "No database drivers (sqlite, mysql, or postgresql) installed." : "Herhangi bir veritabanı sürücüsü (sqlite, mysql ya da postgresql) yüklü değil.",
+ "No database drivers (sqlite, mysql, or postgresql) installed." : "Herhangi bir veritabanı sürücüsü (sqlite, mysql ya da postgresql) kurulmamış.",
"Cannot write into \"config\" directory" : "\"config\" klasörüne yazılamıyor",
"Cannot write into \"apps\" directory" : "\"apps\" klasörüne 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 sorun genellikle, %sweb sunucusuna apps klasörüne yazma izni verilerek%s çözülebilir.",
@@ -180,9 +180,9 @@
"This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Bu sorun genellikle, <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">web sunucusuna kök klasöre yazma izni verilerek</a> çözülebilir.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "İzinler genellikle, %sweb sunucusuna kök klasöre yazma izni verilerek%s düzeltilebilir.",
"Setting locale to %s failed" : "Dil %s olarak ayarlanamadı",
- "Please install one of these locales on your system and restart your webserver." : "Lütfen bu dillerden birini sisteminize yükleyin ve web sunucunuzu yeniden başlatın.",
+ "Please install one of these locales on your system and restart your webserver." : "Lütfen bu dillerden birini sisteminize kurun ve web sunucunuzu yeniden başlatın.",
"Please ask your server administrator to install the module." : "Lütfen modülü kurması için sunucu yöneticinizle görüşün.",
- "PHP module %s not installed." : "PHP %s modülü yüklü değil.",
+ "PHP module %s not installed." : "PHP %s modülü kurulmamış.",
"PHP setting \"%s\" is not set to \"%s\"." : "\"%s\" PHP ayarı \"%s\" olarak ayarlanmamış.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "php.ini dosyasında bu ayar yapıldığında Nextcloud yeniden çalışır",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload, beklenen \"0\" değeri yerine \"%s\" olarak ayarlanmış",
diff --git a/lib/private/AppFramework/Http/Request.php b/lib/private/AppFramework/Http/Request.php
index fd43d468568..3f1e6fd951a 100644
--- a/lib/private/AppFramework/Http/Request.php
+++ b/lib/private/AppFramework/Http/Request.php
@@ -401,6 +401,8 @@ class Request implements \ArrayAccess, \Countable, IRequest {
protected function getContent() {
// If the content can't be parsed into an array then return a stream resource.
if ($this->method === 'PUT'
+ && $this->getHeader('Content-Length') !== 0
+ && $this->getHeader('Content-Length') !== null
&& strpos($this->getHeader('Content-Type'), 'application/x-www-form-urlencoded') === false
&& strpos($this->getHeader('Content-Type'), 'application/json') === false
) {
diff --git a/lib/private/AppFramework/Routing/RouteConfig.php b/lib/private/AppFramework/Routing/RouteConfig.php
index 70208725f46..e2675a3c847 100644
--- a/lib/private/AppFramework/Routing/RouteConfig.php
+++ b/lib/private/AppFramework/Routing/RouteConfig.php
@@ -231,9 +231,15 @@ class RouteConfig {
$routeName = $this->appName . '.' . strtolower($resource) . '.' . strtolower($method);
- $this->router->create($routeName, $url)->method($verb)->action(
+ $route = $this->router->create($routeName, $url)->method($verb)->action(
new RouteActionHandler($this->container, $controllerName, $actionName)
);
+
+ if (!$collectionAction) {
+ $route->requirements([
+ 'id' => '[^?]*'
+ ]);
+ }
}
}
}
diff --git a/lib/private/Encryption/Manager.php b/lib/private/Encryption/Manager.php
index 4d40675801e..9053e371b65 100644
--- a/lib/private/Encryption/Manager.php
+++ b/lib/private/Encryption/Manager.php
@@ -254,8 +254,11 @@ class Manager implements IManager {
* Add storage wrapper
*/
public function setupStorage() {
- $encryptionWrapper = new EncryptionWrapper($this->arrayCache, $this, $this->logger);
- Filesystem::addStorageWrapper('oc_encryption', array($encryptionWrapper, 'wrapStorage'), 2);
+ // If encryption is disabled and there are no loaded modules it makes no sense to load the wrapper
+ if (!empty($this->encryptionModules) || $this->isEnabled()) {
+ $encryptionWrapper = new EncryptionWrapper($this->arrayCache, $this, $this->logger);
+ Filesystem::addStorageWrapper('oc_encryption', array($encryptionWrapper, 'wrapStorage'), 2);
+ }
}
diff --git a/lib/private/Log/File.php b/lib/private/Log/File.php
index 4c7ef446a05..8011f63ab13 100644
--- a/lib/private/Log/File.php
+++ b/lib/private/Log/File.php
@@ -119,7 +119,9 @@ class File {
);
$entry = json_encode($entry);
$handle = @fopen(self::$logFile, 'a');
- @chmod(self::$logFile, 0640);
+ if ((fileperms(self::$logFile) & 0777) != 0640) {
+ @chmod(self::$logFile, 0640);
+ }
if ($handle) {
fwrite($handle, $entry."\n");
fclose($handle);
diff --git a/lib/private/Security/Bruteforce/Throttler.php b/lib/private/Security/Bruteforce/Throttler.php
index 765f109fdb3..73a27b677b0 100644
--- a/lib/private/Security/Bruteforce/Throttler.php
+++ b/lib/private/Security/Bruteforce/Throttler.php
@@ -186,6 +186,67 @@ class Throttler {
}
/**
+ * Check if the IP is whitelisted
+ *
+ * @param string $ip
+ * @return bool
+ */
+ private function isIPWhitelisted($ip) {
+ $keys = $this->config->getAppKeys('bruteForce');
+ $keys = array_filter($keys, function($key) {
+ $regex = '/^whitelist_/S';
+ return preg_match($regex, $key) === 1;
+ });
+
+ if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
+ $type = 4;
+ } else if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $type = 6;
+ } else {
+ return false;
+ }
+
+ $ip = inet_pton($ip);
+
+ foreach ($keys as $key) {
+ $cidr = $this->config->getAppValue('bruteForce', $key, null);
+
+ $cx = explode('/', $cidr);
+ $addr = $cx[0];
+ $mask = (int)$cx[1];
+
+ // Do not compare ipv4 to ipv6
+ if (($type === 4 && !filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) ||
+ ($type === 6 && !filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6))) {
+ continue;
+ }
+
+ $addr = inet_pton($addr);
+
+ $valid = true;
+ for($i = 0; $i < $mask; $i++) {
+ $part = ord($addr[(int)($i/8)]);
+ $orig = ord($ip[(int)($i/8)]);
+
+ $part = $part & (15 << (1 - ($i % 2)));
+ $orig = $orig & (15 << (1 - ($i % 2)));
+
+ if ($part !== $orig) {
+ $valid = false;
+ break;
+ }
+ }
+
+ if ($valid === true) {
+ return true;
+ }
+ }
+
+ return false;
+
+ }
+
+ /**
* Get the throttling delay (in milliseconds)
*
* @param string $ip
@@ -193,6 +254,10 @@ class Throttler {
* @return int
*/
public function getDelay($ip, $action = '') {
+ if ($this->isIPWhitelisted($ip)) {
+ return 0;
+ }
+
$cutoffTime = (new \DateTime())
->sub($this->getCutoff(43200))
->getTimestamp();
diff --git a/lib/private/Session/CryptoSessionData.php b/lib/private/Session/CryptoSessionData.php
index 58020edf66d..4e0b852cb35 100644
--- a/lib/private/Session/CryptoSessionData.php
+++ b/lib/private/Session/CryptoSessionData.php
@@ -129,7 +129,11 @@ class CryptoSessionData implements \ArrayAccess, ISession {
* Reset and recreate the session
*/
public function clear() {
+ $requesttoken = $this->get('requesttoken');
$this->sessionValues = [];
+ if ($requesttoken !== null) {
+ $this->set('requesttoken', $requesttoken);
+ }
$this->isModified = true;
$this->session->clear();
}
diff --git a/lib/private/Settings/Admin/Sharing.php b/lib/private/Settings/Admin/Sharing.php
index 9b17efa8028..8f57f77b20a 100644
--- a/lib/private/Settings/Admin/Sharing.php
+++ b/lib/private/Settings/Admin/Sharing.php
@@ -64,6 +64,7 @@ class Sharing implements ISettings {
'shareExcludeGroups' => $this->config->getAppValue('core', 'shareapi_exclude_groups', 'no') === 'yes' ? true : false,
'shareExcludedGroupsList' => $excludeGroupsList,
'publicShareDisclaimerText' => $this->config->getAppValue('core', 'shareapi_public_link_disclaimertext', null),
+ 'enableLinkPasswordByDefault' => $this->config->getAppValue('core', 'shareapi_enable_link_password_by_default', 'no'),
];
return new TemplateResponse('settings', 'admin/sharing', $parameters, '');
diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php
index 94df00551d4..080b697b238 100644
--- a/lib/private/Settings/Manager.php
+++ b/lib/private/Settings/Manager.php
@@ -273,6 +273,7 @@ class Manager implements IManager {
$sections = [
0 => [new Section('server', $this->l->t('Server settings'), 0, $this->url->imagePath('settings', 'admin.svg'))],
5 => [new Section('sharing', $this->l->t('Sharing'), 0, $this->url->imagePath('core', 'actions/share.svg'))],
+ 10 => [new Section('security', $this->l->t('Security'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
45 => [new Section('encryption', $this->l->t('Encryption'), 0, $this->url->imagePath('core', 'actions/password.svg'))],
98 => [new Section('additional', $this->l->t('Additional settings'), 0, $this->url->imagePath('core', 'actions/settings-dark.svg'))],
99 => [new Section('tips-tricks', $this->l->t('Tips & tricks'), 0, $this->url->imagePath('settings', 'help.svg'))],
diff --git a/lib/private/Template/JSCombiner.php b/lib/private/Template/JSCombiner.php
index 77c46a5e45e..604cd2cceb7 100644
--- a/lib/private/Template/JSCombiner.php
+++ b/lib/private/Template/JSCombiner.php
@@ -98,7 +98,7 @@ class JSCombiner {
$fileName = str_replace('.json', '.js', $fileName) . '.deps';
try {
$deps = $this->depsCache->get($folder->getName() . '-' . $fileName);
- if ($deps === null) {
+ if ($deps === null || $deps === '') {
$depFile = $folder->getFile($fileName);
$deps = $depFile->getContent();
$this->depsCache->set($folder->getName() . '-' . $fileName, $deps);
diff --git a/lib/private/Template/JSConfigHelper.php b/lib/private/Template/JSConfigHelper.php
index ca45bbee9c6..4fc21680211 100644
--- a/lib/private/Template/JSConfigHelper.php
+++ b/lib/private/Template/JSConfigHelper.php
@@ -112,6 +112,9 @@ class JSConfigHelper {
$apps_paths[$app] = \OC_App::getAppWebPath($app);
}
+
+ $enableLinkPasswordByDefault = $this->config->getAppValue('core', 'shareapi_enable_link_password_by_default', 'no');
+ $enableLinkPasswordByDefault = ($enableLinkPasswordByDefault === 'yes') ? true : false;
$defaultExpireDateEnabled = $this->config->getAppValue('core', 'shareapi_default_expire_date', 'no') === 'yes';
$defaultExpireDate = $enforceDefaultExpireDate = null;
if ($defaultExpireDateEnabled) {
@@ -217,6 +220,7 @@ class JSConfigHelper {
'defaultExpireDate' => $defaultExpireDate,
'defaultExpireDateEnforced' => $enforceDefaultExpireDate,
'enforcePasswordForPublicLink' => \OCP\Util::isPublicLinkPasswordRequired(),
+ 'enableLinkPasswordByDefault' => $enableLinkPasswordByDefault,
'sharingDisabledForUser' => \OCP\Util::isSharingDisabledForUser(),
'resharingAllowed' => \OCP\Share::isResharingAllowed(),
'remoteShareAllowed' => $outgoingServer2serverShareEnabled,
diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php
index 7f351c5b00e..0672fefbe0c 100644
--- a/lib/private/legacy/util.php
+++ b/lib/private/legacy/util.php
@@ -981,9 +981,9 @@ class OC_Util {
);
exit();
}
- // Redirect to index page if 2FA challenge was not solved yet
+ // Redirect to 2FA challenge selection if 2FA challenge was not solved yet
if (\OC::$server->getTwoFactorAuthManager()->needsSecondFactor(\OC::$server->getUserSession()->getUser())) {
- header('Location: ' . \OCP\Util::linkToAbsolute('', 'index.php'));
+ header('Location: ' . \OC::$server->getURLGenerator()->linkToRoute('core.TwoFactorChallenge.selectChallenge'));
exit();
}
}
diff --git a/settings/l10n/es_MX.js b/settings/l10n/es_MX.js
index 8879614ab3c..caca96a32b5 100644
--- a/settings/l10n/es_MX.js
+++ b/settings/l10n/es_MX.js
@@ -5,62 +5,265 @@ OC.L10N.register(
"Not enabled" : "No habilitado",
"Wrong password" : "Contraseña incorrecta",
"Saved" : "Guardado",
- "No user supplied" : "No se especificó un usuario",
- "Unable to change password" : "No se ha podido cambiar la contraseña",
+ "No user supplied" : "No se proporcionó un usuario",
+ "Unable to change password" : "No fue posible cambiar la contraseña",
"Authentication error" : "Error de autenticación",
- "Wrong admin recovery password. Please check the password and try again." : "Contraseña de recuperación de administrador incorrecta. Por favor compruebe la contraseña e inténtelo de nuevo.",
+ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Favor de proporcionar una contraseña de recuperación de administrador; de lo contrario toda la información del usuario se perderá. ",
+ "Wrong admin recovery password. Please check the password and try again." : "Contraseña de recuperación de administrador incorrecta. Favor de verificarla e inténtelo de nuevo.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando y actualizando aplicaciones por la tienda de aplicaciones o Compartiendo la Nube Federada",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL está usando una versión anticuada (%s) de %s. Favor de actualizar su sistema operativo o las funcialidades tales como %s no funcionarán de forma confiable.",
+ "A problem occurred, please check your log files (Error: %s)" : "Se presentó un problema, favor de verificar sus archivos de bitácoras (Error: %s)",
+ "Migration Completed" : "Migración completada",
+ "Group already exists." : "El grupo ya existe.",
+ "Unable to add group." : "No fue posible agregar al grupo.",
+ "Unable to delete group." : "No fue posible borrar el grupo.",
+ "test email settings" : "probar los ajustes del correo electrónico",
+ "Mail could not be sent. Check your mail server log" : "El correo no pudo ser enviado. Verifique la bitáctora del servidor de correo",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Se presentó un problema al enviar el correo electrónico. Favor de revisar sus ajustes (Error: %s)",
"Email sent" : "Correo electrónico enviado",
+ "You need to set your user email before being able to send test emails." : "Requiere establecer su correo electrónico andes de poder enviar correos electrónicos de prueba. ",
"Invalid request" : "Solicitud inválida",
+ "Invalid mail address" : "Dirección de correo inválida",
+ "No valid group selected" : "No se ha seleccionado un grupo válido",
+ "A user with that name already exists." : "Un usuario con ese nombre ya existe. ",
+ "To send a password link to the user an email address is required." : "Para enviar la liga a una contraseña al usuario, se requiere de una dirección de correo electrónico.",
+ "Unable to create user." : "No fue posible crear el usuario. ",
+ "Your %s account was created" : "Su %s cuenta ha sido creada",
+ "Unable to delete user." : "No fue posible eliminar el usuario.",
+ "Settings saved" : "Se han guardado los ajustes",
"Unable to change full name" : "No fue posible cambiar el nombre completo",
- "Your full name has been changed." : "Se ha cambiado su nombre completo.",
+ "Unable to change email address" : "No fue posible cambiar la dirección de correo electrónico",
+ "Your full name has been changed." : "Su nombre completo ha sido cambiado.",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario inválido",
+ "Unable to change mail address" : "No fue posible cambiar la dirección de correo",
"Email saved" : "Correo electrónico guardado",
- "Couldn't update app." : "No se pudo actualizar la aplicación.",
+ "Password confirmation is required" : "Se requiere la confirmación de la contraseña",
+ "Couldn't remove app." : "No fue posible eliminar la aplicación. ",
+ "Couldn't update app." : "No fue posible actualizar la aplicación.",
+ "Are you really sure you want add {domain} as trusted domain?" : "¿Realmente está seguro que quiere agregar a {domain} como un dominio de confianza?",
+ "Add trusted domain" : "Agregar dominio de confianza",
+ "Migration in progress. Please wait until the migration is finished" : "La migración está en curso. Favor de aguardar hasta que termine",
+ "Migration started …" : "La migración ha comenzado ...",
+ "Not saved" : "No guardado",
+ "Sending..." : "Enviando...",
+ "Official" : "Oficial",
"All" : "Todos",
- "Error while disabling app" : "Error mientras se desactivaba la aplicación",
+ "Update to %s" : "Actualizar a %s",
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Usted tiene %n actualización de la aplicación pendiente","Usted tiene %n actualizaciones de la aplicación pendientes"],
+ "No apps found for your version" : "No se encontraron aplicaciones para su versión",
+ "The app will be downloaded from the app store" : "La aplicación será descargada de la tienda de aplicaciones <app store>",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las aplicaciones oficiales son desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad centralizada y se encuentran listas para ser usadas en producción. ",
+ "Disabling app …" : "Deshabilitando la aplicación ...",
+ "Error while disabling app" : "Se presentó un error mientras se deshabilitaba la aplicación",
"Disable" : "Deshabilitar",
"Enable" : "Habilitar",
- "Error while enabling app" : "Error mientras se activaba la aplicación",
+ "Enabling app …" : "Habilitando aplicación ...",
+ "Error while enabling app" : "Se presentó un error al habilitar la aplicación",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Error: esta aplicación no puede ser habilitada porque genera inestabilidad en el servidor",
+ "Error: could not disable broken app" : "Error: No fue posible deshaiblitar la aplicación rota",
+ "Error while disabling broken app" : "Se presentó un error al deshabilitar la aplicación rota",
"Updating...." : "Actualizando....",
- "Error while updating app" : "Error al actualizar la aplicación",
+ "Error while updating app" : "Se presentó un error al actualizar la aplicación",
"Updated" : "Actualizado",
+ "Uninstalling ...." : "Desinstalando ...",
+ "Error while uninstalling app" : "Se presentó un error al desinstalar la aplicación",
+ "Uninstall" : "Desinstalar",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "La aplicación está habilitada pero necesita ser actualizada. Usted será redireccionado a la página de actualización en 5 segundos. ",
+ "App update" : "Actualización de la aplicación",
+ "Approved" : "Aprovado",
+ "Experimental" : "Experimental",
+ "No apps found for {query}" : "No se encontraron aplicación para {query}",
+ "Allow filesystem access" : "Permitir acceso al sistema de archivos",
+ "Disconnect" : "Desconectar",
+ "Revoke" : "Revocar",
+ "Internet Explorer" : "Internet Explorer",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome para Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "Cliente iOS",
+ "Android Client" : "Cliente Android",
+ "Sync client - {os}" : "Sync client - {os}",
+ "This session" : "Esta sesión",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Credenciales!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presione ⌘-C para copiar. ",
+ "Press Ctrl-C to copy." : "Presione Ctrl-C para copiar.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Favor de cargar un certificado PEM con codificación ASCII",
+ "Valid until {date}" : "Válido hasta {date}",
"Delete" : "Borrar",
+ "Local" : "Local",
+ "Private" : "Privado",
+ "Only visible to local users" : "Visible sólo para usuarios locales",
+ "Only visible to you" : "Sólo visible para usted",
+ "Contacts" : "Contactos",
+ "Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
+ "Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"Select a profile picture" : "Seleccionar una imagen de perfil",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
"Groups" : "Grupos",
+ "Unable to delete {objName}" : "No fue posuble borrar {objName}",
+ "Error creating group: {message}" : "Se presentó un error al crear el grupo: {message}",
+ "A valid group name must be provided" : "Debe proporcionar un nombre de grupo válido",
+ "deleted {groupName}" : "borrado {groupName}",
"undo" : "deshacer",
"never" : "nunca",
+ "deleted {userName}" : "borrado {userName}",
+ "No user found for <strong>{pattern}</strong>" : "No se encontraron usuarios para <strong>{pattern}</strong>",
+ "Unable to add user to group {group}" : "No fue posible agregar el usuario al grupo {group}",
+ "Unable to remove user from group {group}" : "No fue posible eliminar el usuario del grupo {group}",
+ "Add group" : "Agregar grupo",
+ "Invalid quota value \"{val}\"" : "Valor de cuota inválido \"{val}\"",
+ "no group" : "sin grupos",
+ "Password successfully changed" : "La contraseña fue cambiada exitosamente",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "El cambiar la contraseña puede generar pérdida de datos, porque la recuperación de datos no está disponible para este usuario",
+ "Could not change the users email" : "No fue posible cambiar el correo electrónico de los susuarios",
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
+ "Error creating user: {message}" : "Se presentó un error al crear el usuario: {message}",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
"__language_name__" : "Español (México)",
"Unlimited" : "Ilimitado",
+ "Personal info" : "Información personal",
+ "Sessions" : "Sesiones",
+ "App passwords" : "Contraseñas de aplicación",
+ "Sync clients" : "Sincronizar clientes",
"None" : "Ninguno",
- "Login" : "Iniciar sesión",
- "Encryption" : "Cifrado",
+ "Login" : "Inicio de sesión",
+ "Plain" : "Plano",
+ "NT LAN Manager" : "Administrador de LAN NT",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "Servidor de correo electrónico",
+ "Open documentation" : "Abrir documentación",
+ "This is used for sending out notifications." : "Esto se usa para enviar notificaciones",
+ "Send mode" : "Modo de envío",
+ "Encryption" : "Encripción",
+ "From address" : "De la dirección",
+ "mail" : "correo",
+ "Authentication method" : "Método de autenticación",
+ "Authentication required" : "Autenticación requerida",
"Server address" : "Dirección del servidor",
"Port" : "Puerto",
+ "Credentials" : "Credenciales",
+ "SMTP Username" : "nombre de usuario SMTP",
+ "SMTP Password" : "Contraseña SMTP",
+ "Store credentials" : "Almacenar credenciales",
+ "Test email settings" : "Probar ajsutes de correo electrónico",
+ "Send email" : "Enviar correo electrónico",
+ "Server-side encryption" : "Encripción del lado del servidor",
+ "Enable server-side encryption" : "Habilitar encripción del lado del servidor",
+ "Please read carefully before activating server-side encryption: " : "Favor de leer detenidamente antes de activar la encripción del lado de 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." : "Una vez que la encripción se encuentre habilitada, todos lo archivos cargados al servidor desde ese momento en tiempo, se encriptarán en el servidor. Sólo será posible deshabilitar la encripción en una fecha posterior si el modulo de encripción activo soporta esa funcionalidad y si todas las preciondiciones están satisfechas (ejem. establecer una llave de recuperación).",
+ "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." : "La encripción por sí sola no garantiza la seguridad del sistema. Favor de consultar la documentación para mayores informes de cómo funciona la aplicación de encripción y de los casos de uso soportados. ",
+ "Be aware that encryption always increases the file size." : "Favor de considerar que la encripción siempre aumenta el tamaño de los archivos. ",
+ "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." : "Siempre es una buena idea generar respaldos de sus datos, en caso de tener encripción asegúrese de respaldar las llaves de encripción junto con sus datos. ",
+ "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final: ¿Realmente desea habilitar la encripción?",
+ "Enable encryption" : "Habilitar encripción",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado un módulo de encripción, favor de habilitar un módulo de encripción en el menú de la aplicación. ",
"Select default encryption module:" : "Seleccionar modulo de encripción predeterminado:",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Usted necesita migrar sus llaves de encripción de la encripción anterior (ownCloud <= 8.0) a la actual. Favor de habilitar el \"Módulo de encripción predeterminado\" y ejecute el comando 'occ encryption:migrate'",
- "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.",
- "System locale can not be set to a one which supports UTF-8." : "No se puede escoger una configuración regional que soporte UTF-8.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Usted necesita migar sus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la actual. ",
+ "Start migration" : "Comenzar migración",
+ "Security & setup warnings" : "Advertencias de seguridad y configuración",
+ "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 configuración de Sólo Lectura ha sido habilitada. Esto previene establecer algunas configuraciones mediante la interface web. Adicionalmente, el archivo necesita que se le establezcan tener permisos de escritura manualemente en cada actualización. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto es posiblemente causado por un caché/acelerador tal como Zend OPcache o eAccelerator. ",
+ "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 puede correr con el nivel de aislamiento de transacción de \"READ COMMITTED\". Puede causar problemas cuando mútiples acciones sean ejecutadas en paralelo.",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Le recomendamos ámpliamente que habilite este módulo para obtener los mejores resultados en 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 se encuentra deshabilitado, esto puede generar temas bajo ciertas condiciones. Abilite 'filelocking.enabled' en el archivo config.php para evitar problemas. Favor de consultar la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatcón ↗</a> para mayor información.",
+ "System locale can not be set to a one which supports UTF-8." : "No es posible establecer la regionalización del sistema a una que soporte UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Le sugerimos ámpliamente instalar en su sistema los paquetes requeridos para soportar alguno de los sigueintes locales: %s.",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar la tarea de cron con CLI. Se presentaron los siguientes errores técnicos:",
+ "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=\"%s\">log</a>." : "Favor de volver a verificar <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guías de instalación↗</a>, y compruebe que no haya errores o advertenicas en la <a href=\"%s\">bitácora</a>.",
+ "All checks passed." : "Pasaron todas las verificaciones. ",
"Cron" : "Cron",
+ "Last cron job execution: %s." : "Última ejecución de tareas de cron: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "Última ejecución de tareas de cron: %s. Algo parece estar mal. ",
+ "Cron was not executed yet!" : "¡Aún no han sido ejecutas las tareas programadas!",
"Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php se registra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "El cron.php necesita ser ejecutado por el usuario del sistema \"%s\".",
"Version" : "Versión",
"Sharing" : "Compartiendo",
"Allow apps to use the Share API" : "Permitir a las aplicaciones utilizar la API de Compartición",
+ "Allow users to share via link" : "Permitir a los usuarios compartir mediante ligas",
"Allow public uploads" : "Permitir subidas públicas",
- "Set default expiration date" : "Establecer fecha de caducidad predeterminada",
+ "Enforce password protection" : "Forzar protección de contraseñas",
+ "Set default expiration date" : "Establecer la fecha de expiración predeterminada",
+ "Expire after " : "Expirar después de",
"days" : "días",
- "Allow resharing" : "Permitir re-compartición",
+ "Enforce expiration date" : "Forzar fecha de expiración",
+ "Allow resharing" : "Permitir volver a compartir",
+ "Tips & tricks" : "Consejos & trucos",
+ "How to do backups" : "Cómo hacer respaldos",
+ "Advanced monitoring" : "Monitoreo avanzado",
+ "Performance tuning" : "Optimización de rendimiento",
+ "Improving the config.php" : "Mejorando la config.php",
+ "Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
+ "Developer documentation" : "Documentación del desarrollador",
+ "by %s" : "por %s",
+ "%s-licensed" : "%s-licensed",
+ "Documentation:" : "Documentación:",
+ "User documentation" : "Documentación del usuario",
+ "Admin documentation" : "Documentación del administrador",
+ "Visit website" : "Visite el sitio web",
+ "Report a bug" : "Reporte un tema",
+ "Show description …" : "Mostrar descripción ...",
+ "Hide description …" : "Ocultar descripción ...",
+ "This app has an update available." : "Esta aplicación tiene una actualización disponible.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:",
+ "Enable only for specific groups" : "Habilitar sólo para grupos específicos",
+ "Uninstall app" : "Desinstalar la aplicación",
+ "SSL Root Certificates" : "Certificado SSL Raíz",
+ "Common Name" : "Nombre común",
+ "Valid until" : "Válido hasta",
+ "Issued By" : "Levantado Por",
+ "Valid until %s" : "Válido hasta %s",
+ "Import root certificate" : "Importar certificado raíz",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hola,<br><br> sólo queremos informarle que ahora usted tiene una cuenta %s.<br><br> Su nombre de usuario es: <strong>%s</strong> <br>Ingrese a ella: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "¡Saludos!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola,\n\nsólo queremos informarle que ahora usted tiene una cuenta %s.\n\nSu nombre de usuario es: %s\n\nIngrese a ella: %s\n",
+ "Administrator documentation" : "Documentación de adminsitrador",
+ "Online documentation" : "Documentación en línea",
"Forum" : "Foro",
+ "Getting help" : "Obtener ayuda",
+ "Commercial support" : "Soporte comercial",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Usted está usando <strong>%s</strong> de <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Usted está usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Subir otra",
- "Remove image" : "Borrar imagen",
+ "Select from Files" : "Seleccionar desde Archivos",
+ "Remove image" : "Eliminar imagen",
+ "png or jpg, max. 20 MB" : "png o jpg max. 20 MB",
+ "Picture provided by original account" : "Imagen proporcionadoa por la cuenta original ",
"Cancel" : "Cancelar",
+ "Choose as profile picture" : "Seleccionar como foto del perfil",
+ "Full name" : "Nombre completo",
+ "No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
"Your email address" : "Su dirección de correo electrónico",
+ "No email address set" : "No se ha establecido la dirección de correo electrónico",
+ "For password reset and notifications" : "Para reestablecer contraseña y notificaciones",
+ "Phone number" : "Número de teléfono",
+ "Your phone number" : "Su número telefónico",
+ "Address" : "Dirección",
+ "Your postal address" : "Su dirección postal",
+ "Website" : "Sitio web",
+ "Your website" : "Su sitio web",
+ "Twitter" : "Twitter",
+ "You are member of the following groups:" : "Usted es un miembro de los siguientes grupos:",
"Password" : "Contraseña",
"Current password" : "Contraseña actual",
"New password" : "Nueva contraseña",
@@ -68,21 +271,54 @@ OC.L10N.register(
"Language" : "Idioma",
"Help translate" : "Ayude a traducir",
"Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos",
+ "Desktop client" : "Cliente de escritorio",
+ "Android app" : "Aplicación android",
+ "iOS app" : "Aplicación iOS",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "¡Si desea apoyar al proyecto {contributeopen}júnase al desarrollo{linkclose} o {contributeopen} pase la vozd{linkclose}!",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
+ "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, de escritorio y móbiles han iniciado sesión en su cuenta. ",
+ "Device" : "Dispositivo",
+ "Last activity" : "Última actividad",
+ "Passcodes that give an app or device permissions to access your account." : "Los códigos de seguridad que le dan permisos a la aplicación o dispositivo para accesar a su cuenta. ",
"Name" : "Nombre",
+ "App name" : "Nombre de la aplicación",
+ "Create new app password" : "Crear una nueva contraseña de aplicación",
+ "Use the credentials below to configure your app or device." : "Use las siguientes credenciales para configurar su aplicación o dispositivo. ",
+ "For security reasons this password will only be shown once." : "Por razones de seguridad esta contraseña sólo se mostrará una vez. ",
"Username" : "Nombre de usuario",
+ "Done" : "Terminado",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud {linkclose}, el {githubopen}código fuente {linkclose} está licenciado bajo {licenseopen}AGPL{linkclose}.",
+ "Follow us on Google Plus!" : "¡Síganos en Google Plus!",
+ "Subscribe to our twitter channel!" : "¡Suscríbase a nuestro canal de twitter!",
+ "Subscribe to our newsletter!" : "¡Suscribase a nuestro boletín!",
+ "Settings" : "Ajustes",
+ "Show storage location" : "Mostrar la ubicación del almacenamiento",
+ "Show last log in" : "Mostrar el último inicio de sesión",
+ "Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
+ "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Cuando la contraseña de un usuario nuevo se deja en blanco, un correo electrónico de activación con una liga para establecer la contraseña se enviará al usario",
+ "Show email address" : "Mostrar dirección de correo electrónico",
+ "E-Mail" : "Correo electrónico",
"Create" : "Crear",
- "Admin Recovery Password" : "Recuperación de la contraseña de administración",
+ "Admin Recovery Password" : "Recuperación de la contraseña del 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.",
+ "Group name" : "Nombre del grupo",
+ "Everyone" : "Todos",
+ "Admins" : "Administradores",
"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\")",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Favor de indicar la cuota de almacenamiento (ejem: \"512 MB\" ó \"12 GB\")",
"Other" : "Otro",
+ "Group admin for" : "Administrador del grupo para",
+ "Quota" : "Cuota",
+ "Storage location" : "Úbicación del almacenamiento",
+ "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",
"Default" : "Predeterminado",
- "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor facilite una contraseña de recuperación de administrador, sino podrían perderse todos los datos de usuario",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Favor de proporcionar una contraseña de recuperación del administrador, de lo contrario se perderán todos los datos de usuario",
"Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s"
+ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No fue posible eliminar el usuario del grupo %s",
+ "For password recovery and notifications" : "Para recuperación de contraseña y notificaciones"
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/es_MX.json b/settings/l10n/es_MX.json
index facbd61fc73..f3f41b3fb02 100644
--- a/settings/l10n/es_MX.json
+++ b/settings/l10n/es_MX.json
@@ -3,62 +3,265 @@
"Not enabled" : "No habilitado",
"Wrong password" : "Contraseña incorrecta",
"Saved" : "Guardado",
- "No user supplied" : "No se especificó un usuario",
- "Unable to change password" : "No se ha podido cambiar la contraseña",
+ "No user supplied" : "No se proporcionó un usuario",
+ "Unable to change password" : "No fue posible cambiar la contraseña",
"Authentication error" : "Error de autenticación",
- "Wrong admin recovery password. Please check the password and try again." : "Contraseña de recuperación de administrador incorrecta. Por favor compruebe la contraseña e inténtelo de nuevo.",
+ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Favor de proporcionar una contraseña de recuperación de administrador; de lo contrario toda la información del usuario se perderá. ",
+ "Wrong admin recovery password. Please check the password and try again." : "Contraseña de recuperación de administrador incorrecta. Favor de verificarla e inténtelo de nuevo.",
+ "installing and updating apps via the app store or Federated Cloud Sharing" : "instalando y actualizando aplicaciones por la tienda de aplicaciones o Compartiendo la Nube Federada",
+ "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL está usando una versión anticuada (%s) de %s. Favor de actualizar su sistema operativo o las funcialidades tales como %s no funcionarán de forma confiable.",
+ "A problem occurred, please check your log files (Error: %s)" : "Se presentó un problema, favor de verificar sus archivos de bitácoras (Error: %s)",
+ "Migration Completed" : "Migración completada",
+ "Group already exists." : "El grupo ya existe.",
+ "Unable to add group." : "No fue posible agregar al grupo.",
+ "Unable to delete group." : "No fue posible borrar el grupo.",
+ "test email settings" : "probar los ajustes del correo electrónico",
+ "Mail could not be sent. Check your mail server log" : "El correo no pudo ser enviado. Verifique la bitáctora del servidor de correo",
+ "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "Se presentó un problema al enviar el correo electrónico. Favor de revisar sus ajustes (Error: %s)",
"Email sent" : "Correo electrónico enviado",
+ "You need to set your user email before being able to send test emails." : "Requiere establecer su correo electrónico andes de poder enviar correos electrónicos de prueba. ",
"Invalid request" : "Solicitud inválida",
+ "Invalid mail address" : "Dirección de correo inválida",
+ "No valid group selected" : "No se ha seleccionado un grupo válido",
+ "A user with that name already exists." : "Un usuario con ese nombre ya existe. ",
+ "To send a password link to the user an email address is required." : "Para enviar la liga a una contraseña al usuario, se requiere de una dirección de correo electrónico.",
+ "Unable to create user." : "No fue posible crear el usuario. ",
+ "Your %s account was created" : "Su %s cuenta ha sido creada",
+ "Unable to delete user." : "No fue posible eliminar el usuario.",
+ "Settings saved" : "Se han guardado los ajustes",
"Unable to change full name" : "No fue posible cambiar el nombre completo",
- "Your full name has been changed." : "Se ha cambiado su nombre completo.",
+ "Unable to change email address" : "No fue posible cambiar la dirección de correo electrónico",
+ "Your full name has been changed." : "Su nombre completo ha sido cambiado.",
+ "Forbidden" : "Prohibido",
+ "Invalid user" : "Usuario inválido",
+ "Unable to change mail address" : "No fue posible cambiar la dirección de correo",
"Email saved" : "Correo electrónico guardado",
- "Couldn't update app." : "No se pudo actualizar la aplicación.",
+ "Password confirmation is required" : "Se requiere la confirmación de la contraseña",
+ "Couldn't remove app." : "No fue posible eliminar la aplicación. ",
+ "Couldn't update app." : "No fue posible actualizar la aplicación.",
+ "Are you really sure you want add {domain} as trusted domain?" : "¿Realmente está seguro que quiere agregar a {domain} como un dominio de confianza?",
+ "Add trusted domain" : "Agregar dominio de confianza",
+ "Migration in progress. Please wait until the migration is finished" : "La migración está en curso. Favor de aguardar hasta que termine",
+ "Migration started …" : "La migración ha comenzado ...",
+ "Not saved" : "No guardado",
+ "Sending..." : "Enviando...",
+ "Official" : "Oficial",
"All" : "Todos",
- "Error while disabling app" : "Error mientras se desactivaba la aplicación",
+ "Update to %s" : "Actualizar a %s",
+ "_You have %n app update pending_::_You have %n app updates pending_" : ["Usted tiene %n actualización de la aplicación pendiente","Usted tiene %n actualizaciones de la aplicación pendientes"],
+ "No apps found for your version" : "No se encontraron aplicaciones para su versión",
+ "The app will be downloaded from the app store" : "La aplicación será descargada de la tienda de aplicaciones <app store>",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Las aplicaciones oficiales son desarrolladas por y dentro de la comunidad. Ofrecen una funcionalidad centralizada y se encuentran listas para ser usadas en producción. ",
+ "Disabling app …" : "Deshabilitando la aplicación ...",
+ "Error while disabling app" : "Se presentó un error mientras se deshabilitaba la aplicación",
"Disable" : "Deshabilitar",
"Enable" : "Habilitar",
- "Error while enabling app" : "Error mientras se activaba la aplicación",
+ "Enabling app …" : "Habilitando aplicación ...",
+ "Error while enabling app" : "Se presentó un error al habilitar la aplicación",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Error: esta aplicación no puede ser habilitada porque genera inestabilidad en el servidor",
+ "Error: could not disable broken app" : "Error: No fue posible deshaiblitar la aplicación rota",
+ "Error while disabling broken app" : "Se presentó un error al deshabilitar la aplicación rota",
"Updating...." : "Actualizando....",
- "Error while updating app" : "Error al actualizar la aplicación",
+ "Error while updating app" : "Se presentó un error al actualizar la aplicación",
"Updated" : "Actualizado",
+ "Uninstalling ...." : "Desinstalando ...",
+ "Error while uninstalling app" : "Se presentó un error al desinstalar la aplicación",
+ "Uninstall" : "Desinstalar",
+ "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "La aplicación está habilitada pero necesita ser actualizada. Usted será redireccionado a la página de actualización en 5 segundos. ",
+ "App update" : "Actualización de la aplicación",
+ "Approved" : "Aprovado",
+ "Experimental" : "Experimental",
+ "No apps found for {query}" : "No se encontraron aplicación para {query}",
+ "Allow filesystem access" : "Permitir acceso al sistema de archivos",
+ "Disconnect" : "Desconectar",
+ "Revoke" : "Revocar",
+ "Internet Explorer" : "Internet Explorer",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome para Android",
+ "iPhone iOS" : "iPhone iOS",
+ "iPad iOS" : "iPad iOS",
+ "iOS Client" : "Cliente iOS",
+ "Android Client" : "Cliente Android",
+ "Sync client - {os}" : "Sync client - {os}",
+ "This session" : "Esta sesión",
+ "Copy" : "Copiar",
+ "Copied!" : "¡Credenciales!",
+ "Not supported!" : "¡No soportado!",
+ "Press ⌘-C to copy." : "Presione ⌘-C para copiar. ",
+ "Press Ctrl-C to copy." : "Presione Ctrl-C para copiar.",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Se presentó un error. Favor de cargar un certificado PEM con codificación ASCII",
+ "Valid until {date}" : "Válido hasta {date}",
"Delete" : "Borrar",
+ "Local" : "Local",
+ "Private" : "Privado",
+ "Only visible to local users" : "Visible sólo para usuarios locales",
+ "Only visible to you" : "Sólo visible para usted",
+ "Contacts" : "Contactos",
+ "Visible to local users and to trusted servers" : "Visible para usuarios locales y para servidores de confianza",
+ "Public" : "Público",
+ "Will be synced to a global and public address book" : "Será sincronizado a una libreta de direcciones global y pública",
"Select a profile picture" : "Seleccionar una imagen de perfil",
+ "Very weak password" : "Contraseña muy débil",
+ "Weak password" : "Contraseña débil",
+ "So-so password" : "Contraseña aceptable",
+ "Good password" : "Buena contraseña",
+ "Strong password" : "Contraseña fuerte",
"Groups" : "Grupos",
+ "Unable to delete {objName}" : "No fue posuble borrar {objName}",
+ "Error creating group: {message}" : "Se presentó un error al crear el grupo: {message}",
+ "A valid group name must be provided" : "Debe proporcionar un nombre de grupo válido",
+ "deleted {groupName}" : "borrado {groupName}",
"undo" : "deshacer",
"never" : "nunca",
+ "deleted {userName}" : "borrado {userName}",
+ "No user found for <strong>{pattern}</strong>" : "No se encontraron usuarios para <strong>{pattern}</strong>",
+ "Unable to add user to group {group}" : "No fue posible agregar el usuario al grupo {group}",
+ "Unable to remove user from group {group}" : "No fue posible eliminar el usuario del grupo {group}",
+ "Add group" : "Agregar grupo",
+ "Invalid quota value \"{val}\"" : "Valor de cuota inválido \"{val}\"",
+ "no group" : "sin grupos",
+ "Password successfully changed" : "La contraseña fue cambiada exitosamente",
+ "Changing the password will result in data loss, because data recovery is not available for this user" : "El cambiar la contraseña puede generar pérdida de datos, porque la recuperación de datos no está disponible para este usuario",
+ "Could not change the users email" : "No fue posible cambiar el correo electrónico de los susuarios",
"A valid username must be provided" : "Se debe proporcionar un nombre de usuario válido",
+ "Error creating user: {message}" : "Se presentó un error al crear el usuario: {message}",
"A valid password must be provided" : "Se debe proporcionar una contraseña válida",
+ "A valid email must be provided" : "Se debe proporcionar un correo electrónico válido",
"__language_name__" : "Español (México)",
"Unlimited" : "Ilimitado",
+ "Personal info" : "Información personal",
+ "Sessions" : "Sesiones",
+ "App passwords" : "Contraseñas de aplicación",
+ "Sync clients" : "Sincronizar clientes",
"None" : "Ninguno",
- "Login" : "Iniciar sesión",
- "Encryption" : "Cifrado",
+ "Login" : "Inicio de sesión",
+ "Plain" : "Plano",
+ "NT LAN Manager" : "Administrador de LAN NT",
+ "SSL/TLS" : "SSL/TLS",
+ "STARTTLS" : "STARTTLS",
+ "Email server" : "Servidor de correo electrónico",
+ "Open documentation" : "Abrir documentación",
+ "This is used for sending out notifications." : "Esto se usa para enviar notificaciones",
+ "Send mode" : "Modo de envío",
+ "Encryption" : "Encripción",
+ "From address" : "De la dirección",
+ "mail" : "correo",
+ "Authentication method" : "Método de autenticación",
+ "Authentication required" : "Autenticación requerida",
"Server address" : "Dirección del servidor",
"Port" : "Puerto",
+ "Credentials" : "Credenciales",
+ "SMTP Username" : "nombre de usuario SMTP",
+ "SMTP Password" : "Contraseña SMTP",
+ "Store credentials" : "Almacenar credenciales",
+ "Test email settings" : "Probar ajsutes de correo electrónico",
+ "Send email" : "Enviar correo electrónico",
+ "Server-side encryption" : "Encripción del lado del servidor",
+ "Enable server-side encryption" : "Habilitar encripción del lado del servidor",
+ "Please read carefully before activating server-side encryption: " : "Favor de leer detenidamente antes de activar la encripción del lado de 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." : "Una vez que la encripción se encuentre habilitada, todos lo archivos cargados al servidor desde ese momento en tiempo, se encriptarán en el servidor. Sólo será posible deshabilitar la encripción en una fecha posterior si el modulo de encripción activo soporta esa funcionalidad y si todas las preciondiciones están satisfechas (ejem. establecer una llave de recuperación).",
+ "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." : "La encripción por sí sola no garantiza la seguridad del sistema. Favor de consultar la documentación para mayores informes de cómo funciona la aplicación de encripción y de los casos de uso soportados. ",
+ "Be aware that encryption always increases the file size." : "Favor de considerar que la encripción siempre aumenta el tamaño de los archivos. ",
+ "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." : "Siempre es una buena idea generar respaldos de sus datos, en caso de tener encripción asegúrese de respaldar las llaves de encripción junto con sus datos. ",
+ "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final: ¿Realmente desea habilitar la encripción?",
+ "Enable encryption" : "Habilitar encripción",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado un módulo de encripción, favor de habilitar un módulo de encripción en el menú de la aplicación. ",
"Select default encryption module:" : "Seleccionar modulo de encripción predeterminado:",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Usted necesita migrar sus llaves de encripción de la encripción anterior (ownCloud <= 8.0) a la actual. Favor de habilitar el \"Módulo de encripción predeterminado\" y ejecute el comando 'occ encryption:migrate'",
- "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.",
- "System locale can not be set to a one which supports UTF-8." : "No se puede escoger una configuración regional que soporte UTF-8.",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Usted necesita migar sus llaves de encripción de la encripción anterior (ownCloud <=8.0) a la actual. ",
+ "Start migration" : "Comenzar migración",
+ "Security & setup warnings" : "Advertencias de seguridad y configuración",
+ "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 configuración de Sólo Lectura ha sido habilitada. Esto previene establecer algunas configuraciones mediante la interface web. Adicionalmente, el archivo necesita que se le establezcan tener permisos de escritura manualemente en cada actualización. ",
+ "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Esto es posiblemente causado por un caché/acelerador tal como Zend OPcache o eAccelerator. ",
+ "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 puede correr con el nivel de aislamiento de transacción de \"READ COMMITTED\". Puede causar problemas cuando mútiples acciones sean ejecutadas en paralelo.",
+ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "El modulo PHP 'fileinfo' no ha sido encontrado. Le recomendamos ámpliamente que habilite este módulo para obtener los mejores resultados en 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 se encuentra deshabilitado, esto puede generar temas bajo ciertas condiciones. Abilite 'filelocking.enabled' en el archivo config.php para evitar problemas. Favor de consultar la <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentatcón ↗</a> para mayor información.",
+ "System locale can not be set to a one which supports UTF-8." : "No es posible establecer la regionalización del sistema a una que soporte UTF-8.",
"This means that there might be problems with certain characters in file names." : "Esto significa que puede haber problemas con ciertos caracteres en los nombres de los archivos.",
+ "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Le sugerimos ámpliamente instalar en su sistema los paquetes requeridos para soportar alguno de los sigueintes locales: %s.",
+ "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar la tarea de cron con CLI. Se presentaron los siguientes errores técnicos:",
+ "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=\"%s\">log</a>." : "Favor de volver a verificar <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">guías de instalación↗</a>, y compruebe que no haya errores o advertenicas en la <a href=\"%s\">bitácora</a>.",
+ "All checks passed." : "Pasaron todas las verificaciones. ",
"Cron" : "Cron",
+ "Last cron job execution: %s." : "Última ejecución de tareas de cron: %s.",
+ "Last cron job execution: %s. Something seems wrong." : "Última ejecución de tareas de cron: %s. Algo parece estar mal. ",
+ "Cron was not executed yet!" : "¡Aún no han sido ejecutas las tareas programadas!",
"Execute one task with each page loaded" : "Ejecutar una tarea con cada página cargada",
"cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php se registra en un servicio webcron para llamar a cron.php cada 15 minutos a través de HTTP.",
+ "The cron.php needs to be executed by the system user \"%s\"." : "El cron.php necesita ser ejecutado por el usuario del sistema \"%s\".",
"Version" : "Versión",
"Sharing" : "Compartiendo",
"Allow apps to use the Share API" : "Permitir a las aplicaciones utilizar la API de Compartición",
+ "Allow users to share via link" : "Permitir a los usuarios compartir mediante ligas",
"Allow public uploads" : "Permitir subidas públicas",
- "Set default expiration date" : "Establecer fecha de caducidad predeterminada",
+ "Enforce password protection" : "Forzar protección de contraseñas",
+ "Set default expiration date" : "Establecer la fecha de expiración predeterminada",
+ "Expire after " : "Expirar después de",
"days" : "días",
- "Allow resharing" : "Permitir re-compartición",
+ "Enforce expiration date" : "Forzar fecha de expiración",
+ "Allow resharing" : "Permitir volver a compartir",
+ "Tips & tricks" : "Consejos & trucos",
+ "How to do backups" : "Cómo hacer respaldos",
+ "Advanced monitoring" : "Monitoreo avanzado",
+ "Performance tuning" : "Optimización de rendimiento",
+ "Improving the config.php" : "Mejorando la config.php",
+ "Hardening and security guidance" : "Consejos de reforzamiento y seguridad",
+ "Developer documentation" : "Documentación del desarrollador",
+ "by %s" : "por %s",
+ "%s-licensed" : "%s-licensed",
+ "Documentation:" : "Documentación:",
+ "User documentation" : "Documentación del usuario",
+ "Admin documentation" : "Documentación del administrador",
+ "Visit website" : "Visite el sitio web",
+ "Report a bug" : "Reporte un tema",
+ "Show description …" : "Mostrar descripción ...",
+ "Hide description …" : "Ocultar descripción ...",
+ "This app has an update available." : "Esta aplicación tiene una actualización disponible.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión mínima de Nextcloud asignada. Esto será un error en el futuro.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Esta aplicación no cuenta con una versión máxima de Nextcloud asignada. Esto será un error en el futuro.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Esta aplicación no puede ser instalada porque las siguientes dependencias no están satisfechas:",
+ "Enable only for specific groups" : "Habilitar sólo para grupos específicos",
+ "Uninstall app" : "Desinstalar la aplicación",
+ "SSL Root Certificates" : "Certificado SSL Raíz",
+ "Common Name" : "Nombre común",
+ "Valid until" : "Válido hasta",
+ "Issued By" : "Levantado Por",
+ "Valid until %s" : "Válido hasta %s",
+ "Import root certificate" : "Importar certificado raíz",
+ "Hey there,<br><br>just letting you know that you now have a %s account.<br><br>Your username: <strong>%s</strong><br>Access it: <strong><a href=\"%s\">%s</a></strong><br><br>" : "Hola,<br><br> sólo queremos informarle que ahora usted tiene una cuenta %s.<br><br> Su nombre de usuario es: <strong>%s</strong> <br>Ingrese a ella: <strong><a href=\"%s\">%s</a></strong><br><br>",
"Cheers!" : "¡Saludos!",
+ "Hey there,\n\njust letting you know that you now have a %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "Hola,\n\nsólo queremos informarle que ahora usted tiene una cuenta %s.\n\nSu nombre de usuario es: %s\n\nIngrese a ella: %s\n",
+ "Administrator documentation" : "Documentación de adminsitrador",
+ "Online documentation" : "Documentación en línea",
"Forum" : "Foro",
+ "Getting help" : "Obtener ayuda",
+ "Commercial support" : "Soporte comercial",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Usted está usando <strong>%s</strong> de <strong>%s</strong>",
+ "You are using <strong>%s</strong> of <strong>%s</strong> (<strong>%s %%</strong>)" : "Usted está usando <strong>%s</strong> de <strong>%s</strong> (<strong> %s %%</strong>)",
"Profile picture" : "Foto de perfil",
"Upload new" : "Subir otra",
- "Remove image" : "Borrar imagen",
+ "Select from Files" : "Seleccionar desde Archivos",
+ "Remove image" : "Eliminar imagen",
+ "png or jpg, max. 20 MB" : "png o jpg max. 20 MB",
+ "Picture provided by original account" : "Imagen proporcionadoa por la cuenta original ",
"Cancel" : "Cancelar",
+ "Choose as profile picture" : "Seleccionar como foto del perfil",
+ "Full name" : "Nombre completo",
+ "No display name set" : "No se ha establecido el nombre a desplegar",
"Email" : "Correo electrónico",
"Your email address" : "Su dirección de correo electrónico",
+ "No email address set" : "No se ha establecido la dirección de correo electrónico",
+ "For password reset and notifications" : "Para reestablecer contraseña y notificaciones",
+ "Phone number" : "Número de teléfono",
+ "Your phone number" : "Su número telefónico",
+ "Address" : "Dirección",
+ "Your postal address" : "Su dirección postal",
+ "Website" : "Sitio web",
+ "Your website" : "Su sitio web",
+ "Twitter" : "Twitter",
+ "You are member of the following groups:" : "Usted es un miembro de los siguientes grupos:",
"Password" : "Contraseña",
"Current password" : "Contraseña actual",
"New password" : "Nueva contraseña",
@@ -66,21 +269,54 @@
"Language" : "Idioma",
"Help translate" : "Ayude a traducir",
"Get the apps to sync your files" : "Obtener las aplicaciones para sincronizar sus archivos",
+ "Desktop client" : "Cliente de escritorio",
+ "Android app" : "Aplicación android",
+ "iOS app" : "Aplicación iOS",
+ "If you want to support the project {contributeopen}join development{linkclose} or {contributeopen}spread the word{linkclose}!" : "¡Si desea apoyar al proyecto {contributeopen}júnase al desarrollo{linkclose} o {contributeopen} pase la vozd{linkclose}!",
"Show First Run Wizard again" : "Mostrar nuevamente el Asistente de ejecución inicial",
+ "Web, desktop and mobile clients currently logged in to your account." : "Clientes web, de escritorio y móbiles han iniciado sesión en su cuenta. ",
+ "Device" : "Dispositivo",
+ "Last activity" : "Última actividad",
+ "Passcodes that give an app or device permissions to access your account." : "Los códigos de seguridad que le dan permisos a la aplicación o dispositivo para accesar a su cuenta. ",
"Name" : "Nombre",
+ "App name" : "Nombre de la aplicación",
+ "Create new app password" : "Crear una nueva contraseña de aplicación",
+ "Use the credentials below to configure your app or device." : "Use las siguientes credenciales para configurar su aplicación o dispositivo. ",
+ "For security reasons this password will only be shown once." : "Por razones de seguridad esta contraseña sólo se mostrará una vez. ",
"Username" : "Nombre de usuario",
+ "Done" : "Terminado",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Desarrollado por la {communityopen}comunidad Nextcloud {linkclose}, el {githubopen}código fuente {linkclose} está licenciado bajo {licenseopen}AGPL{linkclose}.",
+ "Follow us on Google Plus!" : "¡Síganos en Google Plus!",
+ "Subscribe to our twitter channel!" : "¡Suscríbase a nuestro canal de twitter!",
+ "Subscribe to our newsletter!" : "¡Suscribase a nuestro boletín!",
+ "Settings" : "Ajustes",
+ "Show storage location" : "Mostrar la ubicación del almacenamiento",
+ "Show last log in" : "Mostrar el último inicio de sesión",
+ "Send email to new user" : "Enviar un correo electrónico al usuario nuevo",
+ "When the password of the new user is left empty an activation email with a link to set the password is send to the user" : "Cuando la contraseña de un usuario nuevo se deja en blanco, un correo electrónico de activación con una liga para establecer la contraseña se enviará al usario",
+ "Show email address" : "Mostrar dirección de correo electrónico",
+ "E-Mail" : "Correo electrónico",
"Create" : "Crear",
- "Admin Recovery Password" : "Recuperación de la contraseña de administración",
+ "Admin Recovery Password" : "Recuperación de la contraseña del 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.",
+ "Group name" : "Nombre del grupo",
+ "Everyone" : "Todos",
+ "Admins" : "Administradores",
"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\")",
+ "Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Favor de indicar la cuota de almacenamiento (ejem: \"512 MB\" ó \"12 GB\")",
"Other" : "Otro",
+ "Group admin for" : "Administrador del grupo para",
+ "Quota" : "Cuota",
+ "Storage location" : "Úbicación del almacenamiento",
+ "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",
"Default" : "Predeterminado",
- "Please provide an admin recovery password, otherwise all user data will be lost" : "Por favor facilite una contraseña de recuperación de administrador, sino podrían perderse todos los datos de usuario",
+ "Please provide an admin recovery password, otherwise all user data will be lost" : "Favor de proporcionar una contraseña de recuperación del administrador, de lo contrario se perderán todos los datos de usuario",
"Admins can't remove themself from the admin group" : "Los administradores no se pueden eliminar a ellos mismos del grupo de administrador",
- "Unable to add user to group %s" : "No se pudo añadir el usuario al grupo %s",
- "Unable to remove user from group %s" : "No se pudo eliminar al usuario del grupo %s"
+ "Unable to add user to group %s" : "No fue posible agregar el usuario al grupo %s",
+ "Unable to remove user from group %s" : "No fue posible eliminar el usuario del grupo %s",
+ "For password recovery and notifications" : "Para recuperación de contraseña y notificaciones"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/fi.js b/settings/l10n/fi.js
index b844c4d1ed2..f4aeb59f89a 100644
--- a/settings/l10n/fi.js
+++ b/settings/l10n/fi.js
@@ -8,6 +8,7 @@ OC.L10N.register(
"No user supplied" : "Käyttäjää ei määritetty",
"Unable to change password" : "Salasanan vaihto ei onnistunut",
"Authentication error" : "Tunnistautumisvirhe",
+ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Anna ylläpitäjän palautussalasana; muuten kaikki käyttäjien data menetetään.",
"Wrong admin recovery password. Please check the password and try again." : "Väärä ylläpitäjän salasana. Tarkista salasana ja yritä uudelleen.",
"Backend doesn't support password change, but the user's encryption key was successfully updated." : "Taustaosa ei tue salasanan vaihtoa, mutta käyttäjän salausavain päivitettiin onnistuneesti.",
"installing and updating apps via the app store or Federated Cloud Sharing" : "Sovellusten asennus tai päivitys sovelluskaupasta tai federoidusta pilvijaosta",
@@ -125,6 +126,7 @@ OC.L10N.register(
"Unable to add user to group {group}" : "Käyttäjän lisääminen ryhmään {group} ei onnistunut",
"Unable to remove user from group {group}" : "Käyttäjän poistaminen ryhmästä {group} ei onnistunut",
"Add group" : "Lisää ryhmä",
+ "no group" : "ei ryhmää",
"Password successfully changed" : "Salasana vaihdettiin onnistuneesti",
"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",
"Could not change the users email" : "Käyttäjän sähköpostiosoitteen vaihtaminen epäonnistui",
@@ -216,7 +218,7 @@ OC.L10N.register(
"Hardening and security guidance" : "Turvaamis- ja tietoturvaopas",
"Developer documentation" : "Kehittäjädokumentaatio",
"by %s" : "tekijä %s",
- "%s-licensed" : "%s -lisensoitu",
+ "%s-licensed" : "%s-lisensoitu",
"Documentation:" : "Ohjeistus:",
"User documentation" : "Käyttäjädokumentaatio",
"Admin documentation" : "Ylläpitäjän ohjeistus",
@@ -240,6 +242,7 @@ OC.L10N.register(
"Administrator documentation" : "Ylläpidon dokumentaatio",
"Online documentation" : "Verkkodokumentaatio",
"Forum" : "Keskustelupalsta",
+ "Getting help" : "Apua",
"Commercial support" : "Kaupallinen tuki",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
"Profile picture" : "Profiilikuva",
@@ -294,6 +297,7 @@ OC.L10N.register(
"Subscribe to our twitter channel!" : "Seuraa Twitter-tiliämme!",
"Subscribe to our news feed!" : "Tilaa uutissyötteemme!",
"Subscribe to our newsletter!" : "Tilaa uutiskirjeemme!",
+ "Settings" : "Asetukset",
"Show storage location" : "Näytä tallennustilan sijainti",
"Show last log in" : "Näytä viimeisin sisäänkirjautuminen",
"Show user backend" : "Näytä käyttäjätaustaosa",
diff --git a/settings/l10n/fi.json b/settings/l10n/fi.json
index 5ec1618f2f1..589de3a980f 100644
--- a/settings/l10n/fi.json
+++ b/settings/l10n/fi.json
@@ -6,6 +6,7 @@
"No user supplied" : "Käyttäjää ei määritetty",
"Unable to change password" : "Salasanan vaihto ei onnistunut",
"Authentication error" : "Tunnistautumisvirhe",
+ "Please provide an admin recovery password; otherwise, all user data will be lost." : "Anna ylläpitäjän palautussalasana; muuten kaikki käyttäjien data menetetään.",
"Wrong admin recovery password. Please check the password and try again." : "Väärä ylläpitäjän salasana. Tarkista salasana ja yritä uudelleen.",
"Backend doesn't support password change, but the user's encryption key was successfully updated." : "Taustaosa ei tue salasanan vaihtoa, mutta käyttäjän salausavain päivitettiin onnistuneesti.",
"installing and updating apps via the app store or Federated Cloud Sharing" : "Sovellusten asennus tai päivitys sovelluskaupasta tai federoidusta pilvijaosta",
@@ -123,6 +124,7 @@
"Unable to add user to group {group}" : "Käyttäjän lisääminen ryhmään {group} ei onnistunut",
"Unable to remove user from group {group}" : "Käyttäjän poistaminen ryhmästä {group} ei onnistunut",
"Add group" : "Lisää ryhmä",
+ "no group" : "ei ryhmää",
"Password successfully changed" : "Salasana vaihdettiin onnistuneesti",
"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",
"Could not change the users email" : "Käyttäjän sähköpostiosoitteen vaihtaminen epäonnistui",
@@ -214,7 +216,7 @@
"Hardening and security guidance" : "Turvaamis- ja tietoturvaopas",
"Developer documentation" : "Kehittäjädokumentaatio",
"by %s" : "tekijä %s",
- "%s-licensed" : "%s -lisensoitu",
+ "%s-licensed" : "%s-lisensoitu",
"Documentation:" : "Ohjeistus:",
"User documentation" : "Käyttäjädokumentaatio",
"Admin documentation" : "Ylläpitäjän ohjeistus",
@@ -238,6 +240,7 @@
"Administrator documentation" : "Ylläpidon dokumentaatio",
"Online documentation" : "Verkkodokumentaatio",
"Forum" : "Keskustelupalsta",
+ "Getting help" : "Apua",
"Commercial support" : "Kaupallinen tuki",
"You are using <strong>%s</strong> of <strong>%s</strong>" : "Käytössäsi on <strong>%s</strong>/<strong>%s</strong>",
"Profile picture" : "Profiilikuva",
@@ -292,6 +295,7 @@
"Subscribe to our twitter channel!" : "Seuraa Twitter-tiliämme!",
"Subscribe to our news feed!" : "Tilaa uutissyötteemme!",
"Subscribe to our newsletter!" : "Tilaa uutiskirjeemme!",
+ "Settings" : "Asetukset",
"Show storage location" : "Näytä tallennustilan sijainti",
"Show last log in" : "Näytä viimeisin sisäänkirjautuminen",
"Show user backend" : "Näytä käyttäjätaustaosa",
diff --git a/settings/l10n/hu.js b/settings/l10n/hu.js
index 32a4d6de441..178f55a13e9 100644
--- a/settings/l10n/hu.js
+++ b/settings/l10n/hu.js
@@ -313,6 +313,7 @@ OC.L10N.register(
"Subscribe to our twitter channel!" : "Iratkozz fel a Twitter csatornánkra!",
"Subscribe to our news feed!" : "Iratkozz fel a hírfolyamunkra!",
"Subscribe to our newsletter!" : "Iratkozz fel a hírlevelünkre!",
+ "Settings" : "Beállítások",
"Show storage location" : "Háttértároló helyének mutatása",
"Show last log in" : "Utolsó bejelentkezés megjelenítése",
"Show user backend" : "Felhasználói háttér mutatása",
diff --git a/settings/l10n/hu.json b/settings/l10n/hu.json
index 0c0b8a274f6..5f0ca4f3361 100644
--- a/settings/l10n/hu.json
+++ b/settings/l10n/hu.json
@@ -311,6 +311,7 @@
"Subscribe to our twitter channel!" : "Iratkozz fel a Twitter csatornánkra!",
"Subscribe to our news feed!" : "Iratkozz fel a hírfolyamunkra!",
"Subscribe to our newsletter!" : "Iratkozz fel a hírlevelünkre!",
+ "Settings" : "Beállítások",
"Show storage location" : "Háttértároló helyének mutatása",
"Show last log in" : "Utolsó bejelentkezés megjelenítése",
"Show user backend" : "Felhasználói háttér mutatása",
diff --git a/settings/l10n/ja.js b/settings/l10n/ja.js
index 0ff1e27c294..d8344f598af 100644
--- a/settings/l10n/ja.js
+++ b/settings/l10n/ja.js
@@ -321,6 +321,7 @@ OC.L10N.register(
"Subscribe to our twitter channel!" : "twitterチャンネルを購読する!",
"Subscribe to our news feed!" : "私たちのニュースフィードを購読!",
"Subscribe to our newsletter!" : "ニュースレターを購読する!",
+ "Settings" : "設定",
"Show storage location" : "データの保存場所を表示",
"Show last log in" : "最終ログインを表示",
"Show user backend" : "ユーザーバックエンドを表示",
diff --git a/settings/l10n/ja.json b/settings/l10n/ja.json
index 16b6711422b..54b0dfcbeed 100644
--- a/settings/l10n/ja.json
+++ b/settings/l10n/ja.json
@@ -319,6 +319,7 @@
"Subscribe to our twitter channel!" : "twitterチャンネルを購読する!",
"Subscribe to our news feed!" : "私たちのニュースフィードを購読!",
"Subscribe to our newsletter!" : "ニュースレターを購読する!",
+ "Settings" : "設定",
"Show storage location" : "データの保存場所を表示",
"Show last log in" : "最終ログインを表示",
"Show user backend" : "ユーザーバックエンドを表示",
diff --git a/settings/l10n/lb.js b/settings/l10n/lb.js
index f4453e9b2e0..3127f533cba 100644
--- a/settings/l10n/lb.js
+++ b/settings/l10n/lb.js
@@ -8,9 +8,13 @@ OC.L10N.register(
"Email sent" : "Email geschéckt",
"Invalid request" : "Ongülteg Requête",
"Email saved" : "E-mail gespäichert",
+ "Not saved" : "Nët gespäichert",
"All" : "All",
+ "The app will be downloaded from the app store" : "D'App gett aus dem App Store erofgelueden",
"Disable" : "Ofschalten",
"Enable" : "Aschalten",
+ "Error while enabling app" : "Fehler beim Aktivéieren vun der App",
+ "Error while uninstalling app" : "Fehler beim Deinstalléieren vun der App",
"Delete" : "Läschen",
"Groups" : "Gruppen",
"undo" : "réckgängeg man",
diff --git a/settings/l10n/lb.json b/settings/l10n/lb.json
index d244bcac634..96abf908abd 100644
--- a/settings/l10n/lb.json
+++ b/settings/l10n/lb.json
@@ -6,9 +6,13 @@
"Email sent" : "Email geschéckt",
"Invalid request" : "Ongülteg Requête",
"Email saved" : "E-mail gespäichert",
+ "Not saved" : "Nët gespäichert",
"All" : "All",
+ "The app will be downloaded from the app store" : "D'App gett aus dem App Store erofgelueden",
"Disable" : "Ofschalten",
"Enable" : "Aschalten",
+ "Error while enabling app" : "Fehler beim Aktivéieren vun der App",
+ "Error while uninstalling app" : "Fehler beim Deinstalléieren vun der App",
"Delete" : "Läschen",
"Groups" : "Gruppen",
"undo" : "réckgängeg man",
diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js
index d8fed55a983..d2b7fa3c512 100644
--- a/settings/l10n/nl.js
+++ b/settings/l10n/nl.js
@@ -321,6 +321,7 @@ OC.L10N.register(
"Subscribe to our twitter channel!" : "Abonneer jezelf op ons twitter kanaal!",
"Subscribe to our news feed!" : "Abonneer jezelf op onze nieuwsfeed!",
"Subscribe to our newsletter!" : "Abonneer jezelf op onze nieuwsbrief!",
+ "Settings" : "Instellingen",
"Show storage location" : "Toon opslaglocatie",
"Show last log in" : "Toon laatste inlog",
"Show user backend" : "Toon backend gebruiker",
diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json
index af63568c31b..d363fb2453d 100644
--- a/settings/l10n/nl.json
+++ b/settings/l10n/nl.json
@@ -319,6 +319,7 @@
"Subscribe to our twitter channel!" : "Abonneer jezelf op ons twitter kanaal!",
"Subscribe to our news feed!" : "Abonneer jezelf op onze nieuwsfeed!",
"Subscribe to our newsletter!" : "Abonneer jezelf op onze nieuwsbrief!",
+ "Settings" : "Instellingen",
"Show storage location" : "Toon opslaglocatie",
"Show last log in" : "Toon laatste inlog",
"Show user backend" : "Toon backend gebruiker",
diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js
index f472ef1b1f5..52f6d8cca04 100644
--- a/settings/l10n/pt_BR.js
+++ b/settings/l10n/pt_BR.js
@@ -321,6 +321,7 @@ OC.L10N.register(
"Subscribe to our twitter channel!" : "Assine o nosso canal no Twitter!",
"Subscribe to our news feed!" : "Assine nosso feed de notícias!",
"Subscribe to our newsletter!" : "Inscreva-se para receber nosso boletim informativo!",
+ "Settings" : "Configurações",
"Show storage location" : "Mostrar localização de armazenamento",
"Show last log in" : "Mostrar o último acesso",
"Show user backend" : "Mostrar administrador do usuário",
diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json
index 27af9bc2270..5bc356b884d 100644
--- a/settings/l10n/pt_BR.json
+++ b/settings/l10n/pt_BR.json
@@ -319,6 +319,7 @@
"Subscribe to our twitter channel!" : "Assine o nosso canal no Twitter!",
"Subscribe to our news feed!" : "Assine nosso feed de notícias!",
"Subscribe to our newsletter!" : "Inscreva-se para receber nosso boletim informativo!",
+ "Settings" : "Configurações",
"Show storage location" : "Mostrar localização de armazenamento",
"Show last log in" : "Mostrar o último acesso",
"Show user backend" : "Mostrar administrador do usuário",
diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js
index dcd4fbe32cd..01b5be09367 100644
--- a/settings/l10n/tr.js
+++ b/settings/l10n/tr.js
@@ -57,7 +57,7 @@ OC.L10N.register(
"The app will be downloaded from the app store" : "Uygulama uygulama mağazasından indirilecek",
"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." : "Onaylanmış uygulamalar güvenilir geliştiriciler tarafından hazırlanmış ve ayrıntılı olmayan bir güvenlik denetiminden geçirilmiştir. Bu uygulamalar açık kaynak kod deposunda bulunur ve normal kullanım için kararlı oldukları varsayılı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 denetiminden geçirilmemiş ve yeni ya da kararsız olarak biliniyor. Kullanımından doğabilecek riskler size aittir.",
+ "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 denetiminden geçirilmemiş ve yeni ya da kararsız olarak biliniyor. Kurulmasından doğabilecek riskler size aittir.",
"Disabling app …" : "Uygulama devre dışı bırakılıyor ...",
"Error while disabling app" : "Uygulama devre dışı bırakılırken sorun çıktı",
"Disable" : "Devre Dışı Bırak",
@@ -250,7 +250,7 @@ OC.L10N.register(
"This app has an update available." : "Bu uygulama için bir güncelleme yayınlanmış.",
"This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için en düşük Nextcloud sürümü belirtilmemiş. Bu durum ileride sorun çıkarır.",
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için en yüksek Nextcloud sürümü belirtilmemiş. Bu durum ileride sorun çıkarır.",
- "This app cannot be installed because the following dependencies are not fulfilled:" : "Aşağıdaki bağımlılıklar sağlanmadığından bu uygulama yüklenemedi:",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Aşağıdaki bağımlılıklar sağlanmadığından bu uygulama kurulamıyor:",
"Enable only for specific groups" : "Yalnız belirli gruplar için etkinleştir",
"Uninstall app" : "Uygulamayı Kaldır",
"SSL Root Certificates" : "SSL Kök Sertifikaları",
diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json
index 930ff54103c..089c49201d3 100644
--- a/settings/l10n/tr.json
+++ b/settings/l10n/tr.json
@@ -55,7 +55,7 @@
"The app will be downloaded from the app store" : "Uygulama uygulama mağazasından indirilecek",
"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." : "Onaylanmış uygulamalar güvenilir geliştiriciler tarafından hazırlanmış ve ayrıntılı olmayan bir güvenlik denetiminden geçirilmiştir. Bu uygulamalar açık kaynak kod deposunda bulunur ve normal kullanım için kararlı oldukları varsayılı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 denetiminden geçirilmemiş ve yeni ya da kararsız olarak biliniyor. Kullanımından doğabilecek riskler size aittir.",
+ "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 denetiminden geçirilmemiş ve yeni ya da kararsız olarak biliniyor. Kurulmasından doğabilecek riskler size aittir.",
"Disabling app …" : "Uygulama devre dışı bırakılıyor ...",
"Error while disabling app" : "Uygulama devre dışı bırakılırken sorun çıktı",
"Disable" : "Devre Dışı Bırak",
@@ -248,7 +248,7 @@
"This app has an update available." : "Bu uygulama için bir güncelleme yayınlanmış.",
"This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için en düşük Nextcloud sürümü belirtilmemiş. Bu durum ileride sorun çıkarır.",
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Bu uygulama için en yüksek Nextcloud sürümü belirtilmemiş. Bu durum ileride sorun çıkarır.",
- "This app cannot be installed because the following dependencies are not fulfilled:" : "Aşağıdaki bağımlılıklar sağlanmadığından bu uygulama yüklenemedi:",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Aşağıdaki bağımlılıklar sağlanmadığından bu uygulama kurulamıyor:",
"Enable only for specific groups" : "Yalnız belirli gruplar için etkinleştir",
"Uninstall app" : "Uygulamayı Kaldır",
"SSL Root Certificates" : "SSL Kök Sertifikaları",
diff --git a/settings/templates/admin/sharing.php b/settings/templates/admin/sharing.php
index db025c8f205..9de71c58990 100644
--- a/settings/templates/admin/sharing.php
+++ b/settings/templates/admin/sharing.php
@@ -46,7 +46,9 @@
<input type="checkbox" name="shareapi_allow_public_upload" id="allowPublicUpload" class="checkbox"
value="1" <?php if ($_['allowPublicUpload'] == 'yes') print_unescaped('checked="checked"'); ?> />
<label for="allowPublicUpload"><?php p($l->t('Allow public uploads'));?></label><br/>
-
+ <input type="checkbox" name="shareapi_enable_link_password_by_default" id="enableLinkPasswordByDefault" class="checkbox"
+ value="1" <?php if ($_['enableLinkPasswordByDefault'] === 'yes') print_unescaped('checked="checked"'); ?> />
+ <label for="enableLinkPasswordByDefault"><?php p($l->t('Always ask for a password'));?></label><br/>
<input type="checkbox" name="shareapi_enforce_links_password" id="enforceLinkPassword" class="checkbox"
value="1" <?php if ($_['enforceLinkPassword']) print_unescaped('checked="checked"'); ?> />
<label for="enforceLinkPassword"><?php p($l->t('Enforce password protection'));?></label><br/>
diff --git a/settings/templates/users/main.php b/settings/templates/users/main.php
index 4fd8572029a..3688f2296cd 100644
--- a/settings/templates/users/main.php
+++ b/settings/templates/users/main.php
@@ -52,17 +52,24 @@ translation('settings');
</label>
</p>
<p>
+ <input type="checkbox" name="UserBackend" value="UserBackend" id="CheckboxUserBackend"
+ class="checkbox" <?php if ($_['show_backend'] === 'true') print_unescaped('checked="checked"'); ?> />
+ <label for="CheckboxUserBackend">
+ <?php p($l->t('Show user backend')) ?>
+ </label>
+ </p>
+ <p>
<input type="checkbox" name="LastLogin" value="LastLogin" id="CheckboxLastLogin"
class="checkbox" <?php if ($_['show_last_login'] === 'true') print_unescaped('checked="checked"'); ?> />
<label for="CheckboxLastLogin">
- <?php p($l->t('Show last log in')) ?>
+ <?php p($l->t('Show last login')) ?>
</label>
</p>
<p>
- <input type="checkbox" name="UserBackend" value="UserBackend" id="CheckboxUserBackend"
- class="checkbox" <?php if ($_['show_backend'] === 'true') print_unescaped('checked="checked"'); ?> />
- <label for="CheckboxUserBackend">
- <?php p($l->t('Show user backend')) ?>
+ <input type="checkbox" name="EmailAddress" value="EmailAddress" id="CheckboxEmailAddress"
+ class="checkbox" <?php if ($_['show_email'] === 'true') print_unescaped('checked="checked"'); ?> />
+ <label for="CheckboxEmailAddress">
+ <?php p($l->t('Show email address')) ?>
</label>
</p>
<p>
@@ -73,14 +80,7 @@ translation('settings');
</label>
</p>
<p class="info-text">
- <?php p($l->t('When the password of the new user is left empty an activation email with a link to set the password is send to the user')) ?>
- </p>
- <p>
- <input type="checkbox" name="EmailAddress" value="EmailAddress" id="CheckboxEmailAddress"
- class="checkbox" <?php if ($_['show_email'] === 'true') print_unescaped('checked="checked"'); ?> />
- <label for="CheckboxEmailAddress">
- <?php p($l->t('Show email address')) ?>
- </label>
+ <?php p($l->t('When the password of a new user is left empty, an activation email with a link to set the password is sent.')) ?>
</p>
</div>
</div>
diff --git a/tests/Core/Controller/LostControllerTest.php b/tests/Core/Controller/LostControllerTest.php
index 0f9dcaead35..255c6ace359 100644
--- a/tests/Core/Controller/LostControllerTest.php
+++ b/tests/Core/Controller/LostControllerTest.php
@@ -76,8 +76,12 @@ class LostControllerTest extends \Test\TestCase {
parent::setUp();
$this->existingUser = $this->createMock(IUser::class);
- $this->existingUser->method('getEMailAddress')
+ $this->existingUser->expects($this->any())
+ ->method('getEMailAddress')
->willReturn('test@example.com');
+ $this->existingUser->expects($this->any())
+ ->method('getUID')
+ ->willReturn('ExistingUser');
$this->config = $this->createMock(IConfig::class);
$this->config->method('getSystemValue')
@@ -280,11 +284,6 @@ class LostControllerTest extends \Test\TestCase {
->with('21')
->will($this->returnValue('ThisIsMaybeANotSoSecretToken!'));
$this->userManager
- ->expects($this->once())
- ->method('userExists')
- ->with('ExistingUser')
- ->will($this->returnValue(true));
- $this->userManager
->expects($this->any())
->method('get')
->with('ExistingUser')
@@ -344,17 +343,83 @@ class LostControllerTest extends \Test\TestCase {
$this->assertSame($expectedResponse, $response);
}
- public function testEmailCantSendException() {
+ public function testEmailWithMailSuccessful() {
$this->secureRandom
->expects($this->once())
->method('generate')
->with('21')
->will($this->returnValue('ThisIsMaybeANotSoSecretToken!'));
$this->userManager
+ ->expects($this->any())
+ ->method('get')
+ ->with('test@example.com')
+ ->willReturn(null);
+ $this->userManager
+ ->expects($this->any())
+ ->method('getByEmail')
+ ->with('test@example.com')
+ ->willReturn([$this->existingUser]);
+ $this->timeFactory
->expects($this->once())
- ->method('userExists')
- ->with('ExistingUser')
- ->will($this->returnValue(true));
+ ->method('getTime')
+ ->will($this->returnValue(12348));
+ $this->config
+ ->expects($this->once())
+ ->method('setUserValue')
+ ->with('ExistingUser', 'core', 'lostpassword', 'encryptedToken');
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('linkToRouteAbsolute')
+ ->with('core.lost.resetform', array('userId' => 'ExistingUser', 'token' => 'ThisIsMaybeANotSoSecretToken!'))
+ ->will($this->returnValue('https://example.tld/index.php/lostpassword/'));
+ $message = $this->getMockBuilder('\OC\Mail\Message')
+ ->disableOriginalConstructor()->getMock();
+ $message
+ ->expects($this->at(0))
+ ->method('setTo')
+ ->with(['test@example.com' => 'ExistingUser']);
+ $message
+ ->expects($this->at(1))
+ ->method('setSubject')
+ ->with(' password reset');
+ $message
+ ->expects($this->at(2))
+ ->method('setPlainBody')
+ ->with('Use the following link to reset your password: https://example.tld/index.php/lostpassword/');
+ $message
+ ->expects($this->at(3))
+ ->method('setFrom')
+ ->with(['lostpassword-noreply@localhost' => null]);
+ $this->mailer
+ ->expects($this->at(0))
+ ->method('createMessage')
+ ->will($this->returnValue($message));
+ $this->mailer
+ ->expects($this->at(1))
+ ->method('send')
+ ->with($message);
+
+ $this->config->method('getSystemValue')
+ ->with('secret', '')
+ ->willReturn('SECRET');
+
+ $this->crypto->method('encrypt')
+ ->with(
+ $this->equalTo('12348:ThisIsMaybeANotSoSecretToken!'),
+ $this->equalTo('test@example.comSECRET')
+ )->willReturn('encryptedToken');
+
+ $response = $this->lostController->email('test@example.com');
+ $expectedResponse = array('status' => 'success');
+ $this->assertSame($expectedResponse, $response);
+ }
+
+ public function testEmailCantSendException() {
+ $this->secureRandom
+ ->expects($this->once())
+ ->method('generate')
+ ->with('21')
+ ->will($this->returnValue('ThisIsMaybeANotSoSecretToken!'));
$this->userManager
->expects($this->any())
->method('get')
diff --git a/tests/lib/AppFramework/Http/RequestTest.php b/tests/lib/AppFramework/Http/RequestTest.php
index cc4bbee2d8d..f80bffcb480 100644
--- a/tests/lib/AppFramework/Http/RequestTest.php
+++ b/tests/lib/AppFramework/Http/RequestTest.php
@@ -305,7 +305,10 @@ class RequestTest extends \Test\TestCase {
$vars = array(
'put' => $data,
'method' => 'PUT',
- 'server' => array('CONTENT_TYPE' => 'image/png'),
+ 'server' => [
+ 'CONTENT_TYPE' => 'image/png',
+ 'CONTENT_LENGTH' => strlen($data)
+ ],
);
$request = new Request(
diff --git a/tests/lib/Security/Bruteforce/ThrottlerTest.php b/tests/lib/Security/Bruteforce/ThrottlerTest.php
index 604aecd3a65..02d5b701679 100644
--- a/tests/lib/Security/Bruteforce/ThrottlerTest.php
+++ b/tests/lib/Security/Bruteforce/ThrottlerTest.php
@@ -40,7 +40,7 @@ class ThrottlerTest extends TestCase {
private $dbConnection;
/** @var ILogger */
private $logger;
- /** @var IConfig */
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
private $config;
public function setUp() {
@@ -120,4 +120,92 @@ class ThrottlerTest extends TestCase {
$this->invokePrivate($this->throttler, 'getIPv6Subnet', ['2001:0db8:85a3:0000:0000:8a2e:0370:7334', 40])
);
}
+
+ public function dataIsIPWhitelisted() {
+ return [
+ [
+ '10.10.10.10',
+ [
+ 'whitelist_0' => '10.10.10.0/24',
+ ],
+ true,
+ ],
+ [
+ '10.10.10.10',
+ [
+ 'whitelist_0' => '192.168.0.0/16',
+ ],
+ false,
+ ],
+ [
+ '10.10.10.10',
+ [
+ 'whitelist_0' => '192.168.0.0/16',
+ 'whitelist_1' => '10.10.10.0/24',
+ ],
+ true,
+ ],
+ [
+ 'dead:beef:cafe::1',
+ [
+ 'whitelist_0' => '192.168.0.0/16',
+ 'whitelist_1' => '10.10.10.0/24',
+ 'whitelist_2' => 'deaf:beef:cafe:1234::/64'
+ ],
+ false,
+ ],
+ [
+ 'dead:beef:cafe::1',
+ [
+ 'whitelist_0' => '192.168.0.0/16',
+ 'whitelist_1' => '10.10.10.0/24',
+ 'whitelist_2' => 'deaf:beef::/64'
+ ],
+ false,
+ ],
+ [
+ 'dead:beef:cafe::1',
+ [
+ 'whitelist_0' => '192.168.0.0/16',
+ 'whitelist_1' => '10.10.10.0/24',
+ 'whitelist_2' => 'deaf:cafe::/8'
+ ],
+ true,
+ ],
+ [
+ 'invalid',
+ [],
+ false,
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider dataIsIPWhitelisted
+ *
+ * @param string $ip
+ * @param string[] $whitelists
+ * @param bool $isWhiteListed
+ */
+ public function testIsIPWhitelisted($ip, $whitelists, $isWhiteListed) {
+ $this->config->method('getAppKeys')
+ ->with($this->equalTo('bruteForce'))
+ ->willReturn(array_keys($whitelists));
+
+ $this->config->method('getAppValue')
+ ->will($this->returnCallback(function($app, $key, $default) use ($whitelists) {
+ if ($app !== 'bruteForce') {
+ return $default;
+ }
+ if (isset($whitelists[$key])) {
+ return $whitelists[$key];
+ }
+ return $default;
+ }));
+
+ $this->assertSame(
+ $isWhiteListed,
+ $this->invokePrivate($this->throttler, 'isIPWhitelisted', [$ip])
+ );
+ }
}
diff --git a/tests/lib/Settings/Admin/SharingTest.php b/tests/lib/Settings/Admin/SharingTest.php
index 122bf2b6caf..0bf03559683 100644
--- a/tests/lib/Settings/Admin/SharingTest.php
+++ b/tests/lib/Settings/Admin/SharingTest.php
@@ -104,6 +104,11 @@ class SharingTest extends TestCase {
->method('getAppValue')
->with('core', 'shareapi_public_link_disclaimertext', null)
->willReturn('Lorem ipsum');
+ $this->config
+ ->expects($this->at(12))
+ ->method('getAppValue')
+ ->with('core', 'shareapi_enable_link_password_by_default', 'no')
+ ->willReturn('yes');
$expected = new TemplateResponse(
'settings',
@@ -122,7 +127,8 @@ class SharingTest extends TestCase {
'shareEnforceExpireDate' => 'no',
'shareExcludeGroups' => false,
'shareExcludedGroupsList' => '',
- 'publicShareDisclaimerText' => 'Lorem ipsum',
+ 'publicShareDisclaimerText' => 'Lorem ipsum',
+ 'enableLinkPasswordByDefault' => 'yes'
],
''
);
@@ -191,6 +197,11 @@ class SharingTest extends TestCase {
->method('getAppValue')
->with('core', 'shareapi_public_link_disclaimertext', null)
->willReturn('Lorem ipsum');
+ $this->config
+ ->expects($this->at(12))
+ ->method('getAppValue')
+ ->with('core', 'shareapi_enable_link_password_by_default', 'no')
+ ->willReturn('yes');
$expected = new TemplateResponse(
'settings',
@@ -209,7 +220,8 @@ class SharingTest extends TestCase {
'shareEnforceExpireDate' => 'no',
'shareExcludeGroups' => true,
'shareExcludedGroupsList' => 'NoSharers|OtherNoSharers',
- 'publicShareDisclaimerText' => 'Lorem ipsum',
+ 'publicShareDisclaimerText' => 'Lorem ipsum',
+ 'enableLinkPasswordByDefault' => 'yes'
],
''
);
diff --git a/tests/lib/Settings/ManagerTest.php b/tests/lib/Settings/ManagerTest.php
index 2122c8b3750..497a0df9f4e 100644
--- a/tests/lib/Settings/ManagerTest.php
+++ b/tests/lib/Settings/ManagerTest.php
@@ -146,7 +146,7 @@ class ManagerTest extends TestCase {
['class' => \OCA\WorkflowEngine\Settings\Section::class, 'priority' => 90]
]));
- $this->url->expects($this->exactly(5))
+ $this->url->expects($this->exactly(6))
->method('imagePath')
->willReturnMap([
['settings', 'admin.svg', '1'],
@@ -159,6 +159,7 @@ class ManagerTest extends TestCase {
$this->assertEquals([
0 => [new Section('server', 'Server settings', 0, '1')],
5 => [new Section('sharing', 'Sharing', 0, '2')],
+ 10 => [new Section('security', 'Security', 0, '3')],
45 => [new Section('encryption', 'Encryption', 0, '3')],
90 => [\OC::$server->query(\OCA\WorkflowEngine\Settings\Section::class)],
98 => [new Section('additional', 'Additional settings', 0, '4')],
@@ -177,7 +178,7 @@ class ManagerTest extends TestCase {
->will($this->returnValue([
]));
- $this->url->expects($this->exactly(5))
+ $this->url->expects($this->exactly(6))
->method('imagePath')
->willReturnMap([
['settings', 'admin.svg', '1'],
@@ -190,6 +191,7 @@ class ManagerTest extends TestCase {
$this->assertEquals([
0 => [new Section('server', 'Server settings', 0, '1')],
5 => [new Section('sharing', 'Sharing', 0, '2')],
+ 10 => [new Section('security', 'Security', 0, '3')],
45 => [new Section('encryption', 'Encryption', 0, '3')],
98 => [new Section('additional', 'Additional settings', 0, '4')],
99 => [new Section('tips-tricks', 'Tips & tricks', 0, '5')],