summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.drone.yml179
m---------3rdparty0
-rw-r--r--CONTRIBUTING.md25
-rw-r--r--README.md13
-rw-r--r--apps/comments/l10n/ar.js3
-rw-r--r--apps/comments/l10n/ar.json3
-rw-r--r--apps/comments/l10n/ast.js22
-rw-r--r--apps/comments/l10n/ast.json22
-rw-r--r--apps/comments/l10n/el.js4
-rw-r--r--apps/comments/l10n/el.json4
-rw-r--r--apps/comments/l10n/nb_NO.js17
-rw-r--r--apps/comments/l10n/nb_NO.json17
-rw-r--r--apps/comments/l10n/zh_TW.js34
-rw-r--r--apps/comments/l10n/zh_TW.json34
-rw-r--r--apps/dav/appinfo/app.php5
-rw-r--r--apps/dav/appinfo/register_command.php4
-rw-r--r--apps/dav/lib/AppInfo/Application.php104
-rw-r--r--apps/dav/lib/CalDAV/BirthdayService.php2
-rw-r--r--apps/dav/lib/CalDAV/CalDavBackend.php31
-rw-r--r--apps/dav/lib/CardDAV/CardDavBackend.php27
-rw-r--r--apps/dav/tests/unit/AppInfo/ApplicationTest.php14
-rw-r--r--apps/encryption/l10n/el.js5
-rw-r--r--apps/encryption/l10n/el.json5
-rw-r--r--apps/encryption/l10n/hu_HU.js53
-rw-r--r--apps/encryption/l10n/hu_HU.json53
-rw-r--r--apps/encryption/l10n/nb_NO.js8
-rw-r--r--apps/encryption/l10n/nb_NO.json8
-rw-r--r--apps/federatedfilesharing/l10n/hu_HU.js2
-rw-r--r--apps/federatedfilesharing/l10n/hu_HU.json2
-rw-r--r--apps/federatedfilesharing/l10n/nb_NO.js30
-rw-r--r--apps/federatedfilesharing/l10n/nb_NO.json30
-rw-r--r--apps/federation/l10n/nb_NO.js18
-rw-r--r--apps/federation/l10n/nb_NO.json18
-rw-r--r--apps/files/l10n/ar.js21
-rw-r--r--apps/files/l10n/ar.json21
-rw-r--r--apps/files/l10n/el.js5
-rw-r--r--apps/files/l10n/el.json5
-rw-r--r--apps/files/l10n/hu_HU.js4
-rw-r--r--apps/files/l10n/hu_HU.json4
-rw-r--r--apps/files/l10n/nb_NO.js23
-rw-r--r--apps/files/l10n/nb_NO.json23
-rw-r--r--apps/files/l10n/zh_TW.js18
-rw-r--r--apps/files/l10n/zh_TW.json18
-rw-r--r--apps/files_external/l10n/el.js5
-rw-r--r--apps/files_external/l10n/el.json5
-rw-r--r--apps/files_external/l10n/hu_HU.js75
-rw-r--r--apps/files_external/l10n/hu_HU.json75
-rw-r--r--apps/files_external/l10n/nb_NO.js16
-rw-r--r--apps/files_external/l10n/nb_NO.json16
-rw-r--r--apps/files_sharing/l10n/es.js23
-rw-r--r--apps/files_sharing/l10n/es.json23
-rw-r--r--apps/files_sharing/l10n/hu_HU.js132
-rw-r--r--apps/files_sharing/l10n/hu_HU.json132
-rw-r--r--apps/files_sharing/l10n/nb_NO.js79
-rw-r--r--apps/files_sharing/l10n/nb_NO.json79
-rw-r--r--apps/files_trashbin/l10n/ar.js3
-rw-r--r--apps/files_trashbin/l10n/ar.json3
-rw-r--r--apps/systemtags/css/systemtagsfilelist.css10
-rw-r--r--apps/systemtags/img/tag.svg2
-rw-r--r--apps/systemtags/js/systemtagsinfoview.js28
-rw-r--r--apps/systemtags/l10n/nb_NO.js19
-rw-r--r--apps/systemtags/l10n/nb_NO.json19
-rw-r--r--apps/twofactor_backupcodes/l10n/cs_CZ.js4
-rw-r--r--apps/twofactor_backupcodes/l10n/cs_CZ.json4
-rw-r--r--apps/twofactor_backupcodes/l10n/de_DE.js5
-rw-r--r--apps/twofactor_backupcodes/l10n/de_DE.json5
-rw-r--r--apps/twofactor_backupcodes/l10n/es.js16
-rw-r--r--apps/twofactor_backupcodes/l10n/es.json14
-rw-r--r--apps/twofactor_backupcodes/l10n/fr.js14
-rw-r--r--apps/twofactor_backupcodes/l10n/fr.json12
-rw-r--r--apps/twofactor_backupcodes/l10n/is.js17
-rw-r--r--apps/twofactor_backupcodes/l10n/is.json15
-rw-r--r--apps/twofactor_backupcodes/l10n/nb_NO.js16
-rw-r--r--apps/twofactor_backupcodes/l10n/nb_NO.json14
-rw-r--r--apps/updatenotification/l10n/es.js1
-rw-r--r--apps/updatenotification/l10n/es.json1
-rw-r--r--apps/updatenotification/l10n/fr.js1
-rw-r--r--apps/updatenotification/l10n/fr.json1
-rw-r--r--apps/updatenotification/l10n/hu_HU.js2
-rw-r--r--apps/updatenotification/l10n/hu_HU.json2
-rw-r--r--apps/updatenotification/l10n/nb_NO.js14
-rw-r--r--apps/updatenotification/l10n/nb_NO.json14
-rw-r--r--apps/user_ldap/l10n/nb_NO.js19
-rw-r--r--apps/user_ldap/l10n/nb_NO.json19
-rw-r--r--apps/workflowengine/l10n/.gitkeep0
-rw-r--r--bower.json10
-rw-r--r--build/integration/features/bootstrap/Sharing.php23
-rw-r--r--build/integration/features/sharing-v1.feature2
-rw-r--r--build/signed-off-checker.php105
-rw-r--r--contribute/HowToApplyALicense.md46
-rw-r--r--contribute/developer-certificate-of-origin35
-rw-r--r--core/Command/Maintenance/UpdateHtaccess.php10
-rw-r--r--core/css/apps.css1
-rw-r--r--core/css/icons.css21
-rw-r--r--core/css/inputs.css4
-rw-r--r--core/img/actions/audio-white.svg4
-rw-r--r--core/img/actions/audio.svg4
-rw-r--r--core/img/actions/more-white.svg5
-rw-r--r--core/img/actions/tag.svg5
-rw-r--r--core/img/actions/video-white.svg4
-rw-r--r--core/img/actions/video.svg4
-rw-r--r--core/js/js.js7
-rw-r--r--core/l10n/el.js15
-rw-r--r--core/l10n/el.json15
-rw-r--r--core/l10n/es.js1
-rw-r--r--core/l10n/es.json1
-rw-r--r--core/l10n/fr.js1
-rw-r--r--core/l10n/fr.json1
-rw-r--r--core/l10n/hu_HU.js6
-rw-r--r--core/l10n/hu_HU.json6
-rw-r--r--core/l10n/nb_NO.js71
-rw-r--r--core/l10n/nb_NO.json71
-rw-r--r--core/l10n/zh_TW.js33
-rw-r--r--core/l10n/zh_TW.json33
-rw-r--r--core/vendor/.gitignore9
-rw-r--r--core/vendor/handlebars/.bower.json13
-rw-r--r--core/vendor/handlebars/handlebars.js7306
-rw-r--r--core/vendor/moment/.bower.json12
-rw-r--r--core/vendor/moment/LICENSE2
-rw-r--r--core/vendor/moment/min/moment-with-locales.js7272
-rw-r--r--l10n/.tx/config6
-rw-r--r--lib/base.php8
-rw-r--r--lib/l10n/el.js6
-rw-r--r--lib/l10n/el.json6
-rw-r--r--lib/l10n/fr.js1
-rw-r--r--lib/l10n/fr.json1
-rw-r--r--lib/l10n/hu_HU.js42
-rw-r--r--lib/l10n/hu_HU.json42
-rw-r--r--lib/l10n/nb_NO.js56
-rw-r--r--lib/l10n/nb_NO.json56
-rw-r--r--lib/l10n/zh_TW.js12
-rw-r--r--lib/l10n/zh_TW.json12
-rw-r--r--lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php5
-rw-r--r--lib/private/AppFramework/OCS/BaseResponse.php3
-rw-r--r--lib/private/AppFramework/Utility/SimpleContainer.php11
-rw-r--r--lib/private/Setup.php6
-rw-r--r--lib/private/legacy/util.php17
-rw-r--r--lib/public/AppFramework/Http/Response.php6
-rw-r--r--settings/l10n/cs_CZ.js3
-rw-r--r--settings/l10n/cs_CZ.json3
-rw-r--r--settings/l10n/de.js2
-rw-r--r--settings/l10n/de.json2
-rw-r--r--settings/l10n/de_DE.js2
-rw-r--r--settings/l10n/de_DE.json2
-rw-r--r--settings/l10n/el.js40
-rw-r--r--settings/l10n/el.json40
-rw-r--r--settings/l10n/fr.js2
-rw-r--r--settings/l10n/fr.json2
-rw-r--r--settings/l10n/hu_HU.js38
-rw-r--r--settings/l10n/hu_HU.json38
-rw-r--r--settings/l10n/nb_NO.js79
-rw-r--r--settings/l10n/nb_NO.json79
-rw-r--r--settings/l10n/zh_TW.js147
-rw-r--r--settings/l10n/zh_TW.json147
-rw-r--r--tests/lib/AppFramework/Controller/OCSControllerTest.php22
-rw-r--r--tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php59
156 files changed, 12254 insertions, 5799 deletions
diff --git a/.drone.yml b/.drone.yml
index 4b6dd4e9142..3e50be209b6 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -26,6 +26,13 @@ pipeline:
when:
matrix:
TESTS: app-check-code
+ signed-off-check:
+ image: nextcloudci/php7.0:php7.0-2
+ commands:
+ - php ./build/signed-off-checker.php
+ when:
+ matrix:
+ TESTS: signed-off-check
syntax-php5.6:
image: nextcloudci/php5.6:php5.6-2
commands:
@@ -141,19 +148,180 @@ pipeline:
matrix:
DB: postgres
PHP: 5.6
- integration:
- image: nextcloudci/php7.0:php7.0-2
+ integration-capabilities_features:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh capabilities_features/capabilities.feature
+ when:
+ matrix:
+ TESTS: integration-capabilities_features
+ integration-federation_features:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh federation_features/federated.feature
+ when:
+ matrix:
+ TESTS: integration-federation_features
+ integration-auth:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/auth.feature
+ when:
+ matrix:
+ TESTS: integration-auth
+ integration-carddav:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/carddav.feature
+ when:
+ matrix:
+ TESTS: integration-carddav
+ integration-dav-v2:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/dav-v2.feature
+ when:
+ matrix:
+ TESTS: integration-dav-v2
+ integration-ocs-v1:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/ocs-v1.feature
+ when:
+ matrix:
+ TESTS: integration-ocs-v1
+ integration-sharing-v1:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/sharing-v1.feature
+ when:
+ matrix:
+ TESTS: integration-sharing-v1
+ integration-checksums-v1:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/checksums.feature
+ when:
+ matrix:
+ TESTS: integration-checksums
+ integration-external-storage:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/external-storage.feature
+ when:
+ matrix:
+ TESTS: integration-external-storage
+ integration-provisioning-v1:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/provisioning-v1.feature
+ when:
+ matrix:
+ TESTS: integration-provisioning-v1
+ integration-tags:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/tags.feature
+ when:
+ matrix:
+ TESTS: integration-tags
+ integration-caldav:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/caldav.feature
+ when:
+ matrix:
+ TESTS: integration-caldav
+ integration-comments:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- - ./run.sh
+ - ./run.sh features/comments.feature
when:
matrix:
- TESTS: integration
+ TESTS: integration-comments
+ integration-favorites:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/favorites.feature
+ when:
+ matrix:
+ TESTS: integration-favorites
+ integration-provisioning-v2:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/provisioning-v2.feature
+ when:
+ matrix:
+ TESTS: integration-provisioning-v2
+ integration-webdav-related:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh features/webdav-related.feature
+ when:
+ matrix:
+ TESTS: integration-webdav-related
+ integration-sharees-features:
+ image: nextcloudci/integration-php7.0:integration-php7.0-1
+ commands:
+ - ./occ maintenance:install --admin-pass=admin
+ - cd build/integration
+ - ./run.sh sharees_features/sharees.feature
+ when:
+ matrix:
+ TESTS: integration-sharees-features
matrix:
include:
- - TESTS: integration
+ - TESTS: signed-off-check
+ - TESTS: integration-capabilities_features
+ - TESTS: integration-federation_features
+ - TESTS: integration-auth
+ - TESTS: integration-carddav
+ - TESTS: integration-dav-v2
+ - TESTS: integration-ocs-v1
+ - TESTS: integration-sharing-v1
+ - TESTS: integration-checksums
+ - TESTS: integration-external-storage
+ - TESTS: integration-provisioning-v1
+ - TESTS: integration-tags
+ - TESTS: integration-caldav
+ - TESTS: integration-comments
+ - TESTS: integration-favorites
+ - TESTS: integration-provisioning-v2
+ - TESTS: integration-webdav-related
+ - TESTS: integration-sharees-features
- TESTS: jsunit
- TESTS: check-autoloader
- TESTS: app-check-code
@@ -201,3 +369,4 @@ services:
when:
matrix:
DB: mysql
+
diff --git a/3rdparty b/3rdparty
-Subproject 2c77c4ad7031c67d77eb2d84ff0713f27543dde
+Subproject f5555fef8e80d8380efb44dc8b7622a1de573c1
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 5e02664c919..f1ce07a8040 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -29,11 +29,36 @@ Thanks for wanting to contribute source code to Nextcloud. That's great!
Please read the [Developer Manuals][devmanual] to learn how to create your first application or how to test the Nextcloud code with PHPUnit.
+### Tests
+
In order to constantly increase the quality of our software we can no longer accept pull request which submit un-tested code.
It is a must have that changed and added code segments are unit tested.
In some areas unit testing is hard (aka almost impossible) as of today - in these areas refactoring WHILE fixing a bug is encouraged to enable unit testing.
+### Sign your work
+
+We use the Developer Certificate of Origin (DCO) as a additional safeguard
+for the Nextcloud project. This is a well established and widely used
+mechanism to assure contributors have confirmed their right to license
+their contribution under the project's license.
+Please read [contribute/developer-certificate-of-origin][dcofile].
+If you can certify it, then just add a line to every git commit message:
+
+````
+ Signed-off-by: Random J Developer <random@developer.example.org>
+````
+
+Use your real name (sorry, no pseudonyms or anonymous contributions).
+If you set your `user.name` and `user.email` git configs, you can sign your
+commit automatically with `git commit -s`.
+
+### Apply a license
+
+In case you are not sure how to add or update the license header correctly please have a look at [contribute/HowToApplyALicense.md][applyalicense]
+
[devmanual]: https://docs.nextcloud.org/server/10/developer_manual/
+[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin
+[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md
## Translations
Please submit translations via [Transifex][transifex].
diff --git a/README.md b/README.md
index fd128b24d99..eafad0b9c8c 100644
--- a/README.md
+++ b/README.md
@@ -29,6 +29,13 @@ if you want to join the Github organization just let us know and we’ll add you
* :lock: **Encryption** You can encrypt data in transit with secure https connections. You can enable the encryption app to encrypt data on storage for improved security and privacy.
* ...
+## Installation
+Read the Full [Installation Documentation](https://docs.nextcloud.com/server/10/admin_manual/installation/)
+
+1. [Install yourself, use our appliances or find a provider](https://nextcloud.com/install/#instructions-server)
+2. [Set permissions](https://docs.nextcloud.com/server/10/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions)
+3. [Sync your data via Desktop or Mobile App](https://nextcloud.com/install/#install-clients)
+
## Contribution Guidelines
All contributions to this repository from June, 16 2016 on are considered to be
@@ -43,7 +50,7 @@ changed it substantially:
@copyright Copyright (c) <year>, <your name> (<your email address>)
```
-More information how to contribute: https://nextcloud.com/contribute/
+More information how to contribute: [https://nextcloud.com/contribute/](https://nextcloud.com/contribute/)
## Nextcloud VM
If you're not familiar with Linux, or simply just want to get up and running on a pre-configured system in no time - we have developed a VM that you can download. Just extract it and mount it in VMware or VirtualBox and you're all set.
@@ -51,10 +58,10 @@ If you're not familiar with Linux, or simply just want to get up and running on
Download the latest version of the [Nextcloud VM](https://github.com/nextcloud/vm/releases/)
## Support
-Learn about the different ways you can get support for Nextcloud: https://nextcloud.com/support/
+Learn about the different ways you can get support for Nextcloud: [https://nextcloud.com/support/](https://nextcloud.com/support/)
## Get in touch
* :clipboard: [Forum](https://help.nextcloud.com)
* :hash: [IRC channel](https://webchat.freenode.net/?channels=nextcloud)
-* :busts_in_silhouette: [Facebook] (https://facebook.com/nextclouders)
+* :busts_in_silhouette: [Facebook](https://facebook.com/nextclouders)
* :hatching_chick: [Twitter](https://twitter.com/Nextclouders)
diff --git a/apps/comments/l10n/ar.js b/apps/comments/l10n/ar.js
index 159110ae13e..23b394048e6 100644
--- a/apps/comments/l10n/ar.js
+++ b/apps/comments/l10n/ar.js
@@ -1,12 +1,15 @@
OC.L10N.register(
"comments",
{
+ "New comment …" : "تعليق جديد",
"Delete comment" : "حذف التعليق",
"Post" : "ارسال",
"Cancel" : "إلغاء",
"Edit comment" : "تعديل التعليق",
"[Deleted user]" : "[مستخدم محذوف]",
"Comments" : "تعليقات",
+ "No comments yet, start the conversation!" : "لا يوجد تعليقات, ابدأ النقاش الآن!",
+ "More comments …" : "مزيد من التعليقات...",
"Save" : "حفظ",
"Allowed characters {count} of {max}" : "عدد الأحرف المسموح بها {count} من {max}",
"Error occurred while retrieving comment with id {id}" : "حصل خطأ أثناء عرض التعليق رقم {id}",
diff --git a/apps/comments/l10n/ar.json b/apps/comments/l10n/ar.json
index 8dc00af0572..b39343bec1e 100644
--- a/apps/comments/l10n/ar.json
+++ b/apps/comments/l10n/ar.json
@@ -1,10 +1,13 @@
{ "translations": {
+ "New comment …" : "تعليق جديد",
"Delete comment" : "حذف التعليق",
"Post" : "ارسال",
"Cancel" : "إلغاء",
"Edit comment" : "تعديل التعليق",
"[Deleted user]" : "[مستخدم محذوف]",
"Comments" : "تعليقات",
+ "No comments yet, start the conversation!" : "لا يوجد تعليقات, ابدأ النقاش الآن!",
+ "More comments …" : "مزيد من التعليقات...",
"Save" : "حفظ",
"Allowed characters {count} of {max}" : "عدد الأحرف المسموح بها {count} من {max}",
"Error occurred while retrieving comment with id {id}" : "حصل خطأ أثناء عرض التعليق رقم {id}",
diff --git a/apps/comments/l10n/ast.js b/apps/comments/l10n/ast.js
index 716facf525d..dda33336302 100644
--- a/apps/comments/l10n/ast.js
+++ b/apps/comments/l10n/ast.js
@@ -1,8 +1,28 @@
OC.L10N.register(
"comments",
{
+ "New comment …" : "Comentariu nuevu...",
+ "Delete comment" : "Desaniciar comentariu",
+ "Post" : "Espublizar",
"Cancel" : "Encaboxar",
+ "Edit comment" : "Editar comentariu",
+ "[Deleted user]" : "[Usuariu desaniciáu]",
+ "Comments" : "Comentarios",
+ "No comments yet, start the conversation!" : "Entá nun hai comentarios. ¡Entama una conversación!",
+ "More comments …" : "Más comentarios...",
"Save" : "Guardar",
- "Comment" : "Comentariu"
+ "Error occurred while retrieving comment with id {id}" : "Asocedió un fallu entrín se recibía'l comentariu cola ID {id}",
+ "Error occurred while updating comment with id {id}" : "Asocedió un fallu entrín s'anovaba'l comentariu cola ID {id}",
+ "Error occurred while posting comment" : "Asocedieron fallos entrín s'espublizaba'l comentariu",
+ "{count} unread comments" : "{count} comentarios ensin lleer",
+ "Comment" : "Comentariu",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> pa ficheros",
+ "You commented" : "Comentesti",
+ "%1$s commented" : "%1$s comentó",
+ "You commented on %2$s" : "Comentesti en %2$s",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "Type in a new comment..." : "Teclexa un comentariu nuevu...",
+ "No other comments available" : "Nun hai otros comentarios disponibles",
+ "More comments..." : "Más comentarios..."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/ast.json b/apps/comments/l10n/ast.json
index 30dd7e23077..f4de1d45d7c 100644
--- a/apps/comments/l10n/ast.json
+++ b/apps/comments/l10n/ast.json
@@ -1,6 +1,26 @@
{ "translations": {
+ "New comment …" : "Comentariu nuevu...",
+ "Delete comment" : "Desaniciar comentariu",
+ "Post" : "Espublizar",
"Cancel" : "Encaboxar",
+ "Edit comment" : "Editar comentariu",
+ "[Deleted user]" : "[Usuariu desaniciáu]",
+ "Comments" : "Comentarios",
+ "No comments yet, start the conversation!" : "Entá nun hai comentarios. ¡Entama una conversación!",
+ "More comments …" : "Más comentarios...",
"Save" : "Guardar",
- "Comment" : "Comentariu"
+ "Error occurred while retrieving comment with id {id}" : "Asocedió un fallu entrín se recibía'l comentariu cola ID {id}",
+ "Error occurred while updating comment with id {id}" : "Asocedió un fallu entrín s'anovaba'l comentariu cola ID {id}",
+ "Error occurred while posting comment" : "Asocedieron fallos entrín s'espublizaba'l comentariu",
+ "{count} unread comments" : "{count} comentarios ensin lleer",
+ "Comment" : "Comentariu",
+ "<strong>Comments</strong> for files" : "<strong>Comentarios</strong> pa ficheros",
+ "You commented" : "Comentesti",
+ "%1$s commented" : "%1$s comentó",
+ "You commented on %2$s" : "Comentesti en %2$s",
+ "%1$s commented on %2$s" : "%1$s comentó en %2$s",
+ "Type in a new comment..." : "Teclexa un comentariu nuevu...",
+ "No other comments available" : "Nun hai otros comentarios disponibles",
+ "More comments..." : "Más comentarios..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/comments/l10n/el.js b/apps/comments/l10n/el.js
index 29afdaba0ef..ca8c8f02b0b 100644
--- a/apps/comments/l10n/el.js
+++ b/apps/comments/l10n/el.js
@@ -8,9 +8,13 @@ OC.L10N.register(
"Edit comment" : "Επεξεργασία σχολίου",
"[Deleted user]" : "[Διαγραφή χρήστη]",
"Comments" : "Σχόλια",
+ "No comments yet, start the conversation!" : "Δεν υπάρχουν σχόλια, ξεκινήστε την συζήτηση!",
"More comments …" : "Περισσότερα σχόλια ...",
"Save" : "Αποθήκευση",
"Allowed characters {count} of {max}" : "Επιτρεπόμενοι χαρακτήρες {count} από {max}",
+ "Error occurred while retrieving comment with id {id}" : "Ένα σφάλμα προέκυψε κατά την προσπάθεια λήψης σχολίων με αναγνωριστικό {id}",
+ "Error occurred while updating comment with id {id}" : "Ένα σφάλμα προέκυψε κατά την προσπάθεια αναβάθμισης του σχολίου με το αναγνωριστικό {id}",
+ "Error occurred while posting comment" : "Ένα σφάλμα προέκυψε κατά την προσπάθεια δημοσίευσης σχολίου",
"{count} unread comments" : "{count} μη αναγνωσμένα σχόλια",
"Comment" : "Σχόλιο",
"<strong>Comments</strong> for files" : "<strong>Σχόλια</strong> για αρχεία",
diff --git a/apps/comments/l10n/el.json b/apps/comments/l10n/el.json
index a4a73befcc9..ae1a9bb1473 100644
--- a/apps/comments/l10n/el.json
+++ b/apps/comments/l10n/el.json
@@ -6,9 +6,13 @@
"Edit comment" : "Επεξεργασία σχολίου",
"[Deleted user]" : "[Διαγραφή χρήστη]",
"Comments" : "Σχόλια",
+ "No comments yet, start the conversation!" : "Δεν υπάρχουν σχόλια, ξεκινήστε την συζήτηση!",
"More comments …" : "Περισσότερα σχόλια ...",
"Save" : "Αποθήκευση",
"Allowed characters {count} of {max}" : "Επιτρεπόμενοι χαρακτήρες {count} από {max}",
+ "Error occurred while retrieving comment with id {id}" : "Ένα σφάλμα προέκυψε κατά την προσπάθεια λήψης σχολίων με αναγνωριστικό {id}",
+ "Error occurred while updating comment with id {id}" : "Ένα σφάλμα προέκυψε κατά την προσπάθεια αναβάθμισης του σχολίου με το αναγνωριστικό {id}",
+ "Error occurred while posting comment" : "Ένα σφάλμα προέκυψε κατά την προσπάθεια δημοσίευσης σχολίου",
"{count} unread comments" : "{count} μη αναγνωσμένα σχόλια",
"Comment" : "Σχόλιο",
"<strong>Comments</strong> for files" : "<strong>Σχόλια</strong> για αρχεία",
diff --git a/apps/comments/l10n/nb_NO.js b/apps/comments/l10n/nb_NO.js
index 6fe515fa35d..95cf1ce94d3 100644
--- a/apps/comments/l10n/nb_NO.js
+++ b/apps/comments/l10n/nb_NO.js
@@ -1,20 +1,29 @@
OC.L10N.register(
"comments",
{
- "Type in a new comment..." : "Skriv inn en ny kommentar...",
+ "New comment …" : "Ny kommentar",
"Delete comment" : "Slett kommentar",
"Post" : "Send",
"Cancel" : "Avbryt",
"Edit comment" : "Rediger kommentar",
"[Deleted user]" : "[Slettet bruker]",
"Comments" : "Kommentarer",
- "No other comments available" : "Ingen andre kommentarer tilgjengelig",
- "More comments..." : "Flere kommentarer..",
+ "No comments yet, start the conversation!" : "Ingen kommentarer enda, start diskusjonen!",
+ "More comments …" : "Flere kommentarer..",
"Save" : "Lagre",
"Allowed characters {count} of {max}" : "Antall tegn tillatt {count} av {max}",
+ "Error occurred while retrieving comment with id {id}" : "En feil oppstod under henting av kommentar med id {id}",
+ "Error occurred while updating comment with id {id}" : "En feil oppstod under oppdatering av kommentar med id {id}",
+ "Error occurred while posting comment" : "En feil oppstod under posting av kommentar",
"{count} unread comments" : "{count} uleste kommentarer",
"Comment" : "Kommentar",
+ "<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
+ "You commented" : "Du kommenterte",
"%1$s commented" : "%1$s kommentert",
- "%1$s commented on %2$s" : "%1$s kommenterte %2$s"
+ "You commented on %2$s" : "Du kommenterte til %2$s",
+ "%1$s commented on %2$s" : "%1$s kommenterte %2$s",
+ "Type in a new comment..." : "Skriv inn en ny kommentar...",
+ "No other comments available" : "Ingen andre kommentarer tilgjengelig",
+ "More comments..." : "Flere kommentarer.."
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/comments/l10n/nb_NO.json b/apps/comments/l10n/nb_NO.json
index 5b5885b2d2e..4829035b689 100644
--- a/apps/comments/l10n/nb_NO.json
+++ b/apps/comments/l10n/nb_NO.json
@@ -1,18 +1,27 @@
{ "translations": {
- "Type in a new comment..." : "Skriv inn en ny kommentar...",
+ "New comment …" : "Ny kommentar",
"Delete comment" : "Slett kommentar",
"Post" : "Send",
"Cancel" : "Avbryt",
"Edit comment" : "Rediger kommentar",
"[Deleted user]" : "[Slettet bruker]",
"Comments" : "Kommentarer",
- "No other comments available" : "Ingen andre kommentarer tilgjengelig",
- "More comments..." : "Flere kommentarer..",
+ "No comments yet, start the conversation!" : "Ingen kommentarer enda, start diskusjonen!",
+ "More comments …" : "Flere kommentarer..",
"Save" : "Lagre",
"Allowed characters {count} of {max}" : "Antall tegn tillatt {count} av {max}",
+ "Error occurred while retrieving comment with id {id}" : "En feil oppstod under henting av kommentar med id {id}",
+ "Error occurred while updating comment with id {id}" : "En feil oppstod under oppdatering av kommentar med id {id}",
+ "Error occurred while posting comment" : "En feil oppstod under posting av kommentar",
"{count} unread comments" : "{count} uleste kommentarer",
"Comment" : "Kommentar",
+ "<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
+ "You commented" : "Du kommenterte",
"%1$s commented" : "%1$s kommentert",
- "%1$s commented on %2$s" : "%1$s kommenterte %2$s"
+ "You commented on %2$s" : "Du kommenterte til %2$s",
+ "%1$s commented on %2$s" : "%1$s kommenterte %2$s",
+ "Type in a new comment..." : "Skriv inn en ny kommentar...",
+ "No other comments available" : "Ingen andre kommentarer tilgjengelig",
+ "More comments..." : "Flere kommentarer.."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/comments/l10n/zh_TW.js b/apps/comments/l10n/zh_TW.js
index 3a85b07cdc2..8660bff10d8 100644
--- a/apps/comments/l10n/zh_TW.js
+++ b/apps/comments/l10n/zh_TW.js
@@ -1,25 +1,29 @@
OC.L10N.register(
"comments",
{
- "New comment …" : "新備註...",
- "Delete comment" : "刪除備註",
+ "New comment …" : "新留言…",
+ "Delete comment" : "刪除留言",
"Post" : "送出",
"Cancel" : "取消",
- "Edit comment" : "編輯備註",
+ "Edit comment" : "編輯留言",
"[Deleted user]" : "[已刪除的使用者]",
- "Comments" : "備註",
- "No comments yet, start the conversation!" : "無備註,開始對談 !",
- "More comments …" : "更多備註...",
+ "Comments" : "留言",
+ "No comments yet, start the conversation!" : "尚無留言,開始討論 !",
+ "More comments …" : "其他留言…",
"Save" : "儲存",
"Allowed characters {count} of {max}" : "已輸入 {count} / 長度限制 {max}",
- "{count} unread comments" : "{count} 則未讀備註",
- "Comment" : "備註",
- "You commented" : "您已備註",
- "%1$s commented" : "%1$s 備註",
- "You commented on %2$s" : "您對 %2$s 備註",
- "%1$s commented on %2$s" : "%1$s 對 %2$s 備註",
- "Type in a new comment..." : "輸入新備註…",
- "No other comments available" : "沒有其他備註",
- "More comments..." : "更多備註…"
+ "Error occurred while retrieving comment with id {id}" : "取得留言 {id} 發生錯誤",
+ "Error occurred while updating comment with id {id}" : "編輯留言 {id} 發生錯誤",
+ "Error occurred while posting comment" : "張貼留言出錯",
+ "{count} unread comments" : "{count} 則未讀留言",
+ "Comment" : "留言",
+ "<strong>Comments</strong> for files" : "檔案的<strong>留言</strong>",
+ "You commented" : "您已留言",
+ "%1$s commented" : "%1$s 留言",
+ "You commented on %2$s" : "您對 %2$s 留言",
+ "%1$s commented on %2$s" : "%1$s 在 %2$s 留言",
+ "Type in a new comment..." : "輸入新留言…",
+ "No other comments available" : "沒有其他留言",
+ "More comments..." : "其他留言…"
},
"nplurals=1; plural=0;");
diff --git a/apps/comments/l10n/zh_TW.json b/apps/comments/l10n/zh_TW.json
index 51883b9e8a1..e1ac1b3e4d2 100644
--- a/apps/comments/l10n/zh_TW.json
+++ b/apps/comments/l10n/zh_TW.json
@@ -1,23 +1,27 @@
{ "translations": {
- "New comment …" : "新備註...",
- "Delete comment" : "刪除備註",
+ "New comment …" : "新留言…",
+ "Delete comment" : "刪除留言",
"Post" : "送出",
"Cancel" : "取消",
- "Edit comment" : "編輯備註",
+ "Edit comment" : "編輯留言",
"[Deleted user]" : "[已刪除的使用者]",
- "Comments" : "備註",
- "No comments yet, start the conversation!" : "無備註,開始對談 !",
- "More comments …" : "更多備註...",
+ "Comments" : "留言",
+ "No comments yet, start the conversation!" : "尚無留言,開始討論 !",
+ "More comments …" : "其他留言…",
"Save" : "儲存",
"Allowed characters {count} of {max}" : "已輸入 {count} / 長度限制 {max}",
- "{count} unread comments" : "{count} 則未讀備註",
- "Comment" : "備註",
- "You commented" : "您已備註",
- "%1$s commented" : "%1$s 備註",
- "You commented on %2$s" : "您對 %2$s 備註",
- "%1$s commented on %2$s" : "%1$s 對 %2$s 備註",
- "Type in a new comment..." : "輸入新備註…",
- "No other comments available" : "沒有其他備註",
- "More comments..." : "更多備註…"
+ "Error occurred while retrieving comment with id {id}" : "取得留言 {id} 發生錯誤",
+ "Error occurred while updating comment with id {id}" : "編輯留言 {id} 發生錯誤",
+ "Error occurred while posting comment" : "張貼留言出錯",
+ "{count} unread comments" : "{count} 則未讀留言",
+ "Comment" : "留言",
+ "<strong>Comments</strong> for files" : "檔案的<strong>留言</strong>",
+ "You commented" : "您已留言",
+ "%1$s commented" : "%1$s 留言",
+ "You commented on %2$s" : "您對 %2$s 留言",
+ "%1$s commented on %2$s" : "%1$s 在 %2$s 留言",
+ "Type in a new comment..." : "輸入新留言…",
+ "No other comments available" : "沒有其他留言",
+ "More comments..." : "其他留言…"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/dav/appinfo/app.php b/apps/dav/appinfo/app.php
index ebc1d09e3f1..0d417fd3fed 100644
--- a/apps/dav/appinfo/app.php
+++ b/apps/dav/appinfo/app.php
@@ -23,6 +23,7 @@
*/
use OCA\DAV\AppInfo\Application;
+use OCA\DAV\CardDAV\CardDavBackend;
use Symfony\Component\EventDispatcher\GenericEvent;
$app = new Application();
@@ -36,8 +37,8 @@ $eventDispatcher = \OC::$server->getEventDispatcher();
$eventDispatcher->addListener('OCP\Federation\TrustedServerEvent::remove',
function(GenericEvent $event) use ($app) {
- /** @var \OCA\DAV\CardDAV\CardDavBackend $cardDavBackend */
- $cardDavBackend = $app->getContainer()->query('CardDavBackend');
+ /** @var CardDavBackend $cardDavBackend */
+ $cardDavBackend = $app->getContainer()->query(CardDavBackend::class);
$addressBookUri = $event->getSubject();
$addressBook = $cardDavBackend->getAddressBooksByUri('principals/system/system', $addressBookUri);
if (!is_null($addressBook)) {
diff --git a/apps/dav/appinfo/register_command.php b/apps/dav/appinfo/register_command.php
index 7595c1b8335..57bf8ff5dd9 100644
--- a/apps/dav/appinfo/register_command.php
+++ b/apps/dav/appinfo/register_command.php
@@ -34,6 +34,6 @@ $app = new Application();
/** @var Symfony\Component\Console\Application $application */
$application->add(new CreateCalendar($userManager, $groupManager, $dbConnection));
-$application->add(new CreateAddressBook($userManager, $app->getContainer()->query('CardDavBackend')));
+$application->add(new CreateAddressBook($userManager, $app->getContainer()->query(\OCA\DAV\CardDAV\CardDavBackend::class)));
$application->add(new SyncSystemAddressBook($app->getSyncService()));
-$application->add(new SyncBirthdayCalendar($userManager, $app->getContainer()->query('BirthdayService')));
+$application->add(new SyncBirthdayCalendar($userManager, $app->getContainer()->query(\OCA\DAV\CalDAV\BirthdayService::class)));
diff --git a/apps/dav/lib/AppInfo/Application.php b/apps/dav/lib/AppInfo/Application.php
index 17145847fa1..dc3ce7e8bb2 100644
--- a/apps/dav/lib/AppInfo/Application.php
+++ b/apps/dav/lib/AppInfo/Application.php
@@ -25,110 +25,20 @@
namespace OCA\DAV\AppInfo;
use OCA\DAV\CalDAV\BirthdayService;
-use OCA\DAV\CalDAV\CalDavBackend;
-use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\CardDAV\ContactsManager;
-use OCA\DAV\CardDAV\SyncJob;
use OCA\DAV\CardDAV\SyncService;
-use OCA\DAV\Connector\Sabre\Principal;
-use OCA\DAV\DAV\GroupPrincipalBackend;
use OCA\DAV\HookManager;
-use OCA\DAV\Migration\Classification;
-use OCA\DAV\Migration\GenerateBirthdays;
use \OCP\AppFramework\App;
-use OCP\AppFramework\IAppContainer;
use OCP\Contacts\IManager;
-use OCP\IUser;
-use Sabre\VObject\Reader;
use Symfony\Component\EventDispatcher\GenericEvent;
class Application extends App {
/**
* Application constructor.
- *
- * @param array $urlParams
*/
- public function __construct (array $urlParams=array()) {
- parent::__construct('dav', $urlParams);
-
- $container = $this->getContainer();
- $container->registerService('ContactsManager', function($c) {
- /** @var IAppContainer $c */
- return new ContactsManager(
- $c->query('CardDavBackend')
- );
- });
-
- $container->registerService('HookManager', function($c) {
- /** @var IAppContainer $c */
- return new HookManager(
- $c->getServer()->getUserManager(),
- $c->query('SyncService'),
- $c->query('CalDavBackend'),
- $c->query('CardDavBackend')
- );
- });
-
- $container->registerService('SyncService', function($c) {
- /** @var IAppContainer $c */
- return new SyncService(
- $c->query('CardDavBackend'),
- $c->getServer()->getUserManager(),
- $c->getServer()->getLogger()
- );
- });
-
- $container->registerService('CardDavBackend', function($c) {
- /** @var IAppContainer $c */
- $db = $c->getServer()->getDatabaseConnection();
- $dispatcher = $c->getServer()->getEventDispatcher();
- $principal = new Principal(
- $c->getServer()->getUserManager(),
- $c->getServer()->getGroupManager()
- );
- return new CardDavBackend($db, $principal, $c->getServer()->getUserManager(), $dispatcher);
- });
-
- $container->registerService('CalDavBackend', function($c) {
- /** @var IAppContainer $c */
- $db = $c->getServer()->getDatabaseConnection();
- $principal = new Principal(
- $c->getServer()->getUserManager(),
- $c->getServer()->getGroupManager()
- );
- return new CalDavBackend($db, $principal, $c->getServer()->getUserManager());
- });
-
- $container->registerService('BirthdayService', function($c) {
- /** @var IAppContainer $c */
- $g = new GroupPrincipalBackend(
- $c->getServer()->getGroupManager()
- );
- return new BirthdayService(
- $c->query('CalDavBackend'),
- $c->query('CardDavBackend'),
- $g
- );
- });
-
- $container->registerService('OCA\DAV\Migration\Classification', function ($c) {
- /** @var IAppContainer $c */
- return new Classification(
- $c->query('CalDavBackend'),
- $c->getServer()->getUserManager()
- );
- });
-
- $container->registerService('OCA\DAV\Migration\GenerateBirthdays', function ($c) {
- /** @var IAppContainer $c */
- /** @var BirthdayService $b */
- $b = $c->query('BirthdayService');
- return new GenerateBirthdays(
- $b,
- $c->getServer()->getUserManager()
- );
- });
+ public function __construct() {
+ parent::__construct('dav');
}
/**
@@ -137,20 +47,20 @@ class Application extends App {
*/
public function setupContactsProvider(IManager $contactsManager, $userID) {
/** @var ContactsManager $cm */
- $cm = $this->getContainer()->query('ContactsManager');
+ $cm = $this->getContainer()->query(ContactsManager::class);
$urlGenerator = $this->getContainer()->getServer()->getURLGenerator();
$cm->setupContactsProvider($contactsManager, $userID, $urlGenerator);
}
public function registerHooks() {
/** @var HookManager $hm */
- $hm = $this->getContainer()->query('HookManager');
+ $hm = $this->getContainer()->query(HookManager::class);
$hm->setup();
$listener = function($event) {
if ($event instanceof GenericEvent) {
/** @var BirthdayService $b */
- $b = $this->getContainer()->query('BirthdayService');
+ $b = $this->getContainer()->query(BirthdayService::class);
$b->onCardChanged(
$event->getArgument('addressBookId'),
$event->getArgument('cardUri'),
@@ -165,7 +75,7 @@ class Application extends App {
$dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', function($event) {
if ($event instanceof GenericEvent) {
/** @var BirthdayService $b */
- $b = $this->getContainer()->query('BirthdayService');
+ $b = $this->getContainer()->query(BirthdayService::class);
$b->onCardDeleted(
$event->getArgument('addressBookId'),
$event->getArgument('cardUri')
@@ -175,7 +85,7 @@ class Application extends App {
}
public function getSyncService() {
- return $this->getContainer()->query('SyncService');
+ return $this->getContainer()->query(SyncService::class);
}
}
diff --git a/apps/dav/lib/CalDAV/BirthdayService.php b/apps/dav/lib/CalDAV/BirthdayService.php
index 31a6c73f484..ab2794e67db 100644
--- a/apps/dav/lib/CalDAV/BirthdayService.php
+++ b/apps/dav/lib/CalDAV/BirthdayService.php
@@ -50,7 +50,7 @@ class BirthdayService {
* @param CardDavBackend $cardDavBackEnd
* @param GroupPrincipalBackend $principalBackend
*/
- public function __construct($calDavBackEnd, $cardDavBackEnd, $principalBackend) {
+ public function __construct(CalDavBackend $calDavBackEnd, CardDavBackend $cardDavBackEnd, GroupPrincipalBackend $principalBackend) {
$this->calDavBackEnd = $calDavBackEnd;
$this->cardDavBackEnd = $cardDavBackEnd;
$this->principalBackend = $principalBackend;
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php
index 84ec8433a83..17479c490a9 100644
--- a/apps/dav/lib/CalDAV/CalDavBackend.php
+++ b/apps/dav/lib/CalDAV/CalDavBackend.php
@@ -616,19 +616,25 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @return array
*/
function getMultipleCalendarObjects($calendarId, array $uris) {
+ if (empty($uris)) {
+ return [];
+ }
+
+ $chunks = array_chunk($uris, 100);
+ $objects = [];
+
$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'lastmodified', 'etag', 'calendarid', 'size', 'calendardata', 'componenttype', 'classification'])
- ->from('calendarobjects')
- ->where($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId)))
- ->andWhere($query->expr()->in('uri', $query->createParameter('uri')))
- ->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
-
- $stmt = $query->execute();
+ ->from('calendarobjects')
+ ->where($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId)))
+ ->andWhere($query->expr()->in('uri', $query->createParameter('uri')));
- $result = [];
- while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
+ foreach ($chunks as $uris) {
+ $query->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
+ $result = $query->execute();
- $result[] = [
+ while ($row = $result->fetch()) {
+ $objects[] = [
'id' => $row['id'],
'uri' => $row['uri'],
'lastmodified' => $row['lastmodified'],
@@ -638,10 +644,11 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'calendardata' => $this->readBlob($row['calendardata']),
'component' => strtolower($row['componenttype']),
'classification' => (int)$row['classification']
- ];
-
+ ];
+ }
+ $result->closeCursor();
}
- return $result;
+ return $objects;
}
/**
diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php
index b8491c08ff6..3aab2712125 100644
--- a/apps/dav/lib/CardDAV/CardDavBackend.php
+++ b/apps/dav/lib/CardDAV/CardDavBackend.php
@@ -482,23 +482,30 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* @return array
*/
function getMultipleCards($addressBookId, array $uris) {
+ if (empty($uris)) {
+ return [];
+ }
+
+ $chunks = array_chunk($uris, 100);
+ $cards = [];
+
$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata'])
->from('cards')
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
- ->andWhere($query->expr()->in('uri', $query->createParameter('uri')))
- ->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
+ ->andWhere($query->expr()->in('uri', $query->createParameter('uri')));
- $cards = [];
+ foreach ($chunks as $uris) {
+ $query->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
+ $result = $query->execute();
- $result = $query->execute();
- while($row = $result->fetch()) {
- $row['etag'] = '"' . $row['etag'] . '"';
- $row['carddata'] = $this->readBlob($row['carddata']);
- $cards[] = $row;
+ while ($row = $result->fetch()) {
+ $row['etag'] = '"' . $row['etag'] . '"';
+ $row['carddata'] = $this->readBlob($row['carddata']);
+ $cards[] = $row;
+ }
+ $result->closeCursor();
}
- $result->closeCursor();
-
return $cards;
}
diff --git a/apps/dav/tests/unit/AppInfo/ApplicationTest.php b/apps/dav/tests/unit/AppInfo/ApplicationTest.php
index d5fb4e811d2..bb6cfe67b4d 100644
--- a/apps/dav/tests/unit/AppInfo/ApplicationTest.php
+++ b/apps/dav/tests/unit/AppInfo/ApplicationTest.php
@@ -24,6 +24,8 @@
namespace OCA\DAV\Tests\unit\AppInfo;
use OCA\DAV\AppInfo\Application;
+use OCA\DAV\CardDAV\CardDavBackend;
+use OCA\DAV\CardDAV\ContactsManager;
use OCP\Contacts\IManager;
use Test\TestCase;
@@ -40,24 +42,24 @@ class ApplicationTest extends TestCase {
$c = $app->getContainer();
// assert service instances in the container are properly setup
- $s = $c->query('ContactsManager');
+ $s = $c->query(ContactsManager::class);
$this->assertInstanceOf('OCA\DAV\CardDAV\ContactsManager', $s);
- $s = $c->query('CardDavBackend');
+ $s = $c->query(CardDavBackend::class);
$this->assertInstanceOf('OCA\DAV\CardDAV\CardDavBackend', $s);
}
public function testContactsManagerSetup() {
$app = new Application();
$c = $app->getContainer();
- $c->registerService('CardDavBackend', function($c) {
- $service = $this->getMockBuilder('OCA\DAV\CardDAV\CardDavBackend')->disableOriginalConstructor()->getMock();
+ $c->registerService(CardDavBackend::class, function() {
+ $service = $this->createMock(CardDavBackend::class);
$service->method('getAddressBooksForUser')->willReturn([]);
return $service;
});
// assert setupContactsProvider() is proper
- /** @var IManager | \PHPUnit_Framework_MockObject_MockObject $cm */
- $cm = $this->getMockBuilder('OCP\Contacts\IManager')->disableOriginalConstructor()->getMock();
+ /** @var IManager|\PHPUnit_Framework_MockObject_MockObject $cm */
+ $cm = $this->createMock(IManager::class);
$app->setupContactsProvider($cm, 'xxx');
$this->assertTrue(true);
}
diff --git a/apps/encryption/l10n/el.js b/apps/encryption/l10n/el.js
index bc34e1a8653..5ca8b383e04 100644
--- a/apps/encryption/l10n/el.js
+++ b/apps/encryption/l10n/el.js
@@ -22,6 +22,8 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.",
"Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε εκτελέστε την εντολή 'occ encryption:migrate' ή επικοινωνήστε με το διαχειριστή σας.",
+ "Encryption app is enabled and ready" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη",
+ "Bad Signature" : "Κακή υπογραφή",
"one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.",
@@ -51,6 +53,7 @@ OC.L10N.register(
"Enable password recovery:" : "Ενεργοποιήστε την ανάκτηση κωδικού πρόσβασης",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
- "Disabled" : "Απενεργοποιημένο"
+ "Disabled" : "Απενεργοποιημένο",
+ "Nextcloud basic encryption module" : "Βασικό άρθρωμα κρυπτογράφησης Netcloud"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/el.json b/apps/encryption/l10n/el.json
index 91c496356ae..f668f535ea1 100644
--- a/apps/encryption/l10n/el.json
+++ b/apps/encryption/l10n/el.json
@@ -20,6 +20,8 @@
"The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.",
"Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε εκτελέστε την εντολή 'occ encryption:migrate' ή επικοινωνήστε με το διαχειριστή σας.",
+ "Encryption app is enabled and ready" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη",
+ "Bad Signature" : "Κακή υπογραφή",
"one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.",
@@ -49,6 +51,7 @@
"Enable password recovery:" : "Ενεργοποιήστε την ανάκτηση κωδικού πρόσβασης",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
- "Disabled" : "Απενεργοποιημένο"
+ "Disabled" : "Απενεργοποιημένο",
+ "Nextcloud basic encryption module" : "Βασικό άρθρωμα κρυπτογράφησης Netcloud"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/hu_HU.js b/apps/encryption/l10n/hu_HU.js
index d13459e4902..8ff4554a200 100644
--- a/apps/encryption/l10n/hu_HU.js
+++ b/apps/encryption/l10n/hu_HU.js
@@ -1,28 +1,69 @@
OC.L10N.register(
"encryption",
{
+ "Missing recovery key password" : "Hiányzó helyreállítási kulcs jelszó",
+ "Please repeat the recovery key password" : "Ismételd meg a helyreállítási kulcs jelszavát",
+ "Repeated recovery key password does not match the provided recovery key password" : "A megismételt helyreállítási kulcs jelszó nem egyezik meg a megadott helyreállítási kulcs jelszóval ",
"Recovery key successfully enabled" : "A helyreállítási kulcs sikeresen bekapcsolva",
"Could not enable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett engedélyezni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
"Recovery key successfully disabled" : "A helyreállítási kulcs sikeresen kikapcsolva",
"Could not disable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
+ "Missing parameters" : "Hiányzó paraméterek",
+ "Please provide the old recovery password" : "Kérlek add meg a régi visszaállítási jelszót",
+ "Please provide a new recovery password" : "Kérlek add meg az új visszaállítási jelszót",
+ "Please repeat the new recovery password" : "Kérlek ismételd meg az új visszaállítási jelszót",
"Password successfully changed." : "A jelszót sikeresen megváltoztattuk.",
"Could not change the password. Maybe the old password was not correct." : "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.",
+ "Recovery Key disabled" : "Visszaállítási kulcs letilva",
+ "Recovery Key enabled" : "Visszaállítási kulcs engedélyezve",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Nem sikerült engedélyezni a visszaállítási kulcsot, kérlek próbáld újra vagy lép kapcsolatba az adminisztrátorral",
+ "Could not update the private key password." : "Nem sikerült frissíteni a privát kulcs jelszavát.",
+ "The old password was not correct, please try again." : "A régi jelszó nem volt helyes, kérlek próbáld újra.",
+ "The current log-in password was not correct, please try again." : "Az aktuális bejelentkezési jelszó nem volt helyes, kérlek próbáld újra.",
"Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "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 titkosító alkalmazás engedélyezve van, de a kulcsaid még nincsenek inicializálva. Kérlek lépj ki, majd 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",
+ "one-time password for server-side-encryption" : "szerver-oldali titkosítás egyszer használható jelszava",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájlt nem sikerült visszafejteni, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérd meg a tulajdonosát, hogy ossza meg veled újra ezt a fájlt.",
+ "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" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\n",
"The share will expire on %s." : "A megosztás lejár ekkor %s",
"Cheers!" : "Üdv.",
+ "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>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
+ "Default encryption module" : "Alapértelmezett titkosítási modul",
+ "Encrypt the home storage" : "Helyi tároló titkosítása",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "A lehetőség engedélyezésekor minden fájlt titkosít a fő tárolóban, egyébként csak a külső tárolókon lévő fájlok lesznek titkosítva",
+ "Enable recovery key" : "Visszaállítási kulcs engedélyezése",
+ "Disable recovery key" : "Visszaállítási kulcs letiltása",
+ "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 visszaállítási kulcs egy a fájlok titkosítására szolgáló extra titkosítási kulcs. A segítségével vissza lehet állítani a fájlokat ha felhasználó elfelejtette a jelszavát.",
"Recovery key password" : "A helyreállítási kulcs jelszava",
+ "Repeat recovery key password" : "Ismételd meg a visszaállítási kulcs jelszavát",
"Change recovery key password:" : "A helyreállítási kulcs jelszavának módosítása:",
+ "Old recovery key password" : "A régi helyreállítási kulcs jelszava",
+ "New recovery key password" : "Az új helyreállítási kulcs jelszava",
+ "Repeat new recovery key password" : "Ismételd meg az új helyreállítási kulcs jelszavát",
"Change Password" : "Jelszó megváltoztatása",
- " If you don't remember your old password you can ask your administrator to recover your files." : "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza az állományait.",
+ "Basic encryption module" : "Alap titkosítási modul",
+ "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érjük, hogy jelentkezzen ki, és lépjen be újra!",
+ "Your private key password no longer matches your log-in password." : "A privát kulcs jelszavad már nem egyezik meg a bejelentkezési jelszavaddal. ",
+ "Set your old private key password to your current log-in password:" : "Állítsd át a régi privát kulcs jelszavadat az aktuális bejelentkezési jelszavadra:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza a fájljait.",
"Old log-in password" : "Régi bejelentkezési jelszó",
"Current log-in password" : "Jelenlegi bejelentkezési jelszó",
"Update Private Key Password" : "A személyest kulcs jelszó frissítése",
"Enable password recovery:" : "Jelszó-visszaállítás bekapcsolása",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított állományok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított fájlok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
"Enabled" : "Bekapcsolva",
- "Disabled" : "Kikapcsolva"
+ "Disabled" : "Kikapcsolva",
+ "You need to migrate your encryption keys from the old encryption (Nextcloud <= 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 (Nextcloud <= 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 and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
+ "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 'Nextcloud 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" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\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 \"Nextcloud 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>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
+ "Nextcloud basic encryption module" : "Nextcloud alap titkosítási modul"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/hu_HU.json b/apps/encryption/l10n/hu_HU.json
index 2e77ff30182..01dd2d9da40 100644
--- a/apps/encryption/l10n/hu_HU.json
+++ b/apps/encryption/l10n/hu_HU.json
@@ -1,26 +1,67 @@
{ "translations": {
+ "Missing recovery key password" : "Hiányzó helyreállítási kulcs jelszó",
+ "Please repeat the recovery key password" : "Ismételd meg a helyreállítási kulcs jelszavát",
+ "Repeated recovery key password does not match the provided recovery key password" : "A megismételt helyreállítási kulcs jelszó nem egyezik meg a megadott helyreállítási kulcs jelszóval ",
"Recovery key successfully enabled" : "A helyreállítási kulcs sikeresen bekapcsolva",
"Could not enable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett engedélyezni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
"Recovery key successfully disabled" : "A helyreállítási kulcs sikeresen kikapcsolva",
"Could not disable recovery key. Please check your recovery key password!" : "A helyreállítási kulcsot nem lehetett kikapcsolni. Ellenőrizze a helyreállítási kulcsa jelszavát!",
+ "Missing parameters" : "Hiányzó paraméterek",
+ "Please provide the old recovery password" : "Kérlek add meg a régi visszaállítási jelszót",
+ "Please provide a new recovery password" : "Kérlek add meg az új visszaállítási jelszót",
+ "Please repeat the new recovery password" : "Kérlek ismételd meg az új visszaállítási jelszót",
"Password successfully changed." : "A jelszót sikeresen megváltoztattuk.",
"Could not change the password. Maybe the old password was not correct." : "A jelszót nem lehet megváltoztatni! Lehet, hogy hibás volt a régi jelszó.",
+ "Recovery Key disabled" : "Visszaállítási kulcs letilva",
+ "Recovery Key enabled" : "Visszaállítási kulcs engedélyezve",
+ "Could not enable the recovery key, please try again or contact your administrator" : "Nem sikerült engedélyezni a visszaállítási kulcsot, kérlek próbáld újra vagy lép kapcsolatba az adminisztrátorral",
+ "Could not update the private key password." : "Nem sikerült frissíteni a privát kulcs jelszavát.",
+ "The old password was not correct, please try again." : "A régi jelszó nem volt helyes, kérlek próbáld újra.",
+ "The current log-in password was not correct, please try again." : "Az aktuális bejelentkezési jelszó nem volt helyes, kérlek próbáld újra.",
"Private key password successfully updated." : "A személyes kulcsának jelszava frissítésre került.",
- "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Az állományok titkosításához használt titkos kulcsa érvénytelen. Kérjük frissítse a titkos kulcs jelszót a személyes beállításokban, hogy ismét hozzáférjen a titkosított állományaihoz!",
- "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Az állományok titkosítása engedélyezve van, de az Ön titkos kulcsai nincsenek beállítva. Ezért kérjük, hogy jelentkezzen ki, és lépjen be újra!",
- "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Az állományt nem sikerült dekódolni, valószínűleg ez egy megosztott fájl. Kérje meg az állomány tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "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 titkosító alkalmazás engedélyezve van, de a kulcsaid még nincsenek inicializálva. Kérlek lépj ki, majd 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",
+ "one-time password for server-side-encryption" : "szerver-oldali titkosítás egyszer használható jelszava",
+ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájlt nem sikerült visszafejteni, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy újra ossza meg Önnel ezt az állományt!",
+ "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérd meg a tulajdonosát, hogy ossza meg veled újra ezt a fájlt.",
+ "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" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\n",
"The share will expire on %s." : "A megosztás lejár ekkor %s",
"Cheers!" : "Üdv.",
+ "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>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
+ "Default encryption module" : "Alapértelmezett titkosítási modul",
+ "Encrypt the home storage" : "Helyi tároló titkosítása",
+ "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "A lehetőség engedélyezésekor minden fájlt titkosít a fő tárolóban, egyébként csak a külső tárolókon lévő fájlok lesznek titkosítva",
+ "Enable recovery key" : "Visszaállítási kulcs engedélyezése",
+ "Disable recovery key" : "Visszaállítási kulcs letiltása",
+ "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 visszaállítási kulcs egy a fájlok titkosítására szolgáló extra titkosítási kulcs. A segítségével vissza lehet állítani a fájlokat ha felhasználó elfelejtette a jelszavát.",
"Recovery key password" : "A helyreállítási kulcs jelszava",
+ "Repeat recovery key password" : "Ismételd meg a visszaállítási kulcs jelszavát",
"Change recovery key password:" : "A helyreállítási kulcs jelszavának módosítása:",
+ "Old recovery key password" : "A régi helyreállítási kulcs jelszava",
+ "New recovery key password" : "Az új helyreállítási kulcs jelszava",
+ "Repeat new recovery key password" : "Ismételd meg az új helyreállítási kulcs jelszavát",
"Change Password" : "Jelszó megváltoztatása",
- " If you don't remember your old password you can ask your administrator to recover your files." : "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza az állományait.",
+ "Basic encryption module" : "Alap titkosítási modul",
+ "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érjük, hogy jelentkezzen ki, és lépjen be újra!",
+ "Your private key password no longer matches your log-in password." : "A privát kulcs jelszavad már nem egyezik meg a bejelentkezési jelszavaddal. ",
+ "Set your old private key password to your current log-in password:" : "Állítsd át a régi privát kulcs jelszavadat az aktuális bejelentkezési jelszavadra:",
+ " If you don't remember your old password you can ask your administrator to recover your files." : "Ha nem emlékszik a régi jelszavára akkor megkérheti a rendszergazdát, hogy állítsa vissza a fájljait.",
"Old log-in password" : "Régi bejelentkezési jelszó",
"Current log-in password" : "Jelenlegi bejelentkezési jelszó",
"Update Private Key Password" : "A személyest kulcs jelszó frissítése",
"Enable password recovery:" : "Jelszó-visszaállítás bekapcsolása",
- "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított állományok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
+ "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ez az opció lehetővé teszi, hogy a titkosított fájlok tartalmát visszanyerjük abban az esetben, ha elfelejti a jelszavát",
"Enabled" : "Bekapcsolva",
- "Disabled" : "Kikapcsolva"
+ "Disabled" : "Kikapcsolva",
+ "You need to migrate your encryption keys from the old encryption (Nextcloud <= 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 (Nextcloud <= 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 and ready" : "A titkosító alkalmazás engedélyezve és készen áll",
+ "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 'Nextcloud 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" : "Szia!\n\nAz adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: '%s'.\n\nKérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.\n\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 \"Nextcloud 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>" : "Szia!<br><br>Az adminisztrátor bekapcsolta a szerver-oldali titkosítást. A fájljaid ezzel a jelszóval lettek titkosítva: <strong>%s</strong>.<br><br>Kérlek jelentkezz be a webes felületre és a személyes beállítások 'Nextcloud alap titkosítási modul' szekcióban frissítsd a titkosítási jelszavad, úgy hogy megadod a 'régi bejelentkezési jelszó' mezőben ezt a jelszót, majd az aktuális bejelentkezési jelszavad.<br><br>",
+ "Nextcloud basic encryption module" : "Nextcloud alap titkosítási modul"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/encryption/l10n/nb_NO.js b/apps/encryption/l10n/nb_NO.js
index 0622a26e113..4f5777b0575 100644
--- a/apps/encryption/l10n/nb_NO.js
+++ b/apps/encryption/l10n/nb_NO.js
@@ -22,15 +22,17 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.",
"Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst kjør 'occ encryption:migrate' eller kontakt en administrator",
+ "Encryption app is enabled and ready" : "Krypteringsappen er aktivert og klar",
"Bad Signature" : "Feil signatur",
"Missing Signature" : "Manglende signatur",
- "one-time password for server-side-encryption" : "engangspassord for serverkryptering",
+ "one-time password for server-side-encryption" : "engangspassord for tjenerkryptering",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke lese denne filen, som sannsynligvis er en delt fil. Be eieren av filen om å dele den med deg på nytt.",
"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" : "Hei,\n\nAdministratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nVennligst logg inn på web-grensesnittet, gå til seksjonen 'grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
"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>" : "Hei,<br><br>Administratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet <strong>%s</strong>.<br><br>Vennligst logg inn på web-grensesnittet, gå til seksjonen \"grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.<br><br>",
+ "Default encryption module" : "Standard krypteringsmodul",
"Encrypt the home storage" : "Krypter hjemmelageret",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av dette valget krypterer alle filer som er lagret på hovedlageret. Ellers vil kun filer på eksterne lagre bli kryptert.",
"Enable recovery key" : "Aktiver gjenopprettingsnøkkel",
@@ -53,6 +55,8 @@ OC.L10N.register(
"Enable password recovery:" : "Aktiver gjenoppretting av passord:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering av dette valget tillater deg å gjenerobre tilgang til dine krypterte filer i tilfelle du mister passordet ditt.",
"Enabled" : "Aktiv",
- "Disabled" : "Inaktiv"
+ "Disabled" : "Inaktiv",
+ "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (Nextcloud <= 8.0) til den nye. Vennligst kjør 'occ encryption:migrate' eller kontakt en administrator",
+ "Nextcloud basic encryption module" : "Nextcloud grunnleggende krypteringsmodul"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/encryption/l10n/nb_NO.json b/apps/encryption/l10n/nb_NO.json
index 88500afe64e..72411d0d8be 100644
--- a/apps/encryption/l10n/nb_NO.json
+++ b/apps/encryption/l10n/nb_NO.json
@@ -20,15 +20,17 @@
"The current log-in password was not correct, please try again." : "Det nåværende innloggingspassordet var feil. Prøv igjen.",
"Private key password successfully updated." : "Passord for privat nøkkel ble oppdatert.",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (ownCloud <= 8.0) til den nye. Vennligst kjør 'occ encryption:migrate' eller kontakt en administrator",
+ "Encryption app is enabled and ready" : "Krypteringsappen er aktivert og klar",
"Bad Signature" : "Feil signatur",
"Missing Signature" : "Manglende signatur",
- "one-time password for server-side-encryption" : "engangspassord for serverkryptering",
+ "one-time password for server-side-encryption" : "engangspassord for tjenerkryptering",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne filen. Dette er sannsynligvis en delt fil. Spør eieren av filen om å dele den med deg på nytt.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke lese denne filen, som sannsynligvis er en delt fil. Be eieren av filen om å dele den med deg på nytt.",
"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" : "Hei,\n\nAdministratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet '%s'.\n\nVennligst logg inn på web-grensesnittet, gå til seksjonen 'grunnleggende krypteringsmodul' i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet 'gammelt påloggingspassord' sammen med ditt nåværende påloggingspassord.\n\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
"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>" : "Hei,<br><br>Administratoren har aktivert serverkryptering. Filene dine er blitt kryptert med passordet <strong>%s</strong>.<br><br>Vennligst logg inn på web-grensesnittet, gå til seksjonen \"grunnleggende krypteringsmodul\" i dine personlige innstillinger og oppdater krypteringspassordet ditt ved å legge inn dette passordet i feltet \"gammelt påloggingspassord\" sammen med ditt nåværende påloggingspassord.<br><br>",
+ "Default encryption module" : "Standard krypteringsmodul",
"Encrypt the home storage" : "Krypter hjemmelageret",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Aktivering av dette valget krypterer alle filer som er lagret på hovedlageret. Ellers vil kun filer på eksterne lagre bli kryptert.",
"Enable recovery key" : "Aktiver gjenopprettingsnøkkel",
@@ -51,6 +53,8 @@
"Enable password recovery:" : "Aktiver gjenoppretting av passord:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering av dette valget tillater deg å gjenerobre tilgang til dine krypterte filer i tilfelle du mister passordet ditt.",
"Enabled" : "Aktiv",
- "Disabled" : "Inaktiv"
+ "Disabled" : "Inaktiv",
+ "You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du må migrere krypteringsnøklene din fra den gamle krypteringen (Nextcloud <= 8.0) til den nye. Vennligst kjør 'occ encryption:migrate' eller kontakt en administrator",
+ "Nextcloud basic encryption module" : "Nextcloud grunnleggende krypteringsmodul"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/federatedfilesharing/l10n/hu_HU.js b/apps/federatedfilesharing/l10n/hu_HU.js
index a771703dd1f..a14a4a6b40d 100644
--- a/apps/federatedfilesharing/l10n/hu_HU.js
+++ b/apps/federatedfilesharing/l10n/hu_HU.js
@@ -40,7 +40,7 @@ OC.L10N.register(
"Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
"Federated Cloud" : "Egyesített felhő",
"Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
- "Share it:" : "Ossza meg:",
+ "Share it:" : "Oszd meg:",
"Add to your website" : "Adja hozzá saját weboldalához",
"Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül",
"HTML Code:" : "HTML kód:"
diff --git a/apps/federatedfilesharing/l10n/hu_HU.json b/apps/federatedfilesharing/l10n/hu_HU.json
index 1f5eaa02f6b..45b0aac25a8 100644
--- a/apps/federatedfilesharing/l10n/hu_HU.json
+++ b/apps/federatedfilesharing/l10n/hu_HU.json
@@ -38,7 +38,7 @@
"Allow users on this server to receive shares from other servers" : "Engedélyezze ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
"Federated Cloud" : "Egyesített felhő",
"Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
- "Share it:" : "Ossza meg:",
+ "Share it:" : "Oszd meg:",
"Add to your website" : "Adja hozzá saját weboldalához",
"Share with me via Nextcloud" : "Ossza meg velem Nextcloud-on keresztül",
"HTML Code:" : "HTML kód:"
diff --git a/apps/federatedfilesharing/l10n/nb_NO.js b/apps/federatedfilesharing/l10n/nb_NO.js
index e00953a0168..054951f2e31 100644
--- a/apps/federatedfilesharing/l10n/nb_NO.js
+++ b/apps/federatedfilesharing/l10n/nb_NO.js
@@ -2,18 +2,42 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "Sammenknyttet deling",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Ønsker du å legge til ekstern ressurs {name} fra {owner}@{remote}?",
+ "Remote share" : "Ekstern ressurs",
+ "Remote share password" : "Passord for ekstern ressurs",
+ "Cancel" : "Avbryt",
+ "Add remote share" : "Legg til ekstern ressurs",
+ "Copied!" : "Kopiert!",
+ "Not supported!" : "Ikke støttet!",
+ "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
+ "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere",
"Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky",
+ "Server to server sharing is not enabled on this server" : "Tjener til tjener deling er ikke aktivert på denne tjeneren",
+ "Couldn't establish a federated share." : "Kunne ikke etablere en forent ressurs",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Kunne ikke etablere en forent ressurs, kanskje passordet var feil.",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Forent ressurs forespørselen var vellykket, du vil motta en invitasjon. Sjekk dine varsler.",
+ "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.",
+ "Not allowed to create a federated share with the owner." : "Ikke tillatt å opprette en forent ressurs med eieren.",
+ "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke-klarert SSL-sertifikat",
+ "Could not authenticate to remote share, password might be wrong" : "Kunne ikke autentisere mot ekstern ressurs, passordet var kanskje feil.",
+ "Storage not valid" : "Lagringsplass ikke gyldig",
+ "Federated Share successfully added" : "Forent ressurs ble lagt til",
+ "Couldn't add remote share" : "Kunne ikke legge til ekstern ressurs",
"Sharing %s failed, because this item is already shared with %s" : "Deling av %s feilet, fordi dette elementet allerede er delt med %s",
"Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje servern er utilgjengelig for øyeblikket.",
+ "File is already shared with %s" : "Filen er allerede delt med %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.",
+ "Could not find share" : "Kunne ikke finne ressurs",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du mottor \"/%3$s\" som en fjerndeling fra %1$s (på vegne av %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "Du mottok \"/%3$s\" som en fjerndeling fra %1$s",
"Accept" : "Aksepter",
"Decline" : "Avslå",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky, se %s",
"Share with me through my #Nextcloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky",
"Federated Cloud Sharing" : "Sammenknyttet sky-deling",
"Open documentation" : "Åpne dokumentasjonen",
- "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne serveren sender delinger til andre servere",
- "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne serveren mottar delinger fra andre servere",
+ "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne tjeneren sender delinger til andre tjenere",
+ "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne tjeneren mottar delinger fra andre tjenere",
"Federated Cloud" : "Sammenknyttet sky",
"Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:",
"Share it:" : "Del den:",
diff --git a/apps/federatedfilesharing/l10n/nb_NO.json b/apps/federatedfilesharing/l10n/nb_NO.json
index 484dc932dc1..e57b4fe69a4 100644
--- a/apps/federatedfilesharing/l10n/nb_NO.json
+++ b/apps/federatedfilesharing/l10n/nb_NO.json
@@ -1,17 +1,41 @@
{ "translations": {
"Federated sharing" : "Sammenknyttet deling",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Ønsker du å legge til ekstern ressurs {name} fra {owner}@{remote}?",
+ "Remote share" : "Ekstern ressurs",
+ "Remote share password" : "Passord for ekstern ressurs",
+ "Cancel" : "Avbryt",
+ "Add remote share" : "Legg til ekstern ressurs",
+ "Copied!" : "Kopiert!",
+ "Not supported!" : "Ikke støttet!",
+ "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
+ "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere",
"Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky",
+ "Server to server sharing is not enabled on this server" : "Tjener til tjener deling er ikke aktivert på denne tjeneren",
+ "Couldn't establish a federated share." : "Kunne ikke etablere en forent ressurs",
+ "Couldn't establish a federated share, maybe the password was wrong." : "Kunne ikke etablere en forent ressurs, kanskje passordet var feil.",
+ "Federated Share request was successful, you will receive a invitation. Check your notifications." : "Forent ressurs forespørselen var vellykket, du vil motta en invitasjon. Sjekk dine varsler.",
+ "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.",
+ "Not allowed to create a federated share with the owner." : "Ikke tillatt å opprette en forent ressurs med eieren.",
+ "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke-klarert SSL-sertifikat",
+ "Could not authenticate to remote share, password might be wrong" : "Kunne ikke autentisere mot ekstern ressurs, passordet var kanskje feil.",
+ "Storage not valid" : "Lagringsplass ikke gyldig",
+ "Federated Share successfully added" : "Forent ressurs ble lagt til",
+ "Couldn't add remote share" : "Kunne ikke legge til ekstern ressurs",
"Sharing %s failed, because this item is already shared with %s" : "Deling av %s feilet, fordi dette elementet allerede er delt med %s",
"Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje servern er utilgjengelig for øyeblikket.",
+ "File is already shared with %s" : "Filen er allerede delt med %s",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.",
+ "Could not find share" : "Kunne ikke finne ressurs",
+ "You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du mottor \"/%3$s\" som en fjerndeling fra %1$s (på vegne av %2$s)",
+ "You received \"/%3$s\" as a remote share from %1$s" : "Du mottok \"/%3$s\" som en fjerndeling fra %1$s",
"Accept" : "Aksepter",
"Decline" : "Avslå",
"Share with me through my #Nextcloud Federated Cloud ID, see %s" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky, se %s",
"Share with me through my #Nextcloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky",
"Federated Cloud Sharing" : "Sammenknyttet sky-deling",
"Open documentation" : "Åpne dokumentasjonen",
- "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne serveren sender delinger til andre servere",
- "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne serveren mottar delinger fra andre servere",
+ "Allow users on this server to send shares to other servers" : "Tillat at brukere på denne tjeneren sender delinger til andre tjenere",
+ "Allow users on this server to receive shares from other servers" : "Tillat at brukere på denne tjeneren mottar delinger fra andre tjenere",
"Federated Cloud" : "Sammenknyttet sky",
"Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:",
"Share it:" : "Del den:",
diff --git a/apps/federation/l10n/nb_NO.js b/apps/federation/l10n/nb_NO.js
index 6dcaec43573..c455aa99b3a 100644
--- a/apps/federation/l10n/nb_NO.js
+++ b/apps/federation/l10n/nb_NO.js
@@ -1,15 +1,17 @@
OC.L10N.register(
"federation",
{
- "Server added to the list of trusted ownClouds" : "Server lagt til i listen av klarerte ownCloud'er",
- "Server is already in the list of trusted servers." : "Serveren er allerede i listen av klarerte servere.",
- "No ownCloud server found" : "Ingen ownCloud-server funnet",
- "Could not add server" : "Kunne ikke legge til server",
+ "Added to the list of trusted servers" : "Lagt til i listen over klarerte tjenere",
+ "Server is already in the list of trusted servers." : "Tjeneren er allerede i listen av klarerte tjenere.",
+ "No server to federate with found" : "Ingen tjener å forene med ble funnet",
+ "Could not add server" : "Kunne ikke legge til tjener",
"Federation" : "Sammenknytting",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud-sammenknytting lar deg koble til andre klarerte ownCloud'er og utveksle brukerkatalogen. Dette vil for eksempel brukes til å fylle ut eksterne brukere for sammenknyttet deling automatisk.",
"Add server automatically once a federated share was created successfully" : "Legg til server automatisk når en sammenknyttet deling er blitt opprettet",
- "Trusted ownCloud Servers" : "Klarerte ownCloud-servere",
- "+ Add ownCloud server" : "+ Ny ownCloud-server",
- "ownCloud Server" : "ownCloud-server"
+ "Trusted Servers" : "Klarerte tjenere",
+ "+ Add Nextcloud server" : "+ Legg til Nextcloud tjener",
+ "Nextcloud Server" : "Nextcloud tjener",
+ "Server added to the list of trusted Nextclouds" : "Tjener lagt til i listen over klarerte Nextclouder",
+ "No Nextcloud server found" : "Ingen Nextcloud tjener funnet",
+ "Trusted Nextcloud Servers" : "Klarerte Nextcloud tjenere"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/federation/l10n/nb_NO.json b/apps/federation/l10n/nb_NO.json
index 9b4ceea4674..0d7cd5a4fee 100644
--- a/apps/federation/l10n/nb_NO.json
+++ b/apps/federation/l10n/nb_NO.json
@@ -1,13 +1,15 @@
{ "translations": {
- "Server added to the list of trusted ownClouds" : "Server lagt til i listen av klarerte ownCloud'er",
- "Server is already in the list of trusted servers." : "Serveren er allerede i listen av klarerte servere.",
- "No ownCloud server found" : "Ingen ownCloud-server funnet",
- "Could not add server" : "Kunne ikke legge til server",
+ "Added to the list of trusted servers" : "Lagt til i listen over klarerte tjenere",
+ "Server is already in the list of trusted servers." : "Tjeneren er allerede i listen av klarerte tjenere.",
+ "No server to federate with found" : "Ingen tjener å forene med ble funnet",
+ "Could not add server" : "Kunne ikke legge til tjener",
"Federation" : "Sammenknytting",
- "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud-sammenknytting lar deg koble til andre klarerte ownCloud'er og utveksle brukerkatalogen. Dette vil for eksempel brukes til å fylle ut eksterne brukere for sammenknyttet deling automatisk.",
"Add server automatically once a federated share was created successfully" : "Legg til server automatisk når en sammenknyttet deling er blitt opprettet",
- "Trusted ownCloud Servers" : "Klarerte ownCloud-servere",
- "+ Add ownCloud server" : "+ Ny ownCloud-server",
- "ownCloud Server" : "ownCloud-server"
+ "Trusted Servers" : "Klarerte tjenere",
+ "+ Add Nextcloud server" : "+ Legg til Nextcloud tjener",
+ "Nextcloud Server" : "Nextcloud tjener",
+ "Server added to the list of trusted Nextclouds" : "Tjener lagt til i listen over klarerte Nextclouder",
+ "No Nextcloud server found" : "Ingen Nextcloud tjener funnet",
+ "Trusted Nextcloud Servers" : "Klarerte Nextcloud tjenere"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js
index 9f4d87fcfd6..e51b7051a26 100644
--- a/apps/files/l10n/ar.js
+++ b/apps/files/l10n/ar.js
@@ -34,6 +34,12 @@ OC.L10N.register(
"Could not get result from server." : "تعذر الحصول على نتيجة من الخادم",
"Uploading..." : "جاري الرفع...",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} ساعة متبقية",
+ "{hours}:{minutes}h" : "{hours}:{minutes}س",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} دقيقة متبقية",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}د",
+ "{seconds} second{plural_s} left" : "{seconds} ثواني متبقية",
+ "{seconds}s" : "{seconds}ث",
"Any moment now..." : "في أي لحظة الان...",
"Soon..." : "قريبا...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} من {totalSize} ({bitrate})",
@@ -49,6 +55,12 @@ OC.L10N.register(
"Pending" : "قيد الانتظار",
"Unable to determine date" : "تعذر تحديد التاريخ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
+ "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر, الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
+ "Could not move \"{file}\", target exists" : "لا يمكن نقل \"{file}\", الملف موجود بالفعل هناك",
+ "Could not move \"{file}\"" : "لا يمكن نقل \"{file}\"",
+ "{newName} already exists" : "{newname} موجود مسبقاً",
+ "Could not rename \"{fileName}\", it does not exist any more" : "لا يمكن اعادة تسمية \"{fileName}\", لانه لم يعد موجود",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "الاسم \"{targetName}\" مستخدم من قبل في المجلد \"{dir}\". الرجاء اختيار اسم اخر.",
"Could not rename \"{fileName}\"" : "إعادة تسمية الملف \"{fileName}\" لم تنجح",
"Could not create file \"{file}\"" : "لا يمكن إنشاء الملف\"{file}\"",
"Could not create file \"{file}\" because it already exists" : "لا يمكن إنشاء الملف \"{file}\" فهو موجود بالفعل",
@@ -62,6 +74,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"],
"_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"],
"{dirs} and {files}" : "{dirs} و {files}",
+ "_including %n hidden_::_including %n hidden_" : ["يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي"],
"You don’t have permission to upload or create files here" : "لا تملك الصلاحية لرفع او انشاء ملف هنا ",
"_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"],
"New" : "جديد",
@@ -72,6 +85,7 @@ OC.L10N.register(
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "المساحة التخزينية لـ {owner} ممتلئة تقريبا ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ",
"Path" : "المسار",
+ "Favorited" : "المفضلة",
"Favorite" : "المفضلة",
"Folder" : "مجلد",
"New folder" : "مجلد جديد",
@@ -96,8 +110,11 @@ OC.L10N.register(
"Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها",
"max. possible: " : "الحد الأقصى المسموح به",
"Save" : "حفظ",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "باستخدام PHP-FPM قد يستغرق 5 دقائق لتطبيق التغيرات.",
"Settings" : "إعدادات",
+ "Show hidden files" : "عرض الملفات المخفية",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "استخدم هذا الرابط <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">للوصول الى ملفاتك عبر WebDAV</a>",
"No files in here" : "لا يوجد ملفات هنا ",
"Upload some content or sync with your devices!" : "ارفع بعض المحتوي او زامن مع اجهزتك !",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
@@ -107,6 +124,8 @@ OC.L10N.register(
"No favorites" : "لا يوجد مفضلات ",
"Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ",
"Text file" : "ملف نصي",
- "New text file.txt" : "ملف نصي جديد fille.txt"
+ "New text file.txt" : "ملف نصي جديد fille.txt",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا الرابط <a href=\"%s\" target=\"_blank\">للوصول الى ملفاتك عبر WebDAV</a>",
+ "Cancel upload" : "إلغاء الرفع"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json
index 65999aafd46..4940be29188 100644
--- a/apps/files/l10n/ar.json
+++ b/apps/files/l10n/ar.json
@@ -32,6 +32,12 @@
"Could not get result from server." : "تعذر الحصول على نتيجة من الخادم",
"Uploading..." : "جاري الرفع...",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} ساعة متبقية",
+ "{hours}:{minutes}h" : "{hours}:{minutes}س",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} دقيقة متبقية",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}د",
+ "{seconds} second{plural_s} left" : "{seconds} ثواني متبقية",
+ "{seconds}s" : "{seconds}ث",
"Any moment now..." : "في أي لحظة الان...",
"Soon..." : "قريبا...",
"{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} من {totalSize} ({bitrate})",
@@ -47,6 +53,12 @@
"Pending" : "قيد الانتظار",
"Unable to determine date" : "تعذر تحديد التاريخ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
+ "This directory is unavailable, please check the logs or contact the administrator" : "هذا المجلد غير متوفر, الرجاء مراجعة سجل الأخطاء أو الاتصال بمدير النظام",
+ "Could not move \"{file}\", target exists" : "لا يمكن نقل \"{file}\", الملف موجود بالفعل هناك",
+ "Could not move \"{file}\"" : "لا يمكن نقل \"{file}\"",
+ "{newName} already exists" : "{newname} موجود مسبقاً",
+ "Could not rename \"{fileName}\", it does not exist any more" : "لا يمكن اعادة تسمية \"{fileName}\", لانه لم يعد موجود",
+ "The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "الاسم \"{targetName}\" مستخدم من قبل في المجلد \"{dir}\". الرجاء اختيار اسم اخر.",
"Could not rename \"{fileName}\"" : "إعادة تسمية الملف \"{fileName}\" لم تنجح",
"Could not create file \"{file}\"" : "لا يمكن إنشاء الملف\"{file}\"",
"Could not create file \"{file}\" because it already exists" : "لا يمكن إنشاء الملف \"{file}\" فهو موجود بالفعل",
@@ -60,6 +72,7 @@
"_%n folder_::_%n folders_" : ["لا يوجد مجلدات %n","1 مجلد %n","2 مجلد %n","عدد قليل من مجلدات %n","عدد كبير من مجلدات %n","مجلدات %n"],
"_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"],
"{dirs} and {files}" : "{dirs} و {files}",
+ "_including %n hidden_::_including %n hidden_" : ["يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي","يشمل %n مخفي"],
"You don’t have permission to upload or create files here" : "لا تملك الصلاحية لرفع او انشاء ملف هنا ",
"_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"],
"New" : "جديد",
@@ -70,6 +83,7 @@
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "المساحة التخزينية لـ {owner} ممتلئة تقريبا ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ",
"Path" : "المسار",
+ "Favorited" : "المفضلة",
"Favorite" : "المفضلة",
"Folder" : "مجلد",
"New folder" : "مجلد جديد",
@@ -94,8 +108,11 @@
"Maximum upload size" : "الحد الأقصى لحجم الملفات التي يمكن رفعها",
"max. possible: " : "الحد الأقصى المسموح به",
"Save" : "حفظ",
+ "With PHP-FPM it might take 5 minutes for changes to be applied." : "باستخدام PHP-FPM قد يستغرق 5 دقائق لتطبيق التغيرات.",
"Settings" : "إعدادات",
+ "Show hidden files" : "عرض الملفات المخفية",
"WebDAV" : "WebDAV",
+ "Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "استخدم هذا الرابط <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">للوصول الى ملفاتك عبر WebDAV</a>",
"No files in here" : "لا يوجد ملفات هنا ",
"Upload some content or sync with your devices!" : "ارفع بعض المحتوي او زامن مع اجهزتك !",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
@@ -105,6 +122,8 @@
"No favorites" : "لا يوجد مفضلات ",
"Files and folders you mark as favorite will show up here" : "الملفات والمجلدات التي حددتها كامفضلة سوف تظهر هنا ",
"Text file" : "ملف نصي",
- "New text file.txt" : "ملف نصي جديد fille.txt"
+ "New text file.txt" : "ملف نصي جديد fille.txt",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا الرابط <a href=\"%s\" target=\"_blank\">للوصول الى ملفاتك عبر WebDAV</a>",
+ "Cancel upload" : "إلغاء الرفع"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
} \ No newline at end of file
diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js
index 89098182188..43433366108 100644
--- a/apps/files/l10n/el.js
+++ b/apps/files/l10n/el.js
@@ -70,6 +70,7 @@ OC.L10N.register(
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος του {owner} είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["ταιριάζουν '{filter}' ","ταιριάζουν '{filter}'"],
+ "View in folder" : "Προβολή στον φάκελο",
"Path" : "Διαδρομή",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Προτιμώμενα",
@@ -105,6 +106,7 @@ OC.L10N.register(
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Με PHP-FPM μπορεί να χρειαστούν μέχρι και 5 λεπτά για να ενεργοποιηθούν οι αλλαγές.",
"Missing permissions to edit from here." : "Δεν υπάρχουν τα απαραίτητα δικαιώματα για να γίνει τροποποιήση σε αυτό το σημείο.",
"Settings" : "Ρυθμίσεις",
+ "Show hidden files" : "Προβολή κρυφών αρχείων",
"WebDAV" : "WebDAV",
"No files in here" : "Δεν υπάρχουν αρχεία",
"Upload some content or sync with your devices!" : "Μεταφόρτωση περιεχομένου ή συγχρονισμός με τις συσκευές σας!",
@@ -115,6 +117,7 @@ OC.L10N.register(
"No favorites" : "Δεν υπάρχουν αγαπημένα",
"Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ ",
"Text file" : "Αρχείο κειμένου",
- "New text file.txt" : "Νέο αρχείο κειμένου.txt"
+ "New text file.txt" : "Νέο αρχείο κειμένου.txt",
+ "Cancel upload" : "Ακύρωση αποστολής"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json
index 8a05b0a0dfc..c2e81b6c876 100644
--- a/apps/files/l10n/el.json
+++ b/apps/files/l10n/el.json
@@ -68,6 +68,7 @@
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος του {owner} είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Ο αποθηκευτικός χώρος είναι σχεδόν γεμάτος ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["ταιριάζουν '{filter}' ","ταιριάζουν '{filter}'"],
+ "View in folder" : "Προβολή στον φάκελο",
"Path" : "Διαδρομή",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Προτιμώμενα",
@@ -103,6 +104,7 @@
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Με PHP-FPM μπορεί να χρειαστούν μέχρι και 5 λεπτά για να ενεργοποιηθούν οι αλλαγές.",
"Missing permissions to edit from here." : "Δεν υπάρχουν τα απαραίτητα δικαιώματα για να γίνει τροποποιήση σε αυτό το σημείο.",
"Settings" : "Ρυθμίσεις",
+ "Show hidden files" : "Προβολή κρυφών αρχείων",
"WebDAV" : "WebDAV",
"No files in here" : "Δεν υπάρχουν αρχεία",
"Upload some content or sync with your devices!" : "Μεταφόρτωση περιεχομένου ή συγχρονισμός με τις συσκευές σας!",
@@ -113,6 +115,7 @@
"No favorites" : "Δεν υπάρχουν αγαπημένα",
"Files and folders you mark as favorite will show up here" : "Τα αρχεία και οι φάκελοι που σημειώνονται ως αγαπημένα θα εμφανιστούν εδώ ",
"Text file" : "Αρχείο κειμένου",
- "New text file.txt" : "Νέο αρχείο κειμένου.txt"
+ "New text file.txt" : "Νέο αρχείο κειμένου.txt",
+ "Cancel upload" : "Ακύρωση αποστολής"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js
index 0d2a4167b66..41f3e0f1346 100644
--- a/apps/files/l10n/hu_HU.js
+++ b/apps/files/l10n/hu_HU.js
@@ -19,11 +19,11 @@ OC.L10N.register(
"Upload failed. Could not find uploaded file" : "A feltöltés nem sikerült. Nem található a feltöltött fájl.",
"Upload failed. Could not get file info." : "A feltöltés nem sikerült. A fájl leíró információk nem érhetők el.",
"Invalid directory." : "Érvénytelen mappa.",
- "Files" : "Fájlkezelő",
+ "Files" : "Fájlok",
"All files" : "Az összes fájl",
"Recent" : "Legutóbbi",
"File could not be found" : "Fájl nem található",
- "Home" : "Otthoni",
+ "Home" : "Saját mappa",
"Close" : "Bezárás",
"Favorites" : "Kedvencek",
"Upload cancelled." : "A feltöltést megszakítottuk.",
diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json
index 2387661c869..ad33648f5e1 100644
--- a/apps/files/l10n/hu_HU.json
+++ b/apps/files/l10n/hu_HU.json
@@ -17,11 +17,11 @@
"Upload failed. Could not find uploaded file" : "A feltöltés nem sikerült. Nem található a feltöltött fájl.",
"Upload failed. Could not get file info." : "A feltöltés nem sikerült. A fájl leíró információk nem érhetők el.",
"Invalid directory." : "Érvénytelen mappa.",
- "Files" : "Fájlkezelő",
+ "Files" : "Fájlok",
"All files" : "Az összes fájl",
"Recent" : "Legutóbbi",
"File could not be found" : "Fájl nem található",
- "Home" : "Otthoni",
+ "Home" : "Saját mappa",
"Close" : "Bezárás",
"Favorites" : "Kedvencek",
"Upload cancelled." : "A feltöltést megszakítottuk.",
diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js
index c0eb97fbc18..00aba4c4e20 100644
--- a/apps/files/l10n/nb_NO.js
+++ b/apps/files/l10n/nb_NO.js
@@ -21,6 +21,8 @@ OC.L10N.register(
"Invalid directory." : "Ugyldig katalog.",
"Files" : "Filer",
"All files" : "Alle filer",
+ "Recent" : "Nylig",
+ "File could not be found" : "Filen ble ikke funnet",
"Home" : "Hjem",
"Close" : "Lukk",
"Favorites" : "Favoritter",
@@ -29,9 +31,18 @@ OC.L10N.register(
"Total file size {size1} exceeds upload limit {size2}" : "Total filstørrelse {size1} overstiger grense for opplasting {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ikke nok ledig plass. Du laster opp size1} men bare {size2} er ledig",
"Error uploading file \"{fileName}\": {message}" : "Feil ved opplasting av fil \"{fileName}\": {message}",
- "Could not get result from server." : "Fikk ikke resultat fra serveren.",
+ "Could not get result from server." : "Fikk ikke resultat fra tjeneren.",
"Uploading..." : "Laster opp...",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timer{plural_s} igjen",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minutter{plural_s} igjen",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} sekunder{plural_s} igjen",
+ "{seconds}s" : "{seconds}er",
+ "Any moment now..." : "Hvert øyeblikk nå...",
+ "Soon..." : "Snart...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
"File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
"Actions" : "Handlinger",
"Download" : "Last ned",
@@ -63,6 +74,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["%n mappe","%n mapper"],
"_%n file_::_%n files_" : ["%n fil","%n filer"],
"{dirs} and {files}" : "{dirs} og {files}",
+ "_including %n hidden_::_including %n hidden_" : ["Inkludert %n skjult","Inkludert %n skjulte"],
"You don’t have permission to upload or create files here" : "Du har ikke tillatelse til å laste opp eller opprette filer her",
"_Uploading %n file_::_Uploading %n files_" : ["Laster opp %n fil","Laster opp %n filer"],
"New" : "Ny",
@@ -73,10 +85,12 @@ OC.L10N.register(
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"],
+ "View in folder" : "Vis i mappe",
"Path" : "Sti",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Er favoritt",
"Favorite" : "Gjør til favoritt",
+ "Local link" : "Lokal lenke",
"Folder" : "Mappe",
"New folder" : "Ny mappe",
"{newname} already exists" : "{newname} finnes allerede",
@@ -107,6 +121,7 @@ OC.L10N.register(
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Med PHP-FPM kan det ta 5 minutter før endringene trer i kraft.",
"Missing permissions to edit from here." : "Manglende rettigheter til å redigere herfra.",
"Settings" : "Innstillinger",
+ "Show hidden files" : "Vis skjulte filer",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Bruk adressen <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">for å få tilgang til WebDAV</a>",
"No files in here" : "Ingen filer her",
@@ -114,10 +129,12 @@ OC.L10N.register(
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
"Select all" : "Velg alle",
"Upload too large" : "Filen er for stor",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store til å laste opp til denne serveren.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store til å laste opp til denne tjeneren.",
"No favorites" : "Ingen favoritter",
"Files and folders you mark as favorite will show up here" : "Filer og mapper som du gjør til favoritter vises her",
"Text file" : "Tekstfil",
- "New text file.txt" : "Ny tekstfil.txt"
+ "New text file.txt" : "Ny tekstfil.txt",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk følgende adresse for <a href=\"%s\" target=\"_blank\">tilgang til filene via WebDAV</a>",
+ "Cancel upload" : "Avbryt opplasting"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json
index 95ae79f1d72..fa4ae8abe26 100644
--- a/apps/files/l10n/nb_NO.json
+++ b/apps/files/l10n/nb_NO.json
@@ -19,6 +19,8 @@
"Invalid directory." : "Ugyldig katalog.",
"Files" : "Filer",
"All files" : "Alle filer",
+ "Recent" : "Nylig",
+ "File could not be found" : "Filen ble ikke funnet",
"Home" : "Hjem",
"Close" : "Lukk",
"Favorites" : "Favoritter",
@@ -27,9 +29,18 @@
"Total file size {size1} exceeds upload limit {size2}" : "Total filstørrelse {size1} overstiger grense for opplasting {size2}",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "Ikke nok ledig plass. Du laster opp size1} men bare {size2} er ledig",
"Error uploading file \"{fileName}\": {message}" : "Feil ved opplasting av fil \"{fileName}\": {message}",
- "Could not get result from server." : "Fikk ikke resultat fra serveren.",
+ "Could not get result from server." : "Fikk ikke resultat fra tjeneren.",
"Uploading..." : "Laster opp...",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "{hours}:{minutes}:{seconds} timer{plural_s} igjen",
+ "{hours}:{minutes}h" : "{hours}:{minutes}h",
+ "{minutes}:{seconds} minute{plural_s} left" : "{minutes}:{seconds} minutter{plural_s} igjen",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds}m",
+ "{seconds} second{plural_s} left" : "{seconds} sekunder{plural_s} igjen",
+ "{seconds}s" : "{seconds}er",
+ "Any moment now..." : "Hvert øyeblikk nå...",
+ "Soon..." : "Snart...",
+ "{loadedSize} of {totalSize} ({bitrate})" : "{loadedSize} av {totalSize} ({bitrate})",
"File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.",
"Actions" : "Handlinger",
"Download" : "Last ned",
@@ -61,6 +72,7 @@
"_%n folder_::_%n folders_" : ["%n mappe","%n mapper"],
"_%n file_::_%n files_" : ["%n fil","%n filer"],
"{dirs} and {files}" : "{dirs} og {files}",
+ "_including %n hidden_::_including %n hidden_" : ["Inkludert %n skjult","Inkludert %n skjulte"],
"You don’t have permission to upload or create files here" : "Du har ikke tillatelse til å laste opp eller opprette filer her",
"_Uploading %n file_::_Uploading %n files_" : ["Laster opp %n fil","Laster opp %n filer"],
"New" : "Ny",
@@ -71,10 +83,12 @@
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "Lagringsplass for {owner} er nesten full ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "Lagringsplass er nesten brukt opp ([usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"],
+ "View in folder" : "Vis i mappe",
"Path" : "Sti",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Favorited" : "Er favoritt",
"Favorite" : "Gjør til favoritt",
+ "Local link" : "Lokal lenke",
"Folder" : "Mappe",
"New folder" : "Ny mappe",
"{newname} already exists" : "{newname} finnes allerede",
@@ -105,6 +119,7 @@
"With PHP-FPM it might take 5 minutes for changes to be applied." : "Med PHP-FPM kan det ta 5 minutter før endringene trer i kraft.",
"Missing permissions to edit from here." : "Manglende rettigheter til å redigere herfra.",
"Settings" : "Innstillinger",
+ "Show hidden files" : "Vis skjulte filer",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "Bruk adressen <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">for å få tilgang til WebDAV</a>",
"No files in here" : "Ingen filer her",
@@ -112,10 +127,12 @@
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
"Select all" : "Velg alle",
"Upload too large" : "Filen er for stor",
- "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store til å laste opp til denne serveren.",
+ "The files you are trying to upload exceed the maximum size for file uploads on this server." : "Filene du prøver å laste opp er for store til å laste opp til denne tjeneren.",
"No favorites" : "Ingen favoritter",
"Files and folders you mark as favorite will show up here" : "Filer og mapper som du gjør til favoritter vises her",
"Text file" : "Tekstfil",
- "New text file.txt" : "Ny tekstfil.txt"
+ "New text file.txt" : "Ny tekstfil.txt",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk følgende adresse for <a href=\"%s\" target=\"_blank\">tilgang til filene via WebDAV</a>",
+ "Cancel upload" : "Avbryt opplasting"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js
index 98391b2cfee..244204db381 100644
--- a/apps/files/l10n/zh_TW.js
+++ b/apps/files/l10n/zh_TW.js
@@ -21,6 +21,8 @@ OC.L10N.register(
"Invalid directory." : "無效的資料夾",
"Files" : "檔案",
"All files" : "所有檔案",
+ "Recent" : "近期",
+ "File could not be found" : "找不到檔案",
"Home" : "家目錄",
"Close" : " 關閉",
"Favorites" : "最愛",
@@ -32,6 +34,14 @@ OC.L10N.register(
"Could not get result from server." : "無法從伺服器取回結果",
"Uploading..." : "上傳中…",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩下 {hours}:{minutes}:{seconds} 小時",
+ "{hours}:{minutes}h" : "{hours}:{minutes} 小時",
+ "{minutes}:{seconds} minute{plural_s} left" : "剩下 {minutes}:{seconds} 分鐘",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
+ "{seconds} second{plural_s} left" : "剩下 {seconds} 秒",
+ "{seconds}s" : "{seconds} 秒",
+ "Any moment now..." : "即將完成…",
+ "Soon..." : "即將完成…",
"File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳",
"Actions" : "動作",
"Download" : "下載",
@@ -63,6 +73,7 @@ OC.L10N.register(
"_%n folder_::_%n folders_" : ["%n 個資料夾"],
"_%n file_::_%n files_" : ["%n 個檔案"],
"{dirs} and {files}" : "{dirs} 和 {files}",
+ "_including %n hidden_::_including %n hidden_" : ["包含 %n 隱藏檔"],
"You don’t have permission to upload or create files here" : "您沒有權限在這裡上傳或建立檔案",
"_Uploading %n file_::_Uploading %n files_" : ["正在上傳 %n 個檔案"],
"New" : "新增",
@@ -73,10 +84,12 @@ OC.L10N.register(
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的儲存空間快要滿了 ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "您的儲存空間快要滿了 ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["符合「{filter}」"],
+ "View in folder" : "在資料夾中檢視",
"Path" : "路徑",
"_%n byte_::_%n bytes_" : ["%n 位元組"],
"Favorited" : "已加入最愛",
"Favorite" : "我的最愛",
+ "Local link" : "本地連結",
"Folder" : "資料夾",
"New folder" : "新資料夾",
"{newname} already exists" : "{newname} 已經存在",
@@ -107,6 +120,7 @@ OC.L10N.register(
"With PHP-FPM it might take 5 minutes for changes to be applied." : "如果使用 PHP-FPM ,此設定值需要5分鐘左右才會生效。",
"Missing permissions to edit from here." : "您沒有在此編輯的權限",
"Settings" : "設定",
+ "Show hidden files" : "顯示隱藏檔",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用這個位址來<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">使用 WebDAV 存取檔案</a>",
"No files in here" : "沒有任何檔案",
@@ -118,6 +132,8 @@ OC.L10N.register(
"No favorites" : "沒有最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
"Text file" : "文字檔",
- "New text file.txt" : "新文字檔.txt"
+ "New text file.txt" : "新文字檔.txt",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用這個位址來<a href=\"%s\" target=\"_blank\">使用 WebDAV 存取檔案</a>",
+ "Cancel upload" : "取消上傳"
},
"nplurals=1; plural=0;");
diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json
index fcc1d3baee3..afa9a740071 100644
--- a/apps/files/l10n/zh_TW.json
+++ b/apps/files/l10n/zh_TW.json
@@ -19,6 +19,8 @@
"Invalid directory." : "無效的資料夾",
"Files" : "檔案",
"All files" : "所有檔案",
+ "Recent" : "近期",
+ "File could not be found" : "找不到檔案",
"Home" : "家目錄",
"Close" : " 關閉",
"Favorites" : "最愛",
@@ -30,6 +32,14 @@
"Could not get result from server." : "無法從伺服器取回結果",
"Uploading..." : "上傳中…",
"..." : "...",
+ "{hours}:{minutes}:{seconds} hour{plural_s} left" : "剩下 {hours}:{minutes}:{seconds} 小時",
+ "{hours}:{minutes}h" : "{hours}:{minutes} 小時",
+ "{minutes}:{seconds} minute{plural_s} left" : "剩下 {minutes}:{seconds} 分鐘",
+ "{minutes}:{seconds}m" : "{minutes}:{seconds} 分",
+ "{seconds} second{plural_s} left" : "剩下 {seconds} 秒",
+ "{seconds}s" : "{seconds} 秒",
+ "Any moment now..." : "即將完成…",
+ "Soon..." : "即將完成…",
"File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳",
"Actions" : "動作",
"Download" : "下載",
@@ -61,6 +71,7 @@
"_%n folder_::_%n folders_" : ["%n 個資料夾"],
"_%n file_::_%n files_" : ["%n 個檔案"],
"{dirs} and {files}" : "{dirs} 和 {files}",
+ "_including %n hidden_::_including %n hidden_" : ["包含 %n 隱藏檔"],
"You don’t have permission to upload or create files here" : "您沒有權限在這裡上傳或建立檔案",
"_Uploading %n file_::_Uploading %n files_" : ["正在上傳 %n 個檔案"],
"New" : "新增",
@@ -71,10 +82,12 @@
"Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的儲存空間快要滿了 ({usedSpacePercent}%)",
"Your storage is almost full ({usedSpacePercent}%)" : "您的儲存空間快要滿了 ({usedSpacePercent}%)",
"_matches '{filter}'_::_match '{filter}'_" : ["符合「{filter}」"],
+ "View in folder" : "在資料夾中檢視",
"Path" : "路徑",
"_%n byte_::_%n bytes_" : ["%n 位元組"],
"Favorited" : "已加入最愛",
"Favorite" : "我的最愛",
+ "Local link" : "本地連結",
"Folder" : "資料夾",
"New folder" : "新資料夾",
"{newname} already exists" : "{newname} 已經存在",
@@ -105,6 +118,7 @@
"With PHP-FPM it might take 5 minutes for changes to be applied." : "如果使用 PHP-FPM ,此設定值需要5分鐘左右才會生效。",
"Missing permissions to edit from here." : "您沒有在此編輯的權限",
"Settings" : "設定",
+ "Show hidden files" : "顯示隱藏檔",
"WebDAV" : "WebDAV",
"Use this address to <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">access your Files via WebDAV</a>" : "使用這個位址來<a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">使用 WebDAV 存取檔案</a>",
"No files in here" : "沒有任何檔案",
@@ -116,6 +130,8 @@
"No favorites" : "沒有最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
"Text file" : "文字檔",
- "New text file.txt" : "新文字檔.txt"
+ "New text file.txt" : "新文字檔.txt",
+ "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用這個位址來<a href=\"%s\" target=\"_blank\">使用 WebDAV 存取檔案</a>",
+ "Cancel upload" : "取消上傳"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js
index 2ae659f698b..689028634ad 100644
--- a/apps/files_external/l10n/el.js
+++ b/apps/files_external/l10n/el.js
@@ -21,6 +21,9 @@ OC.L10N.register(
"Saved" : "Αποθηκεύτηκαν",
"Saving..." : "Γίνεται αποθήκευση...",
"Save" : "Αποθήκευση",
+ "Empty response from the server" : "Κενή απάντηση από τον διακομιστή",
+ "Couldn't access. Please logout and login to activate this mount point" : "Αδυναμία πρόσβασης. Παρακαλώ εξέλθετε και εισέλθετε ξανά ώστε να ενεργοποιήσετε το σημείο προσάρτησης",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Αδυναμία λήψης πληροφορίας από τον διακομιστή nextcloud: {code} {type}",
"There was an error with message: " : "Υπήρξε σφάλμα στο μήνυμα:",
"External mount error" : "Σφάλμα εξωτερικής προσάρτησης",
"external-storage" : "εξωτερική-αποθήκευση",
@@ -75,6 +78,7 @@ OC.L10N.register(
"Google Drive" : "Google Drive",
"Local" : "Τοπικός",
"Location" : "Τοποθεσία",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
"SFTP with secret key login" : "SFTP με σύνδεση με κρυφό κλειδί",
@@ -86,6 +90,7 @@ OC.L10N.register(
"OpenStack Object Storage" : "Αποθήκη αντικειμένων OpenStack",
"Service name" : "Όνομα υπηρεσίας",
"Request timeout (seconds)" : "Χρονικό όριο αιτήματος (δευτερόλεπτα)",
+ "External storages" : "Εξωτερική αποθήκευση",
"No external storage configured" : "Δεν έχει ρυθμιστεί κανένα εξωτερικό μέσο αποθήκευσης",
"You can add external storages in the personal settings" : "Μπορείτε να προσθέσετε εξωτερικά μέσα αποθήκευσης στις προσωπικές ρυθμίσεις",
"Name" : "Όνομα",
diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json
index 475b2eac235..082558b5d6a 100644
--- a/apps/files_external/l10n/el.json
+++ b/apps/files_external/l10n/el.json
@@ -19,6 +19,9 @@
"Saved" : "Αποθηκεύτηκαν",
"Saving..." : "Γίνεται αποθήκευση...",
"Save" : "Αποθήκευση",
+ "Empty response from the server" : "Κενή απάντηση από τον διακομιστή",
+ "Couldn't access. Please logout and login to activate this mount point" : "Αδυναμία πρόσβασης. Παρακαλώ εξέλθετε και εισέλθετε ξανά ώστε να ενεργοποιήσετε το σημείο προσάρτησης",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Αδυναμία λήψης πληροφορίας από τον διακομιστή nextcloud: {code} {type}",
"There was an error with message: " : "Υπήρξε σφάλμα στο μήνυμα:",
"External mount error" : "Σφάλμα εξωτερικής προσάρτησης",
"external-storage" : "εξωτερική-αποθήκευση",
@@ -73,6 +76,7 @@
"Google Drive" : "Google Drive",
"Local" : "Τοπικός",
"Location" : "Τοποθεσία",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Root",
"SFTP with secret key login" : "SFTP με σύνδεση με κρυφό κλειδί",
@@ -84,6 +88,7 @@
"OpenStack Object Storage" : "Αποθήκη αντικειμένων OpenStack",
"Service name" : "Όνομα υπηρεσίας",
"Request timeout (seconds)" : "Χρονικό όριο αιτήματος (δευτερόλεπτα)",
+ "External storages" : "Εξωτερική αποθήκευση",
"No external storage configured" : "Δεν έχει ρυθμιστεί κανένα εξωτερικό μέσο αποθήκευσης",
"You can add external storages in the personal settings" : "Μπορείτε να προσθέσετε εξωτερικά μέσα αποθήκευσης στις προσωπικές ρυθμίσεις",
"Name" : "Όνομα",
diff --git a/apps/files_external/l10n/hu_HU.js b/apps/files_external/l10n/hu_HU.js
index 4bfe55fd4bf..3c94b58d933 100644
--- a/apps/files_external/l10n/hu_HU.js
+++ b/apps/files_external/l10n/hu_HU.js
@@ -1,41 +1,76 @@
OC.L10N.register(
"files_external",
{
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Nem sikerült a kérési tokenek letöltése. Ellenőrizd, hogy az alkalmazás kulcs és titok megfelelő-e!",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Nem sikerült a hozzáférési tokenek letöltése. Ellenőrizd, hogy az alkalmazás kulcs és titok megfelelő-e!",
+ "Please provide a valid app key and secret." : "Kérlek adj meg egy érvényes alkalmazás kulcsot és jelszót.",
+ "Step 1 failed. Exception: %s" : "1. lépés sikertelen. Kivétel: %s",
+ "Step 2 failed. Exception: %s" : "2. lépés sikertelen. Kivétel: %s",
"External storage" : "Külső tárolók",
+ "Dropbox App Configuration" : "Dropbox alkalmazás beállítás",
+ "Google Drive App Configuration" : "Google Drive alkalmazás beállítás",
"Personal" : "Személyes",
"System" : "Rendszer",
"Grant access" : "Megadom a hozzáférést",
+ "Error configuring OAuth1" : "OAuth1 konfigurálási hiba",
+ "Error configuring OAuth2" : "OAuth2 konfigurálási hiba",
"Generate keys" : "Kulcsok generálása",
"Error generating key pair" : "Hiba történt a kulcspár generálása közben",
"All users. Type to select user or group." : "Összes felhasználó. Írj be egy felhasználót vagy csoportot.",
"(group)" : "(csoport)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitás a Mac NFD kódolással (lassú)",
"Admin defined" : "Adminisztrátor definiálva",
"Saved" : "Elmentve",
+ "Saving..." : "Mentés...",
+ "Save" : "Mentés",
"Empty response from the server" : "Üres válasz a szervertől",
"Couldn't access. Please logout and login to activate this mount point" : "Nem férhető hozzá. Kérjük próbálj meg ki- és bejelentkezni a csatolási pont aktiválásához.",
"Couldn't get the information from the ownCloud server: {code} {type}" : "Nem sikerült lekérdezni az információkat az ownCloud szerverről: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nem lehet letölteni a külső csatolási pontok listáját: {type}",
"There was an error with message: " : "Hiba történt ezzel az üzenettel:",
"External mount error" : "Külső csatolási hiba",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Nem sikerült letölteni a Windows hálózati meghajtó csatolási pontok listáját: üres válasz a szervertől",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Néhány beállított külső csatolási pont nincs kapcsolatban. További információkért kattints a piros sor(ok)ra.",
+ "Please enter the credentials for the {mount} mount" : "Kérlek add meg a következő csatolás azonosítóit: {mount}",
"Username" : "Felhasználónév",
"Password" : "Jelszó",
- "Save" : "Mentés",
+ "Credentials saved" : "Azonosítók mentve",
+ "Credentials saving failed" : "Azonosítók mentése sikertelen",
+ "Credentials required" : "Azonosító szükséges",
+ "Storage with id \"%i\" not found" : "A következő azonosítójú tároló nem található: \"%i\"",
+ "Invalid mount point" : "Érvénytelen csatolási pont",
+ "Insufficient data: %s" : "Nem elegendő adat: %s",
"%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "A következő azonosítójú tároló a felhasználó számára nem szerkeszthető: \"%i\"",
"Access key" : "Hozzáférési kulcs",
"Secret key" : "Titkos kulcs",
+ "Builtin" : "Beépített",
"None" : "Egyik sem",
- "App key" : "App kulcs",
- "App secret" : "App titkos kulcs",
- "Client secret" : "Kliens titkos",
+ "OAuth1" : "OAuth1",
+ "App key" : "Alkalmazás kulcs",
+ "App secret" : "Alkalmazás titkos kulcs",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "Ügyfél ID",
+ "Client secret" : "Kliens titok",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Bérlő neve",
+ "Identity endpoint URL" : "Identitás végpont URL",
+ "Rackspace" : "Rackspace",
"API key" : "API kulcs",
+ "Global credentials" : "Globális azonosítók",
+ "Log-in credentials, save in database" : "Bejelentkezési azonosítók, mentés az adatbázisban",
"Username and password" : "Felhasználónév és jelszó",
- "RSA public key" : "RSA publikus kulcs",
- "Public key" : "Publikus kulcs",
+ "Log-in credentials, save in session" : "Bejelentkezési azonosítók, mentés az munkamenetben",
+ "User entered, store in database" : "Felhasználó megadva, tárolás az adatbázisban",
+ "RSA public key" : "RSA nyilvános kulcs",
+ "Public key" : "Nyilvános kulcs",
"Amazon S3" : "Amazon S3",
"Bucket" : "Bucket",
"Hostname" : "Hosztnév",
"Port" : "Port",
"Region" : "Megye",
"Enable SSL" : "SSL engedélyezése",
+ "Enable Path Style" : "Útvonal stílus engedélyezés",
"WebDAV" : "WebDAV",
"URL" : "URL",
"Remote subfolder" : "Távoli alkönyvtár",
@@ -47,7 +82,7 @@ OC.L10N.register(
"Google Drive" : "Google Drive",
"Local" : "Helyi",
"Location" : "Hely",
- "ownCloud" : "ownCloud",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Gyökér",
"SFTP with secret key login" : "SFTP titkos kulcs belépéssel",
@@ -56,30 +91,40 @@ OC.L10N.register(
"Domain" : "Domain",
"SMB / CIFS using OC login" : "SMB / CIFS OC belépéssel",
"Username as share" : "Felhasználónév és megosztás",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Szolgáltatás neve",
"Request timeout (seconds)" : "Időtúllépés (másodperc)",
- "<b>Note:</b> " : "<b>Megjegyzés:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "External storages" : "Külső tárolók",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
"No external storage configured" : "Nincs külső tároló beállítva.",
"You can add external storages in the personal settings" : "Hozzáadhatsz külső tárolókat a személyes beállítások közt.",
"Name" : "Név",
"Storage type" : "Tároló típusa",
+ "Scope" : "Hatáskör",
"Enable encryption" : "Titkosítás engedélyezése",
"Enable previews" : "Előnézet engedélyezése",
+ "Enable sharing" : "Megosztás engedélyezése",
"Check for changes" : "Változások keresése",
"Never" : "Soha",
"Once every direct access" : "Minden közvetlen elérésnél",
- "External Storage" : "Külső tárolási szolgáltatások becsatolása",
- "Folder name" : "Mappanév",
+ "Folder name" : "Mappa neve",
"Authentication" : "Azonisítás",
"Configuration" : "Beállítások",
"Available for" : "Elérhető számukra",
"Add storage" : "Tároló becsatolása",
"Advanced settings" : "Haladó beállítások",
"Delete" : "Törlés",
- "Allow users to mount external storage" : "Külső tárolók engedélyezése a felhasználók részére",
- "Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók:"
+ "Allow users to mount external storage" : "Külső tárolók csatolásának engedélyezése a felhasználók részére",
+ "Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók csatolása:",
+ "Access granted" : "Hozzáférés biztosítva",
+ "Global Credentials" : "Globális azonosítók",
+ "ownCloud" : "ownCloud",
+ "<b>Note:</b> " : "<b>Megjegyzés:</b>",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "External Storage" : "Külső tárolási szolgáltatások becsatolása"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/hu_HU.json b/apps/files_external/l10n/hu_HU.json
index 9efbacb48ce..3091984e820 100644
--- a/apps/files_external/l10n/hu_HU.json
+++ b/apps/files_external/l10n/hu_HU.json
@@ -1,39 +1,74 @@
{ "translations": {
+ "Fetching request tokens failed. Verify that your app key and secret are correct." : "Nem sikerült a kérési tokenek letöltése. Ellenőrizd, hogy az alkalmazás kulcs és titok megfelelő-e!",
+ "Fetching access tokens failed. Verify that your app key and secret are correct." : "Nem sikerült a hozzáférési tokenek letöltése. Ellenőrizd, hogy az alkalmazás kulcs és titok megfelelő-e!",
+ "Please provide a valid app key and secret." : "Kérlek adj meg egy érvényes alkalmazás kulcsot és jelszót.",
+ "Step 1 failed. Exception: %s" : "1. lépés sikertelen. Kivétel: %s",
+ "Step 2 failed. Exception: %s" : "2. lépés sikertelen. Kivétel: %s",
"External storage" : "Külső tárolók",
+ "Dropbox App Configuration" : "Dropbox alkalmazás beállítás",
+ "Google Drive App Configuration" : "Google Drive alkalmazás beállítás",
"Personal" : "Személyes",
"System" : "Rendszer",
"Grant access" : "Megadom a hozzáférést",
+ "Error configuring OAuth1" : "OAuth1 konfigurálási hiba",
+ "Error configuring OAuth2" : "OAuth2 konfigurálási hiba",
"Generate keys" : "Kulcsok generálása",
"Error generating key pair" : "Hiba történt a kulcspár generálása közben",
"All users. Type to select user or group." : "Összes felhasználó. Írj be egy felhasználót vagy csoportot.",
"(group)" : "(csoport)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibilitás a Mac NFD kódolással (lassú)",
"Admin defined" : "Adminisztrátor definiálva",
"Saved" : "Elmentve",
+ "Saving..." : "Mentés...",
+ "Save" : "Mentés",
"Empty response from the server" : "Üres válasz a szervertől",
"Couldn't access. Please logout and login to activate this mount point" : "Nem férhető hozzá. Kérjük próbálj meg ki- és bejelentkezni a csatolási pont aktiválásához.",
"Couldn't get the information from the ownCloud server: {code} {type}" : "Nem sikerült lekérdezni az információkat az ownCloud szerverről: {code} {type}",
+ "Couldn't get the list of external mount points: {type}" : "Nem lehet letölteni a külső csatolási pontok listáját: {type}",
"There was an error with message: " : "Hiba történt ezzel az üzenettel:",
"External mount error" : "Külső csatolási hiba",
+ "Couldn't get the list of Windows network drive mount points: empty response from the server" : "Nem sikerült letölteni a Windows hálózati meghajtó csatolási pontok listáját: üres válasz a szervertől",
+ "Some of the configured external mount points are not connected. Please click on the red row(s) for more information" : "Néhány beállított külső csatolási pont nincs kapcsolatban. További információkért kattints a piros sor(ok)ra.",
+ "Please enter the credentials for the {mount} mount" : "Kérlek add meg a következő csatolás azonosítóit: {mount}",
"Username" : "Felhasználónév",
"Password" : "Jelszó",
- "Save" : "Mentés",
+ "Credentials saved" : "Azonosítók mentve",
+ "Credentials saving failed" : "Azonosítók mentése sikertelen",
+ "Credentials required" : "Azonosító szükséges",
+ "Storage with id \"%i\" not found" : "A következő azonosítójú tároló nem található: \"%i\"",
+ "Invalid mount point" : "Érvénytelen csatolási pont",
+ "Insufficient data: %s" : "Nem elegendő adat: %s",
"%s" : "%s",
+ "Storage with id \"%i\" is not user editable" : "A következő azonosítójú tároló a felhasználó számára nem szerkeszthető: \"%i\"",
"Access key" : "Hozzáférési kulcs",
"Secret key" : "Titkos kulcs",
+ "Builtin" : "Beépített",
"None" : "Egyik sem",
- "App key" : "App kulcs",
- "App secret" : "App titkos kulcs",
- "Client secret" : "Kliens titkos",
+ "OAuth1" : "OAuth1",
+ "App key" : "Alkalmazás kulcs",
+ "App secret" : "Alkalmazás titkos kulcs",
+ "OAuth2" : "OAuth2",
+ "Client ID" : "Ügyfél ID",
+ "Client secret" : "Kliens titok",
+ "OpenStack" : "OpenStack",
+ "Tenant name" : "Bérlő neve",
+ "Identity endpoint URL" : "Identitás végpont URL",
+ "Rackspace" : "Rackspace",
"API key" : "API kulcs",
+ "Global credentials" : "Globális azonosítók",
+ "Log-in credentials, save in database" : "Bejelentkezési azonosítók, mentés az adatbázisban",
"Username and password" : "Felhasználónév és jelszó",
- "RSA public key" : "RSA publikus kulcs",
- "Public key" : "Publikus kulcs",
+ "Log-in credentials, save in session" : "Bejelentkezési azonosítók, mentés az munkamenetben",
+ "User entered, store in database" : "Felhasználó megadva, tárolás az adatbázisban",
+ "RSA public key" : "RSA nyilvános kulcs",
+ "Public key" : "Nyilvános kulcs",
"Amazon S3" : "Amazon S3",
"Bucket" : "Bucket",
"Hostname" : "Hosztnév",
"Port" : "Port",
"Region" : "Megye",
"Enable SSL" : "SSL engedélyezése",
+ "Enable Path Style" : "Útvonal stílus engedélyezés",
"WebDAV" : "WebDAV",
"URL" : "URL",
"Remote subfolder" : "Távoli alkönyvtár",
@@ -45,7 +80,7 @@
"Google Drive" : "Google Drive",
"Local" : "Helyi",
"Location" : "Hely",
- "ownCloud" : "ownCloud",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Gyökér",
"SFTP with secret key login" : "SFTP titkos kulcs belépéssel",
@@ -54,30 +89,40 @@
"Domain" : "Domain",
"SMB / CIFS using OC login" : "SMB / CIFS OC belépéssel",
"Username as share" : "Felhasználónév és megosztás",
+ "OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Szolgáltatás neve",
"Request timeout (seconds)" : "Időtúllépés (másodperc)",
- "<b>Note:</b> " : "<b>Megjegyzés:</b>",
- "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
- "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "External storages" : "Külső tárolók",
+ "The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "%s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
"No external storage configured" : "Nincs külső tároló beállítva.",
"You can add external storages in the personal settings" : "Hozzáadhatsz külső tárolókat a személyes beállítások közt.",
"Name" : "Név",
"Storage type" : "Tároló típusa",
+ "Scope" : "Hatáskör",
"Enable encryption" : "Titkosítás engedélyezése",
"Enable previews" : "Előnézet engedélyezése",
+ "Enable sharing" : "Megosztás engedélyezése",
"Check for changes" : "Változások keresése",
"Never" : "Soha",
"Once every direct access" : "Minden közvetlen elérésnél",
- "External Storage" : "Külső tárolási szolgáltatások becsatolása",
- "Folder name" : "Mappanév",
+ "Folder name" : "Mappa neve",
"Authentication" : "Azonisítás",
"Configuration" : "Beállítások",
"Available for" : "Elérhető számukra",
"Add storage" : "Tároló becsatolása",
"Advanced settings" : "Haladó beállítások",
"Delete" : "Törlés",
- "Allow users to mount external storage" : "Külső tárolók engedélyezése a felhasználók részére",
- "Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók:"
+ "Allow users to mount external storage" : "Külső tárolók csatolásának engedélyezése a felhasználók részére",
+ "Allow users to mount the following external storage" : "A felhasználók számára engedélyezett külső tárolók csatolása:",
+ "Access granted" : "Hozzáférés biztosítva",
+ "Global Credentials" : "Globális azonosítók",
+ "ownCloud" : "ownCloud",
+ "<b>Note:</b> " : "<b>Megjegyzés:</b>",
+ "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> A cURL támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> Az FTP támogatás, a PHP-ban nincs engedélyezve vagy telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "<b>Note:</b> \"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Megjegyzés:</b> %s nincs telepítve. %s csatolása lehetetlen. Kérd meg a rendszergazdádat, hogy telepítse.",
+ "External Storage" : "Külső tárolási szolgáltatások becsatolása"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_external/l10n/nb_NO.js b/apps/files_external/l10n/nb_NO.js
index 892994925cf..04a4dfa28ba 100644
--- a/apps/files_external/l10n/nb_NO.js
+++ b/apps/files_external/l10n/nb_NO.js
@@ -7,6 +7,8 @@ OC.L10N.register(
"Step 1 failed. Exception: %s" : "Steg 1 feilet. Unntak: %s",
"Step 2 failed. Exception: %s" : "Steg 2 feilet. Unntak: %s",
"External storage" : "Ekstern lagringsplass",
+ "Dropbox App Configuration" : "Dropbox App konfigurasjon",
+ "Google Drive App Configuration" : "Google Drive App konfigurasjon",
"Personal" : "Personlig",
"System" : "System",
"Grant access" : "Gi tilgang",
@@ -16,12 +18,14 @@ OC.L10N.register(
"Error generating key pair" : "Feil ved nøkkelgenerering",
"All users. Type to select user or group." : "Alle brukere. Tast for å velge bruker eller gruppe.",
"(group)" : "(gruppe)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibelt med Mac NFD koding (treg)",
"Admin defined" : "Admin-definert",
"Saved" : "Lagret",
+ "Saving..." : "Lagrer...",
"Save" : "Lagre",
- "Empty response from the server" : "Tomt svar fra serveren",
+ "Empty response from the server" : "Tomt svar fra tjeneren",
"Couldn't access. Please logout and login to activate this mount point" : "Fikk ikke tilgang. Vennligst logg ut og inn igjen for å aktivere dette oppkoblingspunktet.",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Klarte ikke å hente informasjon fra ownCloud-serveren: {code} {type}",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Klarte ikke å hente informasjon fra Nextcloud tjeneren: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Klarte ikke å hente listen over eksterne oppkoblingspunkter: {type}",
"There was an error with message: " : "Det oppstod en feil med melding: ",
"External mount error" : "Ekstern oppkoblingsfeil",
@@ -61,8 +65,11 @@ OC.L10N.register(
"Identity endpoint URL" : "URL for identitets-endepunkt",
"Rackspace" : "Rackspace",
"API key" : "API-nøkkel",
+ "Global credentials" : "Globale pålogginsdetaljer",
+ "Log-in credentials, save in database" : "Påloggingsdetaljer, lagre i databasen",
"Username and password" : "Brukernavn og passord",
"Log-in credentials, save in session" : "Påloggingsdetaljer, lagre i økten",
+ "User entered, store in database" : "Brukerangitt, lagre i databasen",
"RSA public key" : "RSA offentlig nøkkel",
"Public key" : "Offentlig nøkkel",
"Amazon S3" : "Amazon S3",
@@ -83,6 +90,7 @@ OC.L10N.register(
"Google Drive" : "Google Disk",
"Local" : "Lokal",
"Location" : "Sted",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Rot",
"SFTP with secret key login" : "SFTP med hemmelig nøkkel for pålogging",
@@ -94,6 +102,8 @@ OC.L10N.register(
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Tjenestenavn",
"Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)",
+ "External storages" : "Ekstern lagring",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Vennligst spør din systemadministrator om å installere det.",
"No external storage configured" : "Eksternt lager er ikke konfigurert",
"You can add external storages in the personal settings" : "Du kan legge til eksterne lagre i personlige innstillinger",
"Name" : "Navn",
@@ -114,6 +124,8 @@ OC.L10N.register(
"Delete" : "Slett",
"Allow users to mount external storage" : "Tillat at brukere kobler opp eksterne lagre",
"Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring",
+ "Access granted" : "Tilgang gitt",
+ "Global Credentials" : "Globale pålogginsdetaljer",
"ownCloud" : "ownCloud",
"<b>Note:</b> " : "<b>Merk:</b> ",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.",
diff --git a/apps/files_external/l10n/nb_NO.json b/apps/files_external/l10n/nb_NO.json
index bb7070ca93a..efe4af89a93 100644
--- a/apps/files_external/l10n/nb_NO.json
+++ b/apps/files_external/l10n/nb_NO.json
@@ -5,6 +5,8 @@
"Step 1 failed. Exception: %s" : "Steg 1 feilet. Unntak: %s",
"Step 2 failed. Exception: %s" : "Steg 2 feilet. Unntak: %s",
"External storage" : "Ekstern lagringsplass",
+ "Dropbox App Configuration" : "Dropbox App konfigurasjon",
+ "Google Drive App Configuration" : "Google Drive App konfigurasjon",
"Personal" : "Personlig",
"System" : "System",
"Grant access" : "Gi tilgang",
@@ -14,12 +16,14 @@
"Error generating key pair" : "Feil ved nøkkelgenerering",
"All users. Type to select user or group." : "Alle brukere. Tast for å velge bruker eller gruppe.",
"(group)" : "(gruppe)",
+ "Compatibility with Mac NFD encoding (slow)" : "Kompatibelt med Mac NFD koding (treg)",
"Admin defined" : "Admin-definert",
"Saved" : "Lagret",
+ "Saving..." : "Lagrer...",
"Save" : "Lagre",
- "Empty response from the server" : "Tomt svar fra serveren",
+ "Empty response from the server" : "Tomt svar fra tjeneren",
"Couldn't access. Please logout and login to activate this mount point" : "Fikk ikke tilgang. Vennligst logg ut og inn igjen for å aktivere dette oppkoblingspunktet.",
- "Couldn't get the information from the ownCloud server: {code} {type}" : "Klarte ikke å hente informasjon fra ownCloud-serveren: {code} {type}",
+ "Couldn't get the information from the ownCloud server: {code} {type}" : "Klarte ikke å hente informasjon fra Nextcloud tjeneren: {code} {type}",
"Couldn't get the list of external mount points: {type}" : "Klarte ikke å hente listen over eksterne oppkoblingspunkter: {type}",
"There was an error with message: " : "Det oppstod en feil med melding: ",
"External mount error" : "Ekstern oppkoblingsfeil",
@@ -59,8 +63,11 @@
"Identity endpoint URL" : "URL for identitets-endepunkt",
"Rackspace" : "Rackspace",
"API key" : "API-nøkkel",
+ "Global credentials" : "Globale pålogginsdetaljer",
+ "Log-in credentials, save in database" : "Påloggingsdetaljer, lagre i databasen",
"Username and password" : "Brukernavn og passord",
"Log-in credentials, save in session" : "Påloggingsdetaljer, lagre i økten",
+ "User entered, store in database" : "Brukerangitt, lagre i databasen",
"RSA public key" : "RSA offentlig nøkkel",
"Public key" : "Offentlig nøkkel",
"Amazon S3" : "Amazon S3",
@@ -81,6 +88,7 @@
"Google Drive" : "Google Disk",
"Local" : "Lokal",
"Location" : "Sted",
+ "Nextcloud" : "Nextcloud",
"SFTP" : "SFTP",
"Root" : "Rot",
"SFTP with secret key login" : "SFTP med hemmelig nøkkel for pålogging",
@@ -92,6 +100,8 @@
"OpenStack Object Storage" : "OpenStack Object Storage",
"Service name" : "Tjenestenavn",
"Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)",
+ "External storages" : "Ekstern lagring",
+ "\"%s\" is not installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "\"%s\" er ikke installert. Oppkobling av %s er ikke mulig. Vennligst spør din systemadministrator om å installere det.",
"No external storage configured" : "Eksternt lager er ikke konfigurert",
"You can add external storages in the personal settings" : "Du kan legge til eksterne lagre i personlige innstillinger",
"Name" : "Navn",
@@ -112,6 +122,8 @@
"Delete" : "Slett",
"Allow users to mount external storage" : "Tillat at brukere kobler opp eksterne lagre",
"Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring",
+ "Access granted" : "Tilgang gitt",
+ "Global Credentials" : "Globale pålogginsdetaljer",
"ownCloud" : "ownCloud",
"<b>Note:</b> " : "<b>Merk:</b> ",
"<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.",
diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js
index 1d259598d2d..5068eb8c101 100644
--- a/apps/files_sharing/l10n/es.js
+++ b/apps/files_sharing/l10n/es.js
@@ -1,7 +1,7 @@
OC.L10N.register(
"files_sharing",
{
- "Shared with you" : "Compartido contigo",
+ "Shared with you" : "Compartido con usted",
"Shared with others" : "Compartido con otros",
"Shared by link" : "Compartido por medio de enlaces",
"Nothing shared with you yet" : "Todavía no han compartido nada contigo",
@@ -22,6 +22,8 @@ OC.L10N.register(
"Could not delete share" : "No se ha podido eliminar el recurso compartido",
"Please specify a file or folder path" : "Por favor, especifica la ubicación de un archivo o carpeta",
"Wrong path, file/folder doesn't exist" : "Ubicación incorrecta, el archivo/carpeta no existe",
+ "Could not create share" : "No se ha podido compartir",
+ "invalid permissions" : "Permisos incorrectos",
"Please specify a valid user" : "Por favor, especifica un usuario válido",
"Group sharing is disabled by the administrator" : "Compartir en grupo está deshabilitado por el administrador",
"Please specify a valid group" : "Por favor, especifica un grupo válido",
@@ -103,6 +105,23 @@ OC.L10N.register(
"Uploaded files:" : "Archivos subidos:",
"Server to server sharing is not enabled on this server" : "Compartir entre servidores no está habilitado en este servidor",
"The mountpoint name contains invalid characters." : "El punto de montaje contiene caracteres inválidos.",
- "Cancel" : "Cancelar"
+ "Not allowed to create a federated share with the same user server" : "No se permite crear un recurso compartido federado con el mismo servidor del usuario",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL no válido o no confiable",
+ "Could not authenticate to remote share, password might be wrong" : "No se ha podido autenticar para compartir remotamente, quizás esté mal la contraseña",
+ "Couldn't add remote share" : "No se ha podido añadir el recurso compartido remoto",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea añadir el recurso compartido remoto {name} de {owner}@{remote}?",
+ "Remote share" : "Recurso compartido remoto",
+ "Remote share password" : "Contraseña del recurso compartido remoto",
+ "Cancel" : "Cancelar",
+ "Invalid ownCloud url" : "URL de ownCloud no válida",
+ "You received \"/%2$s\" as a remote share from %1$s" : "Has recibido \"/%2$s\" como recurso compartido remoto de %1$s",
+ "Accept" : "Aceptar",
+ "Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir recursos compartidos de usuarios de otros servidores",
+ "Federated Cloud" : "Nube Federada",
+ "Your Federated Cloud ID:" : "Su ID de Nube Federada:",
+ "Add to your website" : "Añadir a su sitio web",
+ "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
+ "HTML Code:" : "Código HTML:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json
index 73f6b6f3998..136148bdda6 100644
--- a/apps/files_sharing/l10n/es.json
+++ b/apps/files_sharing/l10n/es.json
@@ -1,5 +1,5 @@
{ "translations": {
- "Shared with you" : "Compartido contigo",
+ "Shared with you" : "Compartido con usted",
"Shared with others" : "Compartido con otros",
"Shared by link" : "Compartido por medio de enlaces",
"Nothing shared with you yet" : "Todavía no han compartido nada contigo",
@@ -20,6 +20,8 @@
"Could not delete share" : "No se ha podido eliminar el recurso compartido",
"Please specify a file or folder path" : "Por favor, especifica la ubicación de un archivo o carpeta",
"Wrong path, file/folder doesn't exist" : "Ubicación incorrecta, el archivo/carpeta no existe",
+ "Could not create share" : "No se ha podido compartir",
+ "invalid permissions" : "Permisos incorrectos",
"Please specify a valid user" : "Por favor, especifica un usuario válido",
"Group sharing is disabled by the administrator" : "Compartir en grupo está deshabilitado por el administrador",
"Please specify a valid group" : "Por favor, especifica un grupo válido",
@@ -101,6 +103,23 @@
"Uploaded files:" : "Archivos subidos:",
"Server to server sharing is not enabled on this server" : "Compartir entre servidores no está habilitado en este servidor",
"The mountpoint name contains invalid characters." : "El punto de montaje contiene caracteres inválidos.",
- "Cancel" : "Cancelar"
+ "Not allowed to create a federated share with the same user server" : "No se permite crear un recurso compartido federado con el mismo servidor del usuario",
+ "Invalid or untrusted SSL certificate" : "Certificado SSL no válido o no confiable",
+ "Could not authenticate to remote share, password might be wrong" : "No se ha podido autenticar para compartir remotamente, quizás esté mal la contraseña",
+ "Couldn't add remote share" : "No se ha podido añadir el recurso compartido remoto",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "¿Desea añadir el recurso compartido remoto {name} de {owner}@{remote}?",
+ "Remote share" : "Recurso compartido remoto",
+ "Remote share password" : "Contraseña del recurso compartido remoto",
+ "Cancel" : "Cancelar",
+ "Invalid ownCloud url" : "URL de ownCloud no válida",
+ "You received \"/%2$s\" as a remote share from %1$s" : "Has recibido \"/%2$s\" como recurso compartido remoto de %1$s",
+ "Accept" : "Aceptar",
+ "Allow users on this server to send shares to other servers" : "Permitir a usuarios de este servidor compartir con usuarios de otros servidores",
+ "Allow users on this server to receive shares from other servers" : "Permitir a usuarios de este servidor recibir recursos compartidos de usuarios de otros servidores",
+ "Federated Cloud" : "Nube Federada",
+ "Your Federated Cloud ID:" : "Su ID de Nube Federada:",
+ "Add to your website" : "Añadir a su sitio web",
+ "Share with me via Nextcloud" : "Compartir conmigo vía Nextcloud",
+ "HTML Code:" : "Código HTML:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js
index 873b53ce5ec..57c018f6c05 100644
--- a/apps/files_sharing/l10n/hu_HU.js
+++ b/apps/files_sharing/l10n/hu_HU.js
@@ -1,73 +1,137 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "A kiszolgálók közötti megosztás nincs engedélyezve ezen a kiszolgálón",
- "The mountpoint name contains invalid characters." : "A csatlakozási pont neve érvénytelen karaktereket tartalmaz ",
- "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
- "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
- "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
- "Storage not valid" : "Tároló nem érvényes",
- "Couldn't add remote share" : "A távoli megosztás nem hozható létre",
"Shared with you" : "Velem osztották meg",
"Shared with others" : "Én osztottam meg másokkal",
- "Shared by link" : "Linkkel osztottam meg",
+ "Shared by link" : "Hivatkozással osztottam meg",
"Nothing shared with you yet" : "Nincs még semmi megosztva Önnel",
- "Files and folders others share with you will show up here" : "Mások által megosztott fájlok itt jelennek meg",
+ "Files and folders others share with you will show up here" : "Mások által megosztott fájlok és mappák itt jelennek meg",
"Nothing shared yet" : "Nincs semmi megosztva",
- "Files and folders you share will show up here" : "Az Ön által megosztott fáljok itt jelennek meg",
- "No shared links" : "Nincs megosztott link",
- "Files and folders you share by link will show up here" : "Link-el megosztott fájljai itt jelennek meg",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Használatba kívánja venni a {name} távoli megosztást, amit a {owner}@{remote} címről kapott?",
- "Remote share" : "Távoli megosztás",
- "Remote share password" : "Jelszó a távoli megosztáshoz",
- "Cancel" : "Mégsem",
- "Add remote share" : "Távoli megosztás létrehozása",
- "You can upload into this folder" : "Ebbe a könyvtárba fel tud tölteni",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nem található ownCloud telepítés (7 vagy nagyobb verzió) itt {remote}",
- "Invalid ownCloud url" : "Érvénytelen ownCloud webcím",
- "Shared by" : "Megosztotta Önnel",
+ "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg",
+ "No shared links" : "Nincs megosztott hivatkozás",
+ "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg",
+ "You can upload into this folder" : "Ebbe a mappába fel tud tölteni",
+ "No compatible server found at {remote}" : "Itt nem található kompatibilis szerver: {remote}",
+ "Invalid server URL" : "Érvénytelen szerver URL",
+ "Failed to add the public link to your Nextcloud" : "Nem sikerült hozzáadni a nyilvános hivatkozást a Nexcloudodhoz",
+ "No expiration date set" : "Nem lett beállítva lejárati dátum",
+ "Shared by" : "Megosztotta:",
"Sharing" : "Megosztás",
- "A file or folder has been <strong>shared</strong>" : "Fájl vagy könyvtár <strong>megosztása</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy könyvtár meg lett osztva egy <strong>másik szerverről</strong>",
- "A public shared file or folder was <strong>downloaded</strong>" : "Egy nyilvánosan megosztott fáljt vagy könyvtárat <strong>letöltöttek</strong>",
+ "Wrong share ID, share doesn't exist" : "Hibás megosztás ID, a megosztás nem létezik",
+ "could not delete share" : "a megosztás nem törölhető",
+ "Could not delete share" : "A megosztás nem törölhető",
+ "Please specify a file or folder path" : "Adj meg egy fájl vagy mappa útvonalat",
+ "Wrong path, file/folder doesn't exist" : "Hibás útvonal, a fájl/mappa nem létezik",
+ "Could not create share" : "A megosztás nem hozható létre",
+ "invalid permissions" : "érvénytelen jogosultságok",
+ "Please specify a valid user" : "Kérlek adj meg egy érvényes felhasználót",
+ "Group sharing is disabled by the administrator" : "A csoportos megosztást letiltotta az adminisztrátor",
+ "Please specify a valid group" : "Kérlek adj meg egy érvényes csoportot",
+ "Public link sharing is disabled by the administrator" : "A nyilvános hivatkozást megosztást letiltotta az adminisztrátor",
+ "Public upload disabled by the administrator" : "A nyilvános feltöltést letiltotta az adminisztrátor",
+ "Public upload is only possible for publicly shared folders" : "A nyilvános feltöltés csak a nyilvánosan megosztott mappákban lehetséges",
+ "Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátum csak YYYY-MM-DD formátumú lehet",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "%s megosztása sikertelen, mert a háttér rendszer nem engedélyezi a következő típusú megosztásokat: %s",
+ "Unknown share type" : "Ismeretlen megosztás típus",
+ "Not a directory" : "Nem könyvtár",
+ "Could not lock path" : "Az útvonal nem zárolható",
+ "Wrong or no update parameter given" : "Hibás vagy üres frissítési paraméter",
+ "Can't change permissions for public share links" : "Nem lehet módosítani a nyilvános megosztási hivatkozások jogosultságait",
+ "Cannot increase permissions" : "Nem lehet növelni az engedélyeket",
+ "A file or folder has been <strong>shared</strong>" : "Egy fájl vagy mappa <strong>megosztva</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy mappa meg lett osztva egy <strong>másik szerverről</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Egy nyilvánosan megosztott fáljt vagy mappát <strong>letöltöttek</strong>",
"You received a new remote share %2$s from %1$s" : "A %2$s távoli megosztás érkezett a %1$s -től",
"You received a new remote share from %s" : "Új távoli megosztás érkezett a %s -től",
"%1$s accepted remote share %2$s" : "%1$s elfogadta a távoli megosztást %2$s",
"%1$s declined remote share %2$s" : "%1$s visszavonta a távoli megosztást %2$s",
"%1$s unshared %2$s from you" : "%1$s megosztás visszavonva %2$s által",
- "Public shared folder %1$s was downloaded" : "Nyilvánosan megosztott könyvtár %1$s le lett töltve",
+ "Public shared folder %1$s was downloaded" : "%1$s nyilvánosan megosztott mappa le lett töltve",
"Public shared file %1$s was downloaded" : "Nyilvánosan megosztott fálj %1$s le lett töltve",
"You shared %1$s with %2$s" : "%1$s-t megosztottam ővele: %2$s",
"%2$s shared %1$s with %3$s" : "%2$s megosztotta ezt: %1$s, ővele: %3$s",
+ "You removed the share of %2$s for %1$s" : "Eltávolítottad %2$s következő megosztását: %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s eltávolította %3$s következő megosztását: %1$s",
"You shared %1$s with group %2$s" : "%1$s-t megosztottam ezzel a csoporttal: %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s megosztotta ezt: %1$s, ezzel a csoporttal: %3$s",
+ "You removed the share of group %2$s for %1$s" : "Eltávolítottad %2$s csoport %1$s megosztását",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s eltávolította %3$s csoport %1$s megosztását",
"%2$s shared %1$s via link" : "%2$s megosztotta ezt: %1$s, hivatkozással",
- "You shared %1$s via link" : "Megosztottam link segítségével: %1$s",
+ "You shared %1$s via link" : "Megosztottam hivatkozás segítségével: %1$s",
+ "You removed the public link for %1$s" : "Eltávolítottad %1$s nyilvános hivatkozását",
+ "%2$s removed the public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
+ "Your public link for %1$s expired" : "%1$s nyilvános hivatkozásod lejárt",
+ "The public link of %2$s for %1$s expired" : "%2$s %1$s nyilvános hivatkozása lejárt",
"%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
- "Downloaded via public link" : "Letöltve publikus hivatkozással",
+ "%2$s removed the share for %1$s" : "%2$s eltávolította %1$s megosztását",
+ "Downloaded via public link" : "Letöltve nyilvános hivatkozással",
"Shared with %2$s" : "Megosztva vele: %2$s",
"Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
+ "Removed share for %2$s" : "%2$s megosztása eltávolítva",
+ "%2$s removed share for %3$s" : "%2$s eltávolította %3$s megosztását",
"Shared with group %2$s" : "Megosztva ezzel a csoporttal: %2$s",
"Shared with group %3$s by %2$s" : "Megosztva ezzel a csoporttal: %3$s, megosztó: %2$s",
+ "Removed share of group %2$s" : "%2$s csoport megosztása eltávolítva",
+ "%2$s removed share of group %3$s" : "%2$s eltávolította %3$s csoport megosztását",
"Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
- "Shared via public link" : "Megosztva publikus hivatkozással",
+ "Shared via public link" : "Megosztva nyilvános hivatkozással",
+ "Removed public link" : "Eltávolított nyilvános hivatkozás",
+ "%2$s removed public link" : "%2$s eltávolított egy nyilvános hivatkozást",
+ "Public link expired" : "Nyilvános hivatkozás lejárt",
+ "Public link of %2$s expired" : "%2$s nyilvános hivatkozása lejárt",
"Shared by %2$s" : "Megosztó: %2$s",
"Shares" : "Megosztások",
+ "Share API is disabled" : "Megosztás API letiltva",
"This share is password-protected" : "Ez egy jelszóval védett megosztás",
"The password is wrong. Try again." : "A megadott jelszó nem megfelelő. Próbálja újra!",
"Password" : "Jelszó",
- "No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban",
+ "No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában",
"Name" : "Név",
"Share time" : "A megosztás időpontja",
- "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a link már nem működik.",
+ "Expiration date" : "Lejárati dátum",
+ "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a hivatkozás már nem működik.",
"Reasons might be:" : "Ennek az oka a következő lehet:",
- "the item was removed" : "az állományt időközben eltávolították",
- "the link expired" : "lejárt a link érvényességi ideje",
+ "the item was removed" : "az elem el lett távolítva",
+ "the link expired" : "lejárt a hivatkozás érvényességi ideje",
"sharing is disabled" : "letiltásra került a megosztás",
"For more info, please ask the person who sent this link." : "További információért forduljon ahhoz, aki ezt a linket küldte Önnek!",
- "Add to your ownCloud" : "Adjuk hozzá a saját ownCloudunkhoz",
+ "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
"Download" : "Letöltés",
"Download %s" : "%s letöltése",
- "Direct link" : "Közvetlen link"
+ "Direct link" : "Közvetlen hivatkozás",
+ "Upload files to %s" : "Fájlok felöltése ide: %s",
+ "Select or drop files" : "Válassz ki vagy dobj ide fájlokat",
+ "Uploading files…" : "Fájlok feltöltése...",
+ "Uploaded files:" : "Felöltött fájlok:",
+ "Server to server sharing is not enabled on this server" : "A szervertől-szerverig megosztás nem engedélyezett ezen a szerveren",
+ "The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz.",
+ "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
+ "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható SSL certifikáció",
+ "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
+ "Storage not valid" : "Tároló nem érvényes",
+ "Couldn't add remote share" : "Nem sikerült hozzáadni a távoli megosztást",
+ "Federated sharing" : "Egyesített megosztás",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Hozzá akarod adni {owner}@{remote} távoli megosztását: {name}?",
+ "Remote share" : "Távoli megosztás",
+ "Remote share password" : "Távoli megosztás jelszava",
+ "Cancel" : "Mégsem",
+ "Add remote share" : "Távoli megosztás hozzáadás",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nem található telepített ownCloud (7 vagy újabb) itt: {remote}",
+ "Invalid ownCloud url" : "Érvénytelen ownCloud URL",
+ "You received \"/%2$s\" as a remote share from %1$s" : "Kaptál egy távoli megosztást: \"/%2$s\", innen: %1$s",
+ "Accept" : "Elfogadás",
+ "Decline" : "Elutasítás",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Oszd meg velem az #ownCloud Egyesített Felhő Azonosító segítségével, lásd %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Oszd meg velem az #ownCloud Egyesített Felhő Azonosító segítségével",
+ "Federated Cloud Sharing" : "Egyesített felhő megosztás",
+ "Open documentation" : "Dokumentáció megnyitása",
+ "Allow users on this server to send shares to other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
+ "Allow users on this server to receive shares from other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
+ "Federated Cloud" : "Egyesített felhő",
+ "Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
+ "Share it:" : "Oszd meg:",
+ "Add to your website" : "Add hozzá a weboldaladhoz",
+ "Share with me via Nextcloud" : "Oszd meg velem a Nextcloudon",
+ "HTML Code:" : "HTML kód:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json
index 2e60829a09e..27e2bb4f2c2 100644
--- a/apps/files_sharing/l10n/hu_HU.json
+++ b/apps/files_sharing/l10n/hu_HU.json
@@ -1,71 +1,135 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "A kiszolgálók közötti megosztás nincs engedélyezve ezen a kiszolgálón",
- "The mountpoint name contains invalid characters." : "A csatlakozási pont neve érvénytelen karaktereket tartalmaz ",
- "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
- "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható az SSL tanúsítvány",
- "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
- "Storage not valid" : "Tároló nem érvényes",
- "Couldn't add remote share" : "A távoli megosztás nem hozható létre",
"Shared with you" : "Velem osztották meg",
"Shared with others" : "Én osztottam meg másokkal",
- "Shared by link" : "Linkkel osztottam meg",
+ "Shared by link" : "Hivatkozással osztottam meg",
"Nothing shared with you yet" : "Nincs még semmi megosztva Önnel",
- "Files and folders others share with you will show up here" : "Mások által megosztott fájlok itt jelennek meg",
+ "Files and folders others share with you will show up here" : "Mások által megosztott fájlok és mappák itt jelennek meg",
"Nothing shared yet" : "Nincs semmi megosztva",
- "Files and folders you share will show up here" : "Az Ön által megosztott fáljok itt jelennek meg",
- "No shared links" : "Nincs megosztott link",
- "Files and folders you share by link will show up here" : "Link-el megosztott fájljai itt jelennek meg",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Használatba kívánja venni a {name} távoli megosztást, amit a {owner}@{remote} címről kapott?",
- "Remote share" : "Távoli megosztás",
- "Remote share password" : "Jelszó a távoli megosztáshoz",
- "Cancel" : "Mégsem",
- "Add remote share" : "Távoli megosztás létrehozása",
- "You can upload into this folder" : "Ebbe a könyvtárba fel tud tölteni",
- "No ownCloud installation (7 or higher) found at {remote}" : "Nem található ownCloud telepítés (7 vagy nagyobb verzió) itt {remote}",
- "Invalid ownCloud url" : "Érvénytelen ownCloud webcím",
- "Shared by" : "Megosztotta Önnel",
+ "Files and folders you share will show up here" : "Az Ön által megosztott fájlok és mappák itt jelennek meg",
+ "No shared links" : "Nincs megosztott hivatkozás",
+ "Files and folders you share by link will show up here" : "A hivatkozással megosztott fájlok és mappák itt jelennek meg",
+ "You can upload into this folder" : "Ebbe a mappába fel tud tölteni",
+ "No compatible server found at {remote}" : "Itt nem található kompatibilis szerver: {remote}",
+ "Invalid server URL" : "Érvénytelen szerver URL",
+ "Failed to add the public link to your Nextcloud" : "Nem sikerült hozzáadni a nyilvános hivatkozást a Nexcloudodhoz",
+ "No expiration date set" : "Nem lett beállítva lejárati dátum",
+ "Shared by" : "Megosztotta:",
"Sharing" : "Megosztás",
- "A file or folder has been <strong>shared</strong>" : "Fájl vagy könyvtár <strong>megosztása</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy könyvtár meg lett osztva egy <strong>másik szerverről</strong>",
- "A public shared file or folder was <strong>downloaded</strong>" : "Egy nyilvánosan megosztott fáljt vagy könyvtárat <strong>letöltöttek</strong>",
+ "Wrong share ID, share doesn't exist" : "Hibás megosztás ID, a megosztás nem létezik",
+ "could not delete share" : "a megosztás nem törölhető",
+ "Could not delete share" : "A megosztás nem törölhető",
+ "Please specify a file or folder path" : "Adj meg egy fájl vagy mappa útvonalat",
+ "Wrong path, file/folder doesn't exist" : "Hibás útvonal, a fájl/mappa nem létezik",
+ "Could not create share" : "A megosztás nem hozható létre",
+ "invalid permissions" : "érvénytelen jogosultságok",
+ "Please specify a valid user" : "Kérlek adj meg egy érvényes felhasználót",
+ "Group sharing is disabled by the administrator" : "A csoportos megosztást letiltotta az adminisztrátor",
+ "Please specify a valid group" : "Kérlek adj meg egy érvényes csoportot",
+ "Public link sharing is disabled by the administrator" : "A nyilvános hivatkozást megosztást letiltotta az adminisztrátor",
+ "Public upload disabled by the administrator" : "A nyilvános feltöltést letiltotta az adminisztrátor",
+ "Public upload is only possible for publicly shared folders" : "A nyilvános feltöltés csak a nyilvánosan megosztott mappákban lehetséges",
+ "Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátum csak YYYY-MM-DD formátumú lehet",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "%s megosztása sikertelen, mert a háttér rendszer nem engedélyezi a következő típusú megosztásokat: %s",
+ "Unknown share type" : "Ismeretlen megosztás típus",
+ "Not a directory" : "Nem könyvtár",
+ "Could not lock path" : "Az útvonal nem zárolható",
+ "Wrong or no update parameter given" : "Hibás vagy üres frissítési paraméter",
+ "Can't change permissions for public share links" : "Nem lehet módosítani a nyilvános megosztási hivatkozások jogosultságait",
+ "Cannot increase permissions" : "Nem lehet növelni az engedélyeket",
+ "A file or folder has been <strong>shared</strong>" : "Egy fájl vagy mappa <strong>megosztva</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "Egy fájl vagy mappa meg lett osztva egy <strong>másik szerverről</strong>",
+ "A public shared file or folder was <strong>downloaded</strong>" : "Egy nyilvánosan megosztott fáljt vagy mappát <strong>letöltöttek</strong>",
"You received a new remote share %2$s from %1$s" : "A %2$s távoli megosztás érkezett a %1$s -től",
"You received a new remote share from %s" : "Új távoli megosztás érkezett a %s -től",
"%1$s accepted remote share %2$s" : "%1$s elfogadta a távoli megosztást %2$s",
"%1$s declined remote share %2$s" : "%1$s visszavonta a távoli megosztást %2$s",
"%1$s unshared %2$s from you" : "%1$s megosztás visszavonva %2$s által",
- "Public shared folder %1$s was downloaded" : "Nyilvánosan megosztott könyvtár %1$s le lett töltve",
+ "Public shared folder %1$s was downloaded" : "%1$s nyilvánosan megosztott mappa le lett töltve",
"Public shared file %1$s was downloaded" : "Nyilvánosan megosztott fálj %1$s le lett töltve",
"You shared %1$s with %2$s" : "%1$s-t megosztottam ővele: %2$s",
"%2$s shared %1$s with %3$s" : "%2$s megosztotta ezt: %1$s, ővele: %3$s",
+ "You removed the share of %2$s for %1$s" : "Eltávolítottad %2$s következő megosztását: %1$s",
+ "%2$s removed the share of %3$s for %1$s" : "%2$s eltávolította %3$s következő megosztását: %1$s",
"You shared %1$s with group %2$s" : "%1$s-t megosztottam ezzel a csoporttal: %2$s",
"%2$s shared %1$s with group %3$s" : "%2$s megosztotta ezt: %1$s, ezzel a csoporttal: %3$s",
+ "You removed the share of group %2$s for %1$s" : "Eltávolítottad %2$s csoport %1$s megosztását",
+ "%2$s removed the share of group %3$s for %1$s" : "%2$s eltávolította %3$s csoport %1$s megosztását",
"%2$s shared %1$s via link" : "%2$s megosztotta ezt: %1$s, hivatkozással",
- "You shared %1$s via link" : "Megosztottam link segítségével: %1$s",
+ "You shared %1$s via link" : "Megosztottam hivatkozás segítségével: %1$s",
+ "You removed the public link for %1$s" : "Eltávolítottad %1$s nyilvános hivatkozását",
+ "%2$s removed the public link for %1$s" : "%2$s eltávolította %1$s nyilvános hivatkozását",
+ "Your public link for %1$s expired" : "%1$s nyilvános hivatkozásod lejárt",
+ "The public link of %2$s for %1$s expired" : "%2$s %1$s nyilvános hivatkozása lejárt",
"%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s",
- "Downloaded via public link" : "Letöltve publikus hivatkozással",
+ "%2$s removed the share for %1$s" : "%2$s eltávolította %1$s megosztását",
+ "Downloaded via public link" : "Letöltve nyilvános hivatkozással",
"Shared with %2$s" : "Megosztva vele: %2$s",
"Shared with %3$s by %2$s" : "Megosztva vele: %3$s, megosztó: %2$s",
+ "Removed share for %2$s" : "%2$s megosztása eltávolítva",
+ "%2$s removed share for %3$s" : "%2$s eltávolította %3$s megosztását",
"Shared with group %2$s" : "Megosztva ezzel a csoporttal: %2$s",
"Shared with group %3$s by %2$s" : "Megosztva ezzel a csoporttal: %3$s, megosztó: %2$s",
+ "Removed share of group %2$s" : "%2$s csoport megosztása eltávolítva",
+ "%2$s removed share of group %3$s" : "%2$s eltávolította %3$s csoport megosztását",
"Shared via link by %2$s" : "Megosztva hivatkozással: %2$s",
- "Shared via public link" : "Megosztva publikus hivatkozással",
+ "Shared via public link" : "Megosztva nyilvános hivatkozással",
+ "Removed public link" : "Eltávolított nyilvános hivatkozás",
+ "%2$s removed public link" : "%2$s eltávolított egy nyilvános hivatkozást",
+ "Public link expired" : "Nyilvános hivatkozás lejárt",
+ "Public link of %2$s expired" : "%2$s nyilvános hivatkozása lejárt",
"Shared by %2$s" : "Megosztó: %2$s",
"Shares" : "Megosztások",
+ "Share API is disabled" : "Megosztás API letiltva",
"This share is password-protected" : "Ez egy jelszóval védett megosztás",
"The password is wrong. Try again." : "A megadott jelszó nem megfelelő. Próbálja újra!",
"Password" : "Jelszó",
- "No entries found in this folder" : "Nincsenek bejegyzések ebben a könyvtárban",
+ "No entries found in this folder" : "Nincsenek bejegyzések ebben a mappában",
"Name" : "Név",
"Share time" : "A megosztás időpontja",
- "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a link már nem működik.",
+ "Expiration date" : "Lejárati dátum",
+ "Sorry, this link doesn’t seem to work anymore." : "Sajnos úgy tűnik, ez a hivatkozás már nem működik.",
"Reasons might be:" : "Ennek az oka a következő lehet:",
- "the item was removed" : "az állományt időközben eltávolították",
- "the link expired" : "lejárt a link érvényességi ideje",
+ "the item was removed" : "az elem el lett távolítva",
+ "the link expired" : "lejárt a hivatkozás érvényességi ideje",
"sharing is disabled" : "letiltásra került a megosztás",
"For more info, please ask the person who sent this link." : "További információért forduljon ahhoz, aki ezt a linket küldte Önnek!",
- "Add to your ownCloud" : "Adjuk hozzá a saját ownCloudunkhoz",
+ "Add to your Nextcloud" : "Add hozzá a Nextcloudodhoz",
"Download" : "Letöltés",
"Download %s" : "%s letöltése",
- "Direct link" : "Közvetlen link"
+ "Direct link" : "Közvetlen hivatkozás",
+ "Upload files to %s" : "Fájlok felöltése ide: %s",
+ "Select or drop files" : "Válassz ki vagy dobj ide fájlokat",
+ "Uploading files…" : "Fájlok feltöltése...",
+ "Uploaded files:" : "Felöltött fájlok:",
+ "Server to server sharing is not enabled on this server" : "A szervertől-szerverig megosztás nem engedélyezett ezen a szerveren",
+ "The mountpoint name contains invalid characters." : "A csatolási pont neve érvénytelen karaktereket tartalmaz.",
+ "Not allowed to create a federated share with the same user server" : "Nem lehet létrehozni egy egyesített megosztást azonos felhasználóval és szerverrel",
+ "Invalid or untrusted SSL certificate" : "Érvénytelen vagy nem megbízható SSL certifikáció",
+ "Could not authenticate to remote share, password might be wrong" : "Nem sikerült az azonosítás a távoli megosztáshoz. Lehet, hogy rossz a jelszó.",
+ "Storage not valid" : "Tároló nem érvényes",
+ "Couldn't add remote share" : "Nem sikerült hozzáadni a távoli megosztást",
+ "Federated sharing" : "Egyesített megosztás",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Hozzá akarod adni {owner}@{remote} távoli megosztását: {name}?",
+ "Remote share" : "Távoli megosztás",
+ "Remote share password" : "Távoli megosztás jelszava",
+ "Cancel" : "Mégsem",
+ "Add remote share" : "Távoli megosztás hozzáadás",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Nem található telepített ownCloud (7 vagy újabb) itt: {remote}",
+ "Invalid ownCloud url" : "Érvénytelen ownCloud URL",
+ "You received \"/%2$s\" as a remote share from %1$s" : "Kaptál egy távoli megosztást: \"/%2$s\", innen: %1$s",
+ "Accept" : "Elfogadás",
+ "Decline" : "Elutasítás",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Oszd meg velem az #ownCloud Egyesített Felhő Azonosító segítségével, lásd %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Oszd meg velem az #ownCloud Egyesített Felhő Azonosító segítségével",
+ "Federated Cloud Sharing" : "Egyesített felhő megosztás",
+ "Open documentation" : "Dokumentáció megnyitása",
+ "Allow users on this server to send shares to other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy fájlokat osszanak meg más szerverekkel.",
+ "Allow users on this server to receive shares from other servers" : "Engedélyezi ezen szerver felhasználóinak, hogy megosztásokat fogadjanak más szerverektől",
+ "Federated Cloud" : "Egyesített felhő",
+ "Your Federated Cloud ID:" : "Egyesített felhő azonosító:",
+ "Share it:" : "Oszd meg:",
+ "Add to your website" : "Add hozzá a weboldaladhoz",
+ "Share with me via Nextcloud" : "Oszd meg velem a Nextcloudon",
+ "HTML Code:" : "HTML kód:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/l10n/nb_NO.js b/apps/files_sharing/l10n/nb_NO.js
index 4f4e28c0d61..15ab3ac06b5 100644
--- a/apps/files_sharing/l10n/nb_NO.js
+++ b/apps/files_sharing/l10n/nb_NO.js
@@ -1,13 +1,6 @@
OC.L10N.register(
"files_sharing",
{
- "Server to server sharing is not enabled on this server" : "Server til server-deling er ikke aktivert på denne serveren",
- "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.",
- "Not allowed to create a federated share with the same user server" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme bruker-serveren",
- "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke-klarert SSL-sertifikat",
- "Could not authenticate to remote share, password might be wrong" : "Klarte ikke å autentisere mot ekstern deling. Passordet kan være feil",
- "Storage not valid" : "Lagerplass ikke gyldig",
- "Couldn't add remote share" : "Klarte ikke å legge til ekstern deling",
"Shared with you" : "Delt med deg",
"Shared with others" : "Delt med andre",
"Shared by link" : "Delt med lenke",
@@ -17,16 +10,36 @@ OC.L10N.register(
"Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her",
"No shared links" : "Ingen delte lenker",
"Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Ønsker du å legge til ekstern deling {name} fra {owner}@{remote}?",
- "Remote share" : "Ekstern deling",
- "Remote share password" : "Passord for ekstern deling",
- "Cancel" : "Avbryt",
- "Add remote share" : "Legg til ekstern deling",
"You can upload into this folder" : "Du kan laste opp til denne mappen",
+ "No compatible server found at {remote}" : "Ingen kompatibel tjener ble funnet på {remote}",
+ "Invalid server URL" : "Ugyldig tjener adresse",
+ "Failed to add the public link to your Nextcloud" : "Feil oppstod under oppretting av offentlig lenke til din Nextcloud",
+ "No expiration date set" : "Ingen utløpsdato er satt",
"Shared by" : "Delt av",
"Sharing" : "Deling",
+ "Wrong share ID, share doesn't exist" : "Feil ressurs ID, ressursen finnes ikke",
+ "could not delete share" : "kunne ikke slette ressursen",
+ "Could not delete share" : "Kunne ikke slette ressursen",
+ "Please specify a file or folder path" : "Vennligst oppgi en fil eller mappesti",
+ "Wrong path, file/folder doesn't exist" : "Feil filbane, filen/mappen finnes ikke",
+ "Could not create share" : "Kunne ikke opprette ressurs",
+ "invalid permissions" : "Ugyldige rettigheter",
+ "Please specify a valid user" : "Vennligst oppgi en gyldig bruker",
+ "Group sharing is disabled by the administrator" : "Gruppedeling er deaktivert av administratoren",
+ "Please specify a valid group" : "Vennligst oppgi en gyldig gruppe",
+ "Public link sharing is disabled by the administrator" : "Offentlig deling er deaktivert av administratoren",
+ "Public upload disabled by the administrator" : "Offentlig opplasting er deaktivert av administratoren",
+ "Public upload is only possible for publicly shared folders" : "Offentlig opplasting er kun mulig i offentlig delte mapper",
+ "Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Deling av %s feilet på grunn av at tjeneren ikke tillater deling av filtypen %s",
+ "Unknown share type" : "Ukjent ressurstype",
+ "Not a directory" : "Ikke en mappe",
+ "Could not lock path" : "Kunne ikke låse sti",
+ "Wrong or no update parameter given" : "Feil eller ingen parametre for oppdatering er angitt",
+ "Can't change permissions for public share links" : "Kan ikke endre rettigheter for offentlige lenker",
+ "Cannot increase permissions" : "Kan ikke øke tillatelser",
"A file or folder has been <strong>shared</strong>" : "En fil eller mappe ble <strong>delt</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen server</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen tjener</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "En offentlig delt fil eller mappe ble <strong>lastet ned</strong>",
"You received a new remote share %2$s from %1$s" : "Du mottok en ny ekstern deling %2$s fra %1$s",
"You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s",
@@ -68,21 +81,57 @@ OC.L10N.register(
"Public link of %2$s expired" : "Offentlig lenke til %2$s er utløpt",
"Shared by %2$s" : "Delt av %2$s",
"Shares" : "Delinger",
+ "Share API is disabled" : "Deling API er deaktivert",
"This share is password-protected" : "Denne delingen er passordbeskyttet",
"The password is wrong. Try again." : "Passordet er feil. Prøv på nytt.",
"Password" : "Passord",
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
"Name" : "Navn",
"Share time" : "Delingstidspunkt",
+ "Expiration date" : "Utløpsdato",
"Sorry, this link doesn’t seem to work anymore." : "Beklager, denne lenken ser ikke ut til å virke lenger.",
"Reasons might be:" : "Mulige årsaker:",
"the item was removed" : "elementet er fjernet",
"the link expired" : "lenken er utløpt",
"sharing is disabled" : "deling er deaktivert",
"For more info, please ask the person who sent this link." : "For mer informasjon, spør personen som sendte lenken.",
- "Add to your ownCloud" : "Legg til i din ownCloud",
+ "Add to your Nextcloud" : "Legg til i din Nextcloud",
"Download" : "Last ned",
"Download %s" : "Last ned %s",
- "Direct link" : "Direkte lenke"
+ "Direct link" : "Direkte lenke",
+ "Upload files to %s" : "Last opp filer til %s",
+ "Select or drop files" : "Velg eller slipp filer",
+ "Uploading files…" : "Laster opp filer...",
+ "Uploaded files:" : "Opplastede filer:",
+ "Server to server sharing is not enabled on this server" : "Tjener til tjenerdeling er ikke aktivert på denne tjeneren",
+ "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.",
+ "Not allowed to create a federated share with the same user server" : "Kan ikke opprette en forent ressurs med samme brukertjener",
+ "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke-klarert SSL-sertifikat",
+ "Could not authenticate to remote share, password might be wrong" : "Klarte ikke å autentisere mot ekstern deling. Passordet kan være feil",
+ "Storage not valid" : "Lagerplass ikke gyldig",
+ "Couldn't add remote share" : "Klarte ikke å legge til ekstern ressurs",
+ "Federated sharing" : "Sammenknyttet deling",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vil du legge til den eksterne ressursen {name} fra {owner}@{remote}?",
+ "Remote share" : "Ekstern ressurs",
+ "Remote share password" : "Passord for ekstern ressurs",
+ "Cancel" : "Avbryt",
+ "Add remote share" : "Legg til ekstern ressurs",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Ingen Nextcloud-installasjon (7 eller høyere) funnet på {remote}",
+ "Invalid ownCloud url" : "Ugyldig Nextcloud url",
+ "You received \"/%2$s\" as a remote share from %1$s" : "Du mottok \"/%2$s\" som en fjerndeling %1$s",
+ "Accept" : "Aksepter",
+ "Decline" : "Avslå",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky, se %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky",
+ "Federated Cloud Sharing" : "Sammenknyttet skydeling",
+ "Open documentation" : "Åpne dokumentasjonen",
+ "Allow users on this server to send shares to other servers" : "Tillat brukere på denne tjeneren å sende delinger til andre tjenere",
+ "Allow users on this server to receive shares from other servers" : "Tillat brukere på denne tjeneren å motta delinger fra andre tjenere",
+ "Federated Cloud" : "Sammenknyttet sky",
+ "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:",
+ "Share it:" : "Del:",
+ "Add to your website" : "Legg på nettsiden din",
+ "Share with me via Nextcloud" : "Del med meg via Nextcloud",
+ "HTML Code:" : "HTML kode:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/nb_NO.json b/apps/files_sharing/l10n/nb_NO.json
index b0691ad22a3..74a6ca611cc 100644
--- a/apps/files_sharing/l10n/nb_NO.json
+++ b/apps/files_sharing/l10n/nb_NO.json
@@ -1,11 +1,4 @@
{ "translations": {
- "Server to server sharing is not enabled on this server" : "Server til server-deling er ikke aktivert på denne serveren",
- "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.",
- "Not allowed to create a federated share with the same user server" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme bruker-serveren",
- "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke-klarert SSL-sertifikat",
- "Could not authenticate to remote share, password might be wrong" : "Klarte ikke å autentisere mot ekstern deling. Passordet kan være feil",
- "Storage not valid" : "Lagerplass ikke gyldig",
- "Couldn't add remote share" : "Klarte ikke å legge til ekstern deling",
"Shared with you" : "Delt med deg",
"Shared with others" : "Delt med andre",
"Shared by link" : "Delt med lenke",
@@ -15,16 +8,36 @@
"Files and folders you share will show up here" : "Filer og mapper som du deler vil bli vist her",
"No shared links" : "Ingen delte lenker",
"Files and folders you share by link will show up here" : "Filer og mapper som du deler med lenke vil bli vist her",
- "Do you want to add the remote share {name} from {owner}@{remote}?" : "Ønsker du å legge til ekstern deling {name} fra {owner}@{remote}?",
- "Remote share" : "Ekstern deling",
- "Remote share password" : "Passord for ekstern deling",
- "Cancel" : "Avbryt",
- "Add remote share" : "Legg til ekstern deling",
"You can upload into this folder" : "Du kan laste opp til denne mappen",
+ "No compatible server found at {remote}" : "Ingen kompatibel tjener ble funnet på {remote}",
+ "Invalid server URL" : "Ugyldig tjener adresse",
+ "Failed to add the public link to your Nextcloud" : "Feil oppstod under oppretting av offentlig lenke til din Nextcloud",
+ "No expiration date set" : "Ingen utløpsdato er satt",
"Shared by" : "Delt av",
"Sharing" : "Deling",
+ "Wrong share ID, share doesn't exist" : "Feil ressurs ID, ressursen finnes ikke",
+ "could not delete share" : "kunne ikke slette ressursen",
+ "Could not delete share" : "Kunne ikke slette ressursen",
+ "Please specify a file or folder path" : "Vennligst oppgi en fil eller mappesti",
+ "Wrong path, file/folder doesn't exist" : "Feil filbane, filen/mappen finnes ikke",
+ "Could not create share" : "Kunne ikke opprette ressurs",
+ "invalid permissions" : "Ugyldige rettigheter",
+ "Please specify a valid user" : "Vennligst oppgi en gyldig bruker",
+ "Group sharing is disabled by the administrator" : "Gruppedeling er deaktivert av administratoren",
+ "Please specify a valid group" : "Vennligst oppgi en gyldig gruppe",
+ "Public link sharing is disabled by the administrator" : "Offentlig deling er deaktivert av administratoren",
+ "Public upload disabled by the administrator" : "Offentlig opplasting er deaktivert av administratoren",
+ "Public upload is only possible for publicly shared folders" : "Offentlig opplasting er kun mulig i offentlig delte mapper",
+ "Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD",
+ "Sharing %s failed because the back end does not allow shares from type %s" : "Deling av %s feilet på grunn av at tjeneren ikke tillater deling av filtypen %s",
+ "Unknown share type" : "Ukjent ressurstype",
+ "Not a directory" : "Ikke en mappe",
+ "Could not lock path" : "Kunne ikke låse sti",
+ "Wrong or no update parameter given" : "Feil eller ingen parametre for oppdatering er angitt",
+ "Can't change permissions for public share links" : "Kan ikke endre rettigheter for offentlige lenker",
+ "Cannot increase permissions" : "Kan ikke øke tillatelser",
"A file or folder has been <strong>shared</strong>" : "En fil eller mappe ble <strong>delt</strong>",
- "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen server</strong>",
+ "A file or folder was shared from <strong>another server</strong>" : "En fil eller mappe ble delt fra <strong>en annen tjener</strong>",
"A public shared file or folder was <strong>downloaded</strong>" : "En offentlig delt fil eller mappe ble <strong>lastet ned</strong>",
"You received a new remote share %2$s from %1$s" : "Du mottok en ny ekstern deling %2$s fra %1$s",
"You received a new remote share from %s" : "Du mottok en ny ekstern deling fra %s",
@@ -66,21 +79,57 @@
"Public link of %2$s expired" : "Offentlig lenke til %2$s er utløpt",
"Shared by %2$s" : "Delt av %2$s",
"Shares" : "Delinger",
+ "Share API is disabled" : "Deling API er deaktivert",
"This share is password-protected" : "Denne delingen er passordbeskyttet",
"The password is wrong. Try again." : "Passordet er feil. Prøv på nytt.",
"Password" : "Passord",
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
"Name" : "Navn",
"Share time" : "Delingstidspunkt",
+ "Expiration date" : "Utløpsdato",
"Sorry, this link doesn’t seem to work anymore." : "Beklager, denne lenken ser ikke ut til å virke lenger.",
"Reasons might be:" : "Mulige årsaker:",
"the item was removed" : "elementet er fjernet",
"the link expired" : "lenken er utløpt",
"sharing is disabled" : "deling er deaktivert",
"For more info, please ask the person who sent this link." : "For mer informasjon, spør personen som sendte lenken.",
- "Add to your ownCloud" : "Legg til i din ownCloud",
+ "Add to your Nextcloud" : "Legg til i din Nextcloud",
"Download" : "Last ned",
"Download %s" : "Last ned %s",
- "Direct link" : "Direkte lenke"
+ "Direct link" : "Direkte lenke",
+ "Upload files to %s" : "Last opp filer til %s",
+ "Select or drop files" : "Velg eller slipp filer",
+ "Uploading files…" : "Laster opp filer...",
+ "Uploaded files:" : "Opplastede filer:",
+ "Server to server sharing is not enabled on this server" : "Tjener til tjenerdeling er ikke aktivert på denne tjeneren",
+ "The mountpoint name contains invalid characters." : "Navnet på oppkoblingspunktet inneholder ugyldige tegn.",
+ "Not allowed to create a federated share with the same user server" : "Kan ikke opprette en forent ressurs med samme brukertjener",
+ "Invalid or untrusted SSL certificate" : "Ugyldig eller ikke-klarert SSL-sertifikat",
+ "Could not authenticate to remote share, password might be wrong" : "Klarte ikke å autentisere mot ekstern deling. Passordet kan være feil",
+ "Storage not valid" : "Lagerplass ikke gyldig",
+ "Couldn't add remote share" : "Klarte ikke å legge til ekstern ressurs",
+ "Federated sharing" : "Sammenknyttet deling",
+ "Do you want to add the remote share {name} from {owner}@{remote}?" : "Vil du legge til den eksterne ressursen {name} fra {owner}@{remote}?",
+ "Remote share" : "Ekstern ressurs",
+ "Remote share password" : "Passord for ekstern ressurs",
+ "Cancel" : "Avbryt",
+ "Add remote share" : "Legg til ekstern ressurs",
+ "No ownCloud installation (7 or higher) found at {remote}" : "Ingen Nextcloud-installasjon (7 eller høyere) funnet på {remote}",
+ "Invalid ownCloud url" : "Ugyldig Nextcloud url",
+ "You received \"/%2$s\" as a remote share from %1$s" : "Du mottok \"/%2$s\" som en fjerndeling %1$s",
+ "Accept" : "Aksepter",
+ "Decline" : "Avslå",
+ "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky, se %s",
+ "Share with me through my #ownCloud Federated Cloud ID" : "Del med meg gjennom min #Nextcloud ID for sammenknyttet sky",
+ "Federated Cloud Sharing" : "Sammenknyttet skydeling",
+ "Open documentation" : "Åpne dokumentasjonen",
+ "Allow users on this server to send shares to other servers" : "Tillat brukere på denne tjeneren å sende delinger til andre tjenere",
+ "Allow users on this server to receive shares from other servers" : "Tillat brukere på denne tjeneren å motta delinger fra andre tjenere",
+ "Federated Cloud" : "Sammenknyttet sky",
+ "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:",
+ "Share it:" : "Del:",
+ "Add to your website" : "Legg på nettsiden din",
+ "Share with me via Nextcloud" : "Del med meg via Nextcloud",
+ "HTML Code:" : "HTML kode:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_trashbin/l10n/ar.js b/apps/files_trashbin/l10n/ar.js
index 8b78e9e017a..563ac419435 100644
--- a/apps/files_trashbin/l10n/ar.js
+++ b/apps/files_trashbin/l10n/ar.js
@@ -9,7 +9,10 @@ OC.L10N.register(
"Delete permanently" : "حذف بشكل دائم",
"Error" : "خطأ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
+ "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" : "سوف تكون قادر على استعادة الملفات المحذوفة من هنا",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
"Select all" : "تحديد الكل ",
"Name" : "اسم",
diff --git a/apps/files_trashbin/l10n/ar.json b/apps/files_trashbin/l10n/ar.json
index ac3552d79af..893a27b393b 100644
--- a/apps/files_trashbin/l10n/ar.json
+++ b/apps/files_trashbin/l10n/ar.json
@@ -7,7 +7,10 @@
"Delete permanently" : "حذف بشكل دائم",
"Error" : "خطأ",
"This operation is forbidden" : "هذة العملية ممنوعة ",
+ "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" : "سوف تكون قادر على استعادة الملفات المحذوفة من هنا",
"No entries found in this folder" : "لا يوجد مدخلات في هذا المجلد ",
"Select all" : "تحديد الكل ",
"Name" : "اسم",
diff --git a/apps/systemtags/css/systemtagsfilelist.css b/apps/systemtags/css/systemtagsfilelist.css
index e8fb665e26b..2da8cd40012 100644
--- a/apps/systemtags/css/systemtagsfilelist.css
+++ b/apps/systemtags/css/systemtagsfilelist.css
@@ -27,3 +27,13 @@
.nav-icon-systemtagsfilter {
background-image: url('../img/tag.svg');
}
+
+#app-sidebar .mainFileInfoView .tag-label {
+ cursor: pointer;
+ padding: 13px;
+}
+
+#app-sidebar .mainFileInfoView .icon-tag {
+ opacity: .5;
+ vertical-align: middle;
+}
diff --git a/apps/systemtags/img/tag.svg b/apps/systemtags/img/tag.svg
index 293a7f5be9c..d95ddbcc5a0 100644
--- a/apps/systemtags/img/tag.svg
+++ b/apps/systemtags/img/tag.svg
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0">
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" viewBox="0 0 16 16">
<rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/>
<path d="m6.1861 0.96121-4.807 0.01316c-0.27161 0-0.34656 0.20987-0.34703 0.34604l-0.015132 4.8017 8.7232 8.7222c0.19688 0.19829 0.51234 0.19697 0.7092 0l4.4569-4.4569c0.19672-0.19688 0.19895-0.51327 0.002-0.71024l-0.0011 0.00876-8.3668-8.3668-0.3541-0.35417zm-2.1669 1.8522a1.1438 1.1438 0 0 1 1.144 1.144 1.1438 1.1438 0 0 1 -1.144 1.144 1.1438 1.1438 0 0 1 -1.144 -1.144 1.1438 1.1438 0 0 1 1.144 -1.144z"/>
</svg>
diff --git a/apps/systemtags/js/systemtagsinfoview.js b/apps/systemtags/js/systemtagsinfoview.js
index a7320a3956f..ce41bc504e2 100644
--- a/apps/systemtags/js/systemtagsinfoview.js
+++ b/apps/systemtags/js/systemtagsinfoview.js
@@ -37,6 +37,8 @@
*/
_inputView: null,
+ _toggleHandle: null,
+
initialize: function(options) {
var self = this;
options = options || {};
@@ -58,6 +60,9 @@
this._inputView.on('select', this._onSelectTag, this);
this._inputView.on('deselect', this._onDeselectTag, this);
+
+ this._toggleHandle = $('<span>').addClass('tag-label').text(t('systemtags', 'Tags'));
+ this._toggleHandle.prepend($('<span>').addClass('icon icon-tag'));
},
/**
@@ -118,11 +123,19 @@
this.selectedTagsCollection.fetch({
success: function(collection) {
collection.fetched = true;
- self._inputView.setData(collection.map(modelToSelection));
- self.$el.removeClass('hidden');
+
+ var appliedTags = collection.map(modelToSelection);
+ self._inputView.setData(appliedTags);
+
+ if (appliedTags.length !== 0) {
+ self.$el.removeClass('hidden');
+ } else {
+ self.$el.addClass('hidden');
+ }
}
});
}
+
this.$el.addClass('hidden');
},
@@ -130,12 +143,23 @@
* Renders this details view
*/
render: function() {
+ var self = this;
+
this.$el.append(this._inputView.$el);
this._inputView.render();
+
+ $('#app-sidebar').find('.mainFileInfoView .file-details').append(this._toggleHandle);
+ this._toggleHandle.off('click');
+ this._toggleHandle.on('click', function () {
+ console.log('toggle');
+ console.log(self.$el);
+ self.$el.toggleClass('hidden');
+ });
},
remove: function() {
this._inputView.remove();
+ this._toggleHandle.remove();
}
});
diff --git a/apps/systemtags/l10n/nb_NO.js b/apps/systemtags/l10n/nb_NO.js
index 06ac7b1d52c..cdf235ca240 100644
--- a/apps/systemtags/l10n/nb_NO.js
+++ b/apps/systemtags/l10n/nb_NO.js
@@ -2,22 +2,39 @@ OC.L10N.register(
"systemtags",
{
"Tags" : "Merkelapper",
+ "Update" : "Oppdater",
+ "Create" : "Opprett",
+ "Select tag…" : "Velg merkelapp...",
"Tagged files" : "Merkede filer",
"Select tags to filter by" : "Velg merkelapper å filtrere på",
"Please select tags to filter by" : "Vennligst velg merkelapper å filtrere på",
"No files found for the selected tags" : "Ingen filer funnet for de valgte merkelappene",
"<strong>System tags</strong> for a file have been modified" : "<strong>System-merkelapper</strong> for en fil er endret",
+ "You assigned system tag %3$s" : "Du tildelte system merkelappen %3$s",
"%1$s assigned system tag %3$s" : "%1$s festet system-merkelapp %3$s",
+ "You unassigned system tag %3$s" : "Du tildelte system merkelappen %3$s",
"%1$s unassigned system tag %3$s" : "%1$s fjernet system-merkelapp %3$s",
+ "You created system tag %2$s" : "Du opprettet system merkelappen %2$s",
"%1$s created system tag %2$s" : "%1$s opprettet system-merkelapp %2$s",
+ "You deleted system tag %2$s" : "Du slettet system merkelappen %2$s",
"%1$s deleted system tag %2$s" : "%1$s slettet system-merkelapp %2$s",
+ "You updated system tag %3$s to %2$s" : "Du oppdaterte system merkelapp %3$s til %2$s",
"%1$s updated system tag %3$s to %2$s" : "%1$s oppdaterte system-merkelapp %3$s til %2$s",
+ "You assigned system tag %3$s to %2$s" : "Du tildelte system merkelappen %3$s to %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s festet system-merkelapp %3$s på %2$s",
+ "You unassigned system tag %3$s from %2$s" : "Du fjernet system merkelappen %3$s fra %2$s",
"%1$s unassigned system tag %3$s from %2$s" : "%1$s fjernet system-merkelapp %3$s fra %2$s",
+ "%s (restricted)" : "%s (begrenset)",
"%s (invisible)" : "%s (usynlig)",
+ "Collaborative tags" : "Felles merkelapper",
+ "Name" : "Navn",
+ "Delete" : "Slett",
+ "Public" : "Offentlig",
+ "Restricted" : "Begrenset",
+ "Invisible" : "Usynlig",
+ "Reset" : "Tilbakestill",
"No files in here" : "Ingen filer her",
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
- "Name" : "Navn",
"Size" : "Størrelse",
"Modified" : "Endret"
},
diff --git a/apps/systemtags/l10n/nb_NO.json b/apps/systemtags/l10n/nb_NO.json
index 35fd6643a9f..e9402dd4d24 100644
--- a/apps/systemtags/l10n/nb_NO.json
+++ b/apps/systemtags/l10n/nb_NO.json
@@ -1,21 +1,38 @@
{ "translations": {
"Tags" : "Merkelapper",
+ "Update" : "Oppdater",
+ "Create" : "Opprett",
+ "Select tag…" : "Velg merkelapp...",
"Tagged files" : "Merkede filer",
"Select tags to filter by" : "Velg merkelapper å filtrere på",
"Please select tags to filter by" : "Vennligst velg merkelapper å filtrere på",
"No files found for the selected tags" : "Ingen filer funnet for de valgte merkelappene",
"<strong>System tags</strong> for a file have been modified" : "<strong>System-merkelapper</strong> for en fil er endret",
+ "You assigned system tag %3$s" : "Du tildelte system merkelappen %3$s",
"%1$s assigned system tag %3$s" : "%1$s festet system-merkelapp %3$s",
+ "You unassigned system tag %3$s" : "Du tildelte system merkelappen %3$s",
"%1$s unassigned system tag %3$s" : "%1$s fjernet system-merkelapp %3$s",
+ "You created system tag %2$s" : "Du opprettet system merkelappen %2$s",
"%1$s created system tag %2$s" : "%1$s opprettet system-merkelapp %2$s",
+ "You deleted system tag %2$s" : "Du slettet system merkelappen %2$s",
"%1$s deleted system tag %2$s" : "%1$s slettet system-merkelapp %2$s",
+ "You updated system tag %3$s to %2$s" : "Du oppdaterte system merkelapp %3$s til %2$s",
"%1$s updated system tag %3$s to %2$s" : "%1$s oppdaterte system-merkelapp %3$s til %2$s",
+ "You assigned system tag %3$s to %2$s" : "Du tildelte system merkelappen %3$s to %2$s",
"%1$s assigned system tag %3$s to %2$s" : "%1$s festet system-merkelapp %3$s på %2$s",
+ "You unassigned system tag %3$s from %2$s" : "Du fjernet system merkelappen %3$s fra %2$s",
"%1$s unassigned system tag %3$s from %2$s" : "%1$s fjernet system-merkelapp %3$s fra %2$s",
+ "%s (restricted)" : "%s (begrenset)",
"%s (invisible)" : "%s (usynlig)",
+ "Collaborative tags" : "Felles merkelapper",
+ "Name" : "Navn",
+ "Delete" : "Slett",
+ "Public" : "Offentlig",
+ "Restricted" : "Begrenset",
+ "Invisible" : "Usynlig",
+ "Reset" : "Tilbakestill",
"No files in here" : "Ingen filer her",
"No entries found in this folder" : "Ingen oppføringer funnet i denne mappen",
- "Name" : "Navn",
"Size" : "Størrelse",
"Modified" : "Endret"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/apps/twofactor_backupcodes/l10n/cs_CZ.js b/apps/twofactor_backupcodes/l10n/cs_CZ.js
index 150310ae773..346fc3ab1ca 100644
--- a/apps/twofactor_backupcodes/l10n/cs_CZ.js
+++ b/apps/twofactor_backupcodes/l10n/cs_CZ.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Generate backup codes" : "Vytvořit záložní kódy",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Záložní kódy byly vytvořeny. {{used}} z {{total}} kódů bylo využito.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Zde jsou vaše záložní kódy. Kódy si prosím uložte a/nebo vytiskněte, protože je nebude možné později zobrazit.",
"Save backup codes" : "Uložit záložní kódy",
"Print backup codes" : "Vytisknout záložní kódy",
"Regenerate backup codes" : "Vytvořit nové záložní kódy",
@@ -10,6 +11,7 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
"Nextcloud backup codes" : "Nextcloud záložní kódy",
"Backup code" : "Záložní kód",
- "Use backup code" : "Použít záložní kód"
+ "Use backup code" : "Použít záložní kód",
+ "Second-factor backup codes" : "Dvoufázové záložní kódy"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/twofactor_backupcodes/l10n/cs_CZ.json b/apps/twofactor_backupcodes/l10n/cs_CZ.json
index fea5e11f1e1..a397a5ba8db 100644
--- a/apps/twofactor_backupcodes/l10n/cs_CZ.json
+++ b/apps/twofactor_backupcodes/l10n/cs_CZ.json
@@ -1,6 +1,7 @@
{ "translations": {
"Generate backup codes" : "Vytvořit záložní kódy",
"Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Záložní kódy byly vytvořeny. {{used}} z {{total}} kódů bylo využito.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Zde jsou vaše záložní kódy. Kódy si prosím uložte a/nebo vytiskněte, protože je nebude možné později zobrazit.",
"Save backup codes" : "Uložit záložní kódy",
"Print backup codes" : "Vytisknout záložní kódy",
"Regenerate backup codes" : "Vytvořit nové záložní kódy",
@@ -8,6 +9,7 @@
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
"Nextcloud backup codes" : "Nextcloud záložní kódy",
"Backup code" : "Záložní kód",
- "Use backup code" : "Použít záložní kód"
+ "Use backup code" : "Použít záložní kód",
+ "Second-factor backup codes" : "Dvoufázové záložní kódy"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/de_DE.js b/apps/twofactor_backupcodes/l10n/de_DE.js
index 498675698f6..2405813cca0 100644
--- a/apps/twofactor_backupcodes/l10n/de_DE.js
+++ b/apps/twofactor_backupcodes/l10n/de_DE.js
@@ -6,9 +6,12 @@ OC.L10N.register(
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese, da diese Codes später nicht mehr gelesen werden können",
"Save backup codes" : "Backup-Codes speichern",
"Print backup codes" : "Backup-Codes drucken",
+ "Regenerate backup codes" : "Backup-Codes erneuern",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern werde die alten Codes automatisch ungültig.",
"An error occurred while generating your backup codes" : "Beim Erstellen Ihrer Backup-Codes ist ein Fehler aufgetreten",
"Nextcloud backup codes" : "Nextcloud Backup-Codes",
"Backup code" : "Backup-Code",
- "Use backup code" : "Verwende Backup-Code"
+ "Use backup code" : "Verwende Backup-Code",
+ "Second-factor backup codes" : "Zweitfaktor Backup-Codes"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/de_DE.json b/apps/twofactor_backupcodes/l10n/de_DE.json
index fcc4a672513..5bd7b6b7667 100644
--- a/apps/twofactor_backupcodes/l10n/de_DE.json
+++ b/apps/twofactor_backupcodes/l10n/de_DE.json
@@ -4,9 +4,12 @@
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese, da diese Codes später nicht mehr gelesen werden können",
"Save backup codes" : "Backup-Codes speichern",
"Print backup codes" : "Backup-Codes drucken",
+ "Regenerate backup codes" : "Backup-Codes erneuern",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern werde die alten Codes automatisch ungültig.",
"An error occurred while generating your backup codes" : "Beim Erstellen Ihrer Backup-Codes ist ein Fehler aufgetreten",
"Nextcloud backup codes" : "Nextcloud Backup-Codes",
"Backup code" : "Backup-Code",
- "Use backup code" : "Verwende Backup-Code"
+ "Use backup code" : "Verwende Backup-Code",
+ "Second-factor backup codes" : "Zweitfaktor Backup-Codes"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/es.js b/apps/twofactor_backupcodes/l10n/es.js
new file mode 100644
index 00000000000..5769dc6bedf
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es.js
@@ -0,0 +1,16 @@
+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. Ha usado {{used}} de {{total}}.",
+ "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. Por favor guardelos y/o imprimalos ya que no podrá optenerlos nuevamente 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 regenera los códigos de respaldo automaticamente invalidara los antiguos.",
+ "An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban los códigos de respaldo.",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Usar código de respaldo"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/es.json b/apps/twofactor_backupcodes/l10n/es.json
new file mode 100644
index 00000000000..6597f9dae85
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/es.json
@@ -0,0 +1,14 @@
+{ "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. Ha usado {{used}} de {{total}}.",
+ "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. Por favor guardelos y/o imprimalos ya que no podrá optenerlos nuevamente 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 regenera los códigos de respaldo automaticamente invalidara los antiguos.",
+ "An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban los códigos de respaldo.",
+ "Nextcloud backup codes" : "Códigos de respaldo de Nextcloud",
+ "Backup code" : "Código de respaldo",
+ "Use backup code" : "Usar código de respaldo"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/fr.js b/apps/twofactor_backupcodes/l10n/fr.js
new file mode 100644
index 00000000000..89c7420b867
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/fr.js
@@ -0,0 +1,14 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Générer des codes de récupération",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Les codes de récupération ont été générés. {{used}} codes sur {{total}} ont été utilisés.",
+ "Save backup codes" : "Sauvegarder les codes de récupération",
+ "Print backup codes" : "Imprimer les codes de récupération",
+ "Regenerate backup codes" : "Régénérer les codes de récupération",
+ "An error occurred while generating your backup codes" : "Une erreur est survenue lors de la génération de vos codes de récupération",
+ "Nextcloud backup codes" : "Codes de récupération Nextcloud",
+ "Backup code" : "Code de récupération",
+ "Use backup code" : "Utiliser un code de récupération"
+},
+"nplurals=2; plural=(n > 1);");
diff --git a/apps/twofactor_backupcodes/l10n/fr.json b/apps/twofactor_backupcodes/l10n/fr.json
new file mode 100644
index 00000000000..9d7dbf03e5d
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/fr.json
@@ -0,0 +1,12 @@
+{ "translations": {
+ "Generate backup codes" : "Générer des codes de récupération",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Les codes de récupération ont été générés. {{used}} codes sur {{total}} ont été utilisés.",
+ "Save backup codes" : "Sauvegarder les codes de récupération",
+ "Print backup codes" : "Imprimer les codes de récupération",
+ "Regenerate backup codes" : "Régénérer les codes de récupération",
+ "An error occurred while generating your backup codes" : "Une erreur est survenue lors de la génération de vos codes de récupération",
+ "Nextcloud backup codes" : "Codes de récupération Nextcloud",
+ "Backup code" : "Code de récupération",
+ "Use backup code" : "Utiliser un code de récupération"
+},"pluralForm" :"nplurals=2; plural=(n > 1);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/is.js b/apps/twofactor_backupcodes/l10n/is.js
new file mode 100644
index 00000000000..cd8a2711a56
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/is.js
@@ -0,0 +1,17 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Útbúa öryggisafritunarkóða",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Öryggisafritunarkóðar hafa verið útbúnir. {{used}} af {{total}} kóðum hafa verið notaðir.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Þetta eru öryggisafritunarkóðarnir þínir. Vistaðu þá og/eða prentaðu þá út, því þú munt ekki geta lesið þá aftur síðar í ferlinu",
+ "Save backup codes" : "Vista öryggisafritunarkóða",
+ "Print backup codes" : "Prenta öryggisafritunarkóða",
+ "Regenerate backup codes" : "Endurnýja öryggisafritunarkóða",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Ef þú endurnýjar öryggisafritunarkóða, gerir þú sjálfkrafa eldri kóða ógilda.",
+ "An error occurred while generating your backup codes" : "Villa kom upp við að búa til öryggisafritunarkóðana þína",
+ "Nextcloud backup codes" : "Nextcloud öryggisafritunarkóðar",
+ "Backup code" : "Öryggisafritunarkóði",
+ "Use backup code" : "Nota öryggisafritunarkóða",
+ "Second-factor backup codes" : "Tveggja-þrepa öryggisafritunarkóðar"
+},
+"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/twofactor_backupcodes/l10n/is.json b/apps/twofactor_backupcodes/l10n/is.json
new file mode 100644
index 00000000000..da8f39b0da0
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/is.json
@@ -0,0 +1,15 @@
+{ "translations": {
+ "Generate backup codes" : "Útbúa öryggisafritunarkóða",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Öryggisafritunarkóðar hafa verið útbúnir. {{used}} af {{total}} kóðum hafa verið notaðir.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Þetta eru öryggisafritunarkóðarnir þínir. Vistaðu þá og/eða prentaðu þá út, því þú munt ekki geta lesið þá aftur síðar í ferlinu",
+ "Save backup codes" : "Vista öryggisafritunarkóða",
+ "Print backup codes" : "Prenta öryggisafritunarkóða",
+ "Regenerate backup codes" : "Endurnýja öryggisafritunarkóða",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Ef þú endurnýjar öryggisafritunarkóða, gerir þú sjálfkrafa eldri kóða ógilda.",
+ "An error occurred while generating your backup codes" : "Villa kom upp við að búa til öryggisafritunarkóðana þína",
+ "Nextcloud backup codes" : "Nextcloud öryggisafritunarkóðar",
+ "Backup code" : "Öryggisafritunarkóði",
+ "Use backup code" : "Nota öryggisafritunarkóða",
+ "Second-factor backup codes" : "Tveggja-þrepa öryggisafritunarkóðar"
+},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
+} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/nb_NO.js b/apps/twofactor_backupcodes/l10n/nb_NO.js
new file mode 100644
index 00000000000..a18c4bb695f
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/nb_NO.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "twofactor_backupcodes",
+ {
+ "Generate backup codes" : "Generer sikkerhetskopi koder",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Sikkerhetskopi koder har blitt generert. {{used}} av {{total}} koder er brukt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dette er sikkerhetskopi kodene. Vennligst lagre og/eller skriv dem ut siden du ikke vil kunne lese kodene her igjen senere.",
+ "Save backup codes" : "Lagre sikkerhetskopi kodene",
+ "Print backup codes" : "Skriv sikkerhetskopi koder",
+ "Regenerate backup codes" : "Lag sikkerhetskopi koder på nytt",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du regenererer nye sikkerhetskopi kodene vil du automatisk gjøre de gamle kodene ugyldige.",
+ "An error occurred while generating your backup codes" : "En feil oppstod under generering av sikkerhetskopi koder",
+ "Nextcloud backup codes" : "Nextclouds backupkoder",
+ "Backup code" : "Sikkerhetskopi kode",
+ "Use backup code" : "Bruker sikkerhetskopi kode"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/twofactor_backupcodes/l10n/nb_NO.json b/apps/twofactor_backupcodes/l10n/nb_NO.json
new file mode 100644
index 00000000000..136431ac7cd
--- /dev/null
+++ b/apps/twofactor_backupcodes/l10n/nb_NO.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Generate backup codes" : "Generer sikkerhetskopi koder",
+ "Backup codes have been generated. {{used}} of {{total}} codes have been used." : "Sikkerhetskopi koder har blitt generert. {{used}} av {{total}} koder er brukt.",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dette er sikkerhetskopi kodene. Vennligst lagre og/eller skriv dem ut siden du ikke vil kunne lese kodene her igjen senere.",
+ "Save backup codes" : "Lagre sikkerhetskopi kodene",
+ "Print backup codes" : "Skriv sikkerhetskopi koder",
+ "Regenerate backup codes" : "Lag sikkerhetskopi koder på nytt",
+ "If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du regenererer nye sikkerhetskopi kodene vil du automatisk gjøre de gamle kodene ugyldige.",
+ "An error occurred while generating your backup codes" : "En feil oppstod under generering av sikkerhetskopi koder",
+ "Nextcloud backup codes" : "Nextclouds backupkoder",
+ "Backup code" : "Sikkerhetskopi kode",
+ "Use backup code" : "Bruker sikkerhetskopi kode"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/es.js b/apps/updatenotification/l10n/es.js
index 21e1c4a1d47..56e8dab2bad 100644
--- a/apps/updatenotification/l10n/es.js
+++ b/apps/updatenotification/l10n/es.js
@@ -6,6 +6,7 @@ OC.L10N.register(
"Nextcloud core" : "Núcleo de Nextcloud",
"Update for %1$s to version %2$s is available." : "La actualización de %1$s a la versión %2$s está disponible.",
"A new version is available: %s" : "Hay una nueva versión disponible: %s",
+ "Download now" : "Descargar ahora",
"Your version is up to date." : "Su versión está actualizada.",
"Checked on %s" : "Revisado el %s",
"Update channel:" : "Canal de actualización: ",
diff --git a/apps/updatenotification/l10n/es.json b/apps/updatenotification/l10n/es.json
index 4f99be77b7a..a046319aa1b 100644
--- a/apps/updatenotification/l10n/es.json
+++ b/apps/updatenotification/l10n/es.json
@@ -4,6 +4,7 @@
"Nextcloud core" : "Núcleo de Nextcloud",
"Update for %1$s to version %2$s is available." : "La actualización de %1$s a la versión %2$s está disponible.",
"A new version is available: %s" : "Hay una nueva versión disponible: %s",
+ "Download now" : "Descargar ahora",
"Your version is up to date." : "Su versión está actualizada.",
"Checked on %s" : "Revisado el %s",
"Update channel:" : "Canal de actualización: ",
diff --git a/apps/updatenotification/l10n/fr.js b/apps/updatenotification/l10n/fr.js
index 14f7c8c519f..0fa1d3d9620 100644
--- a/apps/updatenotification/l10n/fr.js
+++ b/apps/updatenotification/l10n/fr.js
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Update notifications" : "Notifications de mises à jour",
"{version} is available. Get more information on how to update." : "La version {version} est disponible. Cliquez ici pour plus d'informations sur comment mettre à jour.",
+ "Channel updated" : "Canal de mise à jour modifié",
"Nextcloud core" : "Noyau Nextcloud",
"Update for %1$s to version %2$s is available." : "Une mise à jour de %1$s vers la version %2$s est disponible.",
"A new version is available: %s" : "Une nouvelle version est disponible : %s",
diff --git a/apps/updatenotification/l10n/fr.json b/apps/updatenotification/l10n/fr.json
index 8b9361978ae..7d69b26af4d 100644
--- a/apps/updatenotification/l10n/fr.json
+++ b/apps/updatenotification/l10n/fr.json
@@ -1,6 +1,7 @@
{ "translations": {
"Update notifications" : "Notifications de mises à jour",
"{version} is available. Get more information on how to update." : "La version {version} est disponible. Cliquez ici pour plus d'informations sur comment mettre à jour.",
+ "Channel updated" : "Canal de mise à jour modifié",
"Nextcloud core" : "Noyau Nextcloud",
"Update for %1$s to version %2$s is available." : "Une mise à jour de %1$s vers la version %2$s est disponible.",
"A new version is available: %s" : "Une nouvelle version est disponible : %s",
diff --git a/apps/updatenotification/l10n/hu_HU.js b/apps/updatenotification/l10n/hu_HU.js
index 917ea793106..5a5b720b56b 100644
--- a/apps/updatenotification/l10n/hu_HU.js
+++ b/apps/updatenotification/l10n/hu_HU.js
@@ -14,6 +14,8 @@ OC.L10N.register(
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mindig frissíthetsz az újabb verzióra vagy kísérleti csatornára, de visszafelé sosem frissíthetsz egy jóval stabilabb verzióra.",
"Notify members of the following groups about available updates:" : "A következő csoport tagjainak értesítése az elérhető frissítésekről:",
"Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "A kiválasztott frissítési csatorna dedikált értesítéseket jelenít meg a szerver elavulásakor.",
+ "The selected update channel does not support updates of the server." : "A kiválasztott frissítése csatorna nem támogatja a szerver frissítéseit.",
"Updater" : "Frissítéskezelő"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/hu_HU.json b/apps/updatenotification/l10n/hu_HU.json
index c763a83a7e3..a95b0069d0a 100644
--- a/apps/updatenotification/l10n/hu_HU.json
+++ b/apps/updatenotification/l10n/hu_HU.json
@@ -12,6 +12,8 @@
"You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Mindig frissíthetsz az újabb verzióra vagy kísérleti csatornára, de visszafelé sosem frissíthetsz egy jóval stabilabb verzióra.",
"Notify members of the following groups about available updates:" : "A következő csoport tagjainak értesítése az elérhető frissítésekről:",
"Only notification for app updates are available." : "Csak az értesítő alkalmazás frissítései érhetők el.",
+ "The selected update channel makes dedicated notifications for the server obsolete." : "A kiválasztott frissítési csatorna dedikált értesítéseket jelenít meg a szerver elavulásakor.",
+ "The selected update channel does not support updates of the server." : "A kiválasztott frissítése csatorna nem támogatja a szerver frissítéseit.",
"Updater" : "Frissítéskezelő"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/updatenotification/l10n/nb_NO.js b/apps/updatenotification/l10n/nb_NO.js
index f551c8fcfee..26a292886b4 100644
--- a/apps/updatenotification/l10n/nb_NO.js
+++ b/apps/updatenotification/l10n/nb_NO.js
@@ -1,14 +1,20 @@
OC.L10N.register(
"updatenotification",
{
+ "Update notifications" : "Oppdateringsvarsel",
"{version} is available. Get more information on how to update." : "{version} er tilgjengelig. Få mer informasjon om å oppdatere.",
- "Updated channel" : "Oppdaterte kanal",
- "Updater" : "Oppdaterer",
+ "Channel updated" : "Kanal oppdatert",
+ "Nextcloud core" : "Nextcloud kjerne",
+ "Update for %1$s to version %2$s is available." : "Oppdatering for %1$s til versjon %2$s er tilgjengelig.",
"A new version is available: %s" : "En ny versjon er tilgjengelig: %s",
- "Open updater" : "Åpne oppdaterer",
+ "Download now" : "Last ned nå",
"Your version is up to date." : "Du har nyeste versjon.",
"Checked on %s" : "Sjekket %s",
"Update channel:" : "Oppdateringskanal:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid oppdatere til en nyere versjon / eksperimentell kanal. Men du kan aldri nedgradere til en mer stabil kanal."
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid oppdatere til en nyere versjon / eksperimentell kanal. Men du kan aldri nedgradere til en mer stabil kanal.",
+ "Notify members of the following groups about available updates:" : "Informer medlemmene i følgende grupper om tilgjengelig oppdateringer:",
+ "Only notification for app updates are available." : "Kun varsler for app oppdateringer er tilgjengelig.",
+ "The selected update channel does not support updates of the server." : "Den valgte oppdateringskanalen tilbyr ikke oppdateringer av tjeneren.",
+ "Updater" : "Oppdaterer"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/updatenotification/l10n/nb_NO.json b/apps/updatenotification/l10n/nb_NO.json
index 300bfc69ddd..709a325f6c8 100644
--- a/apps/updatenotification/l10n/nb_NO.json
+++ b/apps/updatenotification/l10n/nb_NO.json
@@ -1,12 +1,18 @@
{ "translations": {
+ "Update notifications" : "Oppdateringsvarsel",
"{version} is available. Get more information on how to update." : "{version} er tilgjengelig. Få mer informasjon om å oppdatere.",
- "Updated channel" : "Oppdaterte kanal",
- "Updater" : "Oppdaterer",
+ "Channel updated" : "Kanal oppdatert",
+ "Nextcloud core" : "Nextcloud kjerne",
+ "Update for %1$s to version %2$s is available." : "Oppdatering for %1$s til versjon %2$s er tilgjengelig.",
"A new version is available: %s" : "En ny versjon er tilgjengelig: %s",
- "Open updater" : "Åpne oppdaterer",
+ "Download now" : "Last ned nå",
"Your version is up to date." : "Du har nyeste versjon.",
"Checked on %s" : "Sjekket %s",
"Update channel:" : "Oppdateringskanal:",
- "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid oppdatere til en nyere versjon / eksperimentell kanal. Men du kan aldri nedgradere til en mer stabil kanal."
+ "You can always update to a newer version / experimental channel. But you can never downgrade to a more stable channel." : "Du kan alltid oppdatere til en nyere versjon / eksperimentell kanal. Men du kan aldri nedgradere til en mer stabil kanal.",
+ "Notify members of the following groups about available updates:" : "Informer medlemmene i følgende grupper om tilgjengelig oppdateringer:",
+ "Only notification for app updates are available." : "Kun varsler for app oppdateringer er tilgjengelig.",
+ "The selected update channel does not support updates of the server." : "Den valgte oppdateringskanalen tilbyr ikke oppdateringer av tjeneren.",
+ "Updater" : "Oppdaterer"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/user_ldap/l10n/nb_NO.js b/apps/user_ldap/l10n/nb_NO.js
index 8536f545afd..02460b94e06 100644
--- a/apps/user_ldap/l10n/nb_NO.js
+++ b/apps/user_ldap/l10n/nb_NO.js
@@ -13,6 +13,7 @@ OC.L10N.register(
" Could not set configuration %s" : "Klarte ikke å sette konfigurasjon %s",
"Action does not exist" : "Aksjonen eksisterer ikke",
"The Base DN appears to be wrong" : "Basis-DN ser ut til å være feil",
+ "Testing configuration…" : "Tester konfigurasjonen...",
"Configuration incorrect" : "Konfigurasjon feil",
"Configuration incomplete" : "Konfigurasjon ufullstendig",
"Configuration OK" : "Konfigurasjon OK",
@@ -22,12 +23,12 @@ OC.L10N.register(
"Please specify the port, it could not be auto-detected." : "Vennligst spesifiser porten. Den kunne ikke påvises automatisk.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Basis-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.",
"Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise basis-DN. Det må skrives inn manuelt.",
- "{nthServer}. Server" : "{nthServer}. server",
+ "{nthServer}. Server" : "{nthServer}. tjener",
"No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt basis-DN. Revider oppsettet.",
"More than 1,000 directory entries available." : "Mer enn 1.000 katalogoppføringer tilgjengelig.",
" entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt basis-DN",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk basis-DN, tilkoblingsoppsett og påloggingsdetaljer.",
- "Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette aktiv tjener-konfigurasjon?",
+ "Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette den aktiver tjenerkonfigurasjon?",
"Confirm Deletion" : "Bekreft sletting",
"Mappings cleared successfully!" : "Tilknytningene ble nullstilt!",
"Error while clearing the mappings." : "Feil ved nullstilling av tilknytningene.",
@@ -45,7 +46,7 @@ OC.L10N.register(
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Det oppstod en feil ved tilkobling til LDAP / AD. Sjekk vertsnavn, portnummer og påloggingsdetaljer.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder %uid mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.",
"Please provide a login name to test against" : "Vennligst oppgi et påloggingsnavn å teste mot",
- "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-serveren ikke støtter memberOf.",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-tjeneren ikke støtter memberOf.",
"_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"],
"_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.",
@@ -72,8 +73,8 @@ OC.L10N.register(
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer filteret som skal brukes når noen prøver å logge inn. %%uid erstatter brukernavnet i innloggingen. Eksempel: \"uid=%%uid\"",
"Test Loginname" : "Test påloggingsnavn",
"Verify settings" : "Sjekk innstillinger",
- "1. Server" : "1. server",
- "%s. Server:" : "%s. server:",
+ "1. Server" : "1. Tjener",
+ "%s. Server:" : "%s. tjener:",
"Add a new and blank configuration" : "Legg til en ny tom konfigurasjon",
"Copy current configuration into new directory binding" : "Kopier gjeldende konfigurasjon til ny katalogbinding",
"Delete the current configuration" : "Slett gjeldende konfigurasjon",
@@ -91,6 +92,7 @@ OC.L10N.register(
"Test Base DN" : "Test basis-DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.",
"Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)",
+ "%s access is limited to users meeting these criteria:" : "%s tilgang er begrenset til brukere som møter følgende kriterier:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De mest vanlige objektklassene for brukere er organizationalPerson, person, user og inetOrgPerson. Kontakt katalogadministratoren hvis du er usikker på hvilken objektklasse du skal velge.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-brukere som skal ha tilgang til %s-instansen.",
"Verify settings and count users" : "Sjekk innstillinger og tell brukere",
@@ -98,7 +100,7 @@ OC.L10N.register(
"Back" : "Tilbake",
"Continue" : "Fortsett",
"LDAP" : "LDAP",
- "Server" : "Server",
+ "Server" : "Tjener",
"Users" : "Brukere",
"Login Attributes" : "Påloggingsattributter",
"Groups" : "Grupper",
@@ -115,7 +117,7 @@ OC.L10N.register(
"Disable Main Server" : "Deaktiver hovedtjeneren",
"Only connect to the replica server." : "Koble til bare replika-tjeneren.",
"Turn off SSL certificate validation." : "Slå av SSL-sertifikat validering",
- "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." : "Ikke anbefalt, bruk kun for testing! Hvis tilkobling bare virker med dette valget, importer LDAP-tjenerens SSL-sertifikat i %s-serveren din.",
+ "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." : "Ikke anbefalt, bruk kun for testing! Hvis tilkobling bare virker med dette valget, importer LDAP-tjenerens SSL-sertifikat i %s-tjeneren din.",
"Cache Time-To-Live" : "Levetid i mellomlager",
"in seconds. A change empties the cache." : "i sekunder. En endring tømmer bufferen.",
"Directory Settings" : "Innstillinger for katalog",
@@ -155,6 +157,7 @@ OC.L10N.register(
"Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP-bruker",
"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." : "Brukernavn brukes til å lagre og tilordne (meta)data. For at brukere skal identifiseres og gjenkjennes presist, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en tilknytning fra brukernavn til LDAP-bruker. Brukernavn som opprettes blir knyttet til LDAP-brukerens UUID. I tillegg mellomlagres DN for å redusere LDAP-kommunikasjon, men det brukes ikke til identifisering. Hvis DN endres vil endringene bli oppdaget. Det interne brukernavnet brukes alle steder. Nullstilling av tilknytningene vil etterlate seg rester overalt. Nullstilling av tilknytningene skjer ikke pr. konfigurasjon, det påvirker alle LDAP-konfigurasjoner! Nullstill aldri tilknytningene i et produksjonsmiljø, kun ved testing eller eksperimentering.",
"Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker",
- "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe"
+ "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe",
+ "Limit %s access to users meeting these criteria:" : "Begrens tilgang til %s for brukere som møter følgende kriterier:"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_ldap/l10n/nb_NO.json b/apps/user_ldap/l10n/nb_NO.json
index 17e899f5dbe..16befb6e4db 100644
--- a/apps/user_ldap/l10n/nb_NO.json
+++ b/apps/user_ldap/l10n/nb_NO.json
@@ -11,6 +11,7 @@
" Could not set configuration %s" : "Klarte ikke å sette konfigurasjon %s",
"Action does not exist" : "Aksjonen eksisterer ikke",
"The Base DN appears to be wrong" : "Basis-DN ser ut til å være feil",
+ "Testing configuration…" : "Tester konfigurasjonen...",
"Configuration incorrect" : "Konfigurasjon feil",
"Configuration incomplete" : "Konfigurasjon ufullstendig",
"Configuration OK" : "Konfigurasjon OK",
@@ -20,12 +21,12 @@
"Please specify the port, it could not be auto-detected." : "Vennligst spesifiser porten. Den kunne ikke påvises automatisk.",
"Base DN could not be auto-detected, please revise credentials, host and port." : "Basis-DN kunne ikke påvises automatisk. Se igjennom pålogginsdetaljer, vertsnavn og portnummer.",
"Could not detect Base DN, please enter it manually." : "Klarte ikke å påvise basis-DN. Det må skrives inn manuelt.",
- "{nthServer}. Server" : "{nthServer}. server",
+ "{nthServer}. Server" : "{nthServer}. tjener",
"No object found in the given Base DN. Please revise." : "Intet objekt funnet i angitt basis-DN. Revider oppsettet.",
"More than 1,000 directory entries available." : "Mer enn 1.000 katalogoppføringer tilgjengelig.",
" entries available within the provided Base DN" : "oppføringer tilgjengelig innenfor angitt basis-DN",
"An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Det oppstod en feil. Sjekk basis-DN, tilkoblingsoppsett og påloggingsdetaljer.",
- "Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette aktiv tjener-konfigurasjon?",
+ "Do you really want to delete the current Server Configuration?" : "Er du sikker på at du vil slette den aktiver tjenerkonfigurasjon?",
"Confirm Deletion" : "Bekreft sletting",
"Mappings cleared successfully!" : "Tilknytningene ble nullstilt!",
"Error while clearing the mappings." : "Feil ved nullstilling av tilknytningene.",
@@ -43,7 +44,7 @@
"A connection error to LDAP / AD occurred, please check host, port and credentials." : "Det oppstod en feil ved tilkobling til LDAP / AD. Sjekk vertsnavn, portnummer og påloggingsdetaljer.",
"The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "Plassholder %uid mangler. Den erstattes av påloggingsnavnet ved spørring mot LDAP / AD.",
"Please provide a login name to test against" : "Vennligst oppgi et påloggingsnavn å teste mot",
- "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-serveren ikke støtter memberOf.",
+ "The group box was disabled, because the LDAP / AD server does not support memberOf." : "Gruppeboksen ble deaktivert fordi LDAP- / AD-tjeneren ikke støtter memberOf.",
"_%s group found_::_%s groups found_" : ["%s gruppe funnet","%s grupper funnet"],
"_%s user found_::_%s users found_" : ["%s bruker funnet","%s brukere funnet"],
"Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Kunne ikke påvise attributt for brukers visningsnavn. Du må selv spesifisere det i avanserte LDAP-innstillinger.",
@@ -70,8 +71,8 @@
"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer filteret som skal brukes når noen prøver å logge inn. %%uid erstatter brukernavnet i innloggingen. Eksempel: \"uid=%%uid\"",
"Test Loginname" : "Test påloggingsnavn",
"Verify settings" : "Sjekk innstillinger",
- "1. Server" : "1. server",
- "%s. Server:" : "%s. server:",
+ "1. Server" : "1. Tjener",
+ "%s. Server:" : "%s. tjener:",
"Add a new and blank configuration" : "Legg til en ny tom konfigurasjon",
"Copy current configuration into new directory binding" : "Kopier gjeldende konfigurasjon til ny katalogbinding",
"Delete the current configuration" : "Slett gjeldende konfigurasjon",
@@ -89,6 +90,7 @@
"Test Base DN" : "Test basis-DN",
"Avoids automatic LDAP requests. Better for bigger setups, but requires some LDAP knowledge." : "Unngår automatiske LDAP-forespørsler. Bedre for store oppsett men krever litt LDAP-kunnskap.",
"Manually enter LDAP filters (recommended for large directories)" : "Legg inn LDAP-filtre manuelt (anbefalt for store kataloger)",
+ "%s access is limited to users meeting these criteria:" : "%s tilgang er begrenset til brukere som møter følgende kriterier:",
"The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De mest vanlige objektklassene for brukere er organizationalPerson, person, user og inetOrgPerson. Kontakt katalogadministratoren hvis du er usikker på hvilken objektklasse du skal velge.",
"The filter specifies which LDAP users shall have access to the %s instance." : "Filteret spesifiserer hvilke LDAP-brukere som skal ha tilgang til %s-instansen.",
"Verify settings and count users" : "Sjekk innstillinger og tell brukere",
@@ -96,7 +98,7 @@
"Back" : "Tilbake",
"Continue" : "Fortsett",
"LDAP" : "LDAP",
- "Server" : "Server",
+ "Server" : "Tjener",
"Users" : "Brukere",
"Login Attributes" : "Påloggingsattributter",
"Groups" : "Grupper",
@@ -113,7 +115,7 @@
"Disable Main Server" : "Deaktiver hovedtjeneren",
"Only connect to the replica server." : "Koble til bare replika-tjeneren.",
"Turn off SSL certificate validation." : "Slå av SSL-sertifikat validering",
- "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." : "Ikke anbefalt, bruk kun for testing! Hvis tilkobling bare virker med dette valget, importer LDAP-tjenerens SSL-sertifikat i %s-serveren din.",
+ "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." : "Ikke anbefalt, bruk kun for testing! Hvis tilkobling bare virker med dette valget, importer LDAP-tjenerens SSL-sertifikat i %s-tjeneren din.",
"Cache Time-To-Live" : "Levetid i mellomlager",
"in seconds. A change empties the cache." : "i sekunder. En endring tømmer bufferen.",
"Directory Settings" : "Innstillinger for katalog",
@@ -153,6 +155,7 @@
"Username-LDAP User Mapping" : "Tilknytning av brukernavn til LDAP-bruker",
"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." : "Brukernavn brukes til å lagre og tilordne (meta)data. For at brukere skal identifiseres og gjenkjennes presist, vil hver LDAP-bruker ha et internt brukernavn. Dette krever en tilknytning fra brukernavn til LDAP-bruker. Brukernavn som opprettes blir knyttet til LDAP-brukerens UUID. I tillegg mellomlagres DN for å redusere LDAP-kommunikasjon, men det brukes ikke til identifisering. Hvis DN endres vil endringene bli oppdaget. Det interne brukernavnet brukes alle steder. Nullstilling av tilknytningene vil etterlate seg rester overalt. Nullstilling av tilknytningene skjer ikke pr. konfigurasjon, det påvirker alle LDAP-konfigurasjoner! Nullstill aldri tilknytningene i et produksjonsmiljø, kun ved testing eller eksperimentering.",
"Clear Username-LDAP User Mapping" : "Nullstill tilknytning av brukernavn til LDAP-bruker",
- "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe"
+ "Clear Groupname-LDAP Group Mapping" : "Nullstill tilknytning av gruppenavn til LDAP-gruppe",
+ "Limit %s access to users meeting these criteria:" : "Begrens tilgang til %s for brukere som møter følgende kriterier:"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/.gitkeep b/apps/workflowengine/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/workflowengine/l10n/.gitkeep
diff --git a/bower.json b/bower.json
index 3aa2cd4b3b2..7dca491e1f9 100644
--- a/bower.json
+++ b/bower.json
@@ -1,7 +1,7 @@
{
- "name": "ownCloud",
- "version": "8.2 pre alpha",
- "homepage": "https://www.owncloud.org",
+ "name": "Nextcloud",
+ "version": "11 alpha",
+ "homepage": "https://www.nextcloud.com",
"license": "AGPL",
"private": true,
"ignore": [
@@ -14,13 +14,13 @@
],
"dependencies": {
"blueimp-md5": "~1.1.0",
- "handlebars": "~1.3.0",
+ "handlebars": "^4.0.5",
"jcrop": "~0.9.12",
"jquery": "~2.2.0",
"jquery-migrate": "~1.4.0",
"jquery-ui": "1.10.0",
"jsTimezoneDetect": "~1.0.5",
- "moment": "~2.10.0",
+ "moment": "^2.15.0",
"select2": "~3.4.8",
"zxcvbn": "*",
"snapjs": "~2.0.0-rc1",
diff --git a/build/integration/features/bootstrap/Sharing.php b/build/integration/features/bootstrap/Sharing.php
index 3a50b1917aa..a4a9b846cf4 100644
--- a/build/integration/features/bootstrap/Sharing.php
+++ b/build/integration/features/bootstrap/Sharing.php
@@ -514,5 +514,28 @@ trait Sharing {
throw new \Exception('Expected the same link share to be returned');
}
}
+
+ /**
+ * @Then The following headers should be set
+ * @param \Behat\Gherkin\Node\TableNode $table
+ * @throws \Exception
+ */
+ public function theFollowingHeadersShouldBeSet(\Behat\Gherkin\Node\TableNode $table) {
+ foreach($table->getTable() as $header) {
+ $headerName = $header[0];
+ $expectedHeaderValue = $header[1];
+ $returnedHeader = $this->response->getHeader($headerName);
+ if($returnedHeader !== $expectedHeaderValue) {
+ throw new \Exception(
+ sprintf(
+ "Expected value '%s' for header '%s', got '%s'",
+ $expectedHeaderValue,
+ $headerName,
+ $returnedHeader
+ )
+ );
+ }
+ }
+ }
}
diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature
index edd599da555..3c769fba3df 100644
--- a/build/integration/features/sharing-v1.feature
+++ b/build/integration/features/sharing-v1.feature
@@ -13,6 +13,8 @@ Feature: sharing
| shareType | 0 |
Then the OCS status code should be "100"
And the HTTP status code should be "200"
+ And The following headers should be set
+ | Content-Security-Policy | default-src 'none' |
Scenario: Creating a share with a group
Given user "user0" exists
diff --git a/build/signed-off-checker.php b/build/signed-off-checker.php
new file mode 100644
index 00000000000..2a9df75b45c
--- /dev/null
+++ b/build/signed-off-checker.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @author Lukas Reschke <lukas@statuscode.ch>
+ *
+ * @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/>.
+ *
+ */
+
+/**
+ * Script to verify that all commits have been signed-off, if a commit doesn't end
+ * with a signed-off message the script is failing.
+ */
+$baseDir = __DIR__ . '/../';
+
+$pullRequestNumber = getenv('DRONE_PULL_REQUEST');
+
+if(!is_string($pullRequestNumber) || $pullRequestNumber === '') {
+ echo("The environment variable DRONE_PULL_REQUEST has no proper value.\n");
+ exit(1);
+}
+
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_URL, 'https://api.github.com/repos/nextcloud/server/pulls/'.$pullRequestNumber.'/commits');
+curl_setopt($ch, CURLOPT_USERAGENT, 'CI for Nextcloud (https://github.com/nextcloud/server)');
+$response = curl_exec($ch);
+curl_close($ch);
+
+$decodedResponse = json_decode($response, true);
+if(!is_array($decodedResponse) || count($decodedResponse) === 0) {
+ echo("Could not decode JSON response from GitHub API.\n");
+ exit(1);
+}
+
+// Get all commits SHAs
+$commits = [];
+
+foreach($decodedResponse as $commit) {
+ if(!isset($commit['sha'])) {
+ echo("No SHA specified in $commit\n");
+ exit(1);
+ }
+ if(!isset($commit['commit']['message'])) {
+ echo("No commit message specified in $commit\n");
+ exit(1);
+ }
+ $commits[$commit['sha']] = $commit['commit']['message'];
+}
+
+if(count($commits) < 1) {
+ echo("Could not read commits.\n");
+ exit(1);
+}
+
+$notSignedCommits = [];
+foreach($commits as $commit => $message) {
+ if($commit === '') {
+ continue;
+ }
+
+ $signOffMessage = false;
+ $commitMessageLines = explode("\n", $message);
+
+ foreach($commitMessageLines as $line) {
+ if(preg_match('/^Signed-off-by: .* <.*@.*>$/', $line)) {
+ echo "$commit is signed-off with \"$line\"\n";
+ $signOffMessage = true;
+ continue;
+ }
+ }
+ if($signOffMessage === true) {
+ continue;
+ }
+
+ $notSignedCommits[] = $commit;
+}
+
+if($notSignedCommits !== []) {
+ echo("\n");
+ echo("Some commits were not signed off!\n");
+ echo("Missing signatures on:\n");
+ foreach ($notSignedCommits as $commit) {
+ echo("- " . $commit . "\n");
+ }
+ echo("Build has failed\n");
+ exit(1);
+} else {
+ exit(0);
+}
+
diff --git a/contribute/HowToApplyALicense.md b/contribute/HowToApplyALicense.md
new file mode 100644
index 00000000000..3ed231a6c1c
--- /dev/null
+++ b/contribute/HowToApplyALicense.md
@@ -0,0 +1,46 @@
+# How to apply a license
+
+Originally Nextcloud was licensed under the GNU AGPLv3 only. From
+June, 16 2016 on we switched to "GNU AGPLv3 or any later version" for
+better long-term maintainability and to make it more secure from a
+legal point of view.
+
+Additionally Nextcloud doesn't require a CLA (Contributor License
+Agreement). The copyright belongs to all the individual
+contributors.
+
+If you modify an existing file, please keep the existing license header as
+it is and just add your copyright notice:
+
+````
+@copyright Copyright (c) <year>, <your name> (<your email address>)
+````
+
+If you create a new file please use this license header:
+
+````
+/**
+ * @copyright Copyright (c) <year>, <your name> (<your email address>)
+ *
+ * @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/>.
+ *
+ */
+````
+
+Additionally we require a Developer Certificate of Origin (DCO), look
+at [CONTRIBUTING.md][contributing] to learn more how to sign your commits.
+
+[contributing]: https://github.com/nextcloud/server/blob/master/CONTRIBUTING.md#sign-your-work
diff --git a/contribute/developer-certificate-of-origin b/contribute/developer-certificate-of-origin
new file mode 100644
index 00000000000..a6bbb9846c3
--- /dev/null
+++ b/contribute/developer-certificate-of-origin
@@ -0,0 +1,35 @@
+Developer Certificate of Origin
+Version 1.1
+
+Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
+660 York Street, Suite 102,
+San Francisco, CA 94110 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+Developer's Certificate of Origin 1.1
+
+By making a contribution to this project, I certify that:
+
+(a) The contribution was created in whole or in part by me and I
+ have the right to submit it under the open source license
+ indicated in the file; or
+
+(b) The contribution is based upon previous work that, to the best
+ of my knowledge, is covered under an appropriate open source
+ license and I have the right under that license to submit that
+ work with modifications, whether created in whole or in part
+ by me, under the same open source license (unless I am
+ permitted to submit under a different license), as indicated
+ in the file; or
+
+(c) The contribution was provided directly to me by some other
+ person who certified (a), (b) or (c) and I have not modified
+ it.
+
+(d) I understand and agree that this project and the contribution
+ are public and that a record of the contribution (including all
+ personal information I submit with it, including my sign-off) is
+ maintained indefinitely and may be redistributed consistent with
+ this project or the open source license(s) involved.
diff --git a/core/Command/Maintenance/UpdateHtaccess.php b/core/Command/Maintenance/UpdateHtaccess.php
index 21850786200..89eeb7ccf5b 100644
--- a/core/Command/Maintenance/UpdateHtaccess.php
+++ b/core/Command/Maintenance/UpdateHtaccess.php
@@ -38,8 +38,12 @@ class UpdateHtaccess extends Command {
}
protected function execute(InputInterface $input, OutputInterface $output) {
- \OC\Setup::updateHtaccess();
- $output->writeln('.htaccess has been updated');
- return 0;
+ if (\OC\Setup::updateHtaccess()) {
+ $output->writeln('.htaccess has been updated');
+ return 0;
+ } else {
+ $output->writeln('<error>Error updating .htaccess file, not enough permissions?</error>');
+ return 1;
+ }
}
}
diff --git a/core/css/apps.css b/core/css/apps.css
index 24865cd6f6d..178f8662811 100644
--- a/core/css/apps.css
+++ b/core/css/apps.css
@@ -601,6 +601,7 @@ em {
/* generic tab styles */
.tabHeaders {
+ display: inline-block;
margin: 15px;
}
.tabHeaders .tabHeader {
diff --git a/core/css/icons.css b/core/css/icons.css
index d1ef86a94d0..45069a23c44 100644
--- a/core/css/icons.css
+++ b/core/css/icons.css
@@ -114,6 +114,13 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
background-image: url('../img/actions/add.svg?v=1');
}
+.icon-audio {
+ background-image: url('../img/actions/audio.svg?v=1');
+}
+.icon-audio-white {
+ background-image: url('../img/actions/audio-white.svg?v=1');
+}
+
.icon-caret {
background-image: url('../img/actions/caret.svg?v=1');
}
@@ -211,6 +218,9 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
.icon-more {
background-image: url('../img/actions/more.svg?v=1');
}
+.icon-more-white {
+ background-image: url('../img/actions/more-white.svg?v=1');
+}
.icon-password {
background-image: url('../img/actions/password.svg?v=1');
@@ -284,6 +294,10 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
background-image: url('../img/actions/starred.svg?v=1');
}
+.icon-tag {
+ background-image: url('../img/actions/tag.svg?v=1');
+}
+
.icon-toggle {
background-image: url('../img/actions/toggle.svg?v=1');
}
@@ -309,6 +323,13 @@ img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-
background-image: url('../img/actions/user.svg?v=1');
}
+.icon-video {
+ background-image: url('../img/actions/video.svg?v=1');
+}
+.icon-video-white {
+ background-image: url('../img/actions/video-white.svg?v=1');
+}
+
.icon-view-close {
background-image: url('../img/actions/view-close.svg?v=1');
}
diff --git a/core/css/inputs.css b/core/css/inputs.css
index ebde986d584..21778cd0ee4 100644
--- a/core/css/inputs.css
+++ b/core/css/inputs.css
@@ -5,6 +5,10 @@ input, textarea, select, button {
font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
}
+.select2-container-multi .select2-choices .select2-search-field input {
+ font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif !important;
+}
+
input[type="text"],
input[type="password"],
input[type="search"],
diff --git a/core/img/actions/audio-white.svg b/core/img/actions/audio-white.svg
new file mode 100644
index 00000000000..dc12a026ad2
--- /dev/null
+++ b/core/img/actions/audio-white.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1">
+ <path d="m8 1c-1.108 0-2 0.892-2 2v4c0 1.108 0.892 2 2 2s2-0.892 2-2v-4c0-1.108-0.892-2-2-2zm-4 4c-0.554 0-1 0.446-1 1v1c0 2.4272 1.7126 4.439 4 4.9v1.1h-2v2h6v-2h-2v-1.1c2.287-0.461 4-2.4728 4-4.9v-1c0-0.554-0.446-1-1-1s-1 0.446-1 1v1c0 1.662-1.338 3-3 3s-3-1.338-3-3v-1c0-0.554-0.446-1-1-1z" fill-rule="evenodd" fill="#fff"/>
+</svg>
diff --git a/core/img/actions/audio.svg b/core/img/actions/audio.svg
new file mode 100644
index 00000000000..9880758e438
--- /dev/null
+++ b/core/img/actions/audio.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1">
+ <path d="m8 1c-1.108 0-2 0.892-2 2v4c0 1.108 0.892 2 2 2s2-0.892 2-2v-4c0-1.108-0.892-2-2-2zm-4 4c-0.554 0-1 0.446-1 1v1c0 2.4272 1.7126 4.439 4 4.9v1.1h-2v2h6v-2h-2v-1.1c2.287-0.461 4-2.4728 4-4.9v-1c0-0.554-0.446-1-1-1s-1 0.446-1 1v1c0 1.662-1.338 3-3 3s-3-1.338-3-3v-1c0-0.554-0.446-1-1-1z" fill-rule="evenodd"/>
+</svg>
diff --git a/core/img/actions/more-white.svg b/core/img/actions/more-white.svg
new file mode 100644
index 00000000000..b0bd1f2ec64
--- /dev/null
+++ b/core/img/actions/more-white.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0">
+ <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/>
+ <path d="m3 6c-1.1046 0-2 0.8954-2 2s0.8954 2 2 2 2-0.8954 2-2-0.8954-2-2-2zm5 0c-1.1046 0-2 0.8954-2 2s0.8954 2 2 2 2-0.8954 2-2-0.8954-2-2-2zm5 0c-1.105 0-2 0.8954-2 2s0.895 2 2 2 2-0.8954 2-2-0.895-2-2-2z" fill-rule="evenodd" fill="#fff"/>
+</svg>
diff --git a/core/img/actions/tag.svg b/core/img/actions/tag.svg
new file mode 100644
index 00000000000..d95ddbcc5a0
--- /dev/null
+++ b/core/img/actions/tag.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" viewBox="0 0 16 16">
+ <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/>
+ <path d="m6.1861 0.96121-4.807 0.01316c-0.27161 0-0.34656 0.20987-0.34703 0.34604l-0.015132 4.8017 8.7232 8.7222c0.19688 0.19829 0.51234 0.19697 0.7092 0l4.4569-4.4569c0.19672-0.19688 0.19895-0.51327 0.002-0.71024l-0.0011 0.00876-8.3668-8.3668-0.3541-0.35417zm-2.1669 1.8522a1.1438 1.1438 0 0 1 1.144 1.144 1.1438 1.1438 0 0 1 -1.144 1.144 1.1438 1.1438 0 0 1 -1.144 -1.144 1.1438 1.1438 0 0 1 1.144 -1.144z"/>
+</svg>
diff --git a/core/img/actions/video-white.svg b/core/img/actions/video-white.svg
new file mode 100644
index 00000000000..0719ef024ed
--- /dev/null
+++ b/core/img/actions/video-white.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1">
+ <path d="m3 3c-1.108 0-2 0.892-2 2v6c0 1.108 0.892 2 2 2h6c1.108 0 2-0.892 2-2v-1.334l4 3.334v-10l-4 3.334v-1.334c0-1.108-0.892-2-2-2z" fill="#fff"/>
+</svg>
diff --git a/core/img/actions/video.svg b/core/img/actions/video.svg
new file mode 100644
index 00000000000..72fab50f0ce
--- /dev/null
+++ b/core/img/actions/video.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1">
+ <path d="m3 3c-1.108 0-2 0.892-2 2v6c0 1.108 0.892 2 2 2h6c1.108 0 2-0.892 2-2v-1.334l4 3.334v-10l-4 3.334v-1.334c0-1.108-0.892-2-2-2z"/>
+</svg>
diff --git a/core/js/js.js b/core/js/js.js
index c7a06b85e53..67487ec979c 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1722,9 +1722,10 @@ function formatDate(timestamp){
* @return {string}
*/
function getURLParameter(name) {
- return decodeURI(
- (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search) || [, null])[1]
- );
+ return decodeURIComponent(
+ (new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(
+ location.search)||[,''])[1].replace(/\+/g, '%20')
+ )||'';
}
/**
diff --git a/core/l10n/el.js b/core/l10n/el.js
index 5bc4c9aab55..ca85cc45ab5 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -15,6 +15,7 @@ OC.L10N.register(
"Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς κωδικού πρόσβασης καθώς το τεκμήριο είναι άκυρο",
"Couldn't reset password because the token is expired" : "Αδυναμία επαναφοράς κωδικού πρόσβασης επειδή το token έχει λήξει",
"Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς γιατί δεν υπάρχει διεύθυνση ηλ. αλληλογραφίας για αυτόν τον χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"%s password reset" : "%s επαναφορά κωδικού πρόσβασης",
"Couldn't send reset email. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"Preparing update" : "Προετοιμασία ενημέρωσης",
@@ -81,7 +82,9 @@ OC.L10N.register(
"Oct." : "Οκτ.",
"Nov." : "Νοε.",
"Dec." : "Δεκ.",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Υπήρξαν προβλήματα κατά τον έλεγχο ακεραιότητας. Περισσότερες πληροφορίες...</a>",
"Settings" : "Ρυθμίσεις",
+ "Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, επαναφόρτωση σε 5 λεπτά",
"Saving..." : "Γίνεται αποθήκευση...",
"Dismiss" : "Απόρριψη",
"seconds ago" : "δευτερόλεπτα πριν",
@@ -128,6 +131,8 @@ OC.L10N.register(
"Expiration" : "Λήξη",
"Expiration date" : "Ημερομηνία λήξης",
"Choose a password for the public link" : "Επιλέξτε κωδικό για τον δημόσιο σύνδεσμο",
+ "Copied!" : "Αντιγράφτηκε!",
+ "Not supported!" : "Δεν υποστηρίζεται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
"Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.",
"Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται",
@@ -154,11 +159,15 @@ OC.L10N.register(
"access control" : "έλεγχος πρόσβασης",
"Could not unshare" : "Δεν μπορεί να γίνει αναίρεση διαμοιρασμού",
"Share details could not be loaded for this item." : "Αδυναμία φόρτωσης λεπτομερειών διαμοιρασμού για αυτό το αντικείμενο.",
+ "No users found for {search}" : "Δεν βρέθηκαν χρήστες για την αναζήτηση {search}",
"An error occurred. Please try again" : "Παρουσιάστηκε σφάλμα. Παρακαλώ δοκιμάστε αργότερα",
"{sharee} (group)" : "{sharee} (ομάδα)",
"Share" : "Διαμοιρασμός",
"Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud",
"Share with users…" : "Διαμοιρασμός με χρήστες...",
+ "Share with users or groups…" : "Διαμοιρασμός με χρήστες και ομάδες ...",
+ "Share with users or remote users…" : "Διαμοιρασμός με χρήστες ή με απομακρυσμένους χρήστες...",
+ "Error removing share" : "Σφάλμα αφαίρεσης κοινόχρηστου",
"Warning" : "Προειδοποίηση",
"Error while sending notification" : "Σφάλμα κατά την αποστολή ειδοποίησης",
"({scope})" : "({scope})",
@@ -177,9 +186,11 @@ OC.L10N.register(
"Hello {name}" : "Γεια σου {name}",
"new" : "νέο",
"_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
+ "Update to {version}" : "Ενημέρωση στην έκδοση {version}",
"An error occurred." : "Παρουσιάστηκε σφάλμα",
"Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
"Continue to Nextcloud" : "Συνέχεια στον Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Η ενημέρωση ήταν επιτυχής. Ανακατεύθυνση στο Nextcloud.",
"Searching other places" : "Έρευνα σε άλλα σημεία.",
"No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} αποτέλεσμα αναζήτησης σε άλλο φάκελο","{count} αποτελέσματα αναζήτησης σε άλλους φακέλους"],
@@ -277,6 +288,8 @@ OC.L10N.register(
"Error favoriting" : "Σφάλμα προσθήκης στα αγαπημένα",
"Error unfavoriting" : "Σφάλμα αφαίρεσης από τα αγαπημένα",
"Couldn't send mail to following users: %s " : "Αδυναμία αποστολής μηνύματος στους ακόλουθους χρήστες: %s",
- "Allow editing" : "Επιτρέπεται η επεξεργασία"
+ "Allow editing" : "Επιτρέπεται η επεξεργασία",
+ "Updating to {version}" : "Ενημέρωση στην έκδοση {version}",
+ "The update was successful. There were warnings." : "Η ενημέρωση ήταν επιτυχής. Υπάρχουν προειδοποιήσεις."
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/el.json b/core/l10n/el.json
index 122432e24d9..79fbbe0bac0 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -13,6 +13,7 @@
"Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς κωδικού πρόσβασης καθώς το τεκμήριο είναι άκυρο",
"Couldn't reset password because the token is expired" : "Αδυναμία επαναφοράς κωδικού πρόσβασης επειδή το token έχει λήξει",
"Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.",
+ "Could not send reset email because there is no email address for this username. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς γιατί δεν υπάρχει διεύθυνση ηλ. αλληλογραφίας για αυτόν τον χρήστη. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"%s password reset" : "%s επαναφορά κωδικού πρόσβασης",
"Couldn't send reset email. Please contact your administrator." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ επικοινωνήστε με το διαχειριστή σας.",
"Preparing update" : "Προετοιμασία ενημέρωσης",
@@ -79,7 +80,9 @@
"Oct." : "Οκτ.",
"Nov." : "Νοε.",
"Dec." : "Δεκ.",
+ "<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Υπήρξαν προβλήματα κατά τον έλεγχο ακεραιότητας. Περισσότερες πληροφορίες...</a>",
"Settings" : "Ρυθμίσεις",
+ "Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, επαναφόρτωση σε 5 λεπτά",
"Saving..." : "Γίνεται αποθήκευση...",
"Dismiss" : "Απόρριψη",
"seconds ago" : "δευτερόλεπτα πριν",
@@ -126,6 +129,8 @@
"Expiration" : "Λήξη",
"Expiration date" : "Ημερομηνία λήξης",
"Choose a password for the public link" : "Επιλέξτε κωδικό για τον δημόσιο σύνδεσμο",
+ "Copied!" : "Αντιγράφτηκε!",
+ "Not supported!" : "Δεν υποστηρίζεται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
"Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.",
"Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται",
@@ -152,11 +157,15 @@
"access control" : "έλεγχος πρόσβασης",
"Could not unshare" : "Δεν μπορεί να γίνει αναίρεση διαμοιρασμού",
"Share details could not be loaded for this item." : "Αδυναμία φόρτωσης λεπτομερειών διαμοιρασμού για αυτό το αντικείμενο.",
+ "No users found for {search}" : "Δεν βρέθηκαν χρήστες για την αναζήτηση {search}",
"An error occurred. Please try again" : "Παρουσιάστηκε σφάλμα. Παρακαλώ δοκιμάστε αργότερα",
"{sharee} (group)" : "{sharee} (ομάδα)",
"Share" : "Διαμοιρασμός",
"Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud",
"Share with users…" : "Διαμοιρασμός με χρήστες...",
+ "Share with users or groups…" : "Διαμοιρασμός με χρήστες και ομάδες ...",
+ "Share with users or remote users…" : "Διαμοιρασμός με χρήστες ή με απομακρυσμένους χρήστες...",
+ "Error removing share" : "Σφάλμα αφαίρεσης κοινόχρηστου",
"Warning" : "Προειδοποίηση",
"Error while sending notification" : "Σφάλμα κατά την αποστολή ειδοποίησης",
"({scope})" : "({scope})",
@@ -175,9 +184,11 @@
"Hello {name}" : "Γεια σου {name}",
"new" : "νέο",
"_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
+ "Update to {version}" : "Ενημέρωση στην έκδοση {version}",
"An error occurred." : "Παρουσιάστηκε σφάλμα",
"Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
"Continue to Nextcloud" : "Συνέχεια στον Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Η ενημέρωση ήταν επιτυχής. Ανακατεύθυνση στο Nextcloud.",
"Searching other places" : "Έρευνα σε άλλα σημεία.",
"No search results in other folders" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλους φακέλους",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} αποτέλεσμα αναζήτησης σε άλλο φάκελο","{count} αποτελέσματα αναζήτησης σε άλλους φακέλους"],
@@ -275,6 +286,8 @@
"Error favoriting" : "Σφάλμα προσθήκης στα αγαπημένα",
"Error unfavoriting" : "Σφάλμα αφαίρεσης από τα αγαπημένα",
"Couldn't send mail to following users: %s " : "Αδυναμία αποστολής μηνύματος στους ακόλουθους χρήστες: %s",
- "Allow editing" : "Επιτρέπεται η επεξεργασία"
+ "Allow editing" : "Επιτρέπεται η επεξεργασία",
+ "Updating to {version}" : "Ενημέρωση στην έκδοση {version}",
+ "The update was successful. There were warnings." : "Η ενημέρωση ήταν επιτυχής. Υπάρχουν προειδοποιήσεις."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/es.js b/core/l10n/es.js
index 51e939f9915..825d773ce19 100644
--- a/core/l10n/es.js
+++ b/core/l10n/es.js
@@ -296,6 +296,7 @@ OC.L10N.register(
"Two-factor authentication" : "Autenticación de dos factores",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada se ha habilitado para tu cuenta. Por favor, autenticar utilizando 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" : "Error mientras validaba su factor segundo",
"You are accessing the server from an untrusted domain." : "Está accediendo al servidor desde un dominio inseguro.",
"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." : "Contacte con su administrador. Si usted es el administrador, configure \"trusted_domains\" en config/config.php. En config/config.sample.php se encuentra un ejemplo para la configuración.",
diff --git a/core/l10n/es.json b/core/l10n/es.json
index e0874557701..1b9e4767a31 100644
--- a/core/l10n/es.json
+++ b/core/l10n/es.json
@@ -294,6 +294,7 @@
"Two-factor authentication" : "Autenticación de dos factores",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "La seguridad mejorada se ha habilitado para tu cuenta. Por favor, autenticar utilizando 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" : "Error mientras validaba su factor segundo",
"You are accessing the server from an untrusted domain." : "Está accediendo al servidor desde un dominio inseguro.",
"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." : "Contacte con su administrador. Si usted es el administrador, configure \"trusted_domains\" en config/config.php. En config/config.sample.php se encuentra un ejemplo para la configuración.",
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index 37f2c823070..9b1f6ae4a32 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -296,6 +296,7 @@ OC.L10N.register(
"Two-factor authentication" : "Second facteur d'authentification",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "La sécurité renforcée est activée pour votre compte. Veuillez vous authentifier en utilisant un second facteur.",
"Cancel log in" : "Annuler l'authentification",
+ "Use backup code" : "Utiliser un code de récupération",
"Error while validating your second factor" : "Erreur lors de la validation de votre second facteur",
"You are accessing the server from an untrusted domain." : "Vous accédez au serveur à partir d'un domaine non approuvé.",
"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." : "Veuillez contacter votre administrateur. Si vous être l'administrateur de cette instance, configurez la variable \"trusted_domains\" dans le fichier config/config.php. Un exemple de configuration est fournit dans le fichier config/config.sample.php.",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index de3ec024591..fcc82d1d1ad 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -294,6 +294,7 @@
"Two-factor authentication" : "Second facteur d'authentification",
"Enhanced security is enabled for your account. Please authenticate using a second factor." : "La sécurité renforcée est activée pour votre compte. Veuillez vous authentifier en utilisant un second facteur.",
"Cancel log in" : "Annuler l'authentification",
+ "Use backup code" : "Utiliser un code de récupération",
"Error while validating your second factor" : "Erreur lors de la validation de votre second facteur",
"You are accessing the server from an untrusted domain." : "Vous accédez au serveur à partir d'un domaine non approuvé.",
"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." : "Veuillez contacter votre administrateur. Si vous être l'administrateur de cette instance, configurez la variable \"trusted_domains\" dans le fichier config/config.php. Un exemple de configuration est fournit dans le fichier config/config.sample.php.",
diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js
index 0423100c449..d09fb124611 100644
--- a/core/l10n/hu_HU.js
+++ b/core/l10n/hu_HU.js
@@ -205,7 +205,7 @@ OC.L10N.register(
"Error loading dialog template: {error}" : "Hiba a párbeszédpanel-sablon betöltésekor: {error}",
"No tags selected for deletion." : "Nincs törlésre kijelölt címke.",
"unknown text" : "ismeretlen szöveg",
- "Hello world!" : "Üdv, Világ!",
+ "Hello world!" : "Helló világ!",
"sunny" : "napos",
"Hello {name}, the weather is {weather}" : "Üdv {name}, {weather} időnk van",
"Hello {name}" : "Üdv {name}!",
@@ -294,6 +294,7 @@ OC.L10N.register(
"Contact your system administrator if this message persists or appeared unexpectedly." : "Ha ez az üzenet ismételten vagy indokolatlanul megjelenik, akkor keresse fel a rendszergazdáját!",
"Thank you for your patience." : "Köszönjük a türelmét!",
"Two-factor authentication" : "Kétlépcsős hitelesítés",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "A fokozott biztonság engedélyezett a fiókod számára. Kérlek hitelesítsd egy második faktor használatával.",
"Cancel log in" : "Bejelentkezés megszakítása",
"Use backup code" : "Biztonsági kód használata",
"Error while validating your second factor" : "Hiba történt a második lépés évényesítésekor",
@@ -329,7 +330,10 @@ OC.L10N.register(
"Updating to {version}" : "Frissítés erre a verzióra: {version}",
"The update was successful. There were warnings." : "A frissítés sikerült. Figyelmeztetések találhatók.",
"Two-step verification" : "Kétlépcsős ellenőrzés",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "A fokozott biztonság engedélyezve lett a fiókod számára. Kérlek hitelesítsd egy második faktor használatával.",
"Cancel login" : "Bejelentkezés megszakítása",
+ "Please authenticate using the selected factor." : "Kérlek hitelesítsd a kiválasztott faktor használatával.",
+ "An error occured while verifying the token" : "Hiba történt a token ellenőrzése közben",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "A webszer nincs megfelelően beállítva a következő feloldására: \"{url}\". További információkat a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
"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\" href=\"{docLink}\">documentation</a>." : "Nincs memória gyorsítótár beállítva. A teljesítmény növelése érdekében kérlek állítd be a memcache-t, ha elérhető. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom nem olvasható a PHP számára, ami biztonsági okokból nem javasolt.. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json
index 4081fe93ffa..f36752bc2ef 100644
--- a/core/l10n/hu_HU.json
+++ b/core/l10n/hu_HU.json
@@ -203,7 +203,7 @@
"Error loading dialog template: {error}" : "Hiba a párbeszédpanel-sablon betöltésekor: {error}",
"No tags selected for deletion." : "Nincs törlésre kijelölt címke.",
"unknown text" : "ismeretlen szöveg",
- "Hello world!" : "Üdv, Világ!",
+ "Hello world!" : "Helló világ!",
"sunny" : "napos",
"Hello {name}, the weather is {weather}" : "Üdv {name}, {weather} időnk van",
"Hello {name}" : "Üdv {name}!",
@@ -292,6 +292,7 @@
"Contact your system administrator if this message persists or appeared unexpectedly." : "Ha ez az üzenet ismételten vagy indokolatlanul megjelenik, akkor keresse fel a rendszergazdáját!",
"Thank you for your patience." : "Köszönjük a türelmét!",
"Two-factor authentication" : "Kétlépcsős hitelesítés",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "A fokozott biztonság engedélyezett a fiókod számára. Kérlek hitelesítsd egy második faktor használatával.",
"Cancel log in" : "Bejelentkezés megszakítása",
"Use backup code" : "Biztonsági kód használata",
"Error while validating your second factor" : "Hiba történt a második lépés évényesítésekor",
@@ -327,7 +328,10 @@
"Updating to {version}" : "Frissítés erre a verzióra: {version}",
"The update was successful. There were warnings." : "A frissítés sikerült. Figyelmeztetések találhatók.",
"Two-step verification" : "Kétlépcsős ellenőrzés",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "A fokozott biztonság engedélyezve lett a fiókod számára. Kérlek hitelesítsd egy második faktor használatával.",
"Cancel login" : "Bejelentkezés megszakítása",
+ "Please authenticate using the selected factor." : "Kérlek hitelesítsd a kiválasztott faktor használatával.",
+ "An error occured while verifying the token" : "Hiba történt a token ellenőrzése közben",
"Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "A webszer nincs megfelelően beállítva a következő feloldására: \"{url}\". További információkat a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
"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\" href=\"{docLink}\">documentation</a>." : "Nincs memória gyorsítótár beállítva. A teljesítmény növelése érdekében kérlek állítd be a memcache-t, ha elérhető. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
"/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "/dev/urandom nem olvasható a PHP számára, ami biztonsági okokból nem javasolt.. Bővebb információt a <a target=\"_blank\" href=\"{docLink}\">dokumentációban</a> találsz.",
diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js
index 34351173926..f66ce98cee1 100644
--- a/core/l10n/nb_NO.js
+++ b/core/l10n/nb_NO.js
@@ -19,8 +19,11 @@ OC.L10N.register(
"%s password reset" : "%s tilbakestilling av passord",
"Couldn't send reset email. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling. Kontakt administratoren.",
"Preparing update" : "Forbereder oppdatering",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "Advarsel fra reparering: ",
"Repair error: " : "Feil ved reparering: ",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Vennligst oppdater ved hjelp av kommandolinjen ettersom automatisk oppdatering er deaktivert i config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Sjekker tabell %s",
"Turned on maintenance mode" : "Slo på vedlikeholdsmodus",
"Turned off maintenance mode" : "Slo av vedlikeholdsmodus",
"Maintenance mode is kept active" : "Vedlikeholdsmodus blir beholdt aktiv",
@@ -87,6 +90,7 @@ OC.L10N.register(
"Dec." : "Des.",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Det oppstod problemer med sjekk av kode-integritet. Mer informasjon…</a>",
"Settings" : "Innstillinger",
+ "Problem loading page, reloading in 5 seconds" : "Det oppstod et problem ved lasting av side, laster på nytt om 5 sekunder",
"Saving..." : "Lagrer...",
"Dismiss" : "Forkast",
"seconds ago" : "for få sekunder siden",
@@ -118,10 +122,12 @@ OC.L10N.register(
"Good password" : "Bra passord",
"Strong password" : "Sterkt passord",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
- "Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett",
+ "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>." : "Din webtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</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." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.",
+ "Error occurred while checking server setup" : "Feil oppstod ved sjekking av tjener-oppsett",
"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." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.",
- "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>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer serveren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer tjeneren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
"Shared" : "Delt",
"Shared with {recipients}" : "Delt med {recipients}",
"Error" : "Feil",
@@ -133,15 +139,22 @@ OC.L10N.register(
"Expiration" : "Utløpsdato",
"Expiration date" : "Utløpsdato",
"Choose a password for the public link" : "Velg et passord for den offentlige lenken",
+ "Copied!" : "Kopiert!",
+ "Not supported!" : "Ikke støttet!",
+ "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
+ "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere",
"Resharing is not allowed" : "Videre deling er ikke tillatt",
"Share link" : "Del lenke",
"Link" : "Lenke",
"Password protect" : "Passordbeskyttet",
"Password" : "Passord",
+ "Allow upload and editing" : "Tillatt opplasting og redigering",
+ "Hide file listing" : "Skjul filliste",
"Email link to person" : "Email lenke til person",
"Send" : "Send",
"Sending ..." : "Sender...",
"Email sent" : "E-post sendt",
+ "Send link via email" : "Send lenke via e-post",
"Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}",
"Shared with you by {owner}" : "Delt med deg av {owner}",
"group" : "gruppe",
@@ -157,15 +170,22 @@ OC.L10N.register(
"Could not unshare" : "Kunne ikke avslutte deling",
"Share details could not be loaded for this item." : "Klarte ikke å laste inn detaljer om deling for dette elementet.",
"No users or groups found for {search}" : "Ingen brukere eller grupper funnet for {search}",
+ "No users found for {search}" : "Ingen brukere funnet for {search}",
+ "An error occurred. Please try again" : "Det oppstod en feil. Prøv igjen",
"{sharee} (group)" : "{sharee} (gruppe)",
"{sharee} (at {server})" : "{sharee} (på {server})",
"{sharee} (remote)" : "{sharee} (ekstern)",
"Share" : "Del",
"Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med personer på andre ownCloud-installasjoner med syntaksen brukernavn@example.com/owncloud",
+ "Share with users…" : "Del med brukere...",
+ "Share with users, groups or remote users…" : "Del med brukere, grupper og eksterne brukere...",
+ "Share with users or groups…" : "Del med brukere eller grupper...",
+ "Share with users or remote users…" : "Del med brukere eller eksterne brukere...",
"Error removing share" : "Feil ved fjerning av deling",
"Warning" : "Advarsel",
"Error while sending notification" : "Feil ved sending av varsling",
"Non-existing tag #{tag}" : "Ikke-eksisterende merkelapp #{tag}",
+ "restricted" : "begrenset",
"invisible" : "usynlig",
"({scope})" : "({scope})",
"Delete" : "Slett",
@@ -184,9 +204,14 @@ OC.L10N.register(
"Hello {name}" : "Hallo {name}",
"new" : "ny",
"_download %n file_::_download %n files_" : ["last ned %n fil","last ned %n filer"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "En oppdatering foregår, lukking av denne siden kan forstyrre prosessen på enkelte systemer.",
+ "Update to {version}" : "Oppdater til {version}",
"An error occurred." : "En feil oppstod.",
"Please reload the page." : "Vennligst last siden på nytt.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Oppdateringen var mislykket. For mer informasjon <a href=\"{url}\">se vår forum-artikkel</a> som beskriver dette problemet.",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Oppdateringen feilet. Vennligst rapporter dette problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud miljøet</a>.",
+ "Continue to Nextcloud" : "Fortsett til Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Oppdateringen var vellykket. Videresender deg til Nextcloud nå.",
"Searching other places" : "Søker andre steder",
"No search results in other folders" : "Ingen søkeresultater i andre mapper",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} søkeresultat i en annen mappe","{count} søkeresultater i andre mapper"],
@@ -197,15 +222,15 @@ OC.L10N.register(
"Help" : "Hjelp",
"Access forbidden" : "Tilgang nektet",
"File not found" : "Finner ikke filen",
- "The specified document has not been found on the server." : "Det angitte dokumentet ble ikke funnet på serveren.",
+ "The specified document has not been found on the server." : "Det angitte dokumentet ble ikke funnet på tjeneren.",
"You can click here to return to %s." : "Du kan klikke her for å gå tilbake til %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei,\n\nDette er en beskjed om at %s delte %s med deg.\nVis den: %s\n\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
- "Internal Server Error" : "Intern serverfeil.",
- "The server encountered an internal error and was unable to complete your request." : "Serveren støtte på en intern feil og kunne ikke fullføre forespørselen din.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontakt server-administratoren hvis denne feilen oppstår flere ganger. Vennligst ta med de tekniske detaljene nedenfor i rapporten din.",
- "More details can be found in the server log." : "Flere detaljer finnes i server-loggen.",
+ "Internal Server Error" : "Intern tjenerfeil.",
+ "The server encountered an internal error and was unable to complete your request." : "Tjeneren støtte på en intern feil og kunne ikke fullføre forespørselen din.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontakt tjeneradministratoren hvis denne feilen oppstår flere ganger. Vennligst ta med de tekniske detaljene nedenfor i rapporten din.",
+ "More details can be found in the server log." : "Flere detaljer finnes i tjenerloggen.",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Ekstern adresse: %s",
"Request ID: %s" : "Forespørsels-ID: %s",
@@ -217,6 +242,7 @@ OC.L10N.register(
"Trace" : "Trace",
"Security warning" : "Sikkerhetsadvarsel",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.",
"Create an <strong>admin account</strong>" : "Opprett en <strong>administrator-konto</strong>",
"Username" : "Brukernavn",
"Storage & database" : "Lagring og database",
@@ -242,9 +268,11 @@ OC.L10N.register(
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.",
"Log out" : "Logg ut",
"Search" : "Søk",
- "Server side authentication failed!" : "Autentisering feilet på serveren!",
+ "Server side authentication failed!" : "Autentisering feilet på tjeneren!",
"Please contact your administrator." : "Vennligst kontakt administratoren din.",
+ "An internal error occurred." : "En intern feil oppstod",
"Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.",
+ "Username or email" : "Brukernavn eller e-post",
"Log in" : "Logg inn",
"Wrong password. Reset it?" : "Feil passord. Nullstille det?",
"Wrong password." : "Feil passord.",
@@ -258,7 +286,12 @@ OC.L10N.register(
"This means only administrators can use the instance." : "Dette betyr at kun administratorer kan bruke instansen.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Kontakt systemadministratoren hvis denne meldingen var uventet eller ikke forsvinner.",
"Thank you for your patience." : "Takk for din tålmodighet.",
- "You are accessing the server from an untrusted domain." : "Du aksesserer serveren fra et ikke-klarert domene.",
+ "Two-factor authentication" : "Tofaktor autentisering",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Utvidet sikkerhet er aktivert for din konto. Vennligst autentiser deg ved å bruke en andre faktor.",
+ "Cancel log in" : "Avbryt innlogging",
+ "Use backup code" : "Bruker sikkerhetskopi kode",
+ "Error while validating your second factor" : "Feil under validering av din andre faktor",
+ "You are accessing the server from an untrusted domain." : "Du aksesserer tjeneren fra et ikke-klarert domene.",
"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." : "Vennligst kontakt administratoren. Hvis du er administrator for denne instansen, konfigurer innstillingen \"trusted_domains\" i config/config.php. Et eksempel på konfigurasjon er gitt i 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." : "Avhengig av konfigurasjonen kan du, som administrator, kanskje også bruke kanppen nedenfor til å stole på dette domenet.",
"Add \"%s\" as trusted domain" : "Legg til \"%s\" som et klarert domene",
@@ -270,6 +303,10 @@ OC.L10N.register(
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Forsikre deg om at databasen, config-mappen og datamappen er blitt sikkerhetskopiert før du fortsetter.",
"Start update" : "Start oppdatering",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "For å unngå tidsavbrudd ved store installasjoner, kan du i stedet kjøre følgende kommando fra installasjonsmappen:",
+ "Detailed logs" : "Detaljerte logger",
+ "Update needed" : "Oppdatering er nødvendig",
+ "Please use the command line updater because you have a big instance." : "Vennligst oppdater ved hjelp av kommandolinjen ettersom du har en stor installasjon.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "For hjelp, se i <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasjonen</a>.",
"This %s instance is currently in maintenance mode, which may take a while." : "Denne %s-instansen er for øyeblikket i vedlikeholdsmodus, noe som kan vare en stund.",
"This page will refresh itself when the %s instance is available again." : "Denne siden vil bli lastet på nytt når %s-instansen er tilgjengelig igjen.",
"Error loading tags" : "Feil ved lasting av merkelapper",
@@ -280,6 +317,20 @@ OC.L10N.register(
"Error favoriting" : "Feil ved favorittmerking",
"Error unfavoriting" : "Feil ved fjerning av favorittmerking",
"Couldn't send mail to following users: %s " : "Klarte ikke å sende mail til følgende brukere: %s",
- "Allow editing" : "Tillat redigering"
+ "Allow editing" : "Tillat redigering",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "En oppdatering foregår, lukking av denne siden kan forstyrre prosessen på enkelte systemer.",
+ "Updating to {version}" : "Oppdaterer til {version}",
+ "The update was successful. There were warnings." : "Oppdateringen var vellykket. Det oppstod advarsler.",
+ "Two-step verification" : "Tofaktor autentisering",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Utvidet sikkerhet har blitt aktivert for din konto. Vennligst autentiser med en andre faktor.",
+ "Cancel login" : "Avbryt innlogging",
+ "Please authenticate using the selected factor." : "Vennligst autentiser ved hjelp av den valgte faktoren.",
+ "An error occured while verifying the token" : "En feil oppstod under verifisering av nøkkelen",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Din webtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
+ "An error occured. Please try again" : "Det oppstod en feil. Prøv igjen",
+ "not assignable" : "ikke overdras",
+ "Updating {productName} to version {version}, this may take a while." : "Oppdaterer {productName} til versjon {version}, dette kan ta en stund.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.",
+ "An internal error occured." : "En intern feil oppstod"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json
index 6b00f567cc1..da9d81cf933 100644
--- a/core/l10n/nb_NO.json
+++ b/core/l10n/nb_NO.json
@@ -17,8 +17,11 @@
"%s password reset" : "%s tilbakestilling av passord",
"Couldn't send reset email. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling. Kontakt administratoren.",
"Preparing update" : "Forbereder oppdatering",
+ "[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "Advarsel fra reparering: ",
"Repair error: " : "Feil ved reparering: ",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "Vennligst oppdater ved hjelp av kommandolinjen ettersom automatisk oppdatering er deaktivert i config.php.",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: Sjekker tabell %s",
"Turned on maintenance mode" : "Slo på vedlikeholdsmodus",
"Turned off maintenance mode" : "Slo av vedlikeholdsmodus",
"Maintenance mode is kept active" : "Vedlikeholdsmodus blir beholdt aktiv",
@@ -85,6 +88,7 @@
"Dec." : "Des.",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">Det oppstod problemer med sjekk av kode-integritet. Mer informasjon…</a>",
"Settings" : "Innstillinger",
+ "Problem loading page, reloading in 5 seconds" : "Det oppstod et problem ved lasting av side, laster på nytt om 5 sekunder",
"Saving..." : "Lagrer...",
"Dismiss" : "Forkast",
"seconds ago" : "for få sekunder siden",
@@ -116,10 +120,12 @@
"Good password" : "Bra passord",
"Strong password" : "Sterkt passord",
"Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.",
- "Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett",
+ "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>." : "Din webtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</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." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.",
+ "Error occurred while checking server setup" : "Feil oppstod ved sjekking av tjener-oppsett",
"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." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.",
"The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.",
- "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>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer serveren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
+ "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer tjeneren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.",
"Shared" : "Delt",
"Shared with {recipients}" : "Delt med {recipients}",
"Error" : "Feil",
@@ -131,15 +137,22 @@
"Expiration" : "Utløpsdato",
"Expiration date" : "Utløpsdato",
"Choose a password for the public link" : "Velg et passord for den offentlige lenken",
+ "Copied!" : "Kopiert!",
+ "Not supported!" : "Ikke støttet!",
+ "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
+ "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere",
"Resharing is not allowed" : "Videre deling er ikke tillatt",
"Share link" : "Del lenke",
"Link" : "Lenke",
"Password protect" : "Passordbeskyttet",
"Password" : "Passord",
+ "Allow upload and editing" : "Tillatt opplasting og redigering",
+ "Hide file listing" : "Skjul filliste",
"Email link to person" : "Email lenke til person",
"Send" : "Send",
"Sending ..." : "Sender...",
"Email sent" : "E-post sendt",
+ "Send link via email" : "Send lenke via e-post",
"Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}",
"Shared with you by {owner}" : "Delt med deg av {owner}",
"group" : "gruppe",
@@ -155,15 +168,22 @@
"Could not unshare" : "Kunne ikke avslutte deling",
"Share details could not be loaded for this item." : "Klarte ikke å laste inn detaljer om deling for dette elementet.",
"No users or groups found for {search}" : "Ingen brukere eller grupper funnet for {search}",
+ "No users found for {search}" : "Ingen brukere funnet for {search}",
+ "An error occurred. Please try again" : "Det oppstod en feil. Prøv igjen",
"{sharee} (group)" : "{sharee} (gruppe)",
"{sharee} (at {server})" : "{sharee} (på {server})",
"{sharee} (remote)" : "{sharee} (ekstern)",
"Share" : "Del",
"Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med personer på andre ownCloud-installasjoner med syntaksen brukernavn@example.com/owncloud",
+ "Share with users…" : "Del med brukere...",
+ "Share with users, groups or remote users…" : "Del med brukere, grupper og eksterne brukere...",
+ "Share with users or groups…" : "Del med brukere eller grupper...",
+ "Share with users or remote users…" : "Del med brukere eller eksterne brukere...",
"Error removing share" : "Feil ved fjerning av deling",
"Warning" : "Advarsel",
"Error while sending notification" : "Feil ved sending av varsling",
"Non-existing tag #{tag}" : "Ikke-eksisterende merkelapp #{tag}",
+ "restricted" : "begrenset",
"invisible" : "usynlig",
"({scope})" : "({scope})",
"Delete" : "Slett",
@@ -182,9 +202,14 @@
"Hello {name}" : "Hallo {name}",
"new" : "ny",
"_download %n file_::_download %n files_" : ["last ned %n fil","last ned %n filer"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "En oppdatering foregår, lukking av denne siden kan forstyrre prosessen på enkelte systemer.",
+ "Update to {version}" : "Oppdater til {version}",
"An error occurred." : "En feil oppstod.",
"Please reload the page." : "Vennligst last siden på nytt.",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "Oppdateringen var mislykket. For mer informasjon <a href=\"{url}\">se vår forum-artikkel</a> som beskriver dette problemet.",
+ "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud community</a>." : "Oppdateringen feilet. Vennligst rapporter dette problemet til <a href=\"https://github.com/nextcloud/server/issues\" target=\"_blank\">Nextcloud miljøet</a>.",
+ "Continue to Nextcloud" : "Fortsett til Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "Oppdateringen var vellykket. Videresender deg til Nextcloud nå.",
"Searching other places" : "Søker andre steder",
"No search results in other folders" : "Ingen søkeresultater i andre mapper",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["{count} søkeresultat i en annen mappe","{count} søkeresultater i andre mapper"],
@@ -195,15 +220,15 @@
"Help" : "Hjelp",
"Access forbidden" : "Tilgang nektet",
"File not found" : "Finner ikke filen",
- "The specified document has not been found on the server." : "Det angitte dokumentet ble ikke funnet på serveren.",
+ "The specified document has not been found on the server." : "Det angitte dokumentet ble ikke funnet på tjeneren.",
"You can click here to return to %s." : "Du kan klikke her for å gå tilbake til %s.",
"Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hei,\n\nDette er en beskjed om at %s delte %s med deg.\nVis den: %s\n\n",
"The share will expire on %s." : "Delingen vil opphøre %s.",
"Cheers!" : "Ha det!",
- "Internal Server Error" : "Intern serverfeil.",
- "The server encountered an internal error and was unable to complete your request." : "Serveren støtte på en intern feil og kunne ikke fullføre forespørselen din.",
- "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontakt server-administratoren hvis denne feilen oppstår flere ganger. Vennligst ta med de tekniske detaljene nedenfor i rapporten din.",
- "More details can be found in the server log." : "Flere detaljer finnes i server-loggen.",
+ "Internal Server Error" : "Intern tjenerfeil.",
+ "The server encountered an internal error and was unable to complete your request." : "Tjeneren støtte på en intern feil og kunne ikke fullføre forespørselen din.",
+ "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Kontakt tjeneradministratoren hvis denne feilen oppstår flere ganger. Vennligst ta med de tekniske detaljene nedenfor i rapporten din.",
+ "More details can be found in the server log." : "Flere detaljer finnes i tjenerloggen.",
"Technical details" : "Tekniske detaljer",
"Remote Address: %s" : "Ekstern adresse: %s",
"Request ID: %s" : "Forespørsels-ID: %s",
@@ -215,6 +240,7 @@
"Trace" : "Trace",
"Security warning" : "Sikkerhetsadvarsel",
"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.",
"Create an <strong>admin account</strong>" : "Opprett en <strong>administrator-konto</strong>",
"Username" : "Brukernavn",
"Storage & database" : "Lagring og database",
@@ -240,9 +266,11 @@
"This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.",
"Log out" : "Logg ut",
"Search" : "Søk",
- "Server side authentication failed!" : "Autentisering feilet på serveren!",
+ "Server side authentication failed!" : "Autentisering feilet på tjeneren!",
"Please contact your administrator." : "Vennligst kontakt administratoren din.",
+ "An internal error occurred." : "En intern feil oppstod",
"Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.",
+ "Username or email" : "Brukernavn eller e-post",
"Log in" : "Logg inn",
"Wrong password. Reset it?" : "Feil passord. Nullstille det?",
"Wrong password." : "Feil passord.",
@@ -256,7 +284,12 @@
"This means only administrators can use the instance." : "Dette betyr at kun administratorer kan bruke instansen.",
"Contact your system administrator if this message persists or appeared unexpectedly." : "Kontakt systemadministratoren hvis denne meldingen var uventet eller ikke forsvinner.",
"Thank you for your patience." : "Takk for din tålmodighet.",
- "You are accessing the server from an untrusted domain." : "Du aksesserer serveren fra et ikke-klarert domene.",
+ "Two-factor authentication" : "Tofaktor autentisering",
+ "Enhanced security is enabled for your account. Please authenticate using a second factor." : "Utvidet sikkerhet er aktivert for din konto. Vennligst autentiser deg ved å bruke en andre faktor.",
+ "Cancel log in" : "Avbryt innlogging",
+ "Use backup code" : "Bruker sikkerhetskopi kode",
+ "Error while validating your second factor" : "Feil under validering av din andre faktor",
+ "You are accessing the server from an untrusted domain." : "Du aksesserer tjeneren fra et ikke-klarert domene.",
"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." : "Vennligst kontakt administratoren. Hvis du er administrator for denne instansen, konfigurer innstillingen \"trusted_domains\" i config/config.php. Et eksempel på konfigurasjon er gitt i 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." : "Avhengig av konfigurasjonen kan du, som administrator, kanskje også bruke kanppen nedenfor til å stole på dette domenet.",
"Add \"%s\" as trusted domain" : "Legg til \"%s\" som et klarert domene",
@@ -268,6 +301,10 @@
"Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Forsikre deg om at databasen, config-mappen og datamappen er blitt sikkerhetskopiert før du fortsetter.",
"Start update" : "Start oppdatering",
"To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "For å unngå tidsavbrudd ved store installasjoner, kan du i stedet kjøre følgende kommando fra installasjonsmappen:",
+ "Detailed logs" : "Detaljerte logger",
+ "Update needed" : "Oppdatering er nødvendig",
+ "Please use the command line updater because you have a big instance." : "Vennligst oppdater ved hjelp av kommandolinjen ettersom du har en stor installasjon.",
+ "For help, see the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation</a>." : "For hjelp, se i <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentasjonen</a>.",
"This %s instance is currently in maintenance mode, which may take a while." : "Denne %s-instansen er for øyeblikket i vedlikeholdsmodus, noe som kan vare en stund.",
"This page will refresh itself when the %s instance is available again." : "Denne siden vil bli lastet på nytt når %s-instansen er tilgjengelig igjen.",
"Error loading tags" : "Feil ved lasting av merkelapper",
@@ -278,6 +315,20 @@
"Error favoriting" : "Feil ved favorittmerking",
"Error unfavoriting" : "Feil ved fjerning av favorittmerking",
"Couldn't send mail to following users: %s " : "Klarte ikke å sende mail til følgende brukere: %s",
- "Allow editing" : "Tillat redigering"
+ "Allow editing" : "Tillat redigering",
+ "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "En oppdatering foregår, lukking av denne siden kan forstyrre prosessen på enkelte systemer.",
+ "Updating to {version}" : "Oppdaterer til {version}",
+ "The update was successful. There were warnings." : "Oppdateringen var vellykket. Det oppstod advarsler.",
+ "Two-step verification" : "Tofaktor autentisering",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "Utvidet sikkerhet har blitt aktivert for din konto. Vennligst autentiser med en andre faktor.",
+ "Cancel login" : "Avbryt innlogging",
+ "Please authenticate using the selected factor." : "Vennligst autentiser ved hjelp av den valgte faktoren.",
+ "An error occured while verifying the token" : "En feil oppstod under verifisering av nøkkelen",
+ "Your web server is not set up properly to resolve \"{url}\". Further information can be found in our <a target=\"_blank\" href=\"{docLink}\">documentation</a>." : "Din webtjener er ikke satt opp korrekt for å hente \"{url}\". Mer informasjon finner du i vår <a target=\"_blank\" rel=\"noreferrer\" href=\"{docLink}\">dokumentasjon</a>.",
+ "An error occured. Please try again" : "Det oppstod en feil. Prøv igjen",
+ "not assignable" : "ikke overdras",
+ "Updating {productName} to version {version}, this may take a while." : "Oppdaterer {productName} til versjon {version}, dette kan ta en stund.",
+ "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du skal konfigurere tjeneren skikkelig, vennligst se i <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">dokumentasjonen</a>.",
+ "An internal error occured." : "En intern feil oppstod"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index eb5cb600501..3b479fed4ce 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -22,6 +22,8 @@ OC.L10N.register(
"[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "修復警告:",
"Repair error: " : "修復錯誤",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "請使用命令列更新工具,因為自動更新在 config.php 中被停用了",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: 檢查資料表 %s",
"Turned on maintenance mode" : "已啓用維護模式",
"Turned off maintenance mode" : "已停用維護模式",
"Maintenance mode is kept active" : "維護模式維持在開啟狀態",
@@ -88,7 +90,9 @@ OC.L10N.register(
"Dec." : "十二月",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">執行程式碼完整性檢查時發生問題。更多資訊…</a>",
"Settings" : "設定",
+ "Problem loading page, reloading in 5 seconds" : "載入頁面出錯,5 秒後重新整理",
"Saving..." : "儲存中...",
+ "Dismiss" : "知道了",
"seconds ago" : "幾秒前",
"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." : "重設密碼的連結已經 email 至你的信箱,如果你在一段時間內沒收到,請檢查垃圾郵件資料夾,如果還是找不到,請聯絡系統管理員。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
@@ -133,15 +137,22 @@ OC.L10N.register(
"Expiration" : "過期",
"Expiration date" : "到期日",
"Choose a password for the public link" : "為公開連結選一個密碼",
+ "Copied!" : "已複製",
+ "Not supported!" : "不支援!",
+ "Press ⌘-C to copy." : "按下 ⌘-C 來複製",
+ "Press Ctrl-C to copy." : "按下 Ctrl-C 來複製",
"Resharing is not allowed" : "不允許重新分享",
"Share link" : "分享連結",
"Link" : "連結",
"Password protect" : "密碼保護",
"Password" : "密碼",
+ "Allow upload and editing" : "允許上傳及編輯",
+ "Hide file listing" : "隱藏檔案列表",
"Email link to person" : "將連結 email 給別人",
"Send" : "寄出",
"Sending ..." : "正在傳送…",
"Email sent" : "Email 已寄出",
+ "Send link via email" : "透過 email 寄送連結",
"Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}",
"Shared with you by {owner}" : "{owner} 已經和您分享",
"group" : "群組",
@@ -158,6 +169,7 @@ OC.L10N.register(
"Share details could not be loaded for this item." : "無法載入分享細節",
"No users or groups found for {search}" : "沒有群組或使用者符合 {search}",
"No users found for {search}" : "沒有使用者符合 {search}",
+ "An error occurred. Please try again" : "發生錯誤,請再試一次",
"{sharee} (group)" : "{sharee} (群組)",
"{sharee} (at {server})" : "{sharee} (在 {server})",
"{sharee} (remote)" : "{sharee} (遠端)",
@@ -171,6 +183,7 @@ OC.L10N.register(
"Warning" : "警告",
"Error while sending notification" : "發送通知錯誤",
"Non-existing tag #{tag}" : "不存在的標籤 #{tag}",
+ "restricted" : "受限",
"invisible" : "不可見",
"({scope})" : "({scope})",
"Delete" : "刪除",
@@ -189,9 +202,13 @@ OC.L10N.register(
"Hello {name}" : "哈囉 {name}",
"new" : "新",
"_download %n file_::_download %n files_" : ["下載 %n 個檔案"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "正在更新,在某些狀況下,離開本頁面可能會導致更新中斷",
+ "Update to {version}" : "更新到 {version}",
"An error occurred." : "發生錯誤",
"Please reload the page." : "請重新整理頁面",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "更新失敗,檢視<a href=\"{url}\">論壇上的文章</a>來瞭解更多",
+ "Continue to Nextcloud" : "繼續前往 Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "更新成功,即將重導向至 Nextcloud",
"Searching other places" : "搜尋其他位置",
"No search results in other folders" : "在其他資料夾中沒有找到",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["在其他資料夾中有 {count} 比結果"],
@@ -249,7 +266,9 @@ OC.L10N.register(
"Search" : "搜尋",
"Server side authentication failed!" : "伺服器端認證失敗!",
"Please contact your administrator." : "請聯絡系統管理員",
+ "An internal error occurred." : "發生內部錯誤",
"Please try again or contact your administrator." : "請重試或聯絡系統管理員",
+ "Username or email" : "用戶名或 email",
"Log in" : "登入",
"Wrong password. Reset it?" : "密碼錯誤,重設密碼?",
"Wrong password." : "密碼錯誤",
@@ -263,6 +282,7 @@ OC.L10N.register(
"This means only administrators can use the instance." : "這表示只有系統管理員能夠使用",
"Contact your system administrator if this message persists or appeared unexpectedly." : "若這個訊息持續出現,請聯絡系統管理員",
"Thank you for your patience." : "感謝您的耐心",
+ "Two-factor authentication" : "二階段認證",
"You are accessing the server from an untrusted domain." : "你正在從一個未信任的網域存取伺服器",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "請聯絡您的系統管理員,如果您就是系統管理員,請設定 config/config.php 中的 \"trusted_domain\" 選項。範例設定提供於 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." : "依照設定而定,您身為系統管理員可能也可以使用底下的按鈕來信任這個網域",
@@ -285,6 +305,17 @@ OC.L10N.register(
"Error favoriting" : "加入最愛時出錯",
"Error unfavoriting" : "從最愛移除出錯",
"Couldn't send mail to following users: %s " : "無法寄送郵件給這些使用者:%s",
- "Allow editing" : "允許編輯"
+ "Allow editing" : "允許編輯",
+ "Updating to {version}" : "正在更新到 {version}",
+ "The update was successful. There were warnings." : "更新成功,有警告訊息",
+ "Two-step verification" : "二階段驗證",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "您的帳號已啟用進階安全機制,請使用第二階段來認證",
+ "Cancel login" : "取消登入",
+ "Please authenticate using the selected factor." : "請以選擇的二階段方式認證",
+ "An error occured while verifying the token" : "驗證 token 時發生錯誤",
+ "An error occured. Please try again" : "發生錯誤,請重試",
+ "not assignable" : "不可指定",
+ "Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 至版本 {version} ,需要一些時間",
+ "An internal error occured." : "發生內部錯誤"
},
"nplurals=1; plural=0;");
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 5d0fde5c509..f9fbfce644a 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -20,6 +20,8 @@
"[%d / %d]: %s" : "[%d / %d]: %s",
"Repair warning: " : "修復警告:",
"Repair error: " : "修復錯誤",
+ "Please use the command line updater because automatic updating is disabled in the config.php." : "請使用命令列更新工具,因為自動更新在 config.php 中被停用了",
+ "[%d / %d]: Checking table %s" : "[%d / %d]: 檢查資料表 %s",
"Turned on maintenance mode" : "已啓用維護模式",
"Turned off maintenance mode" : "已停用維護模式",
"Maintenance mode is kept active" : "維護模式維持在開啟狀態",
@@ -86,7 +88,9 @@
"Dec." : "十二月",
"<a href=\"{docUrl}\">There were problems with the code integrity check. More information…</a>" : "<a href=\"{docUrl}\">執行程式碼完整性檢查時發生問題。更多資訊…</a>",
"Settings" : "設定",
+ "Problem loading page, reloading in 5 seconds" : "載入頁面出錯,5 秒後重新整理",
"Saving..." : "儲存中...",
+ "Dismiss" : "知道了",
"seconds ago" : "幾秒前",
"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." : "重設密碼的連結已經 email 至你的信箱,如果你在一段時間內沒收到,請檢查垃圾郵件資料夾,如果還是找不到,請聯絡系統管理員。",
"Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "您的檔案是加密的,如果您沒有啟用救援金鑰,當您重設密碼之後將無法存取您的資料。<br/>如果不確定該怎麼做,請聯絡您的系統管理員。<br/>您確定要繼續嗎?",
@@ -131,15 +135,22 @@
"Expiration" : "過期",
"Expiration date" : "到期日",
"Choose a password for the public link" : "為公開連結選一個密碼",
+ "Copied!" : "已複製",
+ "Not supported!" : "不支援!",
+ "Press ⌘-C to copy." : "按下 ⌘-C 來複製",
+ "Press Ctrl-C to copy." : "按下 Ctrl-C 來複製",
"Resharing is not allowed" : "不允許重新分享",
"Share link" : "分享連結",
"Link" : "連結",
"Password protect" : "密碼保護",
"Password" : "密碼",
+ "Allow upload and editing" : "允許上傳及編輯",
+ "Hide file listing" : "隱藏檔案列表",
"Email link to person" : "將連結 email 給別人",
"Send" : "寄出",
"Sending ..." : "正在傳送…",
"Email sent" : "Email 已寄出",
+ "Send link via email" : "透過 email 寄送連結",
"Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}",
"Shared with you by {owner}" : "{owner} 已經和您分享",
"group" : "群組",
@@ -156,6 +167,7 @@
"Share details could not be loaded for this item." : "無法載入分享細節",
"No users or groups found for {search}" : "沒有群組或使用者符合 {search}",
"No users found for {search}" : "沒有使用者符合 {search}",
+ "An error occurred. Please try again" : "發生錯誤,請再試一次",
"{sharee} (group)" : "{sharee} (群組)",
"{sharee} (at {server})" : "{sharee} (在 {server})",
"{sharee} (remote)" : "{sharee} (遠端)",
@@ -169,6 +181,7 @@
"Warning" : "警告",
"Error while sending notification" : "發送通知錯誤",
"Non-existing tag #{tag}" : "不存在的標籤 #{tag}",
+ "restricted" : "受限",
"invisible" : "不可見",
"({scope})" : "({scope})",
"Delete" : "刪除",
@@ -187,9 +200,13 @@
"Hello {name}" : "哈囉 {name}",
"new" : "新",
"_download %n file_::_download %n files_" : ["下載 %n 個檔案"],
+ "The update is in progress, leaving this page might interrupt the process in some environments." : "正在更新,在某些狀況下,離開本頁面可能會導致更新中斷",
+ "Update to {version}" : "更新到 {version}",
"An error occurred." : "發生錯誤",
"Please reload the page." : "請重新整理頁面",
"The update was unsuccessful. For more information <a href=\"{url}\">check our forum post</a> covering this issue." : "更新失敗,檢視<a href=\"{url}\">論壇上的文章</a>來瞭解更多",
+ "Continue to Nextcloud" : "繼續前往 Nextcloud",
+ "The update was successful. Redirecting you to Nextcloud now." : "更新成功,即將重導向至 Nextcloud",
"Searching other places" : "搜尋其他位置",
"No search results in other folders" : "在其他資料夾中沒有找到",
"_{count} search result in another folder_::_{count} search results in other folders_" : ["在其他資料夾中有 {count} 比結果"],
@@ -247,7 +264,9 @@
"Search" : "搜尋",
"Server side authentication failed!" : "伺服器端認證失敗!",
"Please contact your administrator." : "請聯絡系統管理員",
+ "An internal error occurred." : "發生內部錯誤",
"Please try again or contact your administrator." : "請重試或聯絡系統管理員",
+ "Username or email" : "用戶名或 email",
"Log in" : "登入",
"Wrong password. Reset it?" : "密碼錯誤,重設密碼?",
"Wrong password." : "密碼錯誤",
@@ -261,6 +280,7 @@
"This means only administrators can use the instance." : "這表示只有系統管理員能夠使用",
"Contact your system administrator if this message persists or appeared unexpectedly." : "若這個訊息持續出現,請聯絡系統管理員",
"Thank you for your patience." : "感謝您的耐心",
+ "Two-factor authentication" : "二階段認證",
"You are accessing the server from an untrusted domain." : "你正在從一個未信任的網域存取伺服器",
"Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domains\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "請聯絡您的系統管理員,如果您就是系統管理員,請設定 config/config.php 中的 \"trusted_domain\" 選項。範例設定提供於 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." : "依照設定而定,您身為系統管理員可能也可以使用底下的按鈕來信任這個網域",
@@ -283,6 +303,17 @@
"Error favoriting" : "加入最愛時出錯",
"Error unfavoriting" : "從最愛移除出錯",
"Couldn't send mail to following users: %s " : "無法寄送郵件給這些使用者:%s",
- "Allow editing" : "允許編輯"
+ "Allow editing" : "允許編輯",
+ "Updating to {version}" : "正在更新到 {version}",
+ "The update was successful. There were warnings." : "更新成功,有警告訊息",
+ "Two-step verification" : "二階段驗證",
+ "Enhanced security has been enabled for your account. Please authenticate using a second factor." : "您的帳號已啟用進階安全機制,請使用第二階段來認證",
+ "Cancel login" : "取消登入",
+ "Please authenticate using the selected factor." : "請以選擇的二階段方式認證",
+ "An error occured while verifying the token" : "驗證 token 時發生錯誤",
+ "An error occured. Please try again" : "發生錯誤,請重試",
+ "not assignable" : "不可指定",
+ "Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 至版本 {version} ,需要一些時間",
+ "An internal error occured." : "發生內部錯誤"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index c20abadb44c..70636c39323 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -24,12 +24,11 @@ blueimp-md5/js/*
blueimp-md5/index.html
# momentjs - ignore all files except the two listed below
-moment/benchmarks
-moment/locale
+moment/**
+!moment/.bower.json
+!moment/min
+!moment/LICENSE
moment/min/**
-moment/moment.js
-moment/scripts
-moment/templates
!moment/min/moment-with-locales.js
# jquery
diff --git a/core/vendor/handlebars/.bower.json b/core/vendor/handlebars/.bower.json
index 2d17a2faacb..b526f462e19 100644
--- a/core/vendor/handlebars/.bower.json
+++ b/core/vendor/handlebars/.bower.json
@@ -1,16 +1,17 @@
{
"name": "handlebars",
- "version": "1.3.0",
+ "version": "4.0.5",
"main": "handlebars.js",
+ "license": "MIT",
"dependencies": {},
"homepage": "https://github.com/components/handlebars.js",
- "_release": "1.3.0",
+ "_release": "4.0.5",
"_resolution": {
"type": "version",
- "tag": "v1.3.0",
- "commit": "ddd21a44be399ae4de486ddd868bacf84e92b9c4"
+ "tag": "v4.0.5",
+ "commit": "9b7adf2df23cf0ecc7bd60b43d43989e63222f5a"
},
- "_source": "git://github.com/components/handlebars.js.git",
- "_target": "~1.3.0",
+ "_source": "https://github.com/components/handlebars.js.git",
+ "_target": "^4.0.5",
"_originalSource": "handlebars"
} \ No newline at end of file
diff --git a/core/vendor/handlebars/handlebars.js b/core/vendor/handlebars/handlebars.js
index bec7085c510..182c1be831d 100644
--- a/core/vendor/handlebars/handlebars.js
+++ b/core/vendor/handlebars/handlebars.js
@@ -1,8 +1,8 @@
/*!
- handlebars v1.3.0
+ handlebars v4.0.5
-Copyright (C) 2011 by Yehuda Katz
+Copyright (C) 2011-2015 by Yehuda Katz
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -24,2723 +24,4585 @@ THE SOFTWARE.
@license
*/
-/* exported Handlebars */
-var Handlebars = (function() {
-// handlebars/safe-string.js
-var __module4__ = (function() {
- "use strict";
- var __exports__;
- // Build out our basic SafeString type
- function SafeString(string) {
- this.string = string;
- }
-
- SafeString.prototype.toString = function() {
- return "" + this.string;
- };
-
- __exports__ = SafeString;
- return __exports__;
-})();
-
-// handlebars/utils.js
-var __module3__ = (function(__dependency1__) {
- "use strict";
- var __exports__ = {};
- /*jshint -W004 */
- var SafeString = __dependency1__;
-
- var escape = {
- "&": "&amp;",
- "<": "&lt;",
- ">": "&gt;",
- '"': "&quot;",
- "'": "&#x27;",
- "`": "&#x60;"
- };
-
- var badChars = /[&<>"'`]/g;
- var possible = /[&<>"'`]/;
-
- function escapeChar(chr) {
- return escape[chr] || "&amp;";
- }
-
- function extend(obj, value) {
- for(var key in value) {
- if(Object.prototype.hasOwnProperty.call(value, key)) {
- obj[key] = value[key];
- }
- }
- }
-
- __exports__.extend = extend;var toString = Object.prototype.toString;
- __exports__.toString = toString;
- // Sourced from lodash
- // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
- var isFunction = function(value) {
- return typeof value === 'function';
- };
- // fallback for older versions of Chrome and Safari
- if (isFunction(/x/)) {
- isFunction = function(value) {
- return typeof value === 'function' && toString.call(value) === '[object Function]';
- };
- }
- var isFunction;
- __exports__.isFunction = isFunction;
- var isArray = Array.isArray || function(value) {
- return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;
- };
- __exports__.isArray = isArray;
-
- function escapeExpression(string) {
- // don't escape SafeStrings, since they're already safe
- if (string instanceof SafeString) {
- return string.toString();
- } else if (!string && string !== 0) {
- return "";
- }
-
- // Force a string conversion as this will be done by the append regardless and
- // the regex test will do this transparently behind the scenes, causing issues if
- // an object's to string has escaped characters in it.
- string = "" + string;
-
- if(!possible.test(string)) { return string; }
- return string.replace(badChars, escapeChar);
- }
-
- __exports__.escapeExpression = escapeExpression;function isEmpty(value) {
- if (!value && value !== 0) {
- return true;
- } else if (isArray(value) && value.length === 0) {
- return true;
- } else {
- return false;
- }
- }
-
- __exports__.isEmpty = isEmpty;
- return __exports__;
-})(__module4__);
-
-// handlebars/exception.js
-var __module5__ = (function() {
- "use strict";
- var __exports__;
-
- var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
-
- function Exception(message, node) {
- var line;
- if (node && node.firstLine) {
- line = node.firstLine;
-
- message += ' - ' + line + ':' + node.firstColumn;
- }
-
- var tmp = Error.prototype.constructor.call(this, message);
-
- // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
- for (var idx = 0; idx < errorProps.length; idx++) {
- this[errorProps[idx]] = tmp[errorProps[idx]];
- }
-
- if (line) {
- this.lineNumber = line;
- this.column = node.firstColumn;
- }
- }
-
- Exception.prototype = new Error();
-
- __exports__ = Exception;
- return __exports__;
-})();
-
-// handlebars/base.js
-var __module2__ = (function(__dependency1__, __dependency2__) {
- "use strict";
- var __exports__ = {};
- var Utils = __dependency1__;
- var Exception = __dependency2__;
-
- var VERSION = "1.3.0";
- __exports__.VERSION = VERSION;var COMPILER_REVISION = 4;
- __exports__.COMPILER_REVISION = COMPILER_REVISION;
- var REVISION_CHANGES = {
- 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
- 2: '== 1.0.0-rc.3',
- 3: '== 1.0.0-rc.4',
- 4: '>= 1.0.0'
- };
- __exports__.REVISION_CHANGES = REVISION_CHANGES;
- var isArray = Utils.isArray,
- isFunction = Utils.isFunction,
- toString = Utils.toString,
- objectType = '[object Object]';
-
- function HandlebarsEnvironment(helpers, partials) {
- this.helpers = helpers || {};
- this.partials = partials || {};
-
- registerDefaultHelpers(this);
- }
-
- __exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {
- constructor: HandlebarsEnvironment,
-
- logger: logger,
- log: log,
-
- registerHelper: function(name, fn, inverse) {
- if (toString.call(name) === objectType) {
- if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); }
- Utils.extend(this.helpers, name);
- } else {
- if (inverse) { fn.not = inverse; }
- this.helpers[name] = fn;
- }
- },
-
- registerPartial: function(name, str) {
- if (toString.call(name) === objectType) {
- Utils.extend(this.partials, name);
- } else {
- this.partials[name] = str;
- }
- }
- };
-
- function registerDefaultHelpers(instance) {
- instance.registerHelper('helperMissing', function(arg) {
- if(arguments.length === 2) {
- return undefined;
- } else {
- throw new Exception("Missing helper: '" + arg + "'");
- }
- });
-
- instance.registerHelper('blockHelperMissing', function(context, options) {
- var inverse = options.inverse || function() {}, fn = options.fn;
-
- if (isFunction(context)) { context = context.call(this); }
-
- if(context === true) {
- return fn(this);
- } else if(context === false || context == null) {
- return inverse(this);
- } else if (isArray(context)) {
- if(context.length > 0) {
- return instance.helpers.each(context, options);
- } else {
- return inverse(this);
- }
- } else {
- return fn(context);
- }
- });
-
- instance.registerHelper('each', function(context, options) {
- var fn = options.fn, inverse = options.inverse;
- var i = 0, ret = "", data;
-
- if (isFunction(context)) { context = context.call(this); }
-
- if (options.data) {
- data = createFrame(options.data);
- }
-
- if(context && typeof context === 'object') {
- if (isArray(context)) {
- for(var j = context.length; i<j; i++) {
- if (data) {
- data.index = i;
- data.first = (i === 0);
- data.last = (i === (context.length-1));
- }
- ret = ret + fn(context[i], { data: data });
- }
- } else {
- for(var key in context) {
- if(context.hasOwnProperty(key)) {
- if(data) {
- data.key = key;
- data.index = i;
- data.first = (i === 0);
- }
- ret = ret + fn(context[key], {data: data});
- i++;
- }
- }
- }
- }
-
- if(i === 0){
- ret = inverse(this);
- }
-
- return ret;
- });
-
- instance.registerHelper('if', function(conditional, options) {
- if (isFunction(conditional)) { conditional = conditional.call(this); }
-
- // Default behavior is to render the positive path if the value is truthy and not empty.
- // The `includeZero` option may be set to treat the condtional as purely not empty based on the
- // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
- if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {
- return options.inverse(this);
- } else {
- return options.fn(this);
- }
- });
-
- instance.registerHelper('unless', function(conditional, options) {
- return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});
- });
-
- instance.registerHelper('with', function(context, options) {
- if (isFunction(context)) { context = context.call(this); }
-
- if (!Utils.isEmpty(context)) return options.fn(context);
- });
-
- instance.registerHelper('log', function(context, options) {
- var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
- instance.log(level, context);
- });
- }
-
- var logger = {
- methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },
-
- // State enum
- DEBUG: 0,
- INFO: 1,
- WARN: 2,
- ERROR: 3,
- level: 3,
-
- // can be overridden in the host environment
- log: function(level, obj) {
- if (logger.level <= level) {
- var method = logger.methodMap[level];
- if (typeof console !== 'undefined' && console[method]) {
- console[method].call(console, obj);
- }
- }
- }
- };
- __exports__.logger = logger;
- function log(level, obj) { logger.log(level, obj); }
-
- __exports__.log = log;var createFrame = function(object) {
- var obj = {};
- Utils.extend(obj, object);
- return obj;
- };
- __exports__.createFrame = createFrame;
- return __exports__;
-})(__module3__, __module5__);
-
-// handlebars/runtime.js
-var __module6__ = (function(__dependency1__, __dependency2__, __dependency3__) {
- "use strict";
- var __exports__ = {};
- var Utils = __dependency1__;
- var Exception = __dependency2__;
- var COMPILER_REVISION = __dependency3__.COMPILER_REVISION;
- var REVISION_CHANGES = __dependency3__.REVISION_CHANGES;
-
- function checkRevision(compilerInfo) {
- var compilerRevision = compilerInfo && compilerInfo[0] || 1,
- currentRevision = COMPILER_REVISION;
-
- if (compilerRevision !== currentRevision) {
- if (compilerRevision < currentRevision) {
- var runtimeVersions = REVISION_CHANGES[currentRevision],
- compilerVersions = REVISION_CHANGES[compilerRevision];
- throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+
- "Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");
- } else {
- // Use the embedded version info since the runtime doesn't know about this revision yet
- throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+
- "Please update your runtime to a newer version ("+compilerInfo[1]+").");
- }
- }
- }
-
- __exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial
-
- function template(templateSpec, env) {
- if (!env) {
- throw new Exception("No environment passed to template");
- }
-
- // Note: Using env.VM references rather than local var references throughout this section to allow
- // for external users to override these as psuedo-supported APIs.
- var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {
- var result = env.VM.invokePartial.apply(this, arguments);
- if (result != null) { return result; }
-
- if (env.compile) {
- var options = { helpers: helpers, partials: partials, data: data };
- partials[name] = env.compile(partial, { data: data !== undefined }, env);
- return partials[name](context, options);
- } else {
- throw new Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
- }
- };
-
- // Just add water
- var container = {
- escapeExpression: Utils.escapeExpression,
- invokePartial: invokePartialWrapper,
- programs: [],
- program: function(i, fn, data) {
- var programWrapper = this.programs[i];
- if(data) {
- programWrapper = program(i, fn, data);
- } else if (!programWrapper) {
- programWrapper = this.programs[i] = program(i, fn);
- }
- return programWrapper;
- },
- merge: function(param, common) {
- var ret = param || common;
-
- if (param && common && (param !== common)) {
- ret = {};
- Utils.extend(ret, common);
- Utils.extend(ret, param);
- }
- return ret;
- },
- programWithDepth: env.VM.programWithDepth,
- noop: env.VM.noop,
- compilerInfo: null
- };
-
- return function(context, options) {
- options = options || {};
- var namespace = options.partial ? options : env,
- helpers,
- partials;
-
- if (!options.partial) {
- helpers = options.helpers;
- partials = options.partials;
- }
- var result = templateSpec.call(
- container,
- namespace, context,
- helpers,
- partials,
- options.data);
-
- if (!options.partial) {
- env.VM.checkRevision(container.compilerInfo);
- }
-
- return result;
- };
- }
-
- __exports__.template = template;function programWithDepth(i, fn, data /*, $depth */) {
- var args = Array.prototype.slice.call(arguments, 3);
-
- var prog = function(context, options) {
- options = options || {};
-
- return fn.apply(this, [context, options.data || data].concat(args));
- };
- prog.program = i;
- prog.depth = args.length;
- return prog;
- }
-
- __exports__.programWithDepth = programWithDepth;function program(i, fn, data) {
- var prog = function(context, options) {
- options = options || {};
-
- return fn(context, options.data || data);
- };
- prog.program = i;
- prog.depth = 0;
- return prog;
- }
-
- __exports__.program = program;function invokePartial(partial, name, context, helpers, partials, data) {
- var options = { partial: true, helpers: helpers, partials: partials, data: data };
-
- if(partial === undefined) {
- throw new Exception("The partial " + name + " could not be found");
- } else if(partial instanceof Function) {
- return partial(context, options);
- }
- }
-
- __exports__.invokePartial = invokePartial;function noop() { return ""; }
-
- __exports__.noop = noop;
- return __exports__;
-})(__module3__, __module5__, __module2__);
-
-// handlebars.runtime.js
-var __module1__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
- "use strict";
- var __exports__;
- /*globals Handlebars: true */
- var base = __dependency1__;
-
- // Each of these augment the Handlebars object. No need to setup here.
- // (This is done to easily share code between commonjs and browse envs)
- var SafeString = __dependency2__;
- var Exception = __dependency3__;
- var Utils = __dependency4__;
- var runtime = __dependency5__;
-
- // For compatibility and usage outside of module systems, make the Handlebars object a namespace
- var create = function() {
- var hb = new base.HandlebarsEnvironment();
-
- Utils.extend(hb, base);
- hb.SafeString = SafeString;
- hb.Exception = Exception;
- hb.Utils = Utils;
-
- hb.VM = runtime;
- hb.template = function(spec) {
- return runtime.template(spec, hb);
- };
-
- return hb;
- };
-
- var Handlebars = create();
- Handlebars.create = create;
-
- __exports__ = Handlebars;
- return __exports__;
-})(__module2__, __module4__, __module5__, __module3__, __module6__);
-
-// handlebars/compiler/ast.js
-var __module7__ = (function(__dependency1__) {
- "use strict";
- var __exports__;
- var Exception = __dependency1__;
-
- function LocationInfo(locInfo){
- locInfo = locInfo || {};
- this.firstLine = locInfo.first_line;
- this.firstColumn = locInfo.first_column;
- this.lastColumn = locInfo.last_column;
- this.lastLine = locInfo.last_line;
- }
-
- var AST = {
- ProgramNode: function(statements, inverseStrip, inverse, locInfo) {
- var inverseLocationInfo, firstInverseNode;
- if (arguments.length === 3) {
- locInfo = inverse;
- inverse = null;
- } else if (arguments.length === 2) {
- locInfo = inverseStrip;
- inverseStrip = null;
- }
-
- LocationInfo.call(this, locInfo);
- this.type = "program";
- this.statements = statements;
- this.strip = {};
-
- if(inverse) {
- firstInverseNode = inverse[0];
- if (firstInverseNode) {
- inverseLocationInfo = {
- first_line: firstInverseNode.firstLine,
- last_line: firstInverseNode.lastLine,
- last_column: firstInverseNode.lastColumn,
- first_column: firstInverseNode.firstColumn
- };
- this.inverse = new AST.ProgramNode(inverse, inverseStrip, inverseLocationInfo);
- } else {
- this.inverse = new AST.ProgramNode(inverse, inverseStrip);
- }
- this.strip.right = inverseStrip.left;
- } else if (inverseStrip) {
- this.strip.left = inverseStrip.right;
- }
- },
-
- MustacheNode: function(rawParams, hash, open, strip, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "mustache";
- this.strip = strip;
-
- // Open may be a string parsed from the parser or a passed boolean flag
- if (open != null && open.charAt) {
- // Must use charAt to support IE pre-10
- var escapeFlag = open.charAt(3) || open.charAt(2);
- this.escaped = escapeFlag !== '{' && escapeFlag !== '&';
- } else {
- this.escaped = !!open;
- }
-
- if (rawParams instanceof AST.SexprNode) {
- this.sexpr = rawParams;
- } else {
- // Support old AST API
- this.sexpr = new AST.SexprNode(rawParams, hash);
- }
-
- this.sexpr.isRoot = true;
-
- // Support old AST API that stored this info in MustacheNode
- this.id = this.sexpr.id;
- this.params = this.sexpr.params;
- this.hash = this.sexpr.hash;
- this.eligibleHelper = this.sexpr.eligibleHelper;
- this.isHelper = this.sexpr.isHelper;
- },
-
- SexprNode: function(rawParams, hash, locInfo) {
- LocationInfo.call(this, locInfo);
-
- this.type = "sexpr";
- this.hash = hash;
-
- var id = this.id = rawParams[0];
- var params = this.params = rawParams.slice(1);
-
- // a mustache is an eligible helper if:
- // * its id is simple (a single part, not `this` or `..`)
- var eligibleHelper = this.eligibleHelper = id.isSimple;
-
- // a mustache is definitely a helper if:
- // * it is an eligible helper, and
- // * it has at least one parameter or hash segment
- this.isHelper = eligibleHelper && (params.length || hash);
-
- // if a mustache is an eligible helper but not a definite
- // helper, it is ambiguous, and will be resolved in a later
- // pass or at runtime.
- },
-
- PartialNode: function(partialName, context, strip, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "partial";
- this.partialName = partialName;
- this.context = context;
- this.strip = strip;
- },
-
- BlockNode: function(mustache, program, inverse, close, locInfo) {
- LocationInfo.call(this, locInfo);
-
- if(mustache.sexpr.id.original !== close.path.original) {
- throw new Exception(mustache.sexpr.id.original + " doesn't match " + close.path.original, this);
- }
-
- this.type = 'block';
- this.mustache = mustache;
- this.program = program;
- this.inverse = inverse;
-
- this.strip = {
- left: mustache.strip.left,
- right: close.strip.right
- };
-
- (program || inverse).strip.left = mustache.strip.right;
- (inverse || program).strip.right = close.strip.left;
-
- if (inverse && !program) {
- this.isInverse = true;
- }
- },
-
- ContentNode: function(string, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "content";
- this.string = string;
- },
-
- HashNode: function(pairs, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "hash";
- this.pairs = pairs;
- },
-
- IdNode: function(parts, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "ID";
-
- var original = "",
- dig = [],
- depth = 0;
-
- for(var i=0,l=parts.length; i<l; i++) {
- var part = parts[i].part;
- original += (parts[i].separator || '') + part;
-
- if (part === ".." || part === "." || part === "this") {
- if (dig.length > 0) {
- throw new Exception("Invalid path: " + original, this);
- } else if (part === "..") {
- depth++;
- } else {
- this.isScoped = true;
- }
- } else {
- dig.push(part);
- }
- }
-
- this.original = original;
- this.parts = dig;
- this.string = dig.join('.');
- this.depth = depth;
-
- // an ID is simple if it only has one part, and that part is not
- // `..` or `this`.
- this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;
-
- this.stringModeValue = this.string;
- },
-
- PartialNameNode: function(name, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "PARTIAL_NAME";
- this.name = name.original;
- },
-
- DataNode: function(id, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "DATA";
- this.id = id;
- },
-
- StringNode: function(string, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "STRING";
- this.original =
- this.string =
- this.stringModeValue = string;
- },
-
- IntegerNode: function(integer, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "INTEGER";
- this.original =
- this.integer = integer;
- this.stringModeValue = Number(integer);
- },
-
- BooleanNode: function(bool, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "BOOLEAN";
- this.bool = bool;
- this.stringModeValue = bool === "true";
- },
-
- CommentNode: function(comment, locInfo) {
- LocationInfo.call(this, locInfo);
- this.type = "comment";
- this.comment = comment;
- }
- };
-
- // Must be exported as an object rather than the root of the module as the jison lexer
- // most modify the object to operate properly.
- __exports__ = AST;
- return __exports__;
-})(__module5__);
-
-// handlebars/compiler/parser.js
-var __module9__ = (function() {
- "use strict";
- var __exports__;
- /* jshint ignore:start */
- /* Jison generated parser */
- var handlebars = (function(){
- var parser = {trace: function trace() { },
- yy: {},
- symbols_: {"error":2,"root":3,"statements":4,"EOF":5,"program":6,"simpleInverse":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"sexpr":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"CLOSE_UNESCAPED":24,"OPEN_PARTIAL":25,"partialName":26,"partial_option0":27,"sexpr_repetition0":28,"sexpr_option0":29,"dataName":30,"param":31,"STRING":32,"INTEGER":33,"BOOLEAN":34,"OPEN_SEXPR":35,"CLOSE_SEXPR":36,"hash":37,"hash_repetition_plus0":38,"hashSegment":39,"ID":40,"EQUALS":41,"DATA":42,"pathSegments":43,"SEP":44,"$accept":0,"$end":1},
- terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"CLOSE_UNESCAPED",25:"OPEN_PARTIAL",32:"STRING",33:"INTEGER",34:"BOOLEAN",35:"OPEN_SEXPR",36:"CLOSE_SEXPR",40:"ID",41:"EQUALS",42:"DATA",44:"SEP"},
- productions_: [0,[3,2],[3,1],[6,2],[6,3],[6,2],[6,1],[6,1],[6,0],[4,1],[4,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,4],[7,2],[17,3],[17,1],[31,1],[31,1],[31,1],[31,1],[31,1],[31,3],[37,1],[39,3],[26,1],[26,1],[26,1],[30,2],[21,1],[43,3],[43,1],[27,0],[27,1],[28,0],[28,2],[29,0],[29,1],[38,1],[38,2]],
- performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
-
- var $0 = $$.length - 1;
- switch (yystate) {
- case 1: return new yy.ProgramNode($$[$0-1], this._$);
- break;
- case 2: return new yy.ProgramNode([], this._$);
- break;
- case 3:this.$ = new yy.ProgramNode([], $$[$0-1], $$[$0], this._$);
- break;
- case 4:this.$ = new yy.ProgramNode($$[$0-2], $$[$0-1], $$[$0], this._$);
- break;
- case 5:this.$ = new yy.ProgramNode($$[$0-1], $$[$0], [], this._$);
- break;
- case 6:this.$ = new yy.ProgramNode($$[$0], this._$);
- break;
- case 7:this.$ = new yy.ProgramNode([], this._$);
- break;
- case 8:this.$ = new yy.ProgramNode([], this._$);
- break;
- case 9:this.$ = [$$[$0]];
- break;
- case 10: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
- break;
- case 11:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0], this._$);
- break;
- case 12:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0], this._$);
- break;
- case 13:this.$ = $$[$0];
- break;
- case 14:this.$ = $$[$0];
- break;
- case 15:this.$ = new yy.ContentNode($$[$0], this._$);
- break;
- case 16:this.$ = new yy.CommentNode($$[$0], this._$);
- break;
- case 17:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
- break;
- case 18:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
- break;
- case 19:this.$ = {path: $$[$0-1], strip: stripFlags($$[$0-2], $$[$0])};
- break;
- case 20:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
- break;
- case 21:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
- break;
- case 22:this.$ = new yy.PartialNode($$[$0-2], $$[$0-1], stripFlags($$[$0-3], $$[$0]), this._$);
- break;
- case 23:this.$ = stripFlags($$[$0-1], $$[$0]);
- break;
- case 24:this.$ = new yy.SexprNode([$$[$0-2]].concat($$[$0-1]), $$[$0], this._$);
- break;
- case 25:this.$ = new yy.SexprNode([$$[$0]], null, this._$);
- break;
- case 26:this.$ = $$[$0];
- break;
- case 27:this.$ = new yy.StringNode($$[$0], this._$);
- break;
- case 28:this.$ = new yy.IntegerNode($$[$0], this._$);
- break;
- case 29:this.$ = new yy.BooleanNode($$[$0], this._$);
- break;
- case 30:this.$ = $$[$0];
- break;
- case 31:$$[$0-1].isHelper = true; this.$ = $$[$0-1];
- break;
- case 32:this.$ = new yy.HashNode($$[$0], this._$);
- break;
- case 33:this.$ = [$$[$0-2], $$[$0]];
- break;
- case 34:this.$ = new yy.PartialNameNode($$[$0], this._$);
- break;
- case 35:this.$ = new yy.PartialNameNode(new yy.StringNode($$[$0], this._$), this._$);
- break;
- case 36:this.$ = new yy.PartialNameNode(new yy.IntegerNode($$[$0], this._$));
- break;
- case 37:this.$ = new yy.DataNode($$[$0], this._$);
- break;
- case 38:this.$ = new yy.IdNode($$[$0], this._$);
- break;
- case 39: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2];
- break;
- case 40:this.$ = [{part: $$[$0]}];
- break;
- case 43:this.$ = [];
- break;
- case 44:$$[$0-1].push($$[$0]);
- break;
- case 47:this.$ = [$$[$0]];
- break;
- case 48:$$[$0-1].push($$[$0]);
- break;
- }
- },
- table: [{3:1,4:2,5:[1,3],8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[3]},{5:[1,16],8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[2,2]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{4:20,6:18,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{4:20,6:22,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{17:23,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:29,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:30,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:31,21:24,30:25,40:[1,28],42:[1,27],43:26},{21:33,26:32,32:[1,34],33:[1,35],40:[1,28],43:26},{1:[2,1]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{10:36,20:[1,37]},{4:38,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,7],22:[1,13],23:[1,14],25:[1,15]},{7:39,8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,6],22:[1,13],23:[1,14],25:[1,15]},{17:23,18:[1,40],21:24,30:25,40:[1,28],42:[1,27],43:26},{10:41,20:[1,37]},{18:[1,42]},{18:[2,43],24:[2,43],28:43,32:[2,43],33:[2,43],34:[2,43],35:[2,43],36:[2,43],40:[2,43],42:[2,43]},{18:[2,25],24:[2,25],36:[2,25]},{18:[2,38],24:[2,38],32:[2,38],33:[2,38],34:[2,38],35:[2,38],36:[2,38],40:[2,38],42:[2,38],44:[1,44]},{21:45,40:[1,28],43:26},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],42:[2,40],44:[2,40]},{18:[1,46]},{18:[1,47]},{24:[1,48]},{18:[2,41],21:50,27:49,40:[1,28],43:26},{18:[2,34],40:[2,34]},{18:[2,35],40:[2,35]},{18:[2,36],40:[2,36]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{21:51,40:[1,28],43:26},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,3],22:[1,13],23:[1,14],25:[1,15]},{4:52,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,5],22:[1,13],23:[1,14],25:[1,15]},{14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]},{18:[2,45],21:56,24:[2,45],29:53,30:60,31:54,32:[1,57],33:[1,58],34:[1,59],35:[1,61],36:[2,45],37:55,38:62,39:63,40:[1,64],42:[1,27],43:26},{40:[1,65]},{18:[2,37],24:[2,37],32:[2,37],33:[2,37],34:[2,37],35:[2,37],36:[2,37],40:[2,37],42:[2,37]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],25:[2,17]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,66]},{18:[2,42]},{18:[1,67]},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],25:[1,15]},{18:[2,24],24:[2,24],36:[2,24]},{18:[2,44],24:[2,44],32:[2,44],33:[2,44],34:[2,44],35:[2,44],36:[2,44],40:[2,44],42:[2,44]},{18:[2,46],24:[2,46],36:[2,46]},{18:[2,26],24:[2,26],32:[2,26],33:[2,26],34:[2,26],35:[2,26],36:[2,26],40:[2,26],42:[2,26]},{18:[2,27],24:[2,27],32:[2,27],33:[2,27],34:[2,27],35:[2,27],36:[2,27],40:[2,27],42:[2,27]},{18:[2,28],24:[2,28],32:[2,28],33:[2,28],34:[2,28],35:[2,28],36:[2,28],40:[2,28],42:[2,28]},{18:[2,29],24:[2,29],32:[2,29],33:[2,29],34:[2,29],35:[2,29],36:[2,29],40:[2,29],42:[2,29]},{18:[2,30],24:[2,30],32:[2,30],33:[2,30],34:[2,30],35:[2,30],36:[2,30],40:[2,30],42:[2,30]},{17:68,21:24,30:25,40:[1,28],42:[1,27],43:26},{18:[2,32],24:[2,32],36:[2,32],39:69,40:[1,70]},{18:[2,47],24:[2,47],36:[2,47],40:[2,47]},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],41:[1,71],42:[2,40],44:[2,40]},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],35:[2,39],36:[2,39],40:[2,39],42:[2,39],44:[2,39]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{36:[1,72]},{18:[2,48],24:[2,48],36:[2,48],40:[2,48]},{41:[1,71]},{21:56,30:60,31:73,32:[1,57],33:[1,58],34:[1,59],35:[1,61],40:[1,28],42:[1,27],43:26},{18:[2,31],24:[2,31],32:[2,31],33:[2,31],34:[2,31],35:[2,31],36:[2,31],40:[2,31],42:[2,31]},{18:[2,33],24:[2,33],36:[2,33],40:[2,33]}],
- defaultActions: {3:[2,2],16:[2,1],50:[2,42]},
- parseError: function parseError(str, hash) {
- throw new Error(str);
- },
- parse: function parse(input) {
- var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
- this.lexer.setInput(input);
- this.lexer.yy = this.yy;
- this.yy.lexer = this.lexer;
- this.yy.parser = this;
- if (typeof this.lexer.yylloc == "undefined")
- this.lexer.yylloc = {};
- var yyloc = this.lexer.yylloc;
- lstack.push(yyloc);
- var ranges = this.lexer.options && this.lexer.options.ranges;
- if (typeof this.yy.parseError === "function")
- this.parseError = this.yy.parseError;
- function popStack(n) {
- stack.length = stack.length - 2 * n;
- vstack.length = vstack.length - n;
- lstack.length = lstack.length - n;
- }
- function lex() {
- var token;
- token = self.lexer.lex() || 1;
- if (typeof token !== "number") {
- token = self.symbols_[token] || token;
- }
- return token;
- }
- var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
- while (true) {
- state = stack[stack.length - 1];
- if (this.defaultActions[state]) {
- action = this.defaultActions[state];
- } else {
- if (symbol === null || typeof symbol == "undefined") {
- symbol = lex();
- }
- action = table[state] && table[state][symbol];
- }
- if (typeof action === "undefined" || !action.length || !action[0]) {
- var errStr = "";
- if (!recovering) {
- expected = [];
- for (p in table[state])
- if (this.terminals_[p] && p > 2) {
- expected.push("'" + this.terminals_[p] + "'");
- }
- if (this.lexer.showPosition) {
- errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
- } else {
- errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
- }
- this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
- }
- }
- if (action[0] instanceof Array && action.length > 1) {
- throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
- }
- switch (action[0]) {
- case 1:
- stack.push(symbol);
- vstack.push(this.lexer.yytext);
- lstack.push(this.lexer.yylloc);
- stack.push(action[1]);
- symbol = null;
- if (!preErrorSymbol) {
- yyleng = this.lexer.yyleng;
- yytext = this.lexer.yytext;
- yylineno = this.lexer.yylineno;
- yyloc = this.lexer.yylloc;
- if (recovering > 0)
- recovering--;
- } else {
- symbol = preErrorSymbol;
- preErrorSymbol = null;
- }
- break;
- case 2:
- len = this.productions_[action[1]][1];
- yyval.$ = vstack[vstack.length - len];
- yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
- if (ranges) {
- yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
- }
- r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
- if (typeof r !== "undefined") {
- return r;
- }
- if (len) {
- stack = stack.slice(0, -1 * len * 2);
- vstack = vstack.slice(0, -1 * len);
- lstack = lstack.slice(0, -1 * len);
- }
- stack.push(this.productions_[action[1]][0]);
- vstack.push(yyval.$);
- lstack.push(yyval._$);
- newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
- stack.push(newState);
- break;
- case 3:
- return true;
- }
- }
- return true;
- }
- };
-
-
- function stripFlags(open, close) {
- return {
- left: open.charAt(2) === '~',
- right: close.charAt(0) === '~' || close.charAt(1) === '~'
- };
- }
-
- /* Jison generated lexer */
- var lexer = (function(){
- var lexer = ({EOF:1,
- parseError:function parseError(str, hash) {
- if (this.yy.parser) {
- this.yy.parser.parseError(str, hash);
- } else {
- throw new Error(str);
- }
- },
- setInput:function (input) {
- this._input = input;
- this._more = this._less = this.done = false;
- this.yylineno = this.yyleng = 0;
- this.yytext = this.matched = this.match = '';
- this.conditionStack = ['INITIAL'];
- this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
- if (this.options.ranges) this.yylloc.range = [0,0];
- this.offset = 0;
- return this;
- },
- input:function () {
- var ch = this._input[0];
- this.yytext += ch;
- this.yyleng++;
- this.offset++;
- this.match += ch;
- this.matched += ch;
- var lines = ch.match(/(?:\r\n?|\n).*/g);
- if (lines) {
- this.yylineno++;
- this.yylloc.last_line++;
- } else {
- this.yylloc.last_column++;
- }
- if (this.options.ranges) this.yylloc.range[1]++;
-
- this._input = this._input.slice(1);
- return ch;
- },
- unput:function (ch) {
- var len = ch.length;
- var lines = ch.split(/(?:\r\n?|\n)/g);
-
- this._input = ch + this._input;
- this.yytext = this.yytext.substr(0, this.yytext.length-len-1);
- //this.yyleng -= len;
- this.offset -= len;
- var oldLines = this.match.split(/(?:\r\n?|\n)/g);
- this.match = this.match.substr(0, this.match.length-1);
- this.matched = this.matched.substr(0, this.matched.length-1);
-
- if (lines.length-1) this.yylineno -= lines.length-1;
- var r = this.yylloc.range;
-
- this.yylloc = {first_line: this.yylloc.first_line,
- last_line: this.yylineno+1,
- first_column: this.yylloc.first_column,
- last_column: lines ?
- (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:
- this.yylloc.first_column - len
- };
-
- if (this.options.ranges) {
- this.yylloc.range = [r[0], r[0] + this.yyleng - len];
- }
- return this;
- },
- more:function () {
- this._more = true;
- return this;
- },
- less:function (n) {
- this.unput(this.match.slice(n));
- },
- pastInput:function () {
- var past = this.matched.substr(0, this.matched.length - this.match.length);
- return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
- },
- upcomingInput:function () {
- var next = this.match;
- if (next.length < 20) {
- next += this._input.substr(0, 20-next.length);
- }
- return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");
- },
- showPosition:function () {
- var pre = this.pastInput();
- var c = new Array(pre.length + 1).join("-");
- return pre + this.upcomingInput() + "\n" + c+"^";
- },
- next:function () {
- if (this.done) {
- return this.EOF;
- }
- if (!this._input) this.done = true;
-
- var token,
- match,
- tempMatch,
- index,
- col,
- lines;
- if (!this._more) {
- this.yytext = '';
- this.match = '';
- }
- var rules = this._currentRules();
- for (var i=0;i < rules.length; i++) {
- tempMatch = this._input.match(this.rules[rules[i]]);
- if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
- match = tempMatch;
- index = i;
- if (!this.options.flex) break;
- }
- }
- if (match) {
- lines = match[0].match(/(?:\r\n?|\n).*/g);
- if (lines) this.yylineno += lines.length;
- this.yylloc = {first_line: this.yylloc.last_line,
- last_line: this.yylineno+1,
- first_column: this.yylloc.last_column,
- last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};
- this.yytext += match[0];
- this.match += match[0];
- this.matches = match;
- this.yyleng = this.yytext.length;
- if (this.options.ranges) {
- this.yylloc.range = [this.offset, this.offset += this.yyleng];
- }
- this._more = false;
- this._input = this._input.slice(match[0].length);
- this.matched += match[0];
- token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);
- if (this.done && this._input) this.done = false;
- if (token) return token;
- else return;
- }
- if (this._input === "") {
- return this.EOF;
- } else {
- return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
- {text: "", token: null, line: this.yylineno});
- }
- },
- lex:function lex() {
- var r = this.next();
- if (typeof r !== 'undefined') {
- return r;
- } else {
- return this.lex();
- }
- },
- begin:function begin(condition) {
- this.conditionStack.push(condition);
- },
- popState:function popState() {
- return this.conditionStack.pop();
- },
- _currentRules:function _currentRules() {
- return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
- },
- topState:function () {
- return this.conditionStack[this.conditionStack.length-2];
- },
- pushState:function begin(condition) {
- this.begin(condition);
- }});
- lexer.options = {};
- lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
-
-
- function strip(start, end) {
- return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end);
- }
-
-
- var YYSTATE=YY_START
- switch($avoiding_name_collisions) {
- case 0:
- if(yy_.yytext.slice(-2) === "\\\\") {
- strip(0,1);
- this.begin("mu");
- } else if(yy_.yytext.slice(-1) === "\\") {
- strip(0,1);
- this.begin("emu");
- } else {
- this.begin("mu");
- }
- if(yy_.yytext) return 14;
-
- break;
- case 1:return 14;
- break;
- case 2:
- this.popState();
- return 14;
-
- break;
- case 3:strip(0,4); this.popState(); return 15;
- break;
- case 4:return 35;
- break;
- case 5:return 36;
- break;
- case 6:return 25;
- break;
- case 7:return 16;
- break;
- case 8:return 20;
- break;
- case 9:return 19;
- break;
- case 10:return 19;
- break;
- case 11:return 23;
- break;
- case 12:return 22;
- break;
- case 13:this.popState(); this.begin('com');
- break;
- case 14:strip(3,5); this.popState(); return 15;
- break;
- case 15:return 22;
- break;
- case 16:return 41;
- break;
- case 17:return 40;
- break;
- case 18:return 40;
- break;
- case 19:return 44;
- break;
- case 20:// ignore whitespace
- break;
- case 21:this.popState(); return 24;
- break;
- case 22:this.popState(); return 18;
- break;
- case 23:yy_.yytext = strip(1,2).replace(/\\"/g,'"'); return 32;
- break;
- case 24:yy_.yytext = strip(1,2).replace(/\\'/g,"'"); return 32;
- break;
- case 25:return 42;
- break;
- case 26:return 34;
- break;
- case 27:return 34;
- break;
- case 28:return 33;
- break;
- case 29:return 40;
- break;
- case 30:yy_.yytext = strip(1,2); return 40;
- break;
- case 31:return 'INVALID';
- break;
- case 32:return 5;
- break;
- }
- };
- lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:-?[0-9]+(?=([~}\s)])))/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/];
- lexer.conditions = {"mu":{"rules":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[3],"inclusive":false},"INITIAL":{"rules":[0,1,32],"inclusive":true}};
- return lexer;})()
- parser.lexer = lexer;
- function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
- return new Parser;
- })();__exports__ = handlebars;
- /* jshint ignore:end */
- return __exports__;
-})();
-
-// handlebars/compiler/base.js
-var __module8__ = (function(__dependency1__, __dependency2__) {
- "use strict";
- var __exports__ = {};
- var parser = __dependency1__;
- var AST = __dependency2__;
-
- __exports__.parser = parser;
-
- function parse(input) {
- // Just return if an already-compile AST was passed in.
- if(input.constructor === AST.ProgramNode) { return input; }
-
- parser.yy = AST;
- return parser.parse(input);
- }
-
- __exports__.parse = parse;
- return __exports__;
-})(__module9__, __module7__);
-
-// handlebars/compiler/compiler.js
-var __module10__ = (function(__dependency1__) {
- "use strict";
- var __exports__ = {};
- var Exception = __dependency1__;
-
- function Compiler() {}
-
- __exports__.Compiler = Compiler;// the foundHelper register will disambiguate helper lookup from finding a
- // function in a context. This is necessary for mustache compatibility, which
- // requires that context functions in blocks are evaluated by blockHelperMissing,
- // and then proceed as if the resulting value was provided to blockHelperMissing.
-
- Compiler.prototype = {
- compiler: Compiler,
-
- disassemble: function() {
- var opcodes = this.opcodes, opcode, out = [], params, param;
-
- for (var i=0, l=opcodes.length; i<l; i++) {
- opcode = opcodes[i];
-
- if (opcode.opcode === 'DECLARE') {
- out.push("DECLARE " + opcode.name + "=" + opcode.value);
- } else {
- params = [];
- for (var j=0; j<opcode.args.length; j++) {
- param = opcode.args[j];
- if (typeof param === "string") {
- param = "\"" + param.replace("\n", "\\n") + "\"";
- }
- params.push(param);
- }
- out.push(opcode.opcode + " " + params.join(" "));
- }
- }
-
- return out.join("\n");
- },
-
- equals: function(other) {
- var len = this.opcodes.length;
- if (other.opcodes.length !== len) {
- return false;
- }
-
- for (var i = 0; i < len; i++) {
- var opcode = this.opcodes[i],
- otherOpcode = other.opcodes[i];
- if (opcode.opcode !== otherOpcode.opcode || opcode.args.length !== otherOpcode.args.length) {
- return false;
- }
- for (var j = 0; j < opcode.args.length; j++) {
- if (opcode.args[j] !== otherOpcode.args[j]) {
- return false;
- }
- }
- }
-
- len = this.children.length;
- if (other.children.length !== len) {
- return false;
- }
- for (i = 0; i < len; i++) {
- if (!this.children[i].equals(other.children[i])) {
- return false;
- }
- }
-
- return true;
- },
-
- guid: 0,
-
- compile: function(program, options) {
- this.opcodes = [];
- this.children = [];
- this.depths = {list: []};
- this.options = options;
-
- // These changes will propagate to the other compiler components
- var knownHelpers = this.options.knownHelpers;
- this.options.knownHelpers = {
- 'helperMissing': true,
- 'blockHelperMissing': true,
- 'each': true,
- 'if': true,
- 'unless': true,
- 'with': true,
- 'log': true
- };
- if (knownHelpers) {
- for (var name in knownHelpers) {
- this.options.knownHelpers[name] = knownHelpers[name];
- }
- }
-
- return this.accept(program);
- },
-
- accept: function(node) {
- var strip = node.strip || {},
- ret;
- if (strip.left) {
- this.opcode('strip');
- }
-
- ret = this[node.type](node);
-
- if (strip.right) {
- this.opcode('strip');
- }
-
- return ret;
- },
-
- program: function(program) {
- var statements = program.statements;
-
- for(var i=0, l=statements.length; i<l; i++) {
- this.accept(statements[i]);
- }
- this.isSimple = l === 1;
-
- this.depths.list = this.depths.list.sort(function(a, b) {
- return a - b;
- });
-
- return this;
- },
-
- compileProgram: function(program) {
- var result = new this.compiler().compile(program, this.options);
- var guid = this.guid++, depth;
-
- this.usePartial = this.usePartial || result.usePartial;
-
- this.children[guid] = result;
-
- for(var i=0, l=result.depths.list.length; i<l; i++) {
- depth = result.depths.list[i];
-
- if(depth < 2) { continue; }
- else { this.addDepth(depth - 1); }
- }
-
- return guid;
- },
-
- block: function(block) {
- var mustache = block.mustache,
- program = block.program,
- inverse = block.inverse;
-
- if (program) {
- program = this.compileProgram(program);
- }
-
- if (inverse) {
- inverse = this.compileProgram(inverse);
- }
-
- var sexpr = mustache.sexpr;
- var type = this.classifySexpr(sexpr);
-
- if (type === "helper") {
- this.helperSexpr(sexpr, program, inverse);
- } else if (type === "simple") {
- this.simpleSexpr(sexpr);
-
- // now that the simple mustache is resolved, we need to
- // evaluate it by executing `blockHelperMissing`
- this.opcode('pushProgram', program);
- this.opcode('pushProgram', inverse);
- this.opcode('emptyHash');
- this.opcode('blockValue');
- } else {
- this.ambiguousSexpr(sexpr, program, inverse);
-
- // now that the simple mustache is resolved, we need to
- // evaluate it by executing `blockHelperMissing`
- this.opcode('pushProgram', program);
- this.opcode('pushProgram', inverse);
- this.opcode('emptyHash');
- this.opcode('ambiguousBlockValue');
- }
-
- this.opcode('append');
- },
-
- hash: function(hash) {
- var pairs = hash.pairs, pair, val;
-
- this.opcode('pushHash');
-
- for(var i=0, l=pairs.length; i<l; i++) {
- pair = pairs[i];
- val = pair[1];
-
- if (this.options.stringParams) {
- if(val.depth) {
- this.addDepth(val.depth);
- }
- this.opcode('getContext', val.depth || 0);
- this.opcode('pushStringParam', val.stringModeValue, val.type);
-
- if (val.type === 'sexpr') {
- // Subexpressions get evaluated and passed in
- // in string params mode.
- this.sexpr(val);
- }
- } else {
- this.accept(val);
- }
-
- this.opcode('assignToHash', pair[0]);
- }
- this.opcode('popHash');
- },
-
- partial: function(partial) {
- var partialName = partial.partialName;
- this.usePartial = true;
-
- if(partial.context) {
- this.ID(partial.context);
- } else {
- this.opcode('push', 'depth0');
- }
-
- this.opcode('invokePartial', partialName.name);
- this.opcode('append');
- },
-
- content: function(content) {
- this.opcode('appendContent', content.string);
- },
-
- mustache: function(mustache) {
- this.sexpr(mustache.sexpr);
-
- if(mustache.escaped && !this.options.noEscape) {
- this.opcode('appendEscaped');
- } else {
- this.opcode('append');
- }
- },
-
- ambiguousSexpr: function(sexpr, program, inverse) {
- var id = sexpr.id,
- name = id.parts[0],
- isBlock = program != null || inverse != null;
-
- this.opcode('getContext', id.depth);
-
- this.opcode('pushProgram', program);
- this.opcode('pushProgram', inverse);
-
- this.opcode('invokeAmbiguous', name, isBlock);
- },
-
- simpleSexpr: function(sexpr) {
- var id = sexpr.id;
-
- if (id.type === 'DATA') {
- this.DATA(id);
- } else if (id.parts.length) {
- this.ID(id);
- } else {
- // Simplified ID for `this`
- this.addDepth(id.depth);
- this.opcode('getContext', id.depth);
- this.opcode('pushContext');
- }
-
- this.opcode('resolvePossibleLambda');
- },
-
- helperSexpr: function(sexpr, program, inverse) {
- var params = this.setupFullMustacheParams(sexpr, program, inverse),
- name = sexpr.id.parts[0];
-
- if (this.options.knownHelpers[name]) {
- this.opcode('invokeKnownHelper', params.length, name);
- } else if (this.options.knownHelpersOnly) {
- throw new Exception("You specified knownHelpersOnly, but used the unknown helper " + name, sexpr);
- } else {
- this.opcode('invokeHelper', params.length, name, sexpr.isRoot);
- }
- },
-
- sexpr: function(sexpr) {
- var type = this.classifySexpr(sexpr);
-
- if (type === "simple") {
- this.simpleSexpr(sexpr);
- } else if (type === "helper") {
- this.helperSexpr(sexpr);
- } else {
- this.ambiguousSexpr(sexpr);
- }
- },
-
- ID: function(id) {
- this.addDepth(id.depth);
- this.opcode('getContext', id.depth);
-
- var name = id.parts[0];
- if (!name) {
- this.opcode('pushContext');
- } else {
- this.opcode('lookupOnContext', id.parts[0]);
- }
-
- for(var i=1, l=id.parts.length; i<l; i++) {
- this.opcode('lookup', id.parts[i]);
- }
- },
-
- DATA: function(data) {
- this.options.data = true;
- if (data.id.isScoped || data.id.depth) {
- throw new Exception('Scoped data references are not supported: ' + data.original, data);
- }
-
- this.opcode('lookupData');
- var parts = data.id.parts;
- for(var i=0, l=parts.length; i<l; i++) {
- this.opcode('lookup', parts[i]);
- }
- },
-
- STRING: function(string) {
- this.opcode('pushString', string.string);
- },
-
- INTEGER: function(integer) {
- this.opcode('pushLiteral', integer.integer);
- },
-
- BOOLEAN: function(bool) {
- this.opcode('pushLiteral', bool.bool);
- },
-
- comment: function() {},
-
- // HELPERS
- opcode: function(name) {
- this.opcodes.push({ opcode: name, args: [].slice.call(arguments, 1) });
- },
-
- declare: function(name, value) {
- this.opcodes.push({ opcode: 'DECLARE', name: name, value: value });
- },
-
- addDepth: function(depth) {
- if(depth === 0) { return; }
-
- if(!this.depths[depth]) {
- this.depths[depth] = true;
- this.depths.list.push(depth);
- }
- },
-
- classifySexpr: function(sexpr) {
- var isHelper = sexpr.isHelper;
- var isEligible = sexpr.eligibleHelper;
- var options = this.options;
-
- // if ambiguous, we can possibly resolve the ambiguity now
- if (isEligible && !isHelper) {
- var name = sexpr.id.parts[0];
-
- if (options.knownHelpers[name]) {
- isHelper = true;
- } else if (options.knownHelpersOnly) {
- isEligible = false;
- }
- }
-
- if (isHelper) { return "helper"; }
- else if (isEligible) { return "ambiguous"; }
- else { return "simple"; }
- },
-
- pushParams: function(params) {
- var i = params.length, param;
-
- while(i--) {
- param = params[i];
-
- if(this.options.stringParams) {
- if(param.depth) {
- this.addDepth(param.depth);
- }
-
- this.opcode('getContext', param.depth || 0);
- this.opcode('pushStringParam', param.stringModeValue, param.type);
-
- if (param.type === 'sexpr') {
- // Subexpressions get evaluated and passed in
- // in string params mode.
- this.sexpr(param);
- }
- } else {
- this[param.type](param);
- }
- }
- },
-
- setupFullMustacheParams: function(sexpr, program, inverse) {
- var params = sexpr.params;
- this.pushParams(params);
-
- this.opcode('pushProgram', program);
- this.opcode('pushProgram', inverse);
-
- if (sexpr.hash) {
- this.hash(sexpr.hash);
- } else {
- this.opcode('emptyHash');
- }
-
- return params;
- }
- };
-
- function precompile(input, options, env) {
- if (input == null || (typeof input !== 'string' && input.constructor !== env.AST.ProgramNode)) {
- throw new Exception("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);
- }
-
- options = options || {};
- if (!('data' in options)) {
- options.data = true;
- }
-
- var ast = env.parse(input);
- var environment = new env.Compiler().compile(ast, options);
- return new env.JavaScriptCompiler().compile(environment, options);
- }
-
- __exports__.precompile = precompile;function compile(input, options, env) {
- if (input == null || (typeof input !== 'string' && input.constructor !== env.AST.ProgramNode)) {
- throw new Exception("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);
- }
-
- options = options || {};
-
- if (!('data' in options)) {
- options.data = true;
- }
-
- var compiled;
-
- function compileInput() {
- var ast = env.parse(input);
- var environment = new env.Compiler().compile(ast, options);
- var templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
- return env.template(templateSpec);
- }
-
- // Template is only compiled on first use and cached after that point.
- return function(context, options) {
- if (!compiled) {
- compiled = compileInput();
- }
- return compiled.call(this, context, options);
- };
- }
-
- __exports__.compile = compile;
- return __exports__;
-})(__module5__);
-
-// handlebars/compiler/javascript-compiler.js
-var __module11__ = (function(__dependency1__, __dependency2__) {
- "use strict";
- var __exports__;
- var COMPILER_REVISION = __dependency1__.COMPILER_REVISION;
- var REVISION_CHANGES = __dependency1__.REVISION_CHANGES;
- var log = __dependency1__.log;
- var Exception = __dependency2__;
-
- function Literal(value) {
- this.value = value;
- }
-
- function JavaScriptCompiler() {}
-
- JavaScriptCompiler.prototype = {
- // PUBLIC API: You can override these methods in a subclass to provide
- // alternative compiled forms for name lookup and buffering semantics
- nameLookup: function(parent, name /* , type*/) {
- var wrap,
- ret;
- if (parent.indexOf('depth') === 0) {
- wrap = true;
- }
-
- if (/^[0-9]+$/.test(name)) {
- ret = parent + "[" + name + "]";
- } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
- ret = parent + "." + name;
- }
- else {
- ret = parent + "['" + name + "']";
- }
-
- if (wrap) {
- return '(' + parent + ' && ' + ret + ')';
- } else {
- return ret;
- }
- },
-
- compilerInfo: function() {
- var revision = COMPILER_REVISION,
- versions = REVISION_CHANGES[revision];
- return "this.compilerInfo = ["+revision+",'"+versions+"'];\n";
- },
-
- appendToBuffer: function(string) {
- if (this.environment.isSimple) {
- return "return " + string + ";";
- } else {
- return {
- appendToBuffer: true,
- content: string,
- toString: function() { return "buffer += " + string + ";"; }
- };
- }
- },
-
- initializeBuffer: function() {
- return this.quotedString("");
- },
-
- namespace: "Handlebars",
- // END PUBLIC API
-
- compile: function(environment, options, context, asObject) {
- this.environment = environment;
- this.options = options || {};
-
- log('debug', this.environment.disassemble() + "\n\n");
-
- this.name = this.environment.name;
- this.isChild = !!context;
- this.context = context || {
- programs: [],
- environments: [],
- aliases: { }
- };
-
- this.preamble();
-
- this.stackSlot = 0;
- this.stackVars = [];
- this.registers = { list: [] };
- this.hashes = [];
- this.compileStack = [];
- this.inlineStack = [];
-
- this.compileChildren(environment, options);
-
- var opcodes = environment.opcodes, opcode;
-
- this.i = 0;
-
- for(var l=opcodes.length; this.i<l; this.i++) {
- opcode = opcodes[this.i];
-
- if(opcode.opcode === 'DECLARE') {
- this[opcode.name] = opcode.value;
- } else {
- this[opcode.opcode].apply(this, opcode.args);
- }
-
- // Reset the stripNext flag if it was not set by this operation.
- if (opcode.opcode !== this.stripNext) {
- this.stripNext = false;
- }
- }
-
- // Flush any trailing content that might be pending.
- this.pushSource('');
-
- if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {
- throw new Exception('Compile completed with content left on stack');
- }
-
- return this.createFunctionContext(asObject);
- },
-
- preamble: function() {
- var out = [];
-
- if (!this.isChild) {
- var namespace = this.namespace;
-
- var copies = "helpers = this.merge(helpers, " + namespace + ".helpers);";
- if (this.environment.usePartial) { copies = copies + " partials = this.merge(partials, " + namespace + ".partials);"; }
- if (this.options.data) { copies = copies + " data = data || {};"; }
- out.push(copies);
- } else {
- out.push('');
- }
-
- if (!this.environment.isSimple) {
- out.push(", buffer = " + this.initializeBuffer());
- } else {
- out.push("");
- }
-
- // track the last context pushed into place to allow skipping the
- // getContext opcode when it would be a noop
- this.lastContext = 0;
- this.source = out;
- },
-
- createFunctionContext: function(asObject) {
- var locals = this.stackVars.concat(this.registers.list);
-
- if(locals.length > 0) {
- this.source[1] = this.source[1] + ", " + locals.join(", ");
- }
-
- // Generate minimizer alias mappings
- if (!this.isChild) {
- for (var alias in this.context.aliases) {
- if (this.context.aliases.hasOwnProperty(alias)) {
- this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];
- }
- }
- }
-
- if (this.source[1]) {
- this.source[1] = "var " + this.source[1].substring(2) + ";";
- }
-
- // Merge children
- if (!this.isChild) {
- this.source[1] += '\n' + this.context.programs.join('\n') + '\n';
- }
-
- if (!this.environment.isSimple) {
- this.pushSource("return buffer;");
- }
-
- var params = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"];
-
- for(var i=0, l=this.environment.depths.list.length; i<l; i++) {
- params.push("depth" + this.environment.depths.list[i]);
- }
-
- // Perform a second pass over the output to merge content when possible
- var source = this.mergeSource();
-
- if (!this.isChild) {
- source = this.compilerInfo()+source;
- }
-
- if (asObject) {
- params.push(source);
-
- return Function.apply(this, params);
- } else {
- var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\n ' + source + '}';
- log('debug', functionSource + "\n\n");
- return functionSource;
- }
- },
- mergeSource: function() {
- // WARN: We are not handling the case where buffer is still populated as the source should
- // not have buffer append operations as their final action.
- var source = '',
- buffer;
- for (var i = 0, len = this.source.length; i < len; i++) {
- var line = this.source[i];
- if (line.appendToBuffer) {
- if (buffer) {
- buffer = buffer + '\n + ' + line.content;
- } else {
- buffer = line.content;
- }
- } else {
- if (buffer) {
- source += 'buffer += ' + buffer + ';\n ';
- buffer = undefined;
- }
- source += line + '\n ';
- }
- }
- return source;
- },
-
- // [blockValue]
- //
- // On stack, before: hash, inverse, program, value
- // On stack, after: return value of blockHelperMissing
- //
- // The purpose of this opcode is to take a block of the form
- // `{{#foo}}...{{/foo}}`, resolve the value of `foo`, and
- // replace it on the stack with the result of properly
- // invoking blockHelperMissing.
- blockValue: function() {
- this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
-
- var params = ["depth0"];
- this.setupParams(0, params);
-
- this.replaceStack(function(current) {
- params.splice(1, 0, current);
- return "blockHelperMissing.call(" + params.join(", ") + ")";
- });
- },
-
- // [ambiguousBlockValue]
- //
- // On stack, before: hash, inverse, program, value
- // Compiler value, before: lastHelper=value of last found helper, if any
- // On stack, after, if no lastHelper: same as [blockValue]
- // On stack, after, if lastHelper: value
- ambiguousBlockValue: function() {
- this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
-
- var params = ["depth0"];
- this.setupParams(0, params);
-
- var current = this.topStack();
- params.splice(1, 0, current);
-
- this.pushSource("if (!" + this.lastHelper + ") { " + current + " = blockHelperMissing.call(" + params.join(", ") + "); }");
- },
-
- // [appendContent]
- //
- // On stack, before: ...
- // On stack, after: ...
- //
- // Appends the string value of `content` to the current buffer
- appendContent: function(content) {
- if (this.pendingContent) {
- content = this.pendingContent + content;
- }
- if (this.stripNext) {
- content = content.replace(/^\s+/, '');
- }
-
- this.pendingContent = content;
- },
-
- // [strip]
- //
- // On stack, before: ...
- // On stack, after: ...
- //
- // Removes any trailing whitespace from the prior content node and flags
- // the next operation for stripping if it is a content node.
- strip: function() {
- if (this.pendingContent) {
- this.pendingContent = this.pendingContent.replace(/\s+$/, '');
- }
- this.stripNext = 'strip';
- },
-
- // [append]
- //
- // On stack, before: value, ...
- // On stack, after: ...
- //
- // Coerces `value` to a String and appends it to the current buffer.
- //
- // If `value` is truthy, or 0, it is coerced into a string and appended
- // Otherwise, the empty string is appended
- append: function() {
- // Force anything that is inlined onto the stack so we don't have duplication
- // when we examine local
- this.flushInline();
- var local = this.popStack();
- this.pushSource("if(" + local + " || " + local + " === 0) { " + this.appendToBuffer(local) + " }");
- if (this.environment.isSimple) {
- this.pushSource("else { " + this.appendToBuffer("''") + " }");
- }
- },
-
- // [appendEscaped]
- //
- // On stack, before: value, ...
- // On stack, after: ...
- //
- // Escape `value` and append it to the buffer
- appendEscaped: function() {
- this.context.aliases.escapeExpression = 'this.escapeExpression';
-
- this.pushSource(this.appendToBuffer("escapeExpression(" + this.popStack() + ")"));
- },
-
- // [getContext]
- //
- // On stack, before: ...
- // On stack, after: ...
- // Compiler value, after: lastContext=depth
- //
- // Set the value of the `lastContext` compiler value to the depth
- getContext: function(depth) {
- if(this.lastContext !== depth) {
- this.lastContext = depth;
- }
- },
-
- // [lookupOnContext]
- //
- // On stack, before: ...
- // On stack, after: currentContext[name], ...
- //
- // Looks up the value of `name` on the current context and pushes
- // it onto the stack.
- lookupOnContext: function(name) {
- this.push(this.nameLookup('depth' + this.lastContext, name, 'context'));
- },
-
- // [pushContext]
- //
- // On stack, before: ...
- // On stack, after: currentContext, ...
- //
- // Pushes the value of the current context onto the stack.
- pushContext: function() {
- this.pushStackLiteral('depth' + this.lastContext);
- },
-
- // [resolvePossibleLambda]
- //
- // On stack, before: value, ...
- // On stack, after: resolved value, ...
- //
- // If the `value` is a lambda, replace it on the stack by
- // the return value of the lambda
- resolvePossibleLambda: function() {
- this.context.aliases.functionType = '"function"';
-
- this.replaceStack(function(current) {
- return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current;
- });
- },
-
- // [lookup]
- //
- // On stack, before: value, ...
- // On stack, after: value[name], ...
- //
- // Replace the value on the stack with the result of looking
- // up `name` on `value`
- lookup: function(name) {
- this.replaceStack(function(current) {
- return current + " == null || " + current + " === false ? " + current + " : " + this.nameLookup(current, name, 'context');
- });
- },
-
- // [lookupData]
- //
- // On stack, before: ...
- // On stack, after: data, ...
- //
- // Push the data lookup operator
- lookupData: function() {
- this.pushStackLiteral('data');
- },
-
- // [pushStringParam]
- //
- // On stack, before: ...
- // On stack, after: string, currentContext, ...
- //
- // This opcode is designed for use in string mode, which
- // provides the string value of a parameter along with its
- // depth rather than resolving it immediately.
- pushStringParam: function(string, type) {
- this.pushStackLiteral('depth' + this.lastContext);
-
- this.pushString(type);
-
- // If it's a subexpression, the string result
- // will be pushed after this opcode.
- if (type !== 'sexpr') {
- if (typeof string === 'string') {
- this.pushString(string);
- } else {
- this.pushStackLiteral(string);
- }
- }
- },
-
- emptyHash: function() {
- this.pushStackLiteral('{}');
-
- if (this.options.stringParams) {
- this.push('{}'); // hashContexts
- this.push('{}'); // hashTypes
- }
- },
- pushHash: function() {
- if (this.hash) {
- this.hashes.push(this.hash);
- }
- this.hash = {values: [], types: [], contexts: []};
- },
- popHash: function() {
- var hash = this.hash;
- this.hash = this.hashes.pop();
-
- if (this.options.stringParams) {
- this.push('{' + hash.contexts.join(',') + '}');
- this.push('{' + hash.types.join(',') + '}');
- }
-
- this.push('{\n ' + hash.values.join(',\n ') + '\n }');
- },
-
- // [pushString]
- //
- // On stack, before: ...
- // On stack, after: quotedString(string), ...
- //
- // Push a quoted version of `string` onto the stack
- pushString: function(string) {
- this.pushStackLiteral(this.quotedString(string));
- },
-
- // [push]
- //
- // On stack, before: ...
- // On stack, after: expr, ...
- //
- // Push an expression onto the stack
- push: function(expr) {
- this.inlineStack.push(expr);
- return expr;
- },
-
- // [pushLiteral]
- //
- // On stack, before: ...
- // On stack, after: value, ...
- //
- // Pushes a value onto the stack. This operation prevents
- // the compiler from creating a temporary variable to hold
- // it.
- pushLiteral: function(value) {
- this.pushStackLiteral(value);
- },
-
- // [pushProgram]
- //
- // On stack, before: ...
- // On stack, after: program(guid), ...
- //
- // Push a program expression onto the stack. This takes
- // a compile-time guid and converts it into a runtime-accessible
- // expression.
- pushProgram: function(guid) {
- if (guid != null) {
- this.pushStackLiteral(this.programExpression(guid));
- } else {
- this.pushStackLiteral(null);
- }
- },
-
- // [invokeHelper]
- //
- // On stack, before: hash, inverse, program, params..., ...
- // On stack, after: result of helper invocation
- //
- // Pops off the helper's parameters, invokes the helper,
- // and pushes the helper's return value onto the stack.
- //
- // If the helper is not found, `helperMissing` is called.
- invokeHelper: function(paramSize, name, isRoot) {
- this.context.aliases.helperMissing = 'helpers.helperMissing';
- this.useRegister('helper');
-
- var helper = this.lastHelper = this.setupHelper(paramSize, name, true);
- var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
-
- var lookup = 'helper = ' + helper.name + ' || ' + nonHelper;
- if (helper.paramsInit) {
- lookup += ',' + helper.paramsInit;
- }
-
- this.push(
- '('
- + lookup
- + ',helper '
- + '? helper.call(' + helper.callParams + ') '
- + ': helperMissing.call(' + helper.helperMissingParams + '))');
-
- // Always flush subexpressions. This is both to prevent the compounding size issue that
- // occurs when the code has to be duplicated for inlining and also to prevent errors
- // due to the incorrect options object being passed due to the shared register.
- if (!isRoot) {
- this.flushInline();
- }
- },
-
- // [invokeKnownHelper]
- //
- // On stack, before: hash, inverse, program, params..., ...
- // On stack, after: result of helper invocation
- //
- // This operation is used when the helper is known to exist,
- // so a `helperMissing` fallback is not required.
- invokeKnownHelper: function(paramSize, name) {
- var helper = this.setupHelper(paramSize, name);
- this.push(helper.name + ".call(" + helper.callParams + ")");
- },
-
- // [invokeAmbiguous]
- //
- // On stack, before: hash, inverse, program, params..., ...
- // On stack, after: result of disambiguation
- //
- // This operation is used when an expression like `{{foo}}`
- // is provided, but we don't know at compile-time whether it
- // is a helper or a path.
- //
- // This operation emits more code than the other options,
- // and can be avoided by passing the `knownHelpers` and
- // `knownHelpersOnly` flags at compile-time.
- invokeAmbiguous: function(name, helperCall) {
- this.context.aliases.functionType = '"function"';
- this.useRegister('helper');
-
- this.emptyHash();
- var helper = this.setupHelper(0, name, helperCall);
-
- var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
-
- var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
- var nextStack = this.nextStack();
-
- if (helper.paramsInit) {
- this.pushSource(helper.paramsInit);
- }
- this.pushSource('if (helper = ' + helperName + ') { ' + nextStack + ' = helper.call(' + helper.callParams + '); }');
- this.pushSource('else { helper = ' + nonHelper + '; ' + nextStack + ' = typeof helper === functionType ? helper.call(' + helper.callParams + ') : helper; }');
- },
-
- // [invokePartial]
- //
- // On stack, before: context, ...
- // On stack after: result of partial invocation
- //
- // This operation pops off a context, invokes a partial with that context,
- // and pushes the result of the invocation back.
- invokePartial: function(name) {
- var params = [this.nameLookup('partials', name, 'partial'), "'" + name + "'", this.popStack(), "helpers", "partials"];
-
- if (this.options.data) {
- params.push("data");
- }
-
- this.context.aliases.self = "this";
- this.push("self.invokePartial(" + params.join(", ") + ")");
- },
-
- // [assignToHash]
- //
- // On stack, before: value, hash, ...
- // On stack, after: hash, ...
- //
- // Pops a value and hash off the stack, assigns `hash[key] = value`
- // and pushes the hash back onto the stack.
- assignToHash: function(key) {
- var value = this.popStack(),
- context,
- type;
-
- if (this.options.stringParams) {
- type = this.popStack();
- context = this.popStack();
- }
-
- var hash = this.hash;
- if (context) {
- hash.contexts.push("'" + key + "': " + context);
- }
- if (type) {
- hash.types.push("'" + key + "': " + type);
- }
- hash.values.push("'" + key + "': (" + value + ")");
- },
-
- // HELPERS
-
- compiler: JavaScriptCompiler,
-
- compileChildren: function(environment, options) {
- var children = environment.children, child, compiler;
-
- for(var i=0, l=children.length; i<l; i++) {
- child = children[i];
- compiler = new this.compiler();
-
- var index = this.matchExistingProgram(child);
-
- if (index == null) {
- this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
- index = this.context.programs.length;
- child.index = index;
- child.name = 'program' + index;
- this.context.programs[index] = compiler.compile(child, options, this.context);
- this.context.environments[index] = child;
- } else {
- child.index = index;
- child.name = 'program' + index;
- }
- }
- },
- matchExistingProgram: function(child) {
- for (var i = 0, len = this.context.environments.length; i < len; i++) {
- var environment = this.context.environments[i];
- if (environment && environment.equals(child)) {
- return i;
- }
- }
- },
-
- programExpression: function(guid) {
- this.context.aliases.self = "this";
-
- if(guid == null) {
- return "self.noop";
- }
-
- var child = this.environment.children[guid],
- depths = child.depths.list, depth;
-
- var programParams = [child.index, child.name, "data"];
-
- for(var i=0, l = depths.length; i<l; i++) {
- depth = depths[i];
-
- if(depth === 1) { programParams.push("depth0"); }
- else { programParams.push("depth" + (depth - 1)); }
- }
-
- return (depths.length === 0 ? "self.program(" : "self.programWithDepth(") + programParams.join(", ") + ")";
- },
-
- register: function(name, val) {
- this.useRegister(name);
- this.pushSource(name + " = " + val + ";");
- },
-
- useRegister: function(name) {
- if(!this.registers[name]) {
- this.registers[name] = true;
- this.registers.list.push(name);
- }
- },
-
- pushStackLiteral: function(item) {
- return this.push(new Literal(item));
- },
-
- pushSource: function(source) {
- if (this.pendingContent) {
- this.source.push(this.appendToBuffer(this.quotedString(this.pendingContent)));
- this.pendingContent = undefined;
- }
-
- if (source) {
- this.source.push(source);
- }
- },
-
- pushStack: function(item) {
- this.flushInline();
-
- var stack = this.incrStack();
- if (item) {
- this.pushSource(stack + " = " + item + ";");
- }
- this.compileStack.push(stack);
- return stack;
- },
-
- replaceStack: function(callback) {
- var prefix = '',
- inline = this.isInline(),
- stack,
- createdStack,
- usedLiteral;
-
- // If we are currently inline then we want to merge the inline statement into the
- // replacement statement via ','
- if (inline) {
- var top = this.popStack(true);
-
- if (top instanceof Literal) {
- // Literals do not need to be inlined
- stack = top.value;
- usedLiteral = true;
- } else {
- // Get or create the current stack name for use by the inline
- createdStack = !this.stackSlot;
- var name = !createdStack ? this.topStackName() : this.incrStack();
-
- prefix = '(' + this.push(name) + ' = ' + top + '),';
- stack = this.topStack();
- }
- } else {
- stack = this.topStack();
- }
-
- var item = callback.call(this, stack);
-
- if (inline) {
- if (!usedLiteral) {
- this.popStack();
- }
- if (createdStack) {
- this.stackSlot--;
- }
- this.push('(' + prefix + item + ')');
- } else {
- // Prevent modification of the context depth variable. Through replaceStack
- if (!/^stack/.test(stack)) {
- stack = this.nextStack();
- }
-
- this.pushSource(stack + " = (" + prefix + item + ");");
- }
- return stack;
- },
-
- nextStack: function() {
- return this.pushStack();
- },
-
- incrStack: function() {
- this.stackSlot++;
- if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }
- return this.topStackName();
- },
- topStackName: function() {
- return "stack" + this.stackSlot;
- },
- flushInline: function() {
- var inlineStack = this.inlineStack;
- if (inlineStack.length) {
- this.inlineStack = [];
- for (var i = 0, len = inlineStack.length; i < len; i++) {
- var entry = inlineStack[i];
- if (entry instanceof Literal) {
- this.compileStack.push(entry);
- } else {
- this.pushStack(entry);
- }
- }
- }
- },
- isInline: function() {
- return this.inlineStack.length;
- },
-
- popStack: function(wrapped) {
- var inline = this.isInline(),
- item = (inline ? this.inlineStack : this.compileStack).pop();
-
- if (!wrapped && (item instanceof Literal)) {
- return item.value;
- } else {
- if (!inline) {
- if (!this.stackSlot) {
- throw new Exception('Invalid stack pop');
- }
- this.stackSlot--;
- }
- return item;
- }
- },
-
- topStack: function(wrapped) {
- var stack = (this.isInline() ? this.inlineStack : this.compileStack),
- item = stack[stack.length - 1];
-
- if (!wrapped && (item instanceof Literal)) {
- return item.value;
- } else {
- return item;
- }
- },
-
- quotedString: function(str) {
- return '"' + str
- .replace(/\\/g, '\\\\')
- .replace(/"/g, '\\"')
- .replace(/\n/g, '\\n')
- .replace(/\r/g, '\\r')
- .replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4
- .replace(/\u2029/g, '\\u2029') + '"';
- },
-
- setupHelper: function(paramSize, name, missingParams) {
- var params = [],
- paramsInit = this.setupParams(paramSize, params, missingParams);
- var foundHelper = this.nameLookup('helpers', name, 'helper');
-
- return {
- params: params,
- paramsInit: paramsInit,
- name: foundHelper,
- callParams: ["depth0"].concat(params).join(", "),
- helperMissingParams: missingParams && ["depth0", this.quotedString(name)].concat(params).join(", ")
- };
- },
-
- setupOptions: function(paramSize, params) {
- var options = [], contexts = [], types = [], param, inverse, program;
-
- options.push("hash:" + this.popStack());
-
- if (this.options.stringParams) {
- options.push("hashTypes:" + this.popStack());
- options.push("hashContexts:" + this.popStack());
- }
-
- inverse = this.popStack();
- program = this.popStack();
-
- // Avoid setting fn and inverse if neither are set. This allows
- // helpers to do a check for `if (options.fn)`
- if (program || inverse) {
- if (!program) {
- this.context.aliases.self = "this";
- program = "self.noop";
- }
-
- if (!inverse) {
- this.context.aliases.self = "this";
- inverse = "self.noop";
- }
-
- options.push("inverse:" + inverse);
- options.push("fn:" + program);
- }
-
- for(var i=0; i<paramSize; i++) {
- param = this.popStack();
- params.push(param);
-
- if(this.options.stringParams) {
- types.push(this.popStack());
- contexts.push(this.popStack());
- }
- }
-
- if (this.options.stringParams) {
- options.push("contexts:[" + contexts.join(",") + "]");
- options.push("types:[" + types.join(",") + "]");
- }
-
- if(this.options.data) {
- options.push("data:data");
- }
-
- return options;
- },
-
- // the params and contexts arguments are passed in arrays
- // to fill in
- setupParams: function(paramSize, params, useRegister) {
- var options = '{' + this.setupOptions(paramSize, params).join(',') + '}';
-
- if (useRegister) {
- this.useRegister('options');
- params.push('options');
- return 'options=' + options;
- } else {
- params.push(options);
- return '';
- }
- }
- };
-
- var reservedWords = (
- "break else new var" +
- " case finally return void" +
- " catch for switch while" +
- " continue function this with" +
- " default if throw" +
- " delete in try" +
- " do instanceof typeof" +
- " abstract enum int short" +
- " boolean export interface static" +
- " byte extends long super" +
- " char final native synchronized" +
- " class float package throws" +
- " const goto private transient" +
- " debugger implements protected volatile" +
- " double import public let yield"
- ).split(" ");
-
- var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
-
- for(var i=0, l=reservedWords.length; i<l; i++) {
- compilerWords[reservedWords[i]] = true;
- }
-
- JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {
- if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)) {
- return true;
- }
- return false;
- };
-
- __exports__ = JavaScriptCompiler;
- return __exports__;
-})(__module2__, __module5__);
-
-// handlebars.js
-var __module0__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
- "use strict";
- var __exports__;
- /*globals Handlebars: true */
- var Handlebars = __dependency1__;
-
- // Compiler imports
- var AST = __dependency2__;
- var Parser = __dependency3__.parser;
- var parse = __dependency3__.parse;
- var Compiler = __dependency4__.Compiler;
- var compile = __dependency4__.compile;
- var precompile = __dependency4__.precompile;
- var JavaScriptCompiler = __dependency5__;
-
- var _create = Handlebars.create;
- var create = function() {
- var hb = _create();
-
- hb.compile = function(input, options) {
- return compile(input, options, hb);
- };
- hb.precompile = function (input, options) {
- return precompile(input, options, hb);
- };
-
- hb.AST = AST;
- hb.Compiler = Compiler;
- hb.JavaScriptCompiler = JavaScriptCompiler;
- hb.Parser = Parser;
- hb.parse = parse;
-
- return hb;
- };
-
- Handlebars = create();
- Handlebars.create = create;
-
- __exports__ = Handlebars;
- return __exports__;
-})(__module1__, __module7__, __module8__, __module10__, __module11__);
-
- return __module0__;
-})();
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["Handlebars"] = factory();
+ else
+ root["Handlebars"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId])
+/******/ return installedModules[moduleId].exports;
+
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ exports: {},
+/******/ id: moduleId,
+/******/ loaded: false
+/******/ };
+
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ // Flag the module as loaded
+/******/ module.loaded = true;
+
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+
+
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _handlebarsRuntime = __webpack_require__(2);
+
+ var _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);
+
+ // Compiler imports
+
+ var _handlebarsCompilerAst = __webpack_require__(21);
+
+ var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);
+
+ var _handlebarsCompilerBase = __webpack_require__(22);
+
+ var _handlebarsCompilerCompiler = __webpack_require__(27);
+
+ var _handlebarsCompilerJavascriptCompiler = __webpack_require__(28);
+
+ var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
+
+ var _handlebarsCompilerVisitor = __webpack_require__(25);
+
+ var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);
+
+ var _handlebarsNoConflict = __webpack_require__(20);
+
+ var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
+
+ var _create = _handlebarsRuntime2['default'].create;
+ function create() {
+ var hb = _create();
+
+ hb.compile = function (input, options) {
+ return _handlebarsCompilerCompiler.compile(input, options, hb);
+ };
+ hb.precompile = function (input, options) {
+ return _handlebarsCompilerCompiler.precompile(input, options, hb);
+ };
+
+ hb.AST = _handlebarsCompilerAst2['default'];
+ hb.Compiler = _handlebarsCompilerCompiler.Compiler;
+ hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];
+ hb.Parser = _handlebarsCompilerBase.parser;
+ hb.parse = _handlebarsCompilerBase.parse;
+
+ return hb;
+ }
+
+ var inst = create();
+ inst.create = create;
+
+ _handlebarsNoConflict2['default'](inst);
+
+ inst.Visitor = _handlebarsCompilerVisitor2['default'];
+
+ inst['default'] = inst;
+
+ exports['default'] = inst;
+ module.exports = exports['default'];
+
+/***/ },
+/* 1 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports["default"] = function (obj) {
+ return obj && obj.__esModule ? obj : {
+ "default": obj
+ };
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireWildcard = __webpack_require__(3)['default'];
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _handlebarsBase = __webpack_require__(4);
+
+ var base = _interopRequireWildcard(_handlebarsBase);
+
+ // Each of these augment the Handlebars object. No need to setup here.
+ // (This is done to easily share code between commonjs and browse envs)
+
+ var _handlebarsSafeString = __webpack_require__(18);
+
+ var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
+
+ var _handlebarsException = __webpack_require__(6);
+
+ var _handlebarsException2 = _interopRequireDefault(_handlebarsException);
+
+ var _handlebarsUtils = __webpack_require__(5);
+
+ var Utils = _interopRequireWildcard(_handlebarsUtils);
+
+ var _handlebarsRuntime = __webpack_require__(19);
+
+ var runtime = _interopRequireWildcard(_handlebarsRuntime);
+
+ var _handlebarsNoConflict = __webpack_require__(20);
+
+ var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
+
+ // For compatibility and usage outside of module systems, make the Handlebars object a namespace
+ function create() {
+ var hb = new base.HandlebarsEnvironment();
+
+ Utils.extend(hb, base);
+ hb.SafeString = _handlebarsSafeString2['default'];
+ hb.Exception = _handlebarsException2['default'];
+ hb.Utils = Utils;
+ hb.escapeExpression = Utils.escapeExpression;
+
+ hb.VM = runtime;
+ hb.template = function (spec) {
+ return runtime.template(spec, hb);
+ };
+
+ return hb;
+ }
+
+ var inst = create();
+ inst.create = create;
+
+ _handlebarsNoConflict2['default'](inst);
+
+ inst['default'] = inst;
+
+ exports['default'] = inst;
+ module.exports = exports['default'];
+
+/***/ },
+/* 3 */
+/***/ function(module, exports) {
+
+ "use strict";
+
+ exports["default"] = function (obj) {
+ if (obj && obj.__esModule) {
+ return obj;
+ } else {
+ var newObj = {};
+
+ if (obj != null) {
+ for (var key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
+ }
+ }
+
+ newObj["default"] = obj;
+ return newObj;
+ }
+ };
+
+ exports.__esModule = true;
+
+/***/ },
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.HandlebarsEnvironment = HandlebarsEnvironment;
+
+ var _utils = __webpack_require__(5);
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ var _helpers = __webpack_require__(7);
+
+ var _decorators = __webpack_require__(15);
+
+ var _logger = __webpack_require__(17);
+
+ var _logger2 = _interopRequireDefault(_logger);
+
+ var VERSION = '4.0.5';
+ exports.VERSION = VERSION;
+ var COMPILER_REVISION = 7;
+
+ exports.COMPILER_REVISION = COMPILER_REVISION;
+ var REVISION_CHANGES = {
+ 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
+ 2: '== 1.0.0-rc.3',
+ 3: '== 1.0.0-rc.4',
+ 4: '== 1.x.x',
+ 5: '== 2.0.0-alpha.x',
+ 6: '>= 2.0.0-beta.1',
+ 7: '>= 4.0.0'
+ };
+
+ exports.REVISION_CHANGES = REVISION_CHANGES;
+ var objectType = '[object Object]';
+
+ function HandlebarsEnvironment(helpers, partials, decorators) {
+ this.helpers = helpers || {};
+ this.partials = partials || {};
+ this.decorators = decorators || {};
+
+ _helpers.registerDefaultHelpers(this);
+ _decorators.registerDefaultDecorators(this);
+ }
+
+ HandlebarsEnvironment.prototype = {
+ constructor: HandlebarsEnvironment,
+
+ logger: _logger2['default'],
+ log: _logger2['default'].log,
+
+ registerHelper: function registerHelper(name, fn) {
+ if (_utils.toString.call(name) === objectType) {
+ if (fn) {
+ throw new _exception2['default']('Arg not supported with multiple helpers');
+ }
+ _utils.extend(this.helpers, name);
+ } else {
+ this.helpers[name] = fn;
+ }
+ },
+ unregisterHelper: function unregisterHelper(name) {
+ delete this.helpers[name];
+ },
+
+ registerPartial: function registerPartial(name, partial) {
+ if (_utils.toString.call(name) === objectType) {
+ _utils.extend(this.partials, name);
+ } else {
+ if (typeof partial === 'undefined') {
+ throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined');
+ }
+ this.partials[name] = partial;
+ }
+ },
+ unregisterPartial: function unregisterPartial(name) {
+ delete this.partials[name];
+ },
+
+ registerDecorator: function registerDecorator(name, fn) {
+ if (_utils.toString.call(name) === objectType) {
+ if (fn) {
+ throw new _exception2['default']('Arg not supported with multiple decorators');
+ }
+ _utils.extend(this.decorators, name);
+ } else {
+ this.decorators[name] = fn;
+ }
+ },
+ unregisterDecorator: function unregisterDecorator(name) {
+ delete this.decorators[name];
+ }
+ };
+
+ var log = _logger2['default'].log;
+
+ exports.log = log;
+ exports.createFrame = _utils.createFrame;
+ exports.logger = _logger2['default'];
+
+/***/ },
+/* 5 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ exports.extend = extend;
+ exports.indexOf = indexOf;
+ exports.escapeExpression = escapeExpression;
+ exports.isEmpty = isEmpty;
+ exports.createFrame = createFrame;
+ exports.blockParams = blockParams;
+ exports.appendContextPath = appendContextPath;
+ var escape = {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#x27;',
+ '`': '&#x60;',
+ '=': '&#x3D;'
+ };
+
+ var badChars = /[&<>"'`=]/g,
+ possible = /[&<>"'`=]/;
+
+ function escapeChar(chr) {
+ return escape[chr];
+ }
+
+ function extend(obj /* , ...source */) {
+ for (var i = 1; i < arguments.length; i++) {
+ for (var key in arguments[i]) {
+ if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
+ obj[key] = arguments[i][key];
+ }
+ }
+ }
+
+ return obj;
+ }
+
+ var toString = Object.prototype.toString;
+
+ exports.toString = toString;
+ // Sourced from lodash
+ // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
+ /* eslint-disable func-style */
+ var isFunction = function isFunction(value) {
+ return typeof value === 'function';
+ };
+ // fallback for older versions of Chrome and Safari
+ /* istanbul ignore next */
+ if (isFunction(/x/)) {
+ exports.isFunction = isFunction = function (value) {
+ return typeof value === 'function' && toString.call(value) === '[object Function]';
+ };
+ }
+ exports.isFunction = isFunction;
+
+ /* eslint-enable func-style */
+
+ /* istanbul ignore next */
+ var isArray = Array.isArray || function (value) {
+ return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
+ };
+
+ exports.isArray = isArray;
+ // Older IE versions do not directly support indexOf so we must implement our own, sadly.
+
+ function indexOf(array, value) {
+ for (var i = 0, len = array.length; i < len; i++) {
+ if (array[i] === value) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ function escapeExpression(string) {
+ if (typeof string !== 'string') {
+ // don't escape SafeStrings, since they're already safe
+ if (string && string.toHTML) {
+ return string.toHTML();
+ } else if (string == null) {
+ return '';
+ } else if (!string) {
+ return string + '';
+ }
+
+ // Force a string conversion as this will be done by the append regardless and
+ // the regex test will do this transparently behind the scenes, causing issues if
+ // an object's to string has escaped characters in it.
+ string = '' + string;
+ }
+
+ if (!possible.test(string)) {
+ return string;
+ }
+ return string.replace(badChars, escapeChar);
+ }
+
+ function isEmpty(value) {
+ if (!value && value !== 0) {
+ return true;
+ } else if (isArray(value) && value.length === 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function createFrame(object) {
+ var frame = extend({}, object);
+ frame._parent = object;
+ return frame;
+ }
+
+ function blockParams(params, ids) {
+ params.path = ids;
+ return params;
+ }
+
+ function appendContextPath(contextPath, id) {
+ return (contextPath ? contextPath + '.' : '') + id;
+ }
+
+/***/ },
+/* 6 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
+
+ function Exception(message, node) {
+ var loc = node && node.loc,
+ line = undefined,
+ column = undefined;
+ if (loc) {
+ line = loc.start.line;
+ column = loc.start.column;
+
+ message += ' - ' + line + ':' + column;
+ }
+
+ var tmp = Error.prototype.constructor.call(this, message);
+
+ // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
+ for (var idx = 0; idx < errorProps.length; idx++) {
+ this[errorProps[idx]] = tmp[errorProps[idx]];
+ }
+
+ /* istanbul ignore else */
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, Exception);
+ }
+
+ if (loc) {
+ this.lineNumber = line;
+ this.column = column;
+ }
+ }
+
+ Exception.prototype = new Error();
+
+ exports['default'] = Exception;
+ module.exports = exports['default'];
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.registerDefaultHelpers = registerDefaultHelpers;
+
+ var _helpersBlockHelperMissing = __webpack_require__(8);
+
+ var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);
+
+ var _helpersEach = __webpack_require__(9);
+
+ var _helpersEach2 = _interopRequireDefault(_helpersEach);
+
+ var _helpersHelperMissing = __webpack_require__(10);
+
+ var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);
+
+ var _helpersIf = __webpack_require__(11);
+
+ var _helpersIf2 = _interopRequireDefault(_helpersIf);
+
+ var _helpersLog = __webpack_require__(12);
+
+ var _helpersLog2 = _interopRequireDefault(_helpersLog);
+
+ var _helpersLookup = __webpack_require__(13);
+
+ var _helpersLookup2 = _interopRequireDefault(_helpersLookup);
+
+ var _helpersWith = __webpack_require__(14);
+
+ var _helpersWith2 = _interopRequireDefault(_helpersWith);
+
+ function registerDefaultHelpers(instance) {
+ _helpersBlockHelperMissing2['default'](instance);
+ _helpersEach2['default'](instance);
+ _helpersHelperMissing2['default'](instance);
+ _helpersIf2['default'](instance);
+ _helpersLog2['default'](instance);
+ _helpersLookup2['default'](instance);
+ _helpersWith2['default'](instance);
+ }
+
+/***/ },
+/* 8 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('blockHelperMissing', function (context, options) {
+ var inverse = options.inverse,
+ fn = options.fn;
+
+ if (context === true) {
+ return fn(this);
+ } else if (context === false || context == null) {
+ return inverse(this);
+ } else if (_utils.isArray(context)) {
+ if (context.length > 0) {
+ if (options.ids) {
+ options.ids = [options.name];
+ }
+
+ return instance.helpers.each(context, options);
+ } else {
+ return inverse(this);
+ }
+ } else {
+ if (options.data && options.ids) {
+ var data = _utils.createFrame(options.data);
+ data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);
+ options = { data: data };
+ }
+
+ return fn(context, options);
+ }
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('each', function (context, options) {
+ if (!options) {
+ throw new _exception2['default']('Must pass iterator to #each');
+ }
+
+ var fn = options.fn,
+ inverse = options.inverse,
+ i = 0,
+ ret = '',
+ data = undefined,
+ contextPath = undefined;
+
+ if (options.data && options.ids) {
+ contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
+ }
+
+ if (_utils.isFunction(context)) {
+ context = context.call(this);
+ }
+
+ if (options.data) {
+ data = _utils.createFrame(options.data);
+ }
+
+ function execIteration(field, index, last) {
+ if (data) {
+ data.key = field;
+ data.index = index;
+ data.first = index === 0;
+ data.last = !!last;
+
+ if (contextPath) {
+ data.contextPath = contextPath + field;
+ }
+ }
+
+ ret = ret + fn(context[field], {
+ data: data,
+ blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])
+ });
+ }
+
+ if (context && typeof context === 'object') {
+ if (_utils.isArray(context)) {
+ for (var j = context.length; i < j; i++) {
+ if (i in context) {
+ execIteration(i, i, i === context.length - 1);
+ }
+ }
+ } else {
+ var priorKey = undefined;
+
+ for (var key in context) {
+ if (context.hasOwnProperty(key)) {
+ // We're running the iterations one step out of sync so we can detect
+ // the last iteration without have to scan the object twice and create
+ // an itermediate keys array.
+ if (priorKey !== undefined) {
+ execIteration(priorKey, i - 1);
+ }
+ priorKey = key;
+ i++;
+ }
+ }
+ if (priorKey !== undefined) {
+ execIteration(priorKey, i - 1, true);
+ }
+ }
+ }
+
+ if (i === 0) {
+ ret = inverse(this);
+ }
+
+ return ret;
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 10 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('helperMissing', function () /* [args, ]options */{
+ if (arguments.length === 1) {
+ // A missing field in a {{foo}} construct.
+ return undefined;
+ } else {
+ // Someone is actually trying to call something, blow up.
+ throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
+ }
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('if', function (conditional, options) {
+ if (_utils.isFunction(conditional)) {
+ conditional = conditional.call(this);
+ }
+
+ // Default behavior is to render the positive path if the value is truthy and not empty.
+ // The `includeZero` option may be set to treat the condtional as purely not empty based on the
+ // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
+ if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {
+ return options.inverse(this);
+ } else {
+ return options.fn(this);
+ }
+ });
+
+ instance.registerHelper('unless', function (conditional, options) {
+ return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('log', function () /* message, options */{
+ var args = [undefined],
+ options = arguments[arguments.length - 1];
+ for (var i = 0; i < arguments.length - 1; i++) {
+ args.push(arguments[i]);
+ }
+
+ var level = 1;
+ if (options.hash.level != null) {
+ level = options.hash.level;
+ } else if (options.data && options.data.level != null) {
+ level = options.data.level;
+ }
+ args[0] = level;
+
+ instance.log.apply(instance, args);
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 13 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('lookup', function (obj, field) {
+ return obj && obj[field];
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 14 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ exports['default'] = function (instance) {
+ instance.registerHelper('with', function (context, options) {
+ if (_utils.isFunction(context)) {
+ context = context.call(this);
+ }
+
+ var fn = options.fn;
+
+ if (!_utils.isEmpty(context)) {
+ var data = options.data;
+ if (options.data && options.ids) {
+ data = _utils.createFrame(options.data);
+ data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);
+ }
+
+ return fn(context, {
+ data: data,
+ blockParams: _utils.blockParams([context], [data && data.contextPath])
+ });
+ } else {
+ return options.inverse(this);
+ }
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 15 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.registerDefaultDecorators = registerDefaultDecorators;
+
+ var _decoratorsInline = __webpack_require__(16);
+
+ var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);
+
+ function registerDefaultDecorators(instance) {
+ _decoratorsInline2['default'](instance);
+ }
+
+/***/ },
+/* 16 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ exports['default'] = function (instance) {
+ instance.registerDecorator('inline', function (fn, props, container, options) {
+ var ret = fn;
+ if (!props.partials) {
+ props.partials = {};
+ ret = function (context, options) {
+ // Create a new partials stack frame prior to exec.
+ var original = container.partials;
+ container.partials = _utils.extend({}, original, props.partials);
+ var ret = fn(context, options);
+ container.partials = original;
+ return ret;
+ };
+ }
+
+ props.partials[options.args[0]] = options.fn;
+
+ return ret;
+ });
+ };
+
+ module.exports = exports['default'];
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ var logger = {
+ methodMap: ['debug', 'info', 'warn', 'error'],
+ level: 'info',
+
+ // Maps a given level value to the `methodMap` indexes above.
+ lookupLevel: function lookupLevel(level) {
+ if (typeof level === 'string') {
+ var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());
+ if (levelMap >= 0) {
+ level = levelMap;
+ } else {
+ level = parseInt(level, 10);
+ }
+ }
+
+ return level;
+ },
+
+ // Can be overridden in the host environment
+ log: function log(level) {
+ level = logger.lookupLevel(level);
+
+ if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
+ var method = logger.methodMap[level];
+ if (!console[method]) {
+ // eslint-disable-line no-console
+ method = 'log';
+ }
+
+ for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ message[_key - 1] = arguments[_key];
+ }
+
+ console[method].apply(console, message); // eslint-disable-line no-console
+ }
+ }
+ };
+
+ exports['default'] = logger;
+ module.exports = exports['default'];
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+ // Build out our basic SafeString type
+ 'use strict';
+
+ exports.__esModule = true;
+ function SafeString(string) {
+ this.string = string;
+ }
+
+ SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
+ return '' + this.string;
+ };
+
+ exports['default'] = SafeString;
+ module.exports = exports['default'];
+
+/***/ },
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireWildcard = __webpack_require__(3)['default'];
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.checkRevision = checkRevision;
+ exports.template = template;
+ exports.wrapProgram = wrapProgram;
+ exports.resolvePartial = resolvePartial;
+ exports.invokePartial = invokePartial;
+ exports.noop = noop;
+
+ var _utils = __webpack_require__(5);
+
+ var Utils = _interopRequireWildcard(_utils);
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ var _base = __webpack_require__(4);
+
+ function checkRevision(compilerInfo) {
+ var compilerRevision = compilerInfo && compilerInfo[0] || 1,
+ currentRevision = _base.COMPILER_REVISION;
+
+ if (compilerRevision !== currentRevision) {
+ if (compilerRevision < currentRevision) {
+ var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
+ compilerVersions = _base.REVISION_CHANGES[compilerRevision];
+ throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
+ } else {
+ // Use the embedded version info since the runtime doesn't know about this revision yet
+ throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
+ }
+ }
+ }
+
+ function template(templateSpec, env) {
+ /* istanbul ignore next */
+ if (!env) {
+ throw new _exception2['default']('No environment passed to template');
+ }
+ if (!templateSpec || !templateSpec.main) {
+ throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);
+ }
+
+ templateSpec.main.decorator = templateSpec.main_d;
+
+ // Note: Using env.VM references rather than local var references throughout this section to allow
+ // for external users to override these as psuedo-supported APIs.
+ env.VM.checkRevision(templateSpec.compiler);
+
+ function invokePartialWrapper(partial, context, options) {
+ if (options.hash) {
+ context = Utils.extend({}, context, options.hash);
+ if (options.ids) {
+ options.ids[0] = true;
+ }
+ }
+
+ partial = env.VM.resolvePartial.call(this, partial, context, options);
+ var result = env.VM.invokePartial.call(this, partial, context, options);
+
+ if (result == null && env.compile) {
+ options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
+ result = options.partials[options.name](context, options);
+ }
+ if (result != null) {
+ if (options.indent) {
+ var lines = result.split('\n');
+ for (var i = 0, l = lines.length; i < l; i++) {
+ if (!lines[i] && i + 1 === l) {
+ break;
+ }
+
+ lines[i] = options.indent + lines[i];
+ }
+ result = lines.join('\n');
+ }
+ return result;
+ } else {
+ throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
+ }
+ }
+
+ // Just add water
+ var container = {
+ strict: function strict(obj, name) {
+ if (!(name in obj)) {
+ throw new _exception2['default']('"' + name + '" not defined in ' + obj);
+ }
+ return obj[name];
+ },
+ lookup: function lookup(depths, name) {
+ var len = depths.length;
+ for (var i = 0; i < len; i++) {
+ if (depths[i] && depths[i][name] != null) {
+ return depths[i][name];
+ }
+ }
+ },
+ lambda: function lambda(current, context) {
+ return typeof current === 'function' ? current.call(context) : current;
+ },
+
+ escapeExpression: Utils.escapeExpression,
+ invokePartial: invokePartialWrapper,
+
+ fn: function fn(i) {
+ var ret = templateSpec[i];
+ ret.decorator = templateSpec[i + '_d'];
+ return ret;
+ },
+
+ programs: [],
+ program: function program(i, data, declaredBlockParams, blockParams, depths) {
+ var programWrapper = this.programs[i],
+ fn = this.fn(i);
+ if (data || depths || blockParams || declaredBlockParams) {
+ programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
+ } else if (!programWrapper) {
+ programWrapper = this.programs[i] = wrapProgram(this, i, fn);
+ }
+ return programWrapper;
+ },
+
+ data: function data(value, depth) {
+ while (value && depth--) {
+ value = value._parent;
+ }
+ return value;
+ },
+ merge: function merge(param, common) {
+ var obj = param || common;
+
+ if (param && common && param !== common) {
+ obj = Utils.extend({}, common, param);
+ }
+
+ return obj;
+ },
+
+ noop: env.VM.noop,
+ compilerInfo: templateSpec.compiler
+ };
+
+ function ret(context) {
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+ var data = options.data;
+
+ ret._setup(options);
+ if (!options.partial && templateSpec.useData) {
+ data = initData(context, data);
+ }
+ var depths = undefined,
+ blockParams = templateSpec.useBlockParams ? [] : undefined;
+ if (templateSpec.useDepths) {
+ if (options.depths) {
+ depths = context !== options.depths[0] ? [context].concat(options.depths) : options.depths;
+ } else {
+ depths = [context];
+ }
+ }
+
+ function main(context /*, options*/) {
+ return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
+ }
+ main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
+ return main(context, options);
+ }
+ ret.isTop = true;
+
+ ret._setup = function (options) {
+ if (!options.partial) {
+ container.helpers = container.merge(options.helpers, env.helpers);
+
+ if (templateSpec.usePartial) {
+ container.partials = container.merge(options.partials, env.partials);
+ }
+ if (templateSpec.usePartial || templateSpec.useDecorators) {
+ container.decorators = container.merge(options.decorators, env.decorators);
+ }
+ } else {
+ container.helpers = options.helpers;
+ container.partials = options.partials;
+ container.decorators = options.decorators;
+ }
+ };
+
+ ret._child = function (i, data, blockParams, depths) {
+ if (templateSpec.useBlockParams && !blockParams) {
+ throw new _exception2['default']('must pass block params');
+ }
+ if (templateSpec.useDepths && !depths) {
+ throw new _exception2['default']('must pass parent depths');
+ }
+
+ return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
+ };
+ return ret;
+ }
+
+ function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
+ function prog(context) {
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+ var currentDepths = depths;
+ if (depths && context !== depths[0]) {
+ currentDepths = [context].concat(depths);
+ }
+
+ return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
+ }
+
+ prog = executeDecorators(fn, prog, container, depths, data, blockParams);
+
+ prog.program = i;
+ prog.depth = depths ? depths.length : 0;
+ prog.blockParams = declaredBlockParams || 0;
+ return prog;
+ }
+
+ function resolvePartial(partial, context, options) {
+ if (!partial) {
+ if (options.name === '@partial-block') {
+ partial = options.data['partial-block'];
+ } else {
+ partial = options.partials[options.name];
+ }
+ } else if (!partial.call && !options.name) {
+ // This is a dynamic partial that returned a string
+ options.name = partial;
+ partial = options.partials[partial];
+ }
+ return partial;
+ }
+
+ function invokePartial(partial, context, options) {
+ options.partial = true;
+ if (options.ids) {
+ options.data.contextPath = options.ids[0] || options.data.contextPath;
+ }
+
+ var partialBlock = undefined;
+ if (options.fn && options.fn !== noop) {
+ options.data = _base.createFrame(options.data);
+ partialBlock = options.data['partial-block'] = options.fn;
+
+ if (partialBlock.partials) {
+ options.partials = Utils.extend({}, options.partials, partialBlock.partials);
+ }
+ }
+
+ if (partial === undefined && partialBlock) {
+ partial = partialBlock;
+ }
+
+ if (partial === undefined) {
+ throw new _exception2['default']('The partial ' + options.name + ' could not be found');
+ } else if (partial instanceof Function) {
+ return partial(context, options);
+ }
+ }
+
+ function noop() {
+ return '';
+ }
+
+ function initData(context, data) {
+ if (!data || !('root' in data)) {
+ data = data ? _base.createFrame(data) : {};
+ data.root = context;
+ }
+ return data;
+ }
+
+ function executeDecorators(fn, prog, container, depths, data, blockParams) {
+ if (fn.decorator) {
+ var props = {};
+ prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
+ Utils.extend(prog, props);
+ }
+ return prog;
+ }
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+ /* WEBPACK VAR INJECTION */(function(global) {/* global window */
+ 'use strict';
+
+ exports.__esModule = true;
+
+ exports['default'] = function (Handlebars) {
+ /* istanbul ignore next */
+ var root = typeof global !== 'undefined' ? global : window,
+ $Handlebars = root.Handlebars;
+ /* istanbul ignore next */
+ Handlebars.noConflict = function () {
+ if (root.Handlebars === Handlebars) {
+ root.Handlebars = $Handlebars;
+ }
+ return Handlebars;
+ };
+ };
+
+ module.exports = exports['default'];
+ /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 21 */
+/***/ function(module, exports) {
+
+ 'use strict';
+
+ exports.__esModule = true;
+ var AST = {
+ // Public API used to evaluate derived attributes regarding AST nodes
+ helpers: {
+ // a mustache is definitely a helper if:
+ // * it is an eligible helper, and
+ // * it has at least one parameter or hash segment
+ helperExpression: function helperExpression(node) {
+ return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);
+ },
+
+ scopedId: function scopedId(path) {
+ return (/^\.|this\b/.test(path.original)
+ );
+ },
+
+ // an ID is simple if it only has one part, and that part is not
+ // `..` or `this`.
+ simpleId: function simpleId(path) {
+ return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;
+ }
+ }
+ };
+
+ // Must be exported as an object rather than the root of the module as the jison lexer
+ // must modify the object to operate properly.
+ exports['default'] = AST;
+ module.exports = exports['default'];
+
+/***/ },
+/* 22 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ var _interopRequireWildcard = __webpack_require__(3)['default'];
+
+ exports.__esModule = true;
+ exports.parse = parse;
+
+ var _parser = __webpack_require__(23);
+
+ var _parser2 = _interopRequireDefault(_parser);
+
+ var _whitespaceControl = __webpack_require__(24);
+
+ var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);
+
+ var _helpers = __webpack_require__(26);
+
+ var Helpers = _interopRequireWildcard(_helpers);
+
+ var _utils = __webpack_require__(5);
+
+ exports.parser = _parser2['default'];
+
+ var yy = {};
+ _utils.extend(yy, Helpers);
+
+ function parse(input, options) {
+ // Just return if an already-compiled AST was passed in.
+ if (input.type === 'Program') {
+ return input;
+ }
+
+ _parser2['default'].yy = yy;
+
+ // Altering the shared object here, but this is ok as parser is a sync operation
+ yy.locInfo = function (locInfo) {
+ return new yy.SourceLocation(options && options.srcName, locInfo);
+ };
+
+ var strip = new _whitespaceControl2['default'](options);
+ return strip.accept(_parser2['default'].parse(input));
+ }
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+ /* istanbul ignore next */
+ /* Jison generated parser */
+ "use strict";
+
+ var handlebars = (function () {
+ var parser = { trace: function trace() {},
+ yy: {},
+ symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition_plus0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 },
+ terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" },
+ productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 1], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],
+ performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$
+ /**/) {
+
+ var $0 = $$.length - 1;
+ switch (yystate) {
+ case 1:
+ return $$[$0 - 1];
+ break;
+ case 2:
+ this.$ = yy.prepareProgram($$[$0]);
+ break;
+ case 3:
+ this.$ = $$[$0];
+ break;
+ case 4:
+ this.$ = $$[$0];
+ break;
+ case 5:
+ this.$ = $$[$0];
+ break;
+ case 6:
+ this.$ = $$[$0];
+ break;
+ case 7:
+ this.$ = $$[$0];
+ break;
+ case 8:
+ this.$ = $$[$0];
+ break;
+ case 9:
+ this.$ = {
+ type: 'CommentStatement',
+ value: yy.stripComment($$[$0]),
+ strip: yy.stripFlags($$[$0], $$[$0]),
+ loc: yy.locInfo(this._$)
+ };
+
+ break;
+ case 10:
+ this.$ = {
+ type: 'ContentStatement',
+ original: $$[$0],
+ value: $$[$0],
+ loc: yy.locInfo(this._$)
+ };
+
+ break;
+ case 11:
+ this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
+ break;
+ case 12:
+ this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };
+ break;
+ case 13:
+ this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);
+ break;
+ case 14:
+ this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);
+ break;
+ case 15:
+ this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+ break;
+ case 16:
+ this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+ break;
+ case 17:
+ this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+ break;
+ case 18:
+ this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };
+ break;
+ case 19:
+ var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),
+ program = yy.prepareProgram([inverse], $$[$0 - 1].loc);
+ program.chained = true;
+
+ this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };
+
+ break;
+ case 20:
+ this.$ = $$[$0];
+ break;
+ case 21:
+ this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };
+ break;
+ case 22:
+ this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
+ break;
+ case 23:
+ this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
+ break;
+ case 24:
+ this.$ = {
+ type: 'PartialStatement',
+ name: $$[$0 - 3],
+ params: $$[$0 - 2],
+ hash: $$[$0 - 1],
+ indent: '',
+ strip: yy.stripFlags($$[$0 - 4], $$[$0]),
+ loc: yy.locInfo(this._$)
+ };
+
+ break;
+ case 25:
+ this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
+ break;
+ case 26:
+ this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };
+ break;
+ case 27:
+ this.$ = $$[$0];
+ break;
+ case 28:
+ this.$ = $$[$0];
+ break;
+ case 29:
+ this.$ = {
+ type: 'SubExpression',
+ path: $$[$0 - 3],
+ params: $$[$0 - 2],
+ hash: $$[$0 - 1],
+ loc: yy.locInfo(this._$)
+ };
+
+ break;
+ case 30:
+ this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };
+ break;
+ case 31:
+ this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };
+ break;
+ case 32:
+ this.$ = yy.id($$[$0 - 1]);
+ break;
+ case 33:
+ this.$ = $$[$0];
+ break;
+ case 34:
+ this.$ = $$[$0];
+ break;
+ case 35:
+ this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };
+ break;
+ case 36:
+ this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };
+ break;
+ case 37:
+ this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };
+ break;
+ case 38:
+ this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };
+ break;
+ case 39:
+ this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };
+ break;
+ case 40:
+ this.$ = $$[$0];
+ break;
+ case 41:
+ this.$ = $$[$0];
+ break;
+ case 42:
+ this.$ = yy.preparePath(true, $$[$0], this._$);
+ break;
+ case 43:
+ this.$ = yy.preparePath(false, $$[$0], this._$);
+ break;
+ case 44:
+ $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];
+ break;
+ case 45:
+ this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];
+ break;
+ case 46:
+ this.$ = [];
+ break;
+ case 47:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 48:
+ this.$ = [$$[$0]];
+ break;
+ case 49:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 50:
+ this.$ = [];
+ break;
+ case 51:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 58:
+ this.$ = [];
+ break;
+ case 59:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 64:
+ this.$ = [];
+ break;
+ case 65:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 70:
+ this.$ = [];
+ break;
+ case 71:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 78:
+ this.$ = [];
+ break;
+ case 79:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 82:
+ this.$ = [];
+ break;
+ case 83:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 86:
+ this.$ = [];
+ break;
+ case 87:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 90:
+ this.$ = [];
+ break;
+ case 91:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 94:
+ this.$ = [];
+ break;
+ case 95:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 98:
+ this.$ = [$$[$0]];
+ break;
+ case 99:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ case 100:
+ this.$ = [$$[$0]];
+ break;
+ case 101:
+ $$[$0 - 1].push($$[$0]);
+ break;
+ }
+ },
+ table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 13: 40, 15: [1, 20], 17: 39 }, { 20: 42, 56: 41, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 45, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 48, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 42, 56: 49, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 50, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 51] }, { 72: [1, 35], 86: 52 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 53, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 54, 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 55, 47: [2, 54] }, { 28: 60, 43: 61, 44: [1, 59], 47: [2, 56] }, { 13: 63, 15: [1, 20], 18: [1, 62] }, { 15: [2, 48], 18: [2, 48] }, { 33: [2, 86], 57: 64, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 65, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 66, 47: [1, 67] }, { 30: 68, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 69, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 70, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 71, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 75, 33: [2, 80], 50: 72, 63: 73, 64: 76, 65: [1, 44], 69: 74, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 80] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 51] }, { 20: 75, 53: 81, 54: [2, 84], 63: 82, 64: 76, 65: [1, 44], 69: 83, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 84, 47: [1, 67] }, { 47: [2, 55] }, { 4: 85, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 86, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 87, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 88, 47: [1, 67] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 75, 33: [2, 88], 58: 89, 63: 90, 64: 76, 65: [1, 44], 69: 91, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 92, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 93, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 31: 94, 33: [2, 60], 63: 95, 64: 76, 65: [1, 44], 69: 96, 70: 77, 71: 78, 72: [1, 79], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 66], 36: 97, 63: 98, 64: 76, 65: [1, 44], 69: 99, 70: 77, 71: 78, 72: [1, 79], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 22: 100, 23: [2, 52], 63: 101, 64: 76, 65: [1, 44], 69: 102, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 92], 62: 103, 63: 104, 64: 76, 65: [1, 44], 69: 105, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 106] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 107, 72: [1, 108], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 109], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 110] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 112, 46: 111, 47: [2, 76] }, { 33: [2, 70], 40: 113, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 114] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 75, 63: 116, 64: 76, 65: [1, 44], 67: 115, 68: [2, 96], 69: 117, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 118] }, { 32: 119, 33: [2, 62], 74: 120, 75: [1, 121] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 122, 74: 123, 75: [1, 121] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 124] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 125] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 109] }, { 20: 75, 63: 126, 64: 76, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 75, 33: [2, 72], 41: 127, 63: 128, 64: 76, 65: [1, 44], 69: 129, 70: 77, 71: 78, 72: [1, 79], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 130] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 131] }, { 33: [2, 63] }, { 72: [1, 133], 76: 132 }, { 33: [1, 134] }, { 33: [2, 69] }, { 15: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 135, 74: 136, 75: [1, 121] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 138], 77: [1, 137] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 139] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],
+ defaultActions: { 4: [2, 1], 55: [2, 55], 57: [2, 20], 61: [2, 57], 74: [2, 81], 83: [2, 85], 87: [2, 18], 91: [2, 89], 102: [2, 53], 105: [2, 93], 111: [2, 19], 112: [2, 77], 117: [2, 97], 120: [2, 63], 123: [2, 69], 124: [2, 12], 136: [2, 75], 137: [2, 32] },
+ parseError: function parseError(str, hash) {
+ throw new Error(str);
+ },
+ parse: function parse(input) {
+ var self = this,
+ stack = [0],
+ vstack = [null],
+ lstack = [],
+ table = this.table,
+ yytext = "",
+ yylineno = 0,
+ yyleng = 0,
+ recovering = 0,
+ TERROR = 2,
+ EOF = 1;
+ this.lexer.setInput(input);
+ this.lexer.yy = this.yy;
+ this.yy.lexer = this.lexer;
+ this.yy.parser = this;
+ if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {};
+ var yyloc = this.lexer.yylloc;
+ lstack.push(yyloc);
+ var ranges = this.lexer.options && this.lexer.options.ranges;
+ if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError;
+ function popStack(n) {
+ stack.length = stack.length - 2 * n;
+ vstack.length = vstack.length - n;
+ lstack.length = lstack.length - n;
+ }
+ function lex() {
+ var token;
+ token = self.lexer.lex() || 1;
+ if (typeof token !== "number") {
+ token = self.symbols_[token] || token;
+ }
+ return token;
+ }
+ var symbol,
+ preErrorSymbol,
+ state,
+ action,
+ a,
+ r,
+ yyval = {},
+ p,
+ len,
+ newState,
+ expected;
+ while (true) {
+ state = stack[stack.length - 1];
+ if (this.defaultActions[state]) {
+ action = this.defaultActions[state];
+ } else {
+ if (symbol === null || typeof symbol == "undefined") {
+ symbol = lex();
+ }
+ action = table[state] && table[state][symbol];
+ }
+ if (typeof action === "undefined" || !action.length || !action[0]) {
+ var errStr = "";
+ if (!recovering) {
+ expected = [];
+ for (p in table[state]) if (this.terminals_[p] && p > 2) {
+ expected.push("'" + this.terminals_[p] + "'");
+ }
+ if (this.lexer.showPosition) {
+ errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
+ } else {
+ errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
+ }
+ this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });
+ }
+ }
+ if (action[0] instanceof Array && action.length > 1) {
+ throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
+ }
+ switch (action[0]) {
+ case 1:
+ stack.push(symbol);
+ vstack.push(this.lexer.yytext);
+ lstack.push(this.lexer.yylloc);
+ stack.push(action[1]);
+ symbol = null;
+ if (!preErrorSymbol) {
+ yyleng = this.lexer.yyleng;
+ yytext = this.lexer.yytext;
+ yylineno = this.lexer.yylineno;
+ yyloc = this.lexer.yylloc;
+ if (recovering > 0) recovering--;
+ } else {
+ symbol = preErrorSymbol;
+ preErrorSymbol = null;
+ }
+ break;
+ case 2:
+ len = this.productions_[action[1]][1];
+ yyval.$ = vstack[vstack.length - len];
+ yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };
+ if (ranges) {
+ yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
+ }
+ r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
+ if (typeof r !== "undefined") {
+ return r;
+ }
+ if (len) {
+ stack = stack.slice(0, -1 * len * 2);
+ vstack = vstack.slice(0, -1 * len);
+ lstack = lstack.slice(0, -1 * len);
+ }
+ stack.push(this.productions_[action[1]][0]);
+ vstack.push(yyval.$);
+ lstack.push(yyval._$);
+ newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
+ stack.push(newState);
+ break;
+ case 3:
+ return true;
+ }
+ }
+ return true;
+ }
+ };
+ /* Jison generated lexer */
+ var lexer = (function () {
+ var lexer = { EOF: 1,
+ parseError: function parseError(str, hash) {
+ if (this.yy.parser) {
+ this.yy.parser.parseError(str, hash);
+ } else {
+ throw new Error(str);
+ }
+ },
+ setInput: function setInput(input) {
+ this._input = input;
+ this._more = this._less = this.done = false;
+ this.yylineno = this.yyleng = 0;
+ this.yytext = this.matched = this.match = '';
+ this.conditionStack = ['INITIAL'];
+ this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };
+ if (this.options.ranges) this.yylloc.range = [0, 0];
+ this.offset = 0;
+ return this;
+ },
+ input: function input() {
+ var ch = this._input[0];
+ this.yytext += ch;
+ this.yyleng++;
+ this.offset++;
+ this.match += ch;
+ this.matched += ch;
+ var lines = ch.match(/(?:\r\n?|\n).*/g);
+ if (lines) {
+ this.yylineno++;
+ this.yylloc.last_line++;
+ } else {
+ this.yylloc.last_column++;
+ }
+ if (this.options.ranges) this.yylloc.range[1]++;
+
+ this._input = this._input.slice(1);
+ return ch;
+ },
+ unput: function unput(ch) {
+ var len = ch.length;
+ var lines = ch.split(/(?:\r\n?|\n)/g);
+
+ this._input = ch + this._input;
+ this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);
+ //this.yyleng -= len;
+ this.offset -= len;
+ var oldLines = this.match.split(/(?:\r\n?|\n)/g);
+ this.match = this.match.substr(0, this.match.length - 1);
+ this.matched = this.matched.substr(0, this.matched.length - 1);
+
+ if (lines.length - 1) this.yylineno -= lines.length - 1;
+ var r = this.yylloc.range;
+
+ this.yylloc = { first_line: this.yylloc.first_line,
+ last_line: this.yylineno + 1,
+ first_column: this.yylloc.first_column,
+ last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
+ };
+
+ if (this.options.ranges) {
+ this.yylloc.range = [r[0], r[0] + this.yyleng - len];
+ }
+ return this;
+ },
+ more: function more() {
+ this._more = true;
+ return this;
+ },
+ less: function less(n) {
+ this.unput(this.match.slice(n));
+ },
+ pastInput: function pastInput() {
+ var past = this.matched.substr(0, this.matched.length - this.match.length);
+ return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, "");
+ },
+ upcomingInput: function upcomingInput() {
+ var next = this.match;
+ if (next.length < 20) {
+ next += this._input.substr(0, 20 - next.length);
+ }
+ return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
+ },
+ showPosition: function showPosition() {
+ var pre = this.pastInput();
+ var c = new Array(pre.length + 1).join("-");
+ return pre + this.upcomingInput() + "\n" + c + "^";
+ },
+ next: function next() {
+ if (this.done) {
+ return this.EOF;
+ }
+ if (!this._input) this.done = true;
+
+ var token, match, tempMatch, index, col, lines;
+ if (!this._more) {
+ this.yytext = '';
+ this.match = '';
+ }
+ var rules = this._currentRules();
+ for (var i = 0; i < rules.length; i++) {
+ tempMatch = this._input.match(this.rules[rules[i]]);
+ if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
+ match = tempMatch;
+ index = i;
+ if (!this.options.flex) break;
+ }
+ }
+ if (match) {
+ lines = match[0].match(/(?:\r\n?|\n).*/g);
+ if (lines) this.yylineno += lines.length;
+ this.yylloc = { first_line: this.yylloc.last_line,
+ last_line: this.yylineno + 1,
+ first_column: this.yylloc.last_column,
+ last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length };
+ this.yytext += match[0];
+ this.match += match[0];
+ this.matches = match;
+ this.yyleng = this.yytext.length;
+ if (this.options.ranges) {
+ this.yylloc.range = [this.offset, this.offset += this.yyleng];
+ }
+ this._more = false;
+ this._input = this._input.slice(match[0].length);
+ this.matched += match[0];
+ token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);
+ if (this.done && this._input) this.done = false;
+ if (token) return token;else return;
+ }
+ if (this._input === "") {
+ return this.EOF;
+ } else {
+ return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno });
+ }
+ },
+ lex: function lex() {
+ var r = this.next();
+ if (typeof r !== 'undefined') {
+ return r;
+ } else {
+ return this.lex();
+ }
+ },
+ begin: function begin(condition) {
+ this.conditionStack.push(condition);
+ },
+ popState: function popState() {
+ return this.conditionStack.pop();
+ },
+ _currentRules: function _currentRules() {
+ return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
+ },
+ topState: function topState() {
+ return this.conditionStack[this.conditionStack.length - 2];
+ },
+ pushState: function begin(condition) {
+ this.begin(condition);
+ } };
+ lexer.options = {};
+ lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START
+ /**/) {
+
+ function strip(start, end) {
+ return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end);
+ }
+
+ var YYSTATE = YY_START;
+ switch ($avoiding_name_collisions) {
+ case 0:
+ if (yy_.yytext.slice(-2) === "\\\\") {
+ strip(0, 1);
+ this.begin("mu");
+ } else if (yy_.yytext.slice(-1) === "\\") {
+ strip(0, 1);
+ this.begin("emu");
+ } else {
+ this.begin("mu");
+ }
+ if (yy_.yytext) return 15;
+
+ break;
+ case 1:
+ return 15;
+ break;
+ case 2:
+ this.popState();
+ return 15;
+
+ break;
+ case 3:
+ this.begin('raw');return 15;
+ break;
+ case 4:
+ this.popState();
+ // Should be using `this.topState()` below, but it currently
+ // returns the second top instead of the first top. Opened an
+ // issue about it at https://github.com/zaach/jison/issues/291
+ if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {
+ return 15;
+ } else {
+ yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9);
+ return 'END_RAW_BLOCK';
+ }
+
+ break;
+ case 5:
+ return 15;
+ break;
+ case 6:
+ this.popState();
+ return 14;
+
+ break;
+ case 7:
+ return 65;
+ break;
+ case 8:
+ return 68;
+ break;
+ case 9:
+ return 19;
+ break;
+ case 10:
+ this.popState();
+ this.begin('raw');
+ return 23;
+
+ break;
+ case 11:
+ return 55;
+ break;
+ case 12:
+ return 60;
+ break;
+ case 13:
+ return 29;
+ break;
+ case 14:
+ return 47;
+ break;
+ case 15:
+ this.popState();return 44;
+ break;
+ case 16:
+ this.popState();return 44;
+ break;
+ case 17:
+ return 34;
+ break;
+ case 18:
+ return 39;
+ break;
+ case 19:
+ return 51;
+ break;
+ case 20:
+ return 48;
+ break;
+ case 21:
+ this.unput(yy_.yytext);
+ this.popState();
+ this.begin('com');
+
+ break;
+ case 22:
+ this.popState();
+ return 14;
+
+ break;
+ case 23:
+ return 48;
+ break;
+ case 24:
+ return 73;
+ break;
+ case 25:
+ return 72;
+ break;
+ case 26:
+ return 72;
+ break;
+ case 27:
+ return 87;
+ break;
+ case 28:
+ // ignore whitespace
+ break;
+ case 29:
+ this.popState();return 54;
+ break;
+ case 30:
+ this.popState();return 33;
+ break;
+ case 31:
+ yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80;
+ break;
+ case 32:
+ yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80;
+ break;
+ case 33:
+ return 85;
+ break;
+ case 34:
+ return 82;
+ break;
+ case 35:
+ return 82;
+ break;
+ case 36:
+ return 83;
+ break;
+ case 37:
+ return 84;
+ break;
+ case 38:
+ return 81;
+ break;
+ case 39:
+ return 75;
+ break;
+ case 40:
+ return 77;
+ break;
+ case 41:
+ return 72;
+ break;
+ case 42:
+ yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72;
+ break;
+ case 43:
+ return 'INVALID';
+ break;
+ case 44:
+ return 5;
+ break;
+ }
+ };
+ lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]*?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/];
+ lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } };
+ return lexer;
+ })();
+ parser.lexer = lexer;
+ function Parser() {
+ this.yy = {};
+ }Parser.prototype = parser;parser.Parser = Parser;
+ return new Parser();
+ })();exports.__esModule = true;
+ exports['default'] = handlebars;
+
+/***/ },
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _visitor = __webpack_require__(25);
+
+ var _visitor2 = _interopRequireDefault(_visitor);
+
+ function WhitespaceControl() {
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+ this.options = options;
+ }
+ WhitespaceControl.prototype = new _visitor2['default']();
+
+ WhitespaceControl.prototype.Program = function (program) {
+ var doStandalone = !this.options.ignoreStandalone;
+
+ var isRoot = !this.isRootSeen;
+ this.isRootSeen = true;
+
+ var body = program.body;
+ for (var i = 0, l = body.length; i < l; i++) {
+ var current = body[i],
+ strip = this.accept(current);
+
+ if (!strip) {
+ continue;
+ }
+
+ var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),
+ _isNextWhitespace = isNextWhitespace(body, i, isRoot),
+ openStandalone = strip.openStandalone && _isPrevWhitespace,
+ closeStandalone = strip.closeStandalone && _isNextWhitespace,
+ inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;
+
+ if (strip.close) {
+ omitRight(body, i, true);
+ }
+ if (strip.open) {
+ omitLeft(body, i, true);
+ }
+
+ if (doStandalone && inlineStandalone) {
+ omitRight(body, i);
+
+ if (omitLeft(body, i)) {
+ // If we are on a standalone node, save the indent info for partials
+ if (current.type === 'PartialStatement') {
+ // Pull out the whitespace from the final line
+ current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1];
+ }
+ }
+ }
+ if (doStandalone && openStandalone) {
+ omitRight((current.program || current.inverse).body);
+
+ // Strip out the previous content node if it's whitespace only
+ omitLeft(body, i);
+ }
+ if (doStandalone && closeStandalone) {
+ // Always strip the next node
+ omitRight(body, i);
+
+ omitLeft((current.inverse || current.program).body);
+ }
+ }
+
+ return program;
+ };
+
+ WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {
+ this.accept(block.program);
+ this.accept(block.inverse);
+
+ // Find the inverse program that is involed with whitespace stripping.
+ var program = block.program || block.inverse,
+ inverse = block.program && block.inverse,
+ firstInverse = inverse,
+ lastInverse = inverse;
+
+ if (inverse && inverse.chained) {
+ firstInverse = inverse.body[0].program;
+
+ // Walk the inverse chain to find the last inverse that is actually in the chain.
+ while (lastInverse.chained) {
+ lastInverse = lastInverse.body[lastInverse.body.length - 1].program;
+ }
+ }
+
+ var strip = {
+ open: block.openStrip.open,
+ close: block.closeStrip.close,
+
+ // Determine the standalone candiacy. Basically flag our content as being possibly standalone
+ // so our parent can determine if we actually are standalone
+ openStandalone: isNextWhitespace(program.body),
+ closeStandalone: isPrevWhitespace((firstInverse || program).body)
+ };
+
+ if (block.openStrip.close) {
+ omitRight(program.body, null, true);
+ }
+
+ if (inverse) {
+ var inverseStrip = block.inverseStrip;
+
+ if (inverseStrip.open) {
+ omitLeft(program.body, null, true);
+ }
+
+ if (inverseStrip.close) {
+ omitRight(firstInverse.body, null, true);
+ }
+ if (block.closeStrip.open) {
+ omitLeft(lastInverse.body, null, true);
+ }
+
+ // Find standalone else statments
+ if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {
+ omitLeft(program.body);
+ omitRight(firstInverse.body);
+ }
+ } else if (block.closeStrip.open) {
+ omitLeft(program.body, null, true);
+ }
+
+ return strip;
+ };
+
+ WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {
+ return mustache.strip;
+ };
+
+ WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {
+ /* istanbul ignore next */
+ var strip = node.strip || {};
+ return {
+ inlineStandalone: true,
+ open: strip.open,
+ close: strip.close
+ };
+ };
+
+ function isPrevWhitespace(body, i, isRoot) {
+ if (i === undefined) {
+ i = body.length;
+ }
+
+ // Nodes that end with newlines are considered whitespace (but are special
+ // cased for strip operations)
+ var prev = body[i - 1],
+ sibling = body[i - 2];
+ if (!prev) {
+ return isRoot;
+ }
+
+ if (prev.type === 'ContentStatement') {
+ return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original);
+ }
+ }
+ function isNextWhitespace(body, i, isRoot) {
+ if (i === undefined) {
+ i = -1;
+ }
+
+ var next = body[i + 1],
+ sibling = body[i + 2];
+ if (!next) {
+ return isRoot;
+ }
+
+ if (next.type === 'ContentStatement') {
+ return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original);
+ }
+ }
+
+ // Marks the node to the right of the position as omitted.
+ // I.e. {{foo}}' ' will mark the ' ' node as omitted.
+ //
+ // If i is undefined, then the first child will be marked as such.
+ //
+ // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
+ // content is met.
+ function omitRight(body, i, multiple) {
+ var current = body[i == null ? 0 : i + 1];
+ if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {
+ return;
+ }
+
+ var original = current.value;
+ current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, '');
+ current.rightStripped = current.value !== original;
+ }
+
+ // Marks the node to the left of the position as omitted.
+ // I.e. ' '{{foo}} will mark the ' ' node as omitted.
+ //
+ // If i is undefined then the last child will be marked as such.
+ //
+ // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
+ // content is met.
+ function omitLeft(body, i, multiple) {
+ var current = body[i == null ? body.length - 1 : i - 1];
+ if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {
+ return;
+ }
+
+ // We omit the last node if it's whitespace only and not preceeded by a non-content node.
+ var original = current.value;
+ current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, '');
+ current.leftStripped = current.value !== original;
+ return current.leftStripped;
+ }
+
+ exports['default'] = WhitespaceControl;
+ module.exports = exports['default'];
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ function Visitor() {
+ this.parents = [];
+ }
+
+ Visitor.prototype = {
+ constructor: Visitor,
+ mutating: false,
+
+ // Visits a given value. If mutating, will replace the value if necessary.
+ acceptKey: function acceptKey(node, name) {
+ var value = this.accept(node[name]);
+ if (this.mutating) {
+ // Hacky sanity check: This may have a few false positives for type for the helper
+ // methods but will generally do the right thing without a lot of overhead.
+ if (value && !Visitor.prototype[value.type]) {
+ throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);
+ }
+ node[name] = value;
+ }
+ },
+
+ // Performs an accept operation with added sanity check to ensure
+ // required keys are not removed.
+ acceptRequired: function acceptRequired(node, name) {
+ this.acceptKey(node, name);
+
+ if (!node[name]) {
+ throw new _exception2['default'](node.type + ' requires ' + name);
+ }
+ },
+
+ // Traverses a given array. If mutating, empty respnses will be removed
+ // for child elements.
+ acceptArray: function acceptArray(array) {
+ for (var i = 0, l = array.length; i < l; i++) {
+ this.acceptKey(array, i);
+
+ if (!array[i]) {
+ array.splice(i, 1);
+ i--;
+ l--;
+ }
+ }
+ },
+
+ accept: function accept(object) {
+ if (!object) {
+ return;
+ }
+
+ /* istanbul ignore next: Sanity code */
+ if (!this[object.type]) {
+ throw new _exception2['default']('Unknown type: ' + object.type, object);
+ }
+
+ if (this.current) {
+ this.parents.unshift(this.current);
+ }
+ this.current = object;
+
+ var ret = this[object.type](object);
+
+ this.current = this.parents.shift();
+
+ if (!this.mutating || ret) {
+ return ret;
+ } else if (ret !== false) {
+ return object;
+ }
+ },
+
+ Program: function Program(program) {
+ this.acceptArray(program.body);
+ },
+
+ MustacheStatement: visitSubExpression,
+ Decorator: visitSubExpression,
+
+ BlockStatement: visitBlock,
+ DecoratorBlock: visitBlock,
+
+ PartialStatement: visitPartial,
+ PartialBlockStatement: function PartialBlockStatement(partial) {
+ visitPartial.call(this, partial);
+
+ this.acceptKey(partial, 'program');
+ },
+
+ ContentStatement: function ContentStatement() /* content */{},
+ CommentStatement: function CommentStatement() /* comment */{},
+
+ SubExpression: visitSubExpression,
+
+ PathExpression: function PathExpression() /* path */{},
+
+ StringLiteral: function StringLiteral() /* string */{},
+ NumberLiteral: function NumberLiteral() /* number */{},
+ BooleanLiteral: function BooleanLiteral() /* bool */{},
+ UndefinedLiteral: function UndefinedLiteral() /* literal */{},
+ NullLiteral: function NullLiteral() /* literal */{},
+
+ Hash: function Hash(hash) {
+ this.acceptArray(hash.pairs);
+ },
+ HashPair: function HashPair(pair) {
+ this.acceptRequired(pair, 'value');
+ }
+ };
+
+ function visitSubExpression(mustache) {
+ this.acceptRequired(mustache, 'path');
+ this.acceptArray(mustache.params);
+ this.acceptKey(mustache, 'hash');
+ }
+ function visitBlock(block) {
+ visitSubExpression.call(this, block);
+
+ this.acceptKey(block, 'program');
+ this.acceptKey(block, 'inverse');
+ }
+ function visitPartial(partial) {
+ this.acceptRequired(partial, 'name');
+ this.acceptArray(partial.params);
+ this.acceptKey(partial, 'hash');
+ }
+
+ exports['default'] = Visitor;
+ module.exports = exports['default'];
+
+/***/ },
+/* 26 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.SourceLocation = SourceLocation;
+ exports.id = id;
+ exports.stripFlags = stripFlags;
+ exports.stripComment = stripComment;
+ exports.preparePath = preparePath;
+ exports.prepareMustache = prepareMustache;
+ exports.prepareRawBlock = prepareRawBlock;
+ exports.prepareBlock = prepareBlock;
+ exports.prepareProgram = prepareProgram;
+ exports.preparePartialBlock = preparePartialBlock;
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ function validateClose(open, close) {
+ close = close.path ? close.path.original : close;
+
+ if (open.path.original !== close) {
+ var errorNode = { loc: open.path.loc };
+
+ throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode);
+ }
+ }
+
+ function SourceLocation(source, locInfo) {
+ this.source = source;
+ this.start = {
+ line: locInfo.first_line,
+ column: locInfo.first_column
+ };
+ this.end = {
+ line: locInfo.last_line,
+ column: locInfo.last_column
+ };
+ }
+
+ function id(token) {
+ if (/^\[.*\]$/.test(token)) {
+ return token.substr(1, token.length - 2);
+ } else {
+ return token;
+ }
+ }
+
+ function stripFlags(open, close) {
+ return {
+ open: open.charAt(2) === '~',
+ close: close.charAt(close.length - 3) === '~'
+ };
+ }
+
+ function stripComment(comment) {
+ return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, '');
+ }
+
+ function preparePath(data, parts, loc) {
+ loc = this.locInfo(loc);
+
+ var original = data ? '@' : '',
+ dig = [],
+ depth = 0,
+ depthString = '';
+
+ for (var i = 0, l = parts.length; i < l; i++) {
+ var part = parts[i].part,
+
+ // If we have [] syntax then we do not treat path references as operators,
+ // i.e. foo.[this] resolves to approximately context.foo['this']
+ isLiteral = parts[i].original !== part;
+ original += (parts[i].separator || '') + part;
+
+ if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {
+ if (dig.length > 0) {
+ throw new _exception2['default']('Invalid path: ' + original, { loc: loc });
+ } else if (part === '..') {
+ depth++;
+ depthString += '../';
+ }
+ } else {
+ dig.push(part);
+ }
+ }
+
+ return {
+ type: 'PathExpression',
+ data: data,
+ depth: depth,
+ parts: dig,
+ original: original,
+ loc: loc
+ };
+ }
+
+ function prepareMustache(path, params, hash, open, strip, locInfo) {
+ // Must use charAt to support IE pre-10
+ var escapeFlag = open.charAt(3) || open.charAt(2),
+ escaped = escapeFlag !== '{' && escapeFlag !== '&';
+
+ var decorator = /\*/.test(open);
+ return {
+ type: decorator ? 'Decorator' : 'MustacheStatement',
+ path: path,
+ params: params,
+ hash: hash,
+ escaped: escaped,
+ strip: strip,
+ loc: this.locInfo(locInfo)
+ };
+ }
+
+ function prepareRawBlock(openRawBlock, contents, close, locInfo) {
+ validateClose(openRawBlock, close);
+
+ locInfo = this.locInfo(locInfo);
+ var program = {
+ type: 'Program',
+ body: contents,
+ strip: {},
+ loc: locInfo
+ };
+
+ return {
+ type: 'BlockStatement',
+ path: openRawBlock.path,
+ params: openRawBlock.params,
+ hash: openRawBlock.hash,
+ program: program,
+ openStrip: {},
+ inverseStrip: {},
+ closeStrip: {},
+ loc: locInfo
+ };
+ }
+
+ function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {
+ if (close && close.path) {
+ validateClose(openBlock, close);
+ }
+
+ var decorator = /\*/.test(openBlock.open);
+
+ program.blockParams = openBlock.blockParams;
+
+ var inverse = undefined,
+ inverseStrip = undefined;
+
+ if (inverseAndProgram) {
+ if (decorator) {
+ throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);
+ }
+
+ if (inverseAndProgram.chain) {
+ inverseAndProgram.program.body[0].closeStrip = close.strip;
+ }
+
+ inverseStrip = inverseAndProgram.strip;
+ inverse = inverseAndProgram.program;
+ }
+
+ if (inverted) {
+ inverted = inverse;
+ inverse = program;
+ program = inverted;
+ }
+
+ return {
+ type: decorator ? 'DecoratorBlock' : 'BlockStatement',
+ path: openBlock.path,
+ params: openBlock.params,
+ hash: openBlock.hash,
+ program: program,
+ inverse: inverse,
+ openStrip: openBlock.strip,
+ inverseStrip: inverseStrip,
+ closeStrip: close && close.strip,
+ loc: this.locInfo(locInfo)
+ };
+ }
+
+ function prepareProgram(statements, loc) {
+ if (!loc && statements.length) {
+ var firstLoc = statements[0].loc,
+ lastLoc = statements[statements.length - 1].loc;
+
+ /* istanbul ignore else */
+ if (firstLoc && lastLoc) {
+ loc = {
+ source: firstLoc.source,
+ start: {
+ line: firstLoc.start.line,
+ column: firstLoc.start.column
+ },
+ end: {
+ line: lastLoc.end.line,
+ column: lastLoc.end.column
+ }
+ };
+ }
+ }
+
+ return {
+ type: 'Program',
+ body: statements,
+ strip: {},
+ loc: loc
+ };
+ }
+
+ function preparePartialBlock(open, program, close, locInfo) {
+ validateClose(open, close);
+
+ return {
+ type: 'PartialBlockStatement',
+ name: open.path,
+ params: open.params,
+ hash: open.hash,
+ program: program,
+ openStrip: open.strip,
+ closeStrip: close && close.strip,
+ loc: this.locInfo(locInfo)
+ };
+ }
+
+/***/ },
+/* 27 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* eslint-disable new-cap */
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+ exports.Compiler = Compiler;
+ exports.precompile = precompile;
+ exports.compile = compile;
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ var _utils = __webpack_require__(5);
+
+ var _ast = __webpack_require__(21);
+
+ var _ast2 = _interopRequireDefault(_ast);
+
+ var slice = [].slice;
+
+ function Compiler() {}
+
+ // the foundHelper register will disambiguate helper lookup from finding a
+ // function in a context. This is necessary for mustache compatibility, which
+ // requires that context functions in blocks are evaluated by blockHelperMissing,
+ // and then proceed as if the resulting value was provided to blockHelperMissing.
+
+ Compiler.prototype = {
+ compiler: Compiler,
+
+ equals: function equals(other) {
+ var len = this.opcodes.length;
+ if (other.opcodes.length !== len) {
+ return false;
+ }
+
+ for (var i = 0; i < len; i++) {
+ var opcode = this.opcodes[i],
+ otherOpcode = other.opcodes[i];
+ if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {
+ return false;
+ }
+ }
+
+ // We know that length is the same between the two arrays because they are directly tied
+ // to the opcode behavior above.
+ len = this.children.length;
+ for (var i = 0; i < len; i++) {
+ if (!this.children[i].equals(other.children[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ guid: 0,
+
+ compile: function compile(program, options) {
+ this.sourceNode = [];
+ this.opcodes = [];
+ this.children = [];
+ this.options = options;
+ this.stringParams = options.stringParams;
+ this.trackIds = options.trackIds;
+
+ options.blockParams = options.blockParams || [];
+
+ // These changes will propagate to the other compiler components
+ var knownHelpers = options.knownHelpers;
+ options.knownHelpers = {
+ 'helperMissing': true,
+ 'blockHelperMissing': true,
+ 'each': true,
+ 'if': true,
+ 'unless': true,
+ 'with': true,
+ 'log': true,
+ 'lookup': true
+ };
+ if (knownHelpers) {
+ for (var _name in knownHelpers) {
+ /* istanbul ignore else */
+ if (_name in knownHelpers) {
+ options.knownHelpers[_name] = knownHelpers[_name];
+ }
+ }
+ }
+
+ return this.accept(program);
+ },
+
+ compileProgram: function compileProgram(program) {
+ var childCompiler = new this.compiler(),
+ // eslint-disable-line new-cap
+ result = childCompiler.compile(program, this.options),
+ guid = this.guid++;
+
+ this.usePartial = this.usePartial || result.usePartial;
+
+ this.children[guid] = result;
+ this.useDepths = this.useDepths || result.useDepths;
+
+ return guid;
+ },
+
+ accept: function accept(node) {
+ /* istanbul ignore next: Sanity code */
+ if (!this[node.type]) {
+ throw new _exception2['default']('Unknown type: ' + node.type, node);
+ }
+
+ this.sourceNode.unshift(node);
+ var ret = this[node.type](node);
+ this.sourceNode.shift();
+ return ret;
+ },
+
+ Program: function Program(program) {
+ this.options.blockParams.unshift(program.blockParams);
+
+ var body = program.body,
+ bodyLength = body.length;
+ for (var i = 0; i < bodyLength; i++) {
+ this.accept(body[i]);
+ }
+
+ this.options.blockParams.shift();
+
+ this.isSimple = bodyLength === 1;
+ this.blockParams = program.blockParams ? program.blockParams.length : 0;
+
+ return this;
+ },
+
+ BlockStatement: function BlockStatement(block) {
+ transformLiteralToPath(block);
+
+ var program = block.program,
+ inverse = block.inverse;
+
+ program = program && this.compileProgram(program);
+ inverse = inverse && this.compileProgram(inverse);
+
+ var type = this.classifySexpr(block);
+
+ if (type === 'helper') {
+ this.helperSexpr(block, program, inverse);
+ } else if (type === 'simple') {
+ this.simpleSexpr(block);
+
+ // now that the simple mustache is resolved, we need to
+ // evaluate it by executing `blockHelperMissing`
+ this.opcode('pushProgram', program);
+ this.opcode('pushProgram', inverse);
+ this.opcode('emptyHash');
+ this.opcode('blockValue', block.path.original);
+ } else {
+ this.ambiguousSexpr(block, program, inverse);
+
+ // now that the simple mustache is resolved, we need to
+ // evaluate it by executing `blockHelperMissing`
+ this.opcode('pushProgram', program);
+ this.opcode('pushProgram', inverse);
+ this.opcode('emptyHash');
+ this.opcode('ambiguousBlockValue');
+ }
+
+ this.opcode('append');
+ },
+
+ DecoratorBlock: function DecoratorBlock(decorator) {
+ var program = decorator.program && this.compileProgram(decorator.program);
+ var params = this.setupFullMustacheParams(decorator, program, undefined),
+ path = decorator.path;
+
+ this.useDecorators = true;
+ this.opcode('registerDecorator', params.length, path.original);
+ },
+
+ PartialStatement: function PartialStatement(partial) {
+ this.usePartial = true;
+
+ var program = partial.program;
+ if (program) {
+ program = this.compileProgram(partial.program);
+ }
+
+ var params = partial.params;
+ if (params.length > 1) {
+ throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);
+ } else if (!params.length) {
+ if (this.options.explicitPartialContext) {
+ this.opcode('pushLiteral', 'undefined');
+ } else {
+ params.push({ type: 'PathExpression', parts: [], depth: 0 });
+ }
+ }
+
+ var partialName = partial.name.original,
+ isDynamic = partial.name.type === 'SubExpression';
+ if (isDynamic) {
+ this.accept(partial.name);
+ }
+
+ this.setupFullMustacheParams(partial, program, undefined, true);
+
+ var indent = partial.indent || '';
+ if (this.options.preventIndent && indent) {
+ this.opcode('appendContent', indent);
+ indent = '';
+ }
+
+ this.opcode('invokePartial', isDynamic, partialName, indent);
+ this.opcode('append');
+ },
+ PartialBlockStatement: function PartialBlockStatement(partialBlock) {
+ this.PartialStatement(partialBlock);
+ },
+
+ MustacheStatement: function MustacheStatement(mustache) {
+ this.SubExpression(mustache);
+
+ if (mustache.escaped && !this.options.noEscape) {
+ this.opcode('appendEscaped');
+ } else {
+ this.opcode('append');
+ }
+ },
+ Decorator: function Decorator(decorator) {
+ this.DecoratorBlock(decorator);
+ },
+
+ ContentStatement: function ContentStatement(content) {
+ if (content.value) {
+ this.opcode('appendContent', content.value);
+ }
+ },
+
+ CommentStatement: function CommentStatement() {},
+
+ SubExpression: function SubExpression(sexpr) {
+ transformLiteralToPath(sexpr);
+ var type = this.classifySexpr(sexpr);
+
+ if (type === 'simple') {
+ this.simpleSexpr(sexpr);
+ } else if (type === 'helper') {
+ this.helperSexpr(sexpr);
+ } else {
+ this.ambiguousSexpr(sexpr);
+ }
+ },
+ ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {
+ var path = sexpr.path,
+ name = path.parts[0],
+ isBlock = program != null || inverse != null;
+
+ this.opcode('getContext', path.depth);
+
+ this.opcode('pushProgram', program);
+ this.opcode('pushProgram', inverse);
+
+ path.strict = true;
+ this.accept(path);
+
+ this.opcode('invokeAmbiguous', name, isBlock);
+ },
+
+ simpleSexpr: function simpleSexpr(sexpr) {
+ var path = sexpr.path;
+ path.strict = true;
+ this.accept(path);
+ this.opcode('resolvePossibleLambda');
+ },
+
+ helperSexpr: function helperSexpr(sexpr, program, inverse) {
+ var params = this.setupFullMustacheParams(sexpr, program, inverse),
+ path = sexpr.path,
+ name = path.parts[0];
+
+ if (this.options.knownHelpers[name]) {
+ this.opcode('invokeKnownHelper', params.length, name);
+ } else if (this.options.knownHelpersOnly) {
+ throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);
+ } else {
+ path.strict = true;
+ path.falsy = true;
+
+ this.accept(path);
+ this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));
+ }
+ },
+
+ PathExpression: function PathExpression(path) {
+ this.addDepth(path.depth);
+ this.opcode('getContext', path.depth);
+
+ var name = path.parts[0],
+ scoped = _ast2['default'].helpers.scopedId(path),
+ blockParamId = !path.depth && !scoped && this.blockParamIndex(name);
+
+ if (blockParamId) {
+ this.opcode('lookupBlockParam', blockParamId, path.parts);
+ } else if (!name) {
+ // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`
+ this.opcode('pushContext');
+ } else if (path.data) {
+ this.options.data = true;
+ this.opcode('lookupData', path.depth, path.parts, path.strict);
+ } else {
+ this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);
+ }
+ },
+
+ StringLiteral: function StringLiteral(string) {
+ this.opcode('pushString', string.value);
+ },
+
+ NumberLiteral: function NumberLiteral(number) {
+ this.opcode('pushLiteral', number.value);
+ },
+
+ BooleanLiteral: function BooleanLiteral(bool) {
+ this.opcode('pushLiteral', bool.value);
+ },
+
+ UndefinedLiteral: function UndefinedLiteral() {
+ this.opcode('pushLiteral', 'undefined');
+ },
+
+ NullLiteral: function NullLiteral() {
+ this.opcode('pushLiteral', 'null');
+ },
+
+ Hash: function Hash(hash) {
+ var pairs = hash.pairs,
+ i = 0,
+ l = pairs.length;
+
+ this.opcode('pushHash');
+
+ for (; i < l; i++) {
+ this.pushParam(pairs[i].value);
+ }
+ while (i--) {
+ this.opcode('assignToHash', pairs[i].key);
+ }
+ this.opcode('popHash');
+ },
+
+ // HELPERS
+ opcode: function opcode(name) {
+ this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });
+ },
+
+ addDepth: function addDepth(depth) {
+ if (!depth) {
+ return;
+ }
+
+ this.useDepths = true;
+ },
+
+ classifySexpr: function classifySexpr(sexpr) {
+ var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);
+
+ var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);
+
+ // a mustache is an eligible helper if:
+ // * its id is simple (a single part, not `this` or `..`)
+ var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);
+
+ // if a mustache is an eligible helper but not a definite
+ // helper, it is ambiguous, and will be resolved in a later
+ // pass or at runtime.
+ var isEligible = !isBlockParam && (isHelper || isSimple);
+
+ // if ambiguous, we can possibly resolve the ambiguity now
+ // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.
+ if (isEligible && !isHelper) {
+ var _name2 = sexpr.path.parts[0],
+ options = this.options;
+
+ if (options.knownHelpers[_name2]) {
+ isHelper = true;
+ } else if (options.knownHelpersOnly) {
+ isEligible = false;
+ }
+ }
+
+ if (isHelper) {
+ return 'helper';
+ } else if (isEligible) {
+ return 'ambiguous';
+ } else {
+ return 'simple';
+ }
+ },
+
+ pushParams: function pushParams(params) {
+ for (var i = 0, l = params.length; i < l; i++) {
+ this.pushParam(params[i]);
+ }
+ },
+
+ pushParam: function pushParam(val) {
+ var value = val.value != null ? val.value : val.original || '';
+
+ if (this.stringParams) {
+ if (value.replace) {
+ value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.');
+ }
+
+ if (val.depth) {
+ this.addDepth(val.depth);
+ }
+ this.opcode('getContext', val.depth || 0);
+ this.opcode('pushStringParam', value, val.type);
+
+ if (val.type === 'SubExpression') {
+ // SubExpressions get evaluated and passed in
+ // in string params mode.
+ this.accept(val);
+ }
+ } else {
+ if (this.trackIds) {
+ var blockParamIndex = undefined;
+ if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {
+ blockParamIndex = this.blockParamIndex(val.parts[0]);
+ }
+ if (blockParamIndex) {
+ var blockParamChild = val.parts.slice(1).join('.');
+ this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);
+ } else {
+ value = val.original || value;
+ if (value.replace) {
+ value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, '');
+ }
+
+ this.opcode('pushId', val.type, value);
+ }
+ }
+ this.accept(val);
+ }
+ },
+
+ setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {
+ var params = sexpr.params;
+ this.pushParams(params);
+
+ this.opcode('pushProgram', program);
+ this.opcode('pushProgram', inverse);
+
+ if (sexpr.hash) {
+ this.accept(sexpr.hash);
+ } else {
+ this.opcode('emptyHash', omitEmpty);
+ }
+
+ return params;
+ },
+
+ blockParamIndex: function blockParamIndex(name) {
+ for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {
+ var blockParams = this.options.blockParams[depth],
+ param = blockParams && _utils.indexOf(blockParams, name);
+ if (blockParams && param >= 0) {
+ return [depth, param];
+ }
+ }
+ }
+ };
+
+ function precompile(input, options, env) {
+ if (input == null || typeof input !== 'string' && input.type !== 'Program') {
+ throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);
+ }
+
+ options = options || {};
+ if (!('data' in options)) {
+ options.data = true;
+ }
+ if (options.compat) {
+ options.useDepths = true;
+ }
+
+ var ast = env.parse(input, options),
+ environment = new env.Compiler().compile(ast, options);
+ return new env.JavaScriptCompiler().compile(environment, options);
+ }
+
+ function compile(input, options, env) {
+ if (options === undefined) options = {};
+
+ if (input == null || typeof input !== 'string' && input.type !== 'Program') {
+ throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);
+ }
+
+ if (!('data' in options)) {
+ options.data = true;
+ }
+ if (options.compat) {
+ options.useDepths = true;
+ }
+
+ var compiled = undefined;
+
+ function compileInput() {
+ var ast = env.parse(input, options),
+ environment = new env.Compiler().compile(ast, options),
+ templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
+ return env.template(templateSpec);
+ }
+
+ // Template is only compiled on first use and cached after that point.
+ function ret(context, execOptions) {
+ if (!compiled) {
+ compiled = compileInput();
+ }
+ return compiled.call(this, context, execOptions);
+ }
+ ret._setup = function (setupOptions) {
+ if (!compiled) {
+ compiled = compileInput();
+ }
+ return compiled._setup(setupOptions);
+ };
+ ret._child = function (i, data, blockParams, depths) {
+ if (!compiled) {
+ compiled = compileInput();
+ }
+ return compiled._child(i, data, blockParams, depths);
+ };
+ return ret;
+ }
+
+ function argEquals(a, b) {
+ if (a === b) {
+ return true;
+ }
+
+ if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {
+ for (var i = 0; i < a.length; i++) {
+ if (!argEquals(a[i], b[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ function transformLiteralToPath(sexpr) {
+ if (!sexpr.path.parts) {
+ var literal = sexpr.path;
+ // Casting to string here to make false and 0 literal values play nicely with the rest
+ // of the system.
+ sexpr.path = {
+ type: 'PathExpression',
+ data: false,
+ depth: 0,
+ parts: [literal.original + ''],
+ original: literal.original + '',
+ loc: literal.loc
+ };
+ }
+ }
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+ 'use strict';
+
+ var _interopRequireDefault = __webpack_require__(1)['default'];
+
+ exports.__esModule = true;
+
+ var _base = __webpack_require__(4);
+
+ var _exception = __webpack_require__(6);
+
+ var _exception2 = _interopRequireDefault(_exception);
+
+ var _utils = __webpack_require__(5);
+
+ var _codeGen = __webpack_require__(29);
+
+ var _codeGen2 = _interopRequireDefault(_codeGen);
+
+ function Literal(value) {
+ this.value = value;
+ }
+
+ function JavaScriptCompiler() {}
+
+ JavaScriptCompiler.prototype = {
+ // PUBLIC API: You can override these methods in a subclass to provide
+ // alternative compiled forms for name lookup and buffering semantics
+ nameLookup: function nameLookup(parent, name /* , type*/) {
+ if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
+ return [parent, '.', name];
+ } else {
+ return [parent, '[', JSON.stringify(name), ']'];
+ }
+ },
+ depthedLookup: function depthedLookup(name) {
+ return [this.aliasable('container.lookup'), '(depths, "', name, '")'];
+ },
+
+ compilerInfo: function compilerInfo() {
+ var revision = _base.COMPILER_REVISION,
+ versions = _base.REVISION_CHANGES[revision];
+ return [revision, versions];
+ },
+
+ appendToBuffer: function appendToBuffer(source, location, explicit) {
+ // Force a source as this simplifies the merge logic.
+ if (!_utils.isArray(source)) {
+ source = [source];
+ }
+ source = this.source.wrap(source, location);
+
+ if (this.environment.isSimple) {
+ return ['return ', source, ';'];
+ } else if (explicit) {
+ // This is a case where the buffer operation occurs as a child of another
+ // construct, generally braces. We have to explicitly output these buffer
+ // operations to ensure that the emitted code goes in the correct location.
+ return ['buffer += ', source, ';'];
+ } else {
+ source.appendToBuffer = true;
+ return source;
+ }
+ },
+
+ initializeBuffer: function initializeBuffer() {
+ return this.quotedString('');
+ },
+ // END PUBLIC API
+
+ compile: function compile(environment, options, context, asObject) {
+ this.environment = environment;
+ this.options = options;
+ this.stringParams = this.options.stringParams;
+ this.trackIds = this.options.trackIds;
+ this.precompile = !asObject;
+
+ this.name = this.environment.name;
+ this.isChild = !!context;
+ this.context = context || {
+ decorators: [],
+ programs: [],
+ environments: []
+ };
+
+ this.preamble();
+
+ this.stackSlot = 0;
+ this.stackVars = [];
+ this.aliases = {};
+ this.registers = { list: [] };
+ this.hashes = [];
+ this.compileStack = [];
+ this.inlineStack = [];
+ this.blockParams = [];
+
+ this.compileChildren(environment, options);
+
+ this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;
+ this.useBlockParams = this.useBlockParams || environment.useBlockParams;
+
+ var opcodes = environment.opcodes,
+ opcode = undefined,
+ firstLoc = undefined,
+ i = undefined,
+ l = undefined;
+
+ for (i = 0, l = opcodes.length; i < l; i++) {
+ opcode = opcodes[i];
+
+ this.source.currentLocation = opcode.loc;
+ firstLoc = firstLoc || opcode.loc;
+ this[opcode.opcode].apply(this, opcode.args);
+ }
+
+ // Flush any trailing content that might be pending.
+ this.source.currentLocation = firstLoc;
+ this.pushSource('');
+
+ /* istanbul ignore next */
+ if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {
+ throw new _exception2['default']('Compile completed with content left on stack');
+ }
+
+ if (!this.decorators.isEmpty()) {
+ this.useDecorators = true;
+
+ this.decorators.prepend('var decorators = container.decorators;\n');
+ this.decorators.push('return fn;');
+
+ if (asObject) {
+ this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);
+ } else {
+ this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n');
+ this.decorators.push('}\n');
+ this.decorators = this.decorators.merge();
+ }
+ } else {
+ this.decorators = undefined;
+ }
+
+ var fn = this.createFunctionContext(asObject);
+ if (!this.isChild) {
+ var ret = {
+ compiler: this.compilerInfo(),
+ main: fn
+ };
+
+ if (this.decorators) {
+ ret.main_d = this.decorators; // eslint-disable-line camelcase
+ ret.useDecorators = true;
+ }
+
+ var _context = this.context;
+ var programs = _context.programs;
+ var decorators = _context.decorators;
+
+ for (i = 0, l = programs.length; i < l; i++) {
+ if (programs[i]) {
+ ret[i] = programs[i];
+ if (decorators[i]) {
+ ret[i + '_d'] = decorators[i];
+ ret.useDecorators = true;
+ }
+ }
+ }
+
+ if (this.environment.usePartial) {
+ ret.usePartial = true;
+ }
+ if (this.options.data) {
+ ret.useData = true;
+ }
+ if (this.useDepths) {
+ ret.useDepths = true;
+ }
+ if (this.useBlockParams) {
+ ret.useBlockParams = true;
+ }
+ if (this.options.compat) {
+ ret.compat = true;
+ }
+
+ if (!asObject) {
+ ret.compiler = JSON.stringify(ret.compiler);
+
+ this.source.currentLocation = { start: { line: 1, column: 0 } };
+ ret = this.objectLiteral(ret);
+
+ if (options.srcName) {
+ ret = ret.toStringWithSourceMap({ file: options.destName });
+ ret.map = ret.map && ret.map.toString();
+ } else {
+ ret = ret.toString();
+ }
+ } else {
+ ret.compilerOptions = this.options;
+ }
+
+ return ret;
+ } else {
+ return fn;
+ }
+ },
+
+ preamble: function preamble() {
+ // track the last context pushed into place to allow skipping the
+ // getContext opcode when it would be a noop
+ this.lastContext = 0;
+ this.source = new _codeGen2['default'](this.options.srcName);
+ this.decorators = new _codeGen2['default'](this.options.srcName);
+ },
+
+ createFunctionContext: function createFunctionContext(asObject) {
+ var varDeclarations = '';
+
+ var locals = this.stackVars.concat(this.registers.list);
+ if (locals.length > 0) {
+ varDeclarations += ', ' + locals.join(', ');
+ }
+
+ // Generate minimizer alias mappings
+ //
+ // When using true SourceNodes, this will update all references to the given alias
+ // as the source nodes are reused in situ. For the non-source node compilation mode,
+ // aliases will not be used, but this case is already being run on the client and
+ // we aren't concern about minimizing the template size.
+ var aliasCount = 0;
+ for (var alias in this.aliases) {
+ // eslint-disable-line guard-for-in
+ var node = this.aliases[alias];
+
+ if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) {
+ varDeclarations += ', alias' + ++aliasCount + '=' + alias;
+ node.children[0] = 'alias' + aliasCount;
+ }
+ }
+
+ var params = ['container', 'depth0', 'helpers', 'partials', 'data'];
+
+ if (this.useBlockParams || this.useDepths) {
+ params.push('blockParams');
+ }
+ if (this.useDepths) {
+ params.push('depths');
+ }
+
+ // Perform a second pass over the output to merge content when possible
+ var source = this.mergeSource(varDeclarations);
+
+ if (asObject) {
+ params.push(source);
+
+ return Function.apply(this, params);
+ } else {
+ return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']);
+ }
+ },
+ mergeSource: function mergeSource(varDeclarations) {
+ var isSimple = this.environment.isSimple,
+ appendOnly = !this.forceBuffer,
+ appendFirst = undefined,
+ sourceSeen = undefined,
+ bufferStart = undefined,
+ bufferEnd = undefined;
+ this.source.each(function (line) {
+ if (line.appendToBuffer) {
+ if (bufferStart) {
+ line.prepend(' + ');
+ } else {
+ bufferStart = line;
+ }
+ bufferEnd = line;
+ } else {
+ if (bufferStart) {
+ if (!sourceSeen) {
+ appendFirst = true;
+ } else {
+ bufferStart.prepend('buffer += ');
+ }
+ bufferEnd.add(';');
+ bufferStart = bufferEnd = undefined;
+ }
+
+ sourceSeen = true;
+ if (!isSimple) {
+ appendOnly = false;
+ }
+ }
+ });
+
+ if (appendOnly) {
+ if (bufferStart) {
+ bufferStart.prepend('return ');
+ bufferEnd.add(';');
+ } else if (!sourceSeen) {
+ this.source.push('return "";');
+ }
+ } else {
+ varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());
+
+ if (bufferStart) {
+ bufferStart.prepend('return buffer + ');
+ bufferEnd.add(';');
+ } else {
+ this.source.push('return buffer;');
+ }
+ }
+
+ if (varDeclarations) {
+ this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n'));
+ }
+
+ return this.source.merge();
+ },
+
+ // [blockValue]
+ //
+ // On stack, before: hash, inverse, program, value
+ // On stack, after: return value of blockHelperMissing
+ //
+ // The purpose of this opcode is to take a block of the form
+ // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and
+ // replace it on the stack with the result of properly
+ // invoking blockHelperMissing.
+ blockValue: function blockValue(name) {
+ var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),
+ params = [this.contextName(0)];
+ this.setupHelperArgs(name, 0, params);
+
+ var blockName = this.popStack();
+ params.splice(1, 0, blockName);
+
+ this.push(this.source.functionCall(blockHelperMissing, 'call', params));
+ },
+
+ // [ambiguousBlockValue]
+ //
+ // On stack, before: hash, inverse, program, value
+ // Compiler value, before: lastHelper=value of last found helper, if any
+ // On stack, after, if no lastHelper: same as [blockValue]
+ // On stack, after, if lastHelper: value
+ ambiguousBlockValue: function ambiguousBlockValue() {
+ // We're being a bit cheeky and reusing the options value from the prior exec
+ var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'),
+ params = [this.contextName(0)];
+ this.setupHelperArgs('', 0, params, true);
+
+ this.flushInline();
+
+ var current = this.topStack();
+ params.splice(1, 0, current);
+
+ this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);
+ },
+
+ // [appendContent]
+ //
+ // On stack, before: ...
+ // On stack, after: ...
+ //
+ // Appends the string value of `content` to the current buffer
+ appendContent: function appendContent(content) {
+ if (this.pendingContent) {
+ content = this.pendingContent + content;
+ } else {
+ this.pendingLocation = this.source.currentLocation;
+ }
+
+ this.pendingContent = content;
+ },
+
+ // [append]
+ //
+ // On stack, before: value, ...
+ // On stack, after: ...
+ //
+ // Coerces `value` to a String and appends it to the current buffer.
+ //
+ // If `value` is truthy, or 0, it is coerced into a string and appended
+ // Otherwise, the empty string is appended
+ append: function append() {
+ if (this.isInline()) {
+ this.replaceStack(function (current) {
+ return [' != null ? ', current, ' : ""'];
+ });
+
+ this.pushSource(this.appendToBuffer(this.popStack()));
+ } else {
+ var local = this.popStack();
+ this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);
+ if (this.environment.isSimple) {
+ this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']);
+ }
+ }
+ },
+
+ // [appendEscaped]
+ //
+ // On stack, before: value, ...
+ // On stack, after: ...
+ //
+ // Escape `value` and append it to the buffer
+ appendEscaped: function appendEscaped() {
+ this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));
+ },
+
+ // [getContext]
+ //
+ // On stack, before: ...
+ // On stack, after: ...
+ // Compiler value, after: lastContext=depth
+ //
+ // Set the value of the `lastContext` compiler value to the depth
+ getContext: function getContext(depth) {
+ this.lastContext = depth;
+ },
+
+ // [pushContext]
+ //
+ // On stack, before: ...
+ // On stack, after: currentContext, ...
+ //
+ // Pushes the value of the current context onto the stack.
+ pushContext: function pushContext() {
+ this.pushStackLiteral(this.contextName(this.lastContext));
+ },
+
+ // [lookupOnContext]
+ //
+ // On stack, before: ...
+ // On stack, after: currentContext[name], ...
+ //
+ // Looks up the value of `name` on the current context and pushes
+ // it onto the stack.
+ lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {
+ var i = 0;
+
+ if (!scoped && this.options.compat && !this.lastContext) {
+ // The depthed query is expected to handle the undefined logic for the root level that
+ // is implemented below, so we evaluate that directly in compat mode
+ this.push(this.depthedLookup(parts[i++]));
+ } else {
+ this.pushContext();
+ }
+
+ this.resolvePath('context', parts, i, falsy, strict);
+ },
+
+ // [lookupBlockParam]
+ //
+ // On stack, before: ...
+ // On stack, after: blockParam[name], ...
+ //
+ // Looks up the value of `parts` on the given block param and pushes
+ // it onto the stack.
+ lookupBlockParam: function lookupBlockParam(blockParamId, parts) {
+ this.useBlockParams = true;
+
+ this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);
+ this.resolvePath('context', parts, 1);
+ },
+
+ // [lookupData]
+ //
+ // On stack, before: ...
+ // On stack, after: data, ...
+ //
+ // Push the data lookup operator
+ lookupData: function lookupData(depth, parts, strict) {
+ if (!depth) {
+ this.pushStackLiteral('data');
+ } else {
+ this.pushStackLiteral('container.data(data, ' + depth + ')');
+ }
+
+ this.resolvePath('data', parts, 0, true, strict);
+ },
+
+ resolvePath: function resolvePath(type, parts, i, falsy, strict) {
+ // istanbul ignore next
+
+ var _this = this;
+
+ if (this.options.strict || this.options.assumeObjects) {
+ this.push(strictLookup(this.options.strict && strict, this, parts, type));
+ return;
+ }
+
+ var len = parts.length;
+ for (; i < len; i++) {
+ /* eslint-disable no-loop-func */
+ this.replaceStack(function (current) {
+ var lookup = _this.nameLookup(current, parts[i], type);
+ // We want to ensure that zero and false are handled properly if the context (falsy flag)
+ // needs to have the special handling for these values.
+ if (!falsy) {
+ return [' != null ? ', lookup, ' : ', current];
+ } else {
+ // Otherwise we can use generic falsy handling
+ return [' && ', lookup];
+ }
+ });
+ /* eslint-enable no-loop-func */
+ }
+ },
+
+ // [resolvePossibleLambda]
+ //
+ // On stack, before: value, ...
+ // On stack, after: resolved value, ...
+ //
+ // If the `value` is a lambda, replace it on the stack by
+ // the return value of the lambda
+ resolvePossibleLambda: function resolvePossibleLambda() {
+ this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);
+ },
+
+ // [pushStringParam]
+ //
+ // On stack, before: ...
+ // On stack, after: string, currentContext, ...
+ //
+ // This opcode is designed for use in string mode, which
+ // provides the string value of a parameter along with its
+ // depth rather than resolving it immediately.
+ pushStringParam: function pushStringParam(string, type) {
+ this.pushContext();
+ this.pushString(type);
+
+ // If it's a subexpression, the string result
+ // will be pushed after this opcode.
+ if (type !== 'SubExpression') {
+ if (typeof string === 'string') {
+ this.pushString(string);
+ } else {
+ this.pushStackLiteral(string);
+ }
+ }
+ },
+
+ emptyHash: function emptyHash(omitEmpty) {
+ if (this.trackIds) {
+ this.push('{}'); // hashIds
+ }
+ if (this.stringParams) {
+ this.push('{}'); // hashContexts
+ this.push('{}'); // hashTypes
+ }
+ this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');
+ },
+ pushHash: function pushHash() {
+ if (this.hash) {
+ this.hashes.push(this.hash);
+ }
+ this.hash = { values: [], types: [], contexts: [], ids: [] };
+ },
+ popHash: function popHash() {
+ var hash = this.hash;
+ this.hash = this.hashes.pop();
+
+ if (this.trackIds) {
+ this.push(this.objectLiteral(hash.ids));
+ }
+ if (this.stringParams) {
+ this.push(this.objectLiteral(hash.contexts));
+ this.push(this.objectLiteral(hash.types));
+ }
+
+ this.push(this.objectLiteral(hash.values));
+ },
+
+ // [pushString]
+ //
+ // On stack, before: ...
+ // On stack, after: quotedString(string), ...
+ //
+ // Push a quoted version of `string` onto the stack
+ pushString: function pushString(string) {
+ this.pushStackLiteral(this.quotedString(string));
+ },
+
+ // [pushLiteral]
+ //
+ // On stack, before: ...
+ // On stack, after: value, ...
+ //
+ // Pushes a value onto the stack. This operation prevents
+ // the compiler from creating a temporary variable to hold
+ // it.
+ pushLiteral: function pushLiteral(value) {
+ this.pushStackLiteral(value);
+ },
+
+ // [pushProgram]
+ //
+ // On stack, before: ...
+ // On stack, after: program(guid), ...
+ //
+ // Push a program expression onto the stack. This takes
+ // a compile-time guid and converts it into a runtime-accessible
+ // expression.
+ pushProgram: function pushProgram(guid) {
+ if (guid != null) {
+ this.pushStackLiteral(this.programExpression(guid));
+ } else {
+ this.pushStackLiteral(null);
+ }
+ },
+
+ // [registerDecorator]
+ //
+ // On stack, before: hash, program, params..., ...
+ // On stack, after: ...
+ //
+ // Pops off the decorator's parameters, invokes the decorator,
+ // and inserts the decorator into the decorators list.
+ registerDecorator: function registerDecorator(paramSize, name) {
+ var foundDecorator = this.nameLookup('decorators', name, 'decorator'),
+ options = this.setupHelperArgs(name, paramSize);
+
+ this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);
+ },
+
+ // [invokeHelper]
+ //
+ // On stack, before: hash, inverse, program, params..., ...
+ // On stack, after: result of helper invocation
+ //
+ // Pops off the helper's parameters, invokes the helper,
+ // and pushes the helper's return value onto the stack.
+ //
+ // If the helper is not found, `helperMissing` is called.
+ invokeHelper: function invokeHelper(paramSize, name, isSimple) {
+ var nonHelper = this.popStack(),
+ helper = this.setupHelper(paramSize, name),
+ simple = isSimple ? [helper.name, ' || '] : '';
+
+ var lookup = ['('].concat(simple, nonHelper);
+ if (!this.options.strict) {
+ lookup.push(' || ', this.aliasable('helpers.helperMissing'));
+ }
+ lookup.push(')');
+
+ this.push(this.source.functionCall(lookup, 'call', helper.callParams));
+ },
+
+ // [invokeKnownHelper]
+ //
+ // On stack, before: hash, inverse, program, params..., ...
+ // On stack, after: result of helper invocation
+ //
+ // This operation is used when the helper is known to exist,
+ // so a `helperMissing` fallback is not required.
+ invokeKnownHelper: function invokeKnownHelper(paramSize, name) {
+ var helper = this.setupHelper(paramSize, name);
+ this.push(this.source.functionCall(helper.name, 'call', helper.callParams));
+ },
+
+ // [invokeAmbiguous]
+ //
+ // On stack, before: hash, inverse, program, params..., ...
+ // On stack, after: result of disambiguation
+ //
+ // This operation is used when an expression like `{{foo}}`
+ // is provided, but we don't know at compile-time whether it
+ // is a helper or a path.
+ //
+ // This operation emits more code than the other options,
+ // and can be avoided by passing the `knownHelpers` and
+ // `knownHelpersOnly` flags at compile-time.
+ invokeAmbiguous: function invokeAmbiguous(name, helperCall) {
+ this.useRegister('helper');
+
+ var nonHelper = this.popStack();
+
+ this.emptyHash();
+ var helper = this.setupHelper(0, name, helperCall);
+
+ var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
+
+ var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];
+ if (!this.options.strict) {
+ lookup[0] = '(helper = ';
+ lookup.push(' != null ? helper : ', this.aliasable('helpers.helperMissing'));
+ }
+
+ this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);
+ },
+
+ // [invokePartial]
+ //
+ // On stack, before: context, ...
+ // On stack after: result of partial invocation
+ //
+ // This operation pops off a context, invokes a partial with that context,
+ // and pushes the result of the invocation back.
+ invokePartial: function invokePartial(isDynamic, name, indent) {
+ var params = [],
+ options = this.setupParams(name, 1, params);
+
+ if (isDynamic) {
+ name = this.popStack();
+ delete options.name;
+ }
+
+ if (indent) {
+ options.indent = JSON.stringify(indent);
+ }
+ options.helpers = 'helpers';
+ options.partials = 'partials';
+ options.decorators = 'container.decorators';
+
+ if (!isDynamic) {
+ params.unshift(this.nameLookup('partials', name, 'partial'));
+ } else {
+ params.unshift(name);
+ }
+
+ if (this.options.compat) {
+ options.depths = 'depths';
+ }
+ options = this.objectLiteral(options);
+ params.push(options);
+
+ this.push(this.source.functionCall('container.invokePartial', '', params));
+ },
+
+ // [assignToHash]
+ //
+ // On stack, before: value, ..., hash, ...
+ // On stack, after: ..., hash, ...
+ //
+ // Pops a value off the stack and assigns it to the current hash
+ assignToHash: function assignToHash(key) {
+ var value = this.popStack(),
+ context = undefined,
+ type = undefined,
+ id = undefined;
+
+ if (this.trackIds) {
+ id = this.popStack();
+ }
+ if (this.stringParams) {
+ type = this.popStack();
+ context = this.popStack();
+ }
+
+ var hash = this.hash;
+ if (context) {
+ hash.contexts[key] = context;
+ }
+ if (type) {
+ hash.types[key] = type;
+ }
+ if (id) {
+ hash.ids[key] = id;
+ }
+ hash.values[key] = value;
+ },
+
+ pushId: function pushId(type, name, child) {
+ if (type === 'BlockParam') {
+ this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));
+ } else if (type === 'PathExpression') {
+ this.pushString(name);
+ } else if (type === 'SubExpression') {
+ this.pushStackLiteral('true');
+ } else {
+ this.pushStackLiteral('null');
+ }
+ },
+
+ // HELPERS
+
+ compiler: JavaScriptCompiler,
+
+ compileChildren: function compileChildren(environment, options) {
+ var children = environment.children,
+ child = undefined,
+ compiler = undefined;
+
+ for (var i = 0, l = children.length; i < l; i++) {
+ child = children[i];
+ compiler = new this.compiler(); // eslint-disable-line new-cap
+
+ var index = this.matchExistingProgram(child);
+
+ if (index == null) {
+ this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
+ index = this.context.programs.length;
+ child.index = index;
+ child.name = 'program' + index;
+ this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);
+ this.context.decorators[index] = compiler.decorators;
+ this.context.environments[index] = child;
+
+ this.useDepths = this.useDepths || compiler.useDepths;
+ this.useBlockParams = this.useBlockParams || compiler.useBlockParams;
+ } else {
+ child.index = index;
+ child.name = 'program' + index;
+
+ this.useDepths = this.useDepths || child.useDepths;
+ this.useBlockParams = this.useBlockParams || child.useBlockParams;
+ }
+ }
+ },
+ matchExistingProgram: function matchExistingProgram(child) {
+ for (var i = 0, len = this.context.environments.length; i < len; i++) {
+ var environment = this.context.environments[i];
+ if (environment && environment.equals(child)) {
+ return i;
+ }
+ }
+ },
+
+ programExpression: function programExpression(guid) {
+ var child = this.environment.children[guid],
+ programParams = [child.index, 'data', child.blockParams];
+
+ if (this.useBlockParams || this.useDepths) {
+ programParams.push('blockParams');
+ }
+ if (this.useDepths) {
+ programParams.push('depths');
+ }
+
+ return 'container.program(' + programParams.join(', ') + ')';
+ },
+
+ useRegister: function useRegister(name) {
+ if (!this.registers[name]) {
+ this.registers[name] = true;
+ this.registers.list.push(name);
+ }
+ },
+
+ push: function push(expr) {
+ if (!(expr instanceof Literal)) {
+ expr = this.source.wrap(expr);
+ }
+
+ this.inlineStack.push(expr);
+ return expr;
+ },
+
+ pushStackLiteral: function pushStackLiteral(item) {
+ this.push(new Literal(item));
+ },
+
+ pushSource: function pushSource(source) {
+ if (this.pendingContent) {
+ this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));
+ this.pendingContent = undefined;
+ }
+
+ if (source) {
+ this.source.push(source);
+ }
+ },
+
+ replaceStack: function replaceStack(callback) {
+ var prefix = ['('],
+ stack = undefined,
+ createdStack = undefined,
+ usedLiteral = undefined;
+
+ /* istanbul ignore next */
+ if (!this.isInline()) {
+ throw new _exception2['default']('replaceStack on non-inline');
+ }
+
+ // We want to merge the inline statement into the replacement statement via ','
+ var top = this.popStack(true);
+
+ if (top instanceof Literal) {
+ // Literals do not need to be inlined
+ stack = [top.value];
+ prefix = ['(', stack];
+ usedLiteral = true;
+ } else {
+ // Get or create the current stack name for use by the inline
+ createdStack = true;
+ var _name = this.incrStack();
+
+ prefix = ['((', this.push(_name), ' = ', top, ')'];
+ stack = this.topStack();
+ }
+
+ var item = callback.call(this, stack);
+
+ if (!usedLiteral) {
+ this.popStack();
+ }
+ if (createdStack) {
+ this.stackSlot--;
+ }
+ this.push(prefix.concat(item, ')'));
+ },
+
+ incrStack: function incrStack() {
+ this.stackSlot++;
+ if (this.stackSlot > this.stackVars.length) {
+ this.stackVars.push('stack' + this.stackSlot);
+ }
+ return this.topStackName();
+ },
+ topStackName: function topStackName() {
+ return 'stack' + this.stackSlot;
+ },
+ flushInline: function flushInline() {
+ var inlineStack = this.inlineStack;
+ this.inlineStack = [];
+ for (var i = 0, len = inlineStack.length; i < len; i++) {
+ var entry = inlineStack[i];
+ /* istanbul ignore if */
+ if (entry instanceof Literal) {
+ this.compileStack.push(entry);
+ } else {
+ var stack = this.incrStack();
+ this.pushSource([stack, ' = ', entry, ';']);
+ this.compileStack.push(stack);
+ }
+ }
+ },
+ isInline: function isInline() {
+ return this.inlineStack.length;
+ },
+
+ popStack: function popStack(wrapped) {
+ var inline = this.isInline(),
+ item = (inline ? this.inlineStack : this.compileStack).pop();
+
+ if (!wrapped && item instanceof Literal) {
+ return item.value;
+ } else {
+ if (!inline) {
+ /* istanbul ignore next */
+ if (!this.stackSlot) {
+ throw new _exception2['default']('Invalid stack pop');
+ }
+ this.stackSlot--;
+ }
+ return item;
+ }
+ },
+
+ topStack: function topStack() {
+ var stack = this.isInline() ? this.inlineStack : this.compileStack,
+ item = stack[stack.length - 1];
+
+ /* istanbul ignore if */
+ if (item instanceof Literal) {
+ return item.value;
+ } else {
+ return item;
+ }
+ },
+
+ contextName: function contextName(context) {
+ if (this.useDepths && context) {
+ return 'depths[' + context + ']';
+ } else {
+ return 'depth' + context;
+ }
+ },
+
+ quotedString: function quotedString(str) {
+ return this.source.quotedString(str);
+ },
+
+ objectLiteral: function objectLiteral(obj) {
+ return this.source.objectLiteral(obj);
+ },
+
+ aliasable: function aliasable(name) {
+ var ret = this.aliases[name];
+ if (ret) {
+ ret.referenceCount++;
+ return ret;
+ }
+
+ ret = this.aliases[name] = this.source.wrap(name);
+ ret.aliasable = true;
+ ret.referenceCount = 1;
+
+ return ret;
+ },
+
+ setupHelper: function setupHelper(paramSize, name, blockHelper) {
+ var params = [],
+ paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);
+ var foundHelper = this.nameLookup('helpers', name, 'helper'),
+ callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : {}');
+
+ return {
+ params: params,
+ paramsInit: paramsInit,
+ name: foundHelper,
+ callParams: [callContext].concat(params)
+ };
+ },
+
+ setupParams: function setupParams(helper, paramSize, params) {
+ var options = {},
+ contexts = [],
+ types = [],
+ ids = [],
+ objectArgs = !params,
+ param = undefined;
+
+ if (objectArgs) {
+ params = [];
+ }
+
+ options.name = this.quotedString(helper);
+ options.hash = this.popStack();
+
+ if (this.trackIds) {
+ options.hashIds = this.popStack();
+ }
+ if (this.stringParams) {
+ options.hashTypes = this.popStack();
+ options.hashContexts = this.popStack();
+ }
+
+ var inverse = this.popStack(),
+ program = this.popStack();
+
+ // Avoid setting fn and inverse if neither are set. This allows
+ // helpers to do a check for `if (options.fn)`
+ if (program || inverse) {
+ options.fn = program || 'container.noop';
+ options.inverse = inverse || 'container.noop';
+ }
+
+ // The parameters go on to the stack in order (making sure that they are evaluated in order)
+ // so we need to pop them off the stack in reverse order
+ var i = paramSize;
+ while (i--) {
+ param = this.popStack();
+ params[i] = param;
+
+ if (this.trackIds) {
+ ids[i] = this.popStack();
+ }
+ if (this.stringParams) {
+ types[i] = this.popStack();
+ contexts[i] = this.popStack();
+ }
+ }
+
+ if (objectArgs) {
+ options.args = this.source.generateArray(params);
+ }
+
+ if (this.trackIds) {
+ options.ids = this.source.generateArray(ids);
+ }
+ if (this.stringParams) {
+ options.types = this.source.generateArray(types);
+ options.contexts = this.source.generateArray(contexts);
+ }
+
+ if (this.options.data) {
+ options.data = 'data';
+ }
+ if (this.useBlockParams) {
+ options.blockParams = 'blockParams';
+ }
+ return options;
+ },
+
+ setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {
+ var options = this.setupParams(helper, paramSize, params);
+ options = this.objectLiteral(options);
+ if (useRegister) {
+ this.useRegister('options');
+ params.push('options');
+ return ['options=', options];
+ } else if (params) {
+ params.push(options);
+ return '';
+ } else {
+ return options;
+ }
+ }
+ };
+
+ (function () {
+ var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');
+
+ var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
+
+ for (var i = 0, l = reservedWords.length; i < l; i++) {
+ compilerWords[reservedWords[i]] = true;
+ }
+ })();
+
+ JavaScriptCompiler.isValidJavaScriptVariableName = function (name) {
+ return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);
+ };
+
+ function strictLookup(requireTerminal, compiler, parts, type) {
+ var stack = compiler.popStack(),
+ i = 0,
+ len = parts.length;
+ if (requireTerminal) {
+ len--;
+ }
+
+ for (; i < len; i++) {
+ stack = compiler.nameLookup(stack, parts[i], type);
+ }
+
+ if (requireTerminal) {
+ return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')'];
+ } else {
+ return stack;
+ }
+ }
+
+ exports['default'] = JavaScriptCompiler;
+ module.exports = exports['default'];
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+ /* global define */
+ 'use strict';
+
+ exports.__esModule = true;
+
+ var _utils = __webpack_require__(5);
+
+ var SourceNode = undefined;
+
+ try {
+ /* istanbul ignore next */
+ if (false) {
+ // We don't support this in AMD environments. For these environments, we asusme that
+ // they are running on the browser and thus have no need for the source-map library.
+ var SourceMap = require('source-map');
+ SourceNode = SourceMap.SourceNode;
+ }
+ } catch (err) {}
+ /* NOP */
+
+ /* istanbul ignore if: tested but not covered in istanbul due to dist build */
+ if (!SourceNode) {
+ SourceNode = function (line, column, srcFile, chunks) {
+ this.src = '';
+ if (chunks) {
+ this.add(chunks);
+ }
+ };
+ /* istanbul ignore next */
+ SourceNode.prototype = {
+ add: function add(chunks) {
+ if (_utils.isArray(chunks)) {
+ chunks = chunks.join('');
+ }
+ this.src += chunks;
+ },
+ prepend: function prepend(chunks) {
+ if (_utils.isArray(chunks)) {
+ chunks = chunks.join('');
+ }
+ this.src = chunks + this.src;
+ },
+ toStringWithSourceMap: function toStringWithSourceMap() {
+ return { code: this.toString() };
+ },
+ toString: function toString() {
+ return this.src;
+ }
+ };
+ }
+
+ function castChunk(chunk, codeGen, loc) {
+ if (_utils.isArray(chunk)) {
+ var ret = [];
+
+ for (var i = 0, len = chunk.length; i < len; i++) {
+ ret.push(codeGen.wrap(chunk[i], loc));
+ }
+ return ret;
+ } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {
+ // Handle primitives that the SourceNode will throw up on
+ return chunk + '';
+ }
+ return chunk;
+ }
+
+ function CodeGen(srcFile) {
+ this.srcFile = srcFile;
+ this.source = [];
+ }
+
+ CodeGen.prototype = {
+ isEmpty: function isEmpty() {
+ return !this.source.length;
+ },
+ prepend: function prepend(source, loc) {
+ this.source.unshift(this.wrap(source, loc));
+ },
+ push: function push(source, loc) {
+ this.source.push(this.wrap(source, loc));
+ },
+
+ merge: function merge() {
+ var source = this.empty();
+ this.each(function (line) {
+ source.add([' ', line, '\n']);
+ });
+ return source;
+ },
+
+ each: function each(iter) {
+ for (var i = 0, len = this.source.length; i < len; i++) {
+ iter(this.source[i]);
+ }
+ },
+
+ empty: function empty() {
+ var loc = this.currentLocation || { start: {} };
+ return new SourceNode(loc.start.line, loc.start.column, this.srcFile);
+ },
+ wrap: function wrap(chunk) {
+ var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];
+
+ if (chunk instanceof SourceNode) {
+ return chunk;
+ }
+
+ chunk = castChunk(chunk, this, loc);
+
+ return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);
+ },
+
+ functionCall: function functionCall(fn, type, params) {
+ params = this.generateList(params);
+ return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);
+ },
+
+ quotedString: function quotedString(str) {
+ return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4
+ .replace(/\u2029/g, '\\u2029') + '"';
+ },
+
+ objectLiteral: function objectLiteral(obj) {
+ var pairs = [];
+
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ var value = castChunk(obj[key], this);
+ if (value !== 'undefined') {
+ pairs.push([this.quotedString(key), ':', value]);
+ }
+ }
+ }
+
+ var ret = this.generateList(pairs);
+ ret.prepend('{');
+ ret.add('}');
+ return ret;
+ },
+
+ generateList: function generateList(entries) {
+ var ret = this.empty();
+
+ for (var i = 0, len = entries.length; i < len; i++) {
+ if (i) {
+ ret.add(',');
+ }
+
+ ret.add(castChunk(entries[i], this));
+ }
+
+ return ret;
+ },
+
+ generateArray: function generateArray(entries) {
+ var ret = this.generateList(entries);
+ ret.prepend('[');
+ ret.add(']');
+
+ return ret;
+ }
+ };
+
+ exports['default'] = CodeGen;
+ module.exports = exports['default'];
+
+/***/ }
+/******/ ])
+});
+; \ No newline at end of file
diff --git a/core/vendor/moment/.bower.json b/core/vendor/moment/.bower.json
index 3d09c660400..58c7c593575 100644
--- a/core/vendor/moment/.bower.json
+++ b/core/vendor/moment/.bower.json
@@ -1,6 +1,5 @@
{
"name": "moment",
- "version": "2.10.3",
"main": "moment.js",
"ignore": [
"**/.*",
@@ -21,13 +20,14 @@
"package.json"
],
"homepage": "https://github.com/moment/moment",
- "_release": "2.10.3",
+ "version": "2.15.0",
+ "_release": "2.15.0",
"_resolution": {
"type": "version",
- "tag": "2.10.3",
- "commit": "6fa444238494318e3c488c81d8520ad2eba8bae7"
+ "tag": "2.15.0",
+ "commit": "0d01bda39d30c904977d385d2e5352c6a02600dc"
},
- "_source": "git://github.com/moment/moment.git",
- "_target": "~2.10.0",
+ "_source": "https://github.com/moment/moment.git",
+ "_target": "^2.15.0",
"_originalSource": "moment"
} \ No newline at end of file
diff --git a/core/vendor/moment/LICENSE b/core/vendor/moment/LICENSE
index 34f5b3707a9..9ee537448a3 100644
--- a/core/vendor/moment/LICENSE
+++ b/core/vendor/moment/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2011-2015 Tim Wood, Iskren Chernev, Moment.js contributors
+Copyright (c) 2011-2016 Tim Wood, Iskren Chernev, Moment.js contributors
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
diff --git a/core/vendor/moment/min/moment-with-locales.js b/core/vendor/moment/min/moment-with-locales.js
index 61145c0ff75..e6afacc63aa 100644
--- a/core/vendor/moment/min/moment-with-locales.js
+++ b/core/vendor/moment/min/moment-with-locales.js
@@ -1,4 +1,10 @@
-(function (global, factory) {
+//! moment.js
+//! version : 2.15.0
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
global.moment = factory()
@@ -17,7 +23,22 @@
}
function isArray(input) {
- return Object.prototype.toString.call(input) === '[object Array]';
+ return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+ }
+
+ function isObject(input) {
+ // IE8 will treat undefined and null as object if it wasn't for
+ // input != null
+ return input != null && Object.prototype.toString.call(input) === '[object Object]';
+ }
+
+ function isObjectEmpty(obj) {
+ var k;
+ for (k in obj) {
+ // even if its not own property I'd still call it non-empty
+ return false;
+ }
+ return true;
}
function isDate(input) {
@@ -70,7 +91,9 @@
invalidMonth : null,
invalidFormat : false,
userInvalidated : false,
- iso : false
+ iso : false,
+ parsedDateParts : [],
+ meridiem : null
};
}
@@ -81,23 +104,53 @@
return m._pf;
}
+ var some;
+ if (Array.prototype.some) {
+ some = Array.prototype.some;
+ } else {
+ some = function (fun) {
+ var t = Object(this);
+ var len = t.length >>> 0;
+
+ for (var i = 0; i < len; i++) {
+ if (i in t && fun.call(this, t[i], i, t)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+ }
+
function valid__isValid(m) {
if (m._isValid == null) {
var flags = getParsingFlags(m);
- m._isValid = !isNaN(m._d.getTime()) &&
+ var parsedParts = some.call(flags.parsedDateParts, function (i) {
+ return i != null;
+ });
+ var isNowValid = !isNaN(m._d.getTime()) &&
flags.overflow < 0 &&
!flags.empty &&
!flags.invalidMonth &&
+ !flags.invalidWeekday &&
!flags.nullInput &&
!flags.invalidFormat &&
- !flags.userInvalidated;
+ !flags.userInvalidated &&
+ (!flags.meridiem || (flags.meridiem && parsedParts));
if (m._strict) {
- m._isValid = m._isValid &&
+ isNowValid = isNowValid &&
flags.charsLeftOver === 0 &&
flags.unusedTokens.length === 0 &&
flags.bigHour === undefined;
}
+
+ if (Object.isFrozen == null || !Object.isFrozen(m)) {
+ m._isValid = isNowValid;
+ }
+ else {
+ return isNowValid;
+ }
}
return m._isValid;
}
@@ -114,39 +167,45 @@
return m;
}
+ function isUndefined(input) {
+ return input === void 0;
+ }
+
+ // Plugins that add properties should also add the key here (null value),
+ // so we can properly clone ourselves.
var momentProperties = utils_hooks__hooks.momentProperties = [];
function copyConfig(to, from) {
var i, prop, val;
- if (typeof from._isAMomentObject !== 'undefined') {
+ if (!isUndefined(from._isAMomentObject)) {
to._isAMomentObject = from._isAMomentObject;
}
- if (typeof from._i !== 'undefined') {
+ if (!isUndefined(from._i)) {
to._i = from._i;
}
- if (typeof from._f !== 'undefined') {
+ if (!isUndefined(from._f)) {
to._f = from._f;
}
- if (typeof from._l !== 'undefined') {
+ if (!isUndefined(from._l)) {
to._l = from._l;
}
- if (typeof from._strict !== 'undefined') {
+ if (!isUndefined(from._strict)) {
to._strict = from._strict;
}
- if (typeof from._tzm !== 'undefined') {
+ if (!isUndefined(from._tzm)) {
to._tzm = from._tzm;
}
- if (typeof from._isUTC !== 'undefined') {
+ if (!isUndefined(from._isUTC)) {
to._isUTC = from._isUTC;
}
- if (typeof from._offset !== 'undefined') {
+ if (!isUndefined(from._offset)) {
to._offset = from._offset;
}
- if (typeof from._pf !== 'undefined') {
+ if (!isUndefined(from._pf)) {
to._pf = getParsingFlags(from);
}
- if (typeof from._locale !== 'undefined') {
+ if (!isUndefined(from._locale)) {
to._locale = from._locale;
}
@@ -154,7 +213,7 @@
for (i in momentProperties) {
prop = momentProperties[i];
val = from[prop];
- if (typeof val !== 'undefined') {
+ if (!isUndefined(val)) {
to[prop] = val;
}
}
@@ -168,7 +227,7 @@
// Moment prototype object
function Moment(config) {
copyConfig(this, config);
- this._d = new Date(+config._d);
+ this._d = new Date(config._d != null ? config._d.getTime() : NaN);
// Prevent infinite loop in case updateOffset creates new moment
// objects.
if (updateInProgress === false) {
@@ -182,21 +241,27 @@
return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
}
+ function absFloor (number) {
+ if (number < 0) {
+ // -0 -> 0
+ return Math.ceil(number) || 0;
+ } else {
+ return Math.floor(number);
+ }
+ }
+
function toInt(argumentForCoercion) {
var coercedNumber = +argumentForCoercion,
value = 0;
if (coercedNumber !== 0 && isFinite(coercedNumber)) {
- if (coercedNumber >= 0) {
- value = Math.floor(coercedNumber);
- } else {
- value = Math.ceil(coercedNumber);
- }
+ value = absFloor(coercedNumber);
}
return value;
}
+ // compare two arrays, return the number of differences
function compareArrays(array1, array2, dontConvert) {
var len = Math.min(array1.length, array2.length),
lengthDiff = Math.abs(array1.length - array2.length),
@@ -211,122 +276,203 @@
return diffs + lengthDiff;
}
- function Locale() {
+ function warn(msg) {
+ if (utils_hooks__hooks.suppressDeprecationWarnings === false &&
+ (typeof console !== 'undefined') && console.warn) {
+ console.warn('Deprecation warning: ' + msg);
+ }
}
- var locales = {};
- var globalLocale;
+ function deprecate(msg, fn) {
+ var firstTime = true;
- function normalizeLocale(key) {
- return key ? key.toLowerCase().replace('_', '-') : key;
+ return extend(function () {
+ if (utils_hooks__hooks.deprecationHandler != null) {
+ utils_hooks__hooks.deprecationHandler(null, msg);
+ }
+ if (firstTime) {
+ var args = [];
+ var arg;
+ for (var i = 0; i < arguments.length; i++) {
+ arg = '';
+ if (typeof arguments[i] === 'object') {
+ arg += '\n[' + i + '] ';
+ for (var key in arguments[0]) {
+ arg += key + ': ' + arguments[0][key] + ', ';
+ }
+ arg = arg.slice(0, -2); // Remove trailing comma and space
+ } else {
+ arg = arguments[i];
+ }
+ args.push(arg);
+ }
+ warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
}
- // pick the locale from the array
- // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
- // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
- function chooseLocale(names) {
- var i = 0, j, next, locale, split;
+ var deprecations = {};
- while (i < names.length) {
- split = normalizeLocale(names[i]).split('-');
- j = split.length;
- next = normalizeLocale(names[i + 1]);
- next = next ? next.split('-') : null;
- while (j > 0) {
- locale = loadLocale(split.slice(0, j).join('-'));
- if (locale) {
- return locale;
- }
- if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
- //the next array item is better than a shallower substring of this one
- break;
- }
- j--;
- }
- i++;
+ function deprecateSimple(name, msg) {
+ if (utils_hooks__hooks.deprecationHandler != null) {
+ utils_hooks__hooks.deprecationHandler(name, msg);
+ }
+ if (!deprecations[name]) {
+ warn(msg);
+ deprecations[name] = true;
}
- return null;
}
- function loadLocale(name) {
- var oldLocale = null;
- // TODO: Find a better way to register and load all the locales in Node
- if (!locales[name] && typeof module !== 'undefined' &&
- module && module.exports) {
- try {
- oldLocale = globalLocale._abbr;
- require('./locale/' + name);
- // because defineLocale currently also sets the global locale, we
- // want to undo that for lazy loaded locales
- locale_locales__getSetGlobalLocale(oldLocale);
- } catch (e) { }
- }
- return locales[name];
+ utils_hooks__hooks.suppressDeprecationWarnings = false;
+ utils_hooks__hooks.deprecationHandler = null;
+
+ function isFunction(input) {
+ return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
}
- // This function will load locale and then set the global locale. If
- // no arguments are passed in, it will simply return the current global
- // locale key.
- function locale_locales__getSetGlobalLocale (key, values) {
- var data;
- if (key) {
- if (typeof values === 'undefined') {
- data = locale_locales__getLocale(key);
- }
- else {
- data = defineLocale(key, values);
+ function locale_set__set (config) {
+ var prop, i;
+ for (i in config) {
+ prop = config[i];
+ if (isFunction(prop)) {
+ this[i] = prop;
+ } else {
+ this['_' + i] = prop;
}
+ }
+ this._config = config;
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _ordinalParseLenient.
+ this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
+ }
- if (data) {
- // moment.duration._locale = moment._locale = data;
- globalLocale = data;
+ function mergeConfigs(parentConfig, childConfig) {
+ var res = extend({}, parentConfig), prop;
+ for (prop in childConfig) {
+ if (hasOwnProp(childConfig, prop)) {
+ if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+ res[prop] = {};
+ extend(res[prop], parentConfig[prop]);
+ extend(res[prop], childConfig[prop]);
+ } else if (childConfig[prop] != null) {
+ res[prop] = childConfig[prop];
+ } else {
+ delete res[prop];
+ }
+ }
+ }
+ for (prop in parentConfig) {
+ if (hasOwnProp(parentConfig, prop) &&
+ !hasOwnProp(childConfig, prop) &&
+ isObject(parentConfig[prop])) {
+ // make sure changes to properties don't modify parent config
+ res[prop] = extend({}, res[prop]);
}
}
+ return res;
+ }
- return globalLocale._abbr;
+ function Locale(config) {
+ if (config != null) {
+ this.set(config);
+ }
}
- function defineLocale (name, values) {
- if (values !== null) {
- values.abbr = name;
- if (!locales[name]) {
- locales[name] = new Locale();
+ var keys;
+
+ if (Object.keys) {
+ keys = Object.keys;
+ } else {
+ keys = function (obj) {
+ var i, res = [];
+ for (i in obj) {
+ if (hasOwnProp(obj, i)) {
+ res.push(i);
+ }
}
- locales[name].set(values);
+ return res;
+ };
+ }
- // backwards compat for now: also set the locale
- locale_locales__getSetGlobalLocale(name);
+ var defaultCalendar = {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ };
- return locales[name];
- } else {
- // useful for testing
- delete locales[name];
- return null;
- }
+ function locale_calendar__calendar (key, mom, now) {
+ var output = this._calendar[key] || this._calendar['sameElse'];
+ return isFunction(output) ? output.call(mom, now) : output;
}
- // returns locale data
- function locale_locales__getLocale (key) {
- var locale;
+ var defaultLongDateFormat = {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ };
- if (key && key._locale && key._locale._abbr) {
- key = key._locale._abbr;
- }
+ function longDateFormat (key) {
+ var format = this._longDateFormat[key],
+ formatUpper = this._longDateFormat[key.toUpperCase()];
- if (!key) {
- return globalLocale;
+ if (format || !formatUpper) {
+ return format;
}
- if (!isArray(key)) {
- //short-circuit everything else
- locale = loadLocale(key);
- if (locale) {
- return locale;
- }
- key = [key];
- }
+ this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+ return val.slice(1);
+ });
- return chooseLocale(key);
+ return this._longDateFormat[key];
+ }
+
+ var defaultInvalidDate = 'Invalid date';
+
+ function invalidDate () {
+ return this._invalidDate;
+ }
+
+ var defaultOrdinal = '%d';
+ var defaultOrdinalParse = /\d{1,2}/;
+
+ function ordinal (number) {
+ return this._ordinal.replace('%d', number);
+ }
+
+ var defaultRelativeTime = {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ };
+
+ function relative__relativeTime (number, withoutSuffix, string, isFuture) {
+ var output = this._relativeTime[string];
+ return (isFunction(output)) ?
+ output(number, withoutSuffix, string, isFuture) :
+ output.replace(/%d/i, number);
+ }
+
+ function pastFuture (diff, output) {
+ var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+ return isFunction(format) ? format(output) : format.replace(/%s/i, output);
}
var aliases = {};
@@ -357,6 +503,23 @@
return normalizedInput;
}
+ var priorities = {};
+
+ function addUnitPriority(unit, priority) {
+ priorities[unit] = priority;
+ }
+
+ function getPrioritizedUnits(unitsObj) {
+ var units = [];
+ for (var u in unitsObj) {
+ units.push({unit: u, priority: priorities[u]});
+ }
+ units.sort(function (a, b) {
+ return a.priority - b.priority;
+ });
+ return units;
+ }
+
function makeGetSet (unit, keepTime) {
return function (value) {
if (value != null) {
@@ -370,24 +533,37 @@
}
function get_set__get (mom, unit) {
- return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();
+ return mom.isValid() ?
+ mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
}
function get_set__set (mom, unit, value) {
- return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ if (mom.isValid()) {
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ }
}
// MOMENTS
- function getSet (units, value) {
- var unit;
+ function stringGet (units) {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units]();
+ }
+ return this;
+ }
+
+
+ function stringSet (units, value) {
if (typeof units === 'object') {
- for (unit in units) {
- this.set(unit, units[unit]);
+ units = normalizeObjectUnits(units);
+ var prioritized = getPrioritizedUnits(units);
+ for (var i = 0; i < prioritized.length; i++) {
+ this[prioritized[i].unit](units[prioritized[i].unit]);
}
} else {
units = normalizeUnits(units);
- if (typeof this[units] === 'function') {
+ if (isFunction(this[units])) {
return this[units](value);
}
}
@@ -395,16 +571,14 @@
}
function zeroFill(number, targetLength, forceSign) {
- var output = '' + Math.abs(number),
+ var absNumber = '' + Math.abs(number),
+ zerosToFill = targetLength - absNumber.length,
sign = number >= 0;
-
- while (output.length < targetLength) {
- output = '0' + output;
- }
- return (sign ? (forceSign ? '+' : '') : '-') + output;
+ return (sign ? (forceSign ? '+' : '') : '-') +
+ Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
}
- var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g;
+ var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
@@ -457,7 +631,7 @@
}
return function (mom) {
- var output = '';
+ var output = '', i;
for (i = 0; i < length; i++) {
output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
}
@@ -472,10 +646,7 @@
}
format = expandFormat(format, m.localeData());
-
- if (!formatFunctions[format]) {
- formatFunctions[format] = makeFormatFunction(format);
- }
+ formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
return formatFunctions[format](m);
}
@@ -503,6 +674,8 @@
var match4 = /\d{4}/; // 0000 - 9999
var match6 = /[+-]?\d{6}/; // -999999 - 999999
var match1to2 = /\d\d?/; // 0 - 99
+ var match3to4 = /\d\d\d\d?/; // 999 - 9999
+ var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999
var match1to3 = /\d{1,3}/; // 0 - 999
var match1to4 = /\d{1,4}/; // 0 - 9999
var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999
@@ -511,16 +684,19 @@
var matchSigned = /[+-]?\d+/; // -inf - inf
var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+ var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
// any word (or two) characters or numbers including two/three word month in arabic.
+ // includes scottish gaelic two word and hyphenated months
var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+
var regexes = {};
function addRegexToken (token, regex, strictRegex) {
- regexes[token] = typeof regex === 'function' ? regex : function (isStrict) {
+ regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
return (isStrict && strictRegex) ? strictRegex : regex;
};
}
@@ -535,9 +711,13 @@
// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
function unescapeFormat(s) {
- return s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+ return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
return p1 || p2 || p3 || p4;
- }).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+ }));
+ }
+
+ function regexEscape(s) {
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
var tokens = {};
@@ -577,6 +757,25 @@
var MINUTE = 4;
var SECOND = 5;
var MILLISECOND = 6;
+ var WEEK = 7;
+ var WEEKDAY = 8;
+
+ var indexOf;
+
+ if (Array.prototype.indexOf) {
+ indexOf = Array.prototype.indexOf;
+ } else {
+ indexOf = function (o) {
+ // I know
+ var i;
+ for (i = 0; i < this.length; ++i) {
+ if (this[i] === o) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ }
function daysInMonth(year, month) {
return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
@@ -600,12 +799,20 @@
addUnitAlias('month', 'M');
+ // PRIORITY
+
+ addUnitPriority('month', 8);
+
// PARSING
addRegexToken('M', match1to2);
addRegexToken('MM', match1to2, match2);
- addRegexToken('MMM', matchWord);
- addRegexToken('MMMM', matchWord);
+ addRegexToken('MMM', function (isStrict, locale) {
+ return locale.monthsShortRegex(isStrict);
+ });
+ addRegexToken('MMMM', function (isStrict, locale) {
+ return locale.monthsRegex(isStrict);
+ });
addParseToken(['M', 'MM'], function (input, array) {
array[MONTH] = toInt(input) - 1;
@@ -623,25 +830,82 @@
// LOCALES
+ var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/;
var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
- function localeMonths (m) {
- return this._months[m.month()];
+ function localeMonths (m, format) {
+ if (!m) {
+ return this._months;
+ }
+ return isArray(this._months) ? this._months[m.month()] :
+ this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
}
var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
- function localeMonthsShort (m) {
- return this._monthsShort[m.month()];
+ function localeMonthsShort (m, format) {
+ if (!m) {
+ return this._monthsShort;
+ }
+ return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+ this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
+ }
+
+ function units_month__handleStrictParse(monthName, format, strict) {
+ var i, ii, mom, llc = monthName.toLocaleLowerCase();
+ if (!this._monthsParse) {
+ // this is not used
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ for (i = 0; i < 12; ++i) {
+ mom = create_utc__createUTC([2000, i]);
+ this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+ this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
}
function localeMonthsParse (monthName, format, strict) {
var i, mom, regex;
+ if (this._monthsParseExact) {
+ return units_month__handleStrictParse.call(this, monthName, format, strict);
+ }
+
if (!this._monthsParse) {
this._monthsParse = [];
this._longMonthsParse = [];
this._shortMonthsParse = [];
}
+ // TODO: add sorting
+ // Sorting makes sure if one month (or abbr) is a prefix of another
+ // see sorting in computeMonthsParse
for (i = 0; i < 12; i++) {
// make the regex if we don't have it already
mom = create_utc__createUTC([2000, i]);
@@ -669,12 +933,20 @@
function setMonth (mom, value) {
var dayOfMonth;
- // TODO: Move this out of here!
+ if (!mom.isValid()) {
+ // No op
+ return mom;
+ }
+
if (typeof value === 'string') {
- value = mom.localeData().monthsParse(value);
- // TODO: Another silent failure?
- if (typeof value !== 'number') {
- return mom;
+ if (/^\d+$/.test(value)) {
+ value = toInt(value);
+ } else {
+ value = mom.localeData().monthsParse(value);
+ // TODO: Another silent failure?
+ if (typeof value !== 'number') {
+ return mom;
+ }
}
}
@@ -697,155 +969,86 @@
return daysInMonth(this.year(), this.month());
}
- function checkOverflow (m) {
- var overflow;
- var a = m._a;
-
- if (a && getParsingFlags(m).overflow === -2) {
- overflow =
- a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
- a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
- a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
- a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
- a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
- a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
- -1;
-
- if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
- overflow = DATE;
+ var defaultMonthsShortRegex = matchWord;
+ function monthsShortRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
}
-
- getParsingFlags(m).overflow = overflow;
- }
-
- return m;
- }
-
- function warn(msg) {
- if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {
- console.warn('Deprecation warning: ' + msg);
- }
- }
-
- function deprecate(msg, fn) {
- var firstTime = true,
- msgWithStack = msg + '\n' + (new Error()).stack;
-
- return extend(function () {
- if (firstTime) {
- warn(msgWithStack);
- firstTime = false;
+ if (isStrict) {
+ return this._monthsShortStrictRegex;
+ } else {
+ return this._monthsShortRegex;
}
- return fn.apply(this, arguments);
- }, fn);
- }
-
- var deprecations = {};
-
- function deprecateSimple(name, msg) {
- if (!deprecations[name]) {
- warn(msg);
- deprecations[name] = true;
+ } else {
+ if (!hasOwnProp(this, '_monthsShortRegex')) {
+ this._monthsShortRegex = defaultMonthsShortRegex;
+ }
+ return this._monthsShortStrictRegex && isStrict ?
+ this._monthsShortStrictRegex : this._monthsShortRegex;
}
}
- utils_hooks__hooks.suppressDeprecationWarnings = false;
-
- var from_string__isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
-
- var isoDates = [
- ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/],
- ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/],
- ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/],
- ['GGGG-[W]WW', /\d{4}-W\d{2}/],
- ['YYYY-DDD', /\d{4}-\d{3}/]
- ];
-
- // iso time formats and regexes
- var isoTimes = [
- ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/],
- ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
- ['HH:mm', /(T| )\d\d:\d\d/],
- ['HH', /(T| )\d\d/]
- ];
-
- var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
-
- // date from iso format
- function configFromISO(config) {
- var i, l,
- string = config._i,
- match = from_string__isoRegex.exec(string);
-
- if (match) {
- getParsingFlags(config).iso = true;
- for (i = 0, l = isoDates.length; i < l; i++) {
- if (isoDates[i][1].exec(string)) {
- // match[5] should be 'T' or undefined
- config._f = isoDates[i][0] + (match[6] || ' ');
- break;
- }
+ var defaultMonthsRegex = matchWord;
+ function units_month__monthsRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
}
- for (i = 0, l = isoTimes.length; i < l; i++) {
- if (isoTimes[i][1].exec(string)) {
- config._f += isoTimes[i][0];
- break;
- }
- }
- if (string.match(matchOffset)) {
- config._f += 'Z';
+ if (isStrict) {
+ return this._monthsStrictRegex;
+ } else {
+ return this._monthsRegex;
}
- configFromStringAndFormat(config);
} else {
- config._isValid = false;
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ this._monthsRegex = defaultMonthsRegex;
+ }
+ return this._monthsStrictRegex && isStrict ?
+ this._monthsStrictRegex : this._monthsRegex;
}
}
- // date from iso format or fallback
- function configFromString(config) {
- var matched = aspNetJsonRegex.exec(config._i);
-
- if (matched !== null) {
- config._d = new Date(+matched[1]);
- return;
+ function computeMonthsParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
}
- configFromISO(config);
- if (config._isValid === false) {
- delete config._isValid;
- utils_hooks__hooks.createFromInputFallback(config);
+ var shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom;
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = create_utc__createUTC([2000, i]);
+ shortPieces.push(this.monthsShort(mom, ''));
+ longPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.monthsShort(mom, ''));
+ }
+ // Sorting makes sure if one month (or abbr) is a prefix of another it
+ // will match the longer piece.
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 12; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
}
- }
-
- utils_hooks__hooks.createFromInputFallback = deprecate(
- 'moment construction falls back to js Date. This is ' +
- 'discouraged and will be removed in upcoming major ' +
- 'release. Please refer to ' +
- 'https://github.com/moment/moment/issues/1407 for more info.',
- function (config) {
- config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ for (i = 0; i < 24; i++) {
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
}
- );
- function createDate (y, m, d, h, M, s, ms) {
- //can't just apply() to create a date:
- //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
- var date = new Date(y, m, d, h, M, s, ms);
-
- //the date constructor doesn't accept years < 1970
- if (y < 1970) {
- date.setFullYear(y);
- }
- return date;
+ this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._monthsShortRegex = this._monthsRegex;
+ this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
}
- function createUTCDate (y) {
- var date = new Date(Date.UTC.apply(null, arguments));
- if (y < 1970) {
- date.setUTCFullYear(y);
- }
- return date;
- }
+ // FORMATTING
+
+ addFormatToken('Y', 0, 0, function () {
+ var y = this.year();
+ return y <= 9999 ? '' + y : '+' + y;
+ });
addFormatToken(0, ['YY', 2], 0, function () {
return this.year() % 100;
@@ -859,6 +1062,10 @@
addUnitAlias('year', 'y');
+ // PRIORITIES
+
+ addUnitPriority('year', 1);
+
// PARSING
addRegexToken('Y', matchSigned);
@@ -867,10 +1074,16 @@
addRegexToken('YYYYY', match1to6, match6);
addRegexToken('YYYYYY', match1to6, match6);
- addParseToken(['YYYY', 'YYYYY', 'YYYYYY'], YEAR);
+ addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+ addParseToken('YYYY', function (input, array) {
+ array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);
+ });
addParseToken('YY', function (input, array) {
array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);
});
+ addParseToken('Y', function (input, array) {
+ array[YEAR] = parseInt(input, 10);
+ });
// HELPERS
@@ -890,12 +1103,98 @@
// MOMENTS
- var getSetYear = makeGetSet('FullYear', false);
+ var getSetYear = makeGetSet('FullYear', true);
function getIsLeapYear () {
return isLeapYear(this.year());
}
+ function createDate (y, m, d, h, M, s, ms) {
+ //can't just apply() to create a date:
+ //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+ var date = new Date(y, m, d, h, M, s, ms);
+
+ //the date constructor remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
+ date.setFullYear(y);
+ }
+ return date;
+ }
+
+ function createUTCDate (y) {
+ var date = new Date(Date.UTC.apply(null, arguments));
+
+ //the Date.UTC function remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
+ date.setUTCFullYear(y);
+ }
+ return date;
+ }
+
+ // start-of-first-week - start-of-year
+ function firstWeekOffset(year, dow, doy) {
+ var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ fwd = 7 + dow - doy,
+ // first-week day local weekday -- which local weekday is fwd
+ fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+ return -fwdlw + fwd - 1;
+ }
+
+ //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+ function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+ var localWeekday = (7 + weekday - dow) % 7,
+ weekOffset = firstWeekOffset(year, dow, doy),
+ dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+ resYear, resDayOfYear;
+
+ if (dayOfYear <= 0) {
+ resYear = year - 1;
+ resDayOfYear = daysInYear(resYear) + dayOfYear;
+ } else if (dayOfYear > daysInYear(year)) {
+ resYear = year + 1;
+ resDayOfYear = dayOfYear - daysInYear(year);
+ } else {
+ resYear = year;
+ resDayOfYear = dayOfYear;
+ }
+
+ return {
+ year: resYear,
+ dayOfYear: resDayOfYear
+ };
+ }
+
+ function weekOfYear(mom, dow, doy) {
+ var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+ week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+ resWeek, resYear;
+
+ if (week < 1) {
+ resYear = mom.year() - 1;
+ resWeek = week + weeksInYear(resYear, dow, doy);
+ } else if (week > weeksInYear(mom.year(), dow, doy)) {
+ resWeek = week - weeksInYear(mom.year(), dow, doy);
+ resYear = mom.year() + 1;
+ } else {
+ resYear = mom.year();
+ resWeek = week;
+ }
+
+ return {
+ week: resWeek,
+ year: resYear
+ };
+ }
+
+ function weeksInYear(year, dow, doy) {
+ var weekOffset = firstWeekOffset(year, dow, doy),
+ weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+ return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+ }
+
+ // FORMATTING
+
addFormatToken('w', ['ww', 2], 'wo', 'week');
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
@@ -904,6 +1203,11 @@
addUnitAlias('week', 'w');
addUnitAlias('isoWeek', 'W');
+ // PRIORITIES
+
+ addUnitPriority('week', 5);
+ addUnitPriority('isoWeek', 5);
+
// PARSING
addRegexToken('w', match1to2);
@@ -917,34 +1221,6 @@
// HELPERS
- // firstDayOfWeek 0 = sun, 6 = sat
- // the day of the week that starts the week
- // (usually sunday or monday)
- // firstDayOfWeekOfYear 0 = sun, 6 = sat
- // the first week is the week that contains the first
- // of this day of the week
- // (eg. ISO weeks use thursday (4))
- function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {
- var end = firstDayOfWeekOfYear - firstDayOfWeek,
- daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),
- adjustedMoment;
-
-
- if (daysToDayOfWeek > end) {
- daysToDayOfWeek -= 7;
- }
-
- if (daysToDayOfWeek < end - 7) {
- daysToDayOfWeek += 7;
- }
-
- adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd');
- return {
- week: Math.ceil(adjustedMoment.dayOfYear() / 7),
- year: adjustedMoment.year()
- };
- }
-
// LOCALES
function localeWeek (mom) {
@@ -976,46 +1252,813 @@
return input == null ? week : this.add((input - week) * 7, 'd');
}
- addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+ // FORMATTING
+
+ addFormatToken('d', 0, 'do', 'day');
+
+ addFormatToken('dd', 0, 0, function (format) {
+ return this.localeData().weekdaysMin(this, format);
+ });
+
+ addFormatToken('ddd', 0, 0, function (format) {
+ return this.localeData().weekdaysShort(this, format);
+ });
+
+ addFormatToken('dddd', 0, 0, function (format) {
+ return this.localeData().weekdays(this, format);
+ });
+
+ addFormatToken('e', 0, 0, 'weekday');
+ addFormatToken('E', 0, 0, 'isoWeekday');
// ALIASES
- addUnitAlias('dayOfYear', 'DDD');
+ addUnitAlias('day', 'd');
+ addUnitAlias('weekday', 'e');
+ addUnitAlias('isoWeekday', 'E');
+
+ // PRIORITY
+ addUnitPriority('day', 11);
+ addUnitPriority('weekday', 11);
+ addUnitPriority('isoWeekday', 11);
// PARSING
- addRegexToken('DDD', match1to3);
- addRegexToken('DDDD', match3);
- addParseToken(['DDD', 'DDDD'], function (input, array, config) {
- config._dayOfYear = toInt(input);
+ addRegexToken('d', match1to2);
+ addRegexToken('e', match1to2);
+ addRegexToken('E', match1to2);
+ addRegexToken('dd', function (isStrict, locale) {
+ return locale.weekdaysMinRegex(isStrict);
+ });
+ addRegexToken('ddd', function (isStrict, locale) {
+ return locale.weekdaysShortRegex(isStrict);
+ });
+ addRegexToken('dddd', function (isStrict, locale) {
+ return locale.weekdaysRegex(isStrict);
+ });
+
+ addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+ var weekday = config._locale.weekdaysParse(input, token, config._strict);
+ // if we didn't get a weekday name, mark the date as invalid
+ if (weekday != null) {
+ week.d = weekday;
+ } else {
+ getParsingFlags(config).invalidWeekday = input;
+ }
+ });
+
+ addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+ week[token] = toInt(input);
});
// HELPERS
- //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
- function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
- var d = createUTCDate(year, 0, 1).getUTCDay();
- var daysToAdd;
- var dayOfYear;
+ function parseWeekday(input, locale) {
+ if (typeof input !== 'string') {
+ return input;
+ }
- d = d === 0 ? 7 : d;
- weekday = weekday != null ? weekday : firstDayOfWeek;
- daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
- dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
+ if (!isNaN(input)) {
+ return parseInt(input, 10);
+ }
- return {
- year : dayOfYear > 0 ? year : year - 1,
- dayOfYear : dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear
- };
+ input = locale.weekdaysParse(input);
+ if (typeof input === 'number') {
+ return input;
+ }
+
+ return null;
+ }
+
+ function parseIsoWeekday(input, locale) {
+ if (typeof input === 'string') {
+ return locale.weekdaysParse(input) % 7 || 7;
+ }
+ return isNaN(input) ? null : input;
+ }
+
+ // LOCALES
+
+ var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+ function localeWeekdays (m, format) {
+ if (!m) {
+ return this._weekdays;
+ }
+ return isArray(this._weekdays) ? this._weekdays[m.day()] :
+ this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
+ }
+
+ var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+ function localeWeekdaysShort (m) {
+ return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
+ }
+
+ var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+ function localeWeekdaysMin (m) {
+ return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
+ }
+
+ function day_of_week__handleStrictParse(weekdayName, format, strict) {
+ var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._minWeekdaysParse = [];
+
+ for (i = 0; i < 7; ++i) {
+ mom = create_utc__createUTC([2000, 1]).day(i);
+ this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+ this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+ this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+ }
+
+ function localeWeekdaysParse (weekdayName, format, strict) {
+ var i, mom, regex;
+
+ if (this._weekdaysParseExact) {
+ return day_of_week__handleStrictParse.call(this, weekdayName, format, strict);
+ }
+
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._minWeekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._fullWeekdaysParse = [];
+ }
+
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+
+ mom = create_utc__createUTC([2000, 1]).day(i);
+ if (strict && !this._fullWeekdaysParse[i]) {
+ this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
+ this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
+ this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
+ }
+ if (!this._weekdaysParse[i]) {
+ regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+ this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+ return i;
+ }
+ }
}
// MOMENTS
- function getSetDayOfYear (input) {
- var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
- return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+ function getSetDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ if (input != null) {
+ input = parseWeekday(input, this.localeData());
+ return this.add(input - day, 'd');
+ } else {
+ return day;
+ }
+ }
+
+ function getSetLocaleDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return input == null ? weekday : this.add(input - weekday, 'd');
+ }
+
+ function getSetISODayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+
+ // behaves the same as moment#day except
+ // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+ // as a setter, sunday should belong to the previous week.
+
+ if (input != null) {
+ var weekday = parseIsoWeekday(input, this.localeData());
+ return this.day(this.day() % 7 ? weekday : weekday - 7);
+ } else {
+ return this.day() || 7;
+ }
+ }
+
+ var defaultWeekdaysRegex = matchWord;
+ function weekdaysRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysStrictRegex;
+ } else {
+ return this._weekdaysRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ this._weekdaysRegex = defaultWeekdaysRegex;
+ }
+ return this._weekdaysStrictRegex && isStrict ?
+ this._weekdaysStrictRegex : this._weekdaysRegex;
+ }
+ }
+
+ var defaultWeekdaysShortRegex = matchWord;
+ function weekdaysShortRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysShortStrictRegex;
+ } else {
+ return this._weekdaysShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+ this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+ }
+ return this._weekdaysShortStrictRegex && isStrict ?
+ this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+ }
+ }
+
+ var defaultWeekdaysMinRegex = matchWord;
+ function weekdaysMinRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysMinStrictRegex;
+ } else {
+ return this._weekdaysMinRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+ this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+ }
+ return this._weekdaysMinStrictRegex && isStrict ?
+ this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+ }
+ }
+
+
+ function computeWeekdaysParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom, minp, shortp, longp;
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+ mom = create_utc__createUTC([2000, 1]).day(i);
+ minp = this.weekdaysMin(mom, '');
+ shortp = this.weekdaysShort(mom, '');
+ longp = this.weekdays(mom, '');
+ minPieces.push(minp);
+ shortPieces.push(shortp);
+ longPieces.push(longp);
+ mixedPieces.push(minp);
+ mixedPieces.push(shortp);
+ mixedPieces.push(longp);
+ }
+ // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+ // will match the longer piece.
+ minPieces.sort(cmpLenRev);
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 7; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._weekdaysShortRegex = this._weekdaysRegex;
+ this._weekdaysMinRegex = this._weekdaysRegex;
+
+ this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+ this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+ }
+
+ // FORMATTING
+
+ function hFormat() {
+ return this.hours() % 12 || 12;
+ }
+
+ function kFormat() {
+ return this.hours() || 24;
+ }
+
+ addFormatToken('H', ['HH', 2], 0, 'hour');
+ addFormatToken('h', ['hh', 2], 0, hFormat);
+ addFormatToken('k', ['kk', 2], 0, kFormat);
+
+ addFormatToken('hmm', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+ });
+
+ addFormatToken('hmmss', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+ });
+
+ addFormatToken('Hmm', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2);
+ });
+
+ addFormatToken('Hmmss', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+ });
+
+ function meridiem (token, lowercase) {
+ addFormatToken(token, 0, 0, function () {
+ return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+ });
+ }
+
+ meridiem('a', true);
+ meridiem('A', false);
+
+ // ALIASES
+
+ addUnitAlias('hour', 'h');
+
+ // PRIORITY
+ addUnitPriority('hour', 13);
+
+ // PARSING
+
+ function matchMeridiem (isStrict, locale) {
+ return locale._meridiemParse;
+ }
+
+ addRegexToken('a', matchMeridiem);
+ addRegexToken('A', matchMeridiem);
+ addRegexToken('H', match1to2);
+ addRegexToken('h', match1to2);
+ addRegexToken('HH', match1to2, match2);
+ addRegexToken('hh', match1to2, match2);
+
+ addRegexToken('hmm', match3to4);
+ addRegexToken('hmmss', match5to6);
+ addRegexToken('Hmm', match3to4);
+ addRegexToken('Hmmss', match5to6);
+
+ addParseToken(['H', 'HH'], HOUR);
+ addParseToken(['a', 'A'], function (input, array, config) {
+ config._isPm = config._locale.isPM(input);
+ config._meridiem = input;
+ });
+ addParseToken(['h', 'hh'], function (input, array, config) {
+ array[HOUR] = toInt(input);
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ getParsingFlags(config).bigHour = true;
+ });
+ addParseToken('Hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ });
+ addParseToken('Hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ });
+
+ // LOCALES
+
+ function localeIsPM (input) {
+ // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+ // Using charAt should be more compatible.
+ return ((input + '').toLowerCase().charAt(0) === 'p');
+ }
+
+ var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+ function localeMeridiem (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'pm' : 'PM';
+ } else {
+ return isLower ? 'am' : 'AM';
+ }
+ }
+
+
+ // MOMENTS
+
+ // Setting the hour should keep the time, because the user explicitly
+ // specified which hour he wants. So trying to maintain the same hour (in
+ // a new timezone) makes sense. Adding/subtracting hours does not follow
+ // this rule.
+ var getSetHour = makeGetSet('Hours', true);
+
+ var baseConfig = {
+ calendar: defaultCalendar,
+ longDateFormat: defaultLongDateFormat,
+ invalidDate: defaultInvalidDate,
+ ordinal: defaultOrdinal,
+ ordinalParse: defaultOrdinalParse,
+ relativeTime: defaultRelativeTime,
+
+ months: defaultLocaleMonths,
+ monthsShort: defaultLocaleMonthsShort,
+
+ week: defaultLocaleWeek,
+
+ weekdays: defaultLocaleWeekdays,
+ weekdaysMin: defaultLocaleWeekdaysMin,
+ weekdaysShort: defaultLocaleWeekdaysShort,
+
+ meridiemParse: defaultLocaleMeridiemParse
+ };
+
+ // internal storage for locale config files
+ var locales = {};
+ var globalLocale;
+
+ function normalizeLocale(key) {
+ return key ? key.toLowerCase().replace('_', '-') : key;
+ }
+
+ // pick the locale from the array
+ // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+ // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+ function chooseLocale(names) {
+ var i = 0, j, next, locale, split;
+
+ while (i < names.length) {
+ split = normalizeLocale(names[i]).split('-');
+ j = split.length;
+ next = normalizeLocale(names[i + 1]);
+ next = next ? next.split('-') : null;
+ while (j > 0) {
+ locale = loadLocale(split.slice(0, j).join('-'));
+ if (locale) {
+ return locale;
+ }
+ if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+ //the next array item is better than a shallower substring of this one
+ break;
+ }
+ j--;
+ }
+ i++;
+ }
+ return null;
+ }
+
+ function loadLocale(name) {
+ var oldLocale = null;
+ // TODO: Find a better way to register and load all the locales in Node
+ if (!locales[name] && (typeof module !== 'undefined') &&
+ module && module.require) {
+ try {
+ oldLocale = globalLocale._abbr;
+ module.require('./locale/' + name);
+ // because defineLocale currently also sets the global locale, we
+ // want to undo that for lazy loaded locales
+ locale_locales__getSetGlobalLocale(oldLocale);
+ } catch (e) { }
+ }
+ return locales[name];
+ }
+
+ // This function will load locale and then set the global locale. If
+ // no arguments are passed in, it will simply return the current global
+ // locale key.
+ function locale_locales__getSetGlobalLocale (key, values) {
+ var data;
+ if (key) {
+ if (isUndefined(values)) {
+ data = locale_locales__getLocale(key);
+ }
+ else {
+ data = defineLocale(key, values);
+ }
+
+ if (data) {
+ // moment.duration._locale = moment._locale = data;
+ globalLocale = data;
+ }
+ }
+
+ return globalLocale._abbr;
+ }
+
+ function defineLocale (name, config) {
+ if (config !== null) {
+ var parentConfig = baseConfig;
+ config.abbr = name;
+ if (locales[name] != null) {
+ deprecateSimple('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.');
+ parentConfig = locales[name]._config;
+ } else if (config.parentLocale != null) {
+ if (locales[config.parentLocale] != null) {
+ parentConfig = locales[config.parentLocale]._config;
+ } else {
+ // treat as if there is no base config
+ deprecateSimple('parentLocaleUndefined',
+ 'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/');
+ }
+ }
+ locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+ // backwards compat for now: also set the locale
+ locale_locales__getSetGlobalLocale(name);
+
+ return locales[name];
+ } else {
+ // useful for testing
+ delete locales[name];
+ return null;
+ }
+ }
+
+ function updateLocale(name, config) {
+ if (config != null) {
+ var locale, parentConfig = baseConfig;
+ // MERGE
+ if (locales[name] != null) {
+ parentConfig = locales[name]._config;
+ }
+ config = mergeConfigs(parentConfig, config);
+ locale = new Locale(config);
+ locale.parentLocale = locales[name];
+ locales[name] = locale;
+
+ // backwards compat for now: also set the locale
+ locale_locales__getSetGlobalLocale(name);
+ } else {
+ // pass null for config to unupdate, useful for tests
+ if (locales[name] != null) {
+ if (locales[name].parentLocale != null) {
+ locales[name] = locales[name].parentLocale;
+ } else if (locales[name] != null) {
+ delete locales[name];
+ }
+ }
+ }
+ return locales[name];
+ }
+
+ // returns locale data
+ function locale_locales__getLocale (key) {
+ var locale;
+
+ if (key && key._locale && key._locale._abbr) {
+ key = key._locale._abbr;
+ }
+
+ if (!key) {
+ return globalLocale;
+ }
+
+ if (!isArray(key)) {
+ //short-circuit everything else
+ locale = loadLocale(key);
+ if (locale) {
+ return locale;
+ }
+ key = [key];
+ }
+
+ return chooseLocale(key);
}
+ function locale_locales__listLocales() {
+ return keys(locales);
+ }
+
+ function checkOverflow (m) {
+ var overflow;
+ var a = m._a;
+
+ if (a && getParsingFlags(m).overflow === -2) {
+ overflow =
+ a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
+ a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+ a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+ a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
+ a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
+ a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+ -1;
+
+ if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+ overflow = DATE;
+ }
+ if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+ overflow = WEEK;
+ }
+ if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+ overflow = WEEKDAY;
+ }
+
+ getParsingFlags(m).overflow = overflow;
+ }
+
+ return m;
+ }
+
+ // iso 8601 regex
+ // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+ var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/;
+ var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/;
+
+ var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+
+ var isoDates = [
+ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+ ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+ ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+ ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+ ['YYYY-DDD', /\d{4}-\d{3}/],
+ ['YYYY-MM', /\d{4}-\d\d/, false],
+ ['YYYYYYMMDD', /[+-]\d{10}/],
+ ['YYYYMMDD', /\d{8}/],
+ // YYYYMM is NOT allowed by the standard
+ ['GGGG[W]WWE', /\d{4}W\d{3}/],
+ ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+ ['YYYYDDD', /\d{7}/]
+ ];
+
+ // iso time formats and regexes
+ var isoTimes = [
+ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+ ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+ ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+ ['HH:mm', /\d\d:\d\d/],
+ ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+ ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+ ['HHmmss', /\d\d\d\d\d\d/],
+ ['HHmm', /\d\d\d\d/],
+ ['HH', /\d\d/]
+ ];
+
+ var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+ // date from iso format
+ function configFromISO(config) {
+ var i, l,
+ string = config._i,
+ match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+ allowTime, dateFormat, timeFormat, tzFormat;
+
+ if (match) {
+ getParsingFlags(config).iso = true;
+
+ for (i = 0, l = isoDates.length; i < l; i++) {
+ if (isoDates[i][1].exec(match[1])) {
+ dateFormat = isoDates[i][0];
+ allowTime = isoDates[i][2] !== false;
+ break;
+ }
+ }
+ if (dateFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[3]) {
+ for (i = 0, l = isoTimes.length; i < l; i++) {
+ if (isoTimes[i][1].exec(match[3])) {
+ // match[2] should be 'T' or space
+ timeFormat = (match[2] || ' ') + isoTimes[i][0];
+ break;
+ }
+ }
+ if (timeFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ }
+ if (!allowTime && timeFormat != null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[4]) {
+ if (tzRegex.exec(match[4])) {
+ tzFormat = 'Z';
+ } else {
+ config._isValid = false;
+ return;
+ }
+ }
+ config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+ configFromStringAndFormat(config);
+ } else {
+ config._isValid = false;
+ }
+ }
+
+ // date from iso format or fallback
+ function configFromString(config) {
+ var matched = aspNetJsonRegex.exec(config._i);
+
+ if (matched !== null) {
+ config._d = new Date(+matched[1]);
+ return;
+ }
+
+ configFromISO(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ utils_hooks__hooks.createFromInputFallback(config);
+ }
+ }
+
+ utils_hooks__hooks.createFromInputFallback = deprecate(
+ 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' +
+ 'which is not reliable across all browsers and versions. Non ISO date formats are ' +
+ 'discouraged and will be removed in an upcoming major release. Please refer to ' +
+ 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+ function (config) {
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ }
+ );
+
// Pick the first defined of two or three arguments.
function defaults(a, b, c) {
if (a != null) {
@@ -1028,11 +2071,12 @@
}
function currentDateArray(config) {
- var now = new Date();
+ // hooks is actually the exported moment object
+ var nowValue = new Date(utils_hooks__hooks.now());
if (config._useUTC) {
- return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()];
+ return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
}
- return [now.getFullYear(), now.getMonth(), now.getDate()];
+ return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
}
// convert an array to a date.
@@ -1102,7 +2146,7 @@
}
function dayOfYearFromWeekInfo(config) {
- var w, weekYear, week, weekday, dow, doy, temp;
+ var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
w = config._w;
if (w.GG != null || w.W != null || w.E != null) {
@@ -1116,6 +2160,9 @@
weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);
week = defaults(w.W, 1);
weekday = defaults(w.E, 1);
+ if (weekday < 1 || weekday > 7) {
+ weekdayOverflow = true;
+ }
} else {
dow = config._locale._week.dow;
doy = config._locale._week.doy;
@@ -1126,23 +2173,32 @@
if (w.d != null) {
// weekday -- low day numbers are considered next week
weekday = w.d;
- if (weekday < dow) {
- ++week;
+ if (weekday < 0 || weekday > 6) {
+ weekdayOverflow = true;
}
} else if (w.e != null) {
// local weekday -- counting starts from begining of week
weekday = w.e + dow;
+ if (w.e < 0 || w.e > 6) {
+ weekdayOverflow = true;
+ }
} else {
// default to begining of week
weekday = dow;
}
}
- temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
-
- config._a[YEAR] = temp.year;
- config._dayOfYear = temp.dayOfYear;
+ if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+ getParsingFlags(config)._overflowWeeks = true;
+ } else if (weekdayOverflow != null) {
+ getParsingFlags(config)._overflowWeekday = true;
+ } else {
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ }
}
+ // constant that refers to the ISO standard
utils_hooks__hooks.ISO_8601 = function () {};
// date from string and format string
@@ -1167,6 +2223,8 @@
for (i = 0; i < tokens.length; i++) {
token = tokens[i];
parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+ // console.log('token', token, 'parsedInput', parsedInput,
+ // 'regex', getParseRegexForToken(token, config));
if (parsedInput) {
skipped = string.substr(0, string.indexOf(parsedInput));
if (skipped.length > 0) {
@@ -1197,11 +2255,14 @@
}
// clear _12h flag if hour is <= 12
- if (getParsingFlags(config).bigHour === true &&
- config._a[HOUR] <= 12 &&
- config._a[HOUR] > 0) {
+ if (config._a[HOUR] <= 12 &&
+ getParsingFlags(config).bigHour === true &&
+ config._a[HOUR] > 0) {
getParsingFlags(config).bigHour = undefined;
}
+
+ getParsingFlags(config).parsedDateParts = config._a.slice(0);
+ getParsingFlags(config).meridiem = config._meridiem;
// handle meridiem
config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
@@ -1235,6 +2296,7 @@
}
}
+ // date from string and array of format strings
function configFromStringAndArray(config) {
var tempConfig,
bestMoment,
@@ -1285,15 +2347,27 @@
}
var i = normalizeObjectUnits(config._i);
- config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond];
+ config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+ return obj && parseInt(obj, 10);
+ });
configFromArray(config);
}
function createFromConfig (config) {
+ var res = new Moment(checkOverflow(prepareConfig(config)));
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
+
+ return res;
+ }
+
+ function prepareConfig (config) {
var input = config._i,
- format = config._f,
- res;
+ format = config._f;
config._locale = config._locale || locale_locales__getLocale(config._l);
@@ -1309,30 +2383,27 @@
return new Moment(checkOverflow(input));
} else if (isArray(format)) {
configFromStringAndArray(config);
- } else if (format) {
- configFromStringAndFormat(config);
} else if (isDate(input)) {
config._d = input;
- } else {
+ } else if (format) {
+ configFromStringAndFormat(config);
+ } else {
configFromInput(config);
}
- res = new Moment(checkOverflow(config));
- if (res._nextDay) {
- // Adding is smart enough around DST
- res.add(1, 'd');
- res._nextDay = undefined;
+ if (!valid__isValid(config)) {
+ config._d = null;
}
- return res;
+ return config;
}
function configFromInput(config) {
var input = config._i;
if (input === undefined) {
- config._d = new Date();
+ config._d = new Date(utils_hooks__hooks.now());
} else if (isDate(input)) {
- config._d = new Date(+input);
+ config._d = new Date(input.valueOf());
} else if (typeof input === 'string') {
configFromString(config);
} else if (isArray(input)) {
@@ -1357,6 +2428,11 @@
strict = locale;
locale = undefined;
}
+
+ if ((isObject(input) && isObjectEmpty(input)) ||
+ (isArray(input) && input.length === 0)) {
+ input = undefined;
+ }
// object construction must be done this way.
// https://github.com/moment/moment/issues/1423
c._isAMomentObject = true;
@@ -1374,18 +2450,26 @@
}
var prototypeMin = deprecate(
- 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548',
- function () {
- var other = local__createLocal.apply(null, arguments);
- return other < this ? this : other;
- }
- );
+ 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = local__createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other < this ? this : other;
+ } else {
+ return valid__createInvalid();
+ }
+ }
+ );
var prototypeMax = deprecate(
- 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548',
+ 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
function () {
var other = local__createLocal.apply(null, arguments);
- return other > this ? this : other;
+ if (this.isValid() && other.isValid()) {
+ return other > this ? this : other;
+ } else {
+ return valid__createInvalid();
+ }
}
);
@@ -1404,7 +2488,7 @@
}
res = moments[0];
for (i = 1; i < moments.length; ++i) {
- if (moments[i][fn](res)) {
+ if (!moments[i].isValid() || moments[i][fn](res)) {
res = moments[i];
}
}
@@ -1424,6 +2508,10 @@
return pickBy('isAfter', args);
}
+ var now = function () {
+ return Date.now ? Date.now() : +(new Date());
+ };
+
function Duration (duration) {
var normalizedInput = normalizeObjectUnits(duration),
years = normalizedInput.year || 0,
@@ -1440,7 +2528,7 @@
this._milliseconds = +milliseconds +
seconds * 1e3 + // 1000
minutes * 6e4 + // 1000 * 60
- hours * 36e5; // 1000 * 60 * 60
+ hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
// Because of dateAddRemove treats 24 hours as different from a
// day when working around DST, we need to store them separately
this._days = +days +
@@ -1463,6 +2551,16 @@
return obj instanceof Duration;
}
+ function absRound (number) {
+ if (number < 0) {
+ return Math.round(-1 * number) * -1;
+ } else {
+ return Math.round(number);
+ }
+ }
+
+ // FORMATTING
+
function offset (token, separator) {
addFormatToken(token, 0, 0, function () {
var offset = this.utcOffset();
@@ -1480,11 +2578,11 @@
// PARSING
- addRegexToken('Z', matchOffset);
- addRegexToken('ZZ', matchOffset);
+ addRegexToken('Z', matchShortOffset);
+ addRegexToken('ZZ', matchShortOffset);
addParseToken(['Z', 'ZZ'], function (input, array, config) {
config._useUTC = true;
- config._tzm = offsetFromString(input);
+ config._tzm = offsetFromString(matchShortOffset, input);
});
// HELPERS
@@ -1494,8 +2592,8 @@
// '-1530' > ['-15', '30']
var chunkOffset = /([\+\-]|\d\d)/gi;
- function offsetFromString(string) {
- var matches = ((string || '').match(matchOffset) || []);
+ function offsetFromString(matcher, string) {
+ var matches = ((string || '').match(matcher) || []);
var chunk = matches[matches.length - 1] || [];
var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
var minutes = +(parts[1] * 60) + toInt(parts[2]);
@@ -1508,15 +2606,14 @@
var res, diff;
if (model._isUTC) {
res = model.clone();
- diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res);
+ diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf();
// Use low-level api, because this fn is low-level api.
- res._d.setTime(+res._d + diff);
+ res._d.setTime(res._d.valueOf() + diff);
utils_hooks__hooks.updateOffset(res, false);
return res;
} else {
return local__createLocal(input).local();
}
- return model._isUTC ? local__createLocal(input).zone(model._offset || 0) : local__createLocal(input).local();
}
function getDateOffset (m) {
@@ -1546,11 +2643,13 @@
function getSetOffset (input, keepLocalTime) {
var offset = this._offset || 0,
localAdjust;
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
if (input != null) {
if (typeof input === 'string') {
- input = offsetFromString(input);
- }
- if (Math.abs(input) < 16) {
+ input = offsetFromString(matchShortOffset, input);
+ } else if (Math.abs(input) < 16) {
input = input * 60;
}
if (!this._isUTC && keepLocalTime) {
@@ -1610,18 +2709,22 @@
if (this._tzm) {
this.utcOffset(this._tzm);
} else if (typeof this._i === 'string') {
- this.utcOffset(offsetFromString(this._i));
+ var tZone = offsetFromString(matchOffset, this._i);
+
+ if (tZone === 0) {
+ this.utcOffset(0, true);
+ } else {
+ this.utcOffset(offsetFromString(matchOffset, this._i));
+ }
}
return this;
}
function hasAlignedHourOffset (input) {
- if (!input) {
- input = 0;
- }
- else {
- input = local__createLocal(input).utcOffset();
+ if (!this.isValid()) {
+ return false;
}
+ input = input ? local__createLocal(input).utcOffset() : 0;
return (this.utcOffset() - input) % 60 === 0;
}
@@ -1634,31 +2737,45 @@
}
function isDaylightSavingTimeShifted () {
- if (this._a) {
- var other = this._isUTC ? create_utc__createUTC(this._a) : local__createLocal(this._a);
- return this.isValid() && compareArrays(this._a, other.toArray()) > 0;
+ if (!isUndefined(this._isDSTShifted)) {
+ return this._isDSTShifted;
}
- return false;
+ var c = {};
+
+ copyConfig(c, this);
+ c = prepareConfig(c);
+
+ if (c._a) {
+ var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a);
+ this._isDSTShifted = this.isValid() &&
+ compareArrays(c._a, other.toArray()) > 0;
+ } else {
+ this._isDSTShifted = false;
+ }
+
+ return this._isDSTShifted;
}
function isLocal () {
- return !this._isUTC;
+ return this.isValid() ? !this._isUTC : false;
}
function isUtcOffset () {
- return this._isUTC;
+ return this.isValid() ? this._isUTC : false;
}
function isUtc () {
- return this._isUTC && this._offset === 0;
+ return this.isValid() ? this._isUTC && this._offset === 0 : false;
}
- var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/;
+ // ASP.NET json date format regex
+ var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
- var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;
+ // and further modified to allow for strings containing both week and day
+ var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
function create__createDuration (input, key) {
var duration = input,
@@ -1685,22 +2802,22 @@
sign = (match[1] === '-') ? -1 : 1;
duration = {
y : 0,
- d : toInt(match[DATE]) * sign,
- h : toInt(match[HOUR]) * sign,
- m : toInt(match[MINUTE]) * sign,
- s : toInt(match[SECOND]) * sign,
- ms : toInt(match[MILLISECOND]) * sign
+ d : toInt(match[DATE]) * sign,
+ h : toInt(match[HOUR]) * sign,
+ m : toInt(match[MINUTE]) * sign,
+ s : toInt(match[SECOND]) * sign,
+ ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
};
- } else if (!!(match = create__isoRegex.exec(input))) {
+ } else if (!!(match = isoRegex.exec(input))) {
sign = (match[1] === '-') ? -1 : 1;
duration = {
y : parseIso(match[2], sign),
M : parseIso(match[3], sign),
- d : parseIso(match[4], sign),
- h : parseIso(match[5], sign),
- m : parseIso(match[6], sign),
- s : parseIso(match[7], sign),
- w : parseIso(match[8], sign)
+ w : parseIso(match[4], sign),
+ d : parseIso(match[5], sign),
+ h : parseIso(match[6], sign),
+ m : parseIso(match[7], sign),
+ s : parseIso(match[8], sign)
};
} else if (duration == null) {// checks for null or undefined
duration = {};
@@ -1748,6 +2865,10 @@
function momentsDifference(base, other) {
var res;
+ if (!(base.isValid() && other.isValid())) {
+ return {milliseconds: 0, months: 0};
+ }
+
other = cloneWithOffset(other, base);
if (base.isBefore(other)) {
res = positiveMomentsDifference(base, other);
@@ -1760,12 +2881,14 @@
return res;
}
+ // TODO: remove 'name' arg after deprecation is removed
function createAdder(direction, name) {
return function (val, period) {
var dur, tmp;
//invert the arguments, but complain about it
if (period !== null && !isNaN(+period)) {
- deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');
+ deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+ 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
tmp = val; val = period; period = tmp;
}
@@ -1778,12 +2901,18 @@
function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {
var milliseconds = duration._milliseconds,
- days = duration._days,
- months = duration._months;
+ days = absRound(duration._days),
+ months = absRound(duration._months);
+
+ if (!mom.isValid()) {
+ // No op
+ return;
+ }
+
updateOffset = updateOffset == null ? true : updateOffset;
if (milliseconds) {
- mom._d.setTime(+mom._d + milliseconds * isAdding);
+ mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
}
if (days) {
get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);
@@ -1799,19 +2928,26 @@
var add_subtract__add = createAdder(1, 'add');
var add_subtract__subtract = createAdder(-1, 'subtract');
- function moment_calendar__calendar (time) {
- // We want to compare the start of today, vs this.
- // Getting start-of-today depends on whether we're local/utc/offset or not.
- var now = time || local__createLocal(),
- sod = cloneWithOffset(now, this).startOf('day'),
- diff = this.diff(sod, 'days', true),
- format = diff < -6 ? 'sameElse' :
+ function getCalendarFormat(myMoment, now) {
+ var diff = myMoment.diff(now, 'days', true);
+ return diff < -6 ? 'sameElse' :
diff < -1 ? 'lastWeek' :
diff < 0 ? 'lastDay' :
diff < 1 ? 'sameDay' :
diff < 2 ? 'nextDay' :
diff < 7 ? 'nextWeek' : 'sameElse';
- return this.format(this.localeData().calendar(format, this, local__createLocal(now)));
+ }
+
+ function moment_calendar__calendar (time, formats) {
+ // We want to compare the start of today, vs this.
+ // Getting start-of-today depends on whether we're local/utc/offset or not.
+ var now = time || local__createLocal(),
+ sod = cloneWithOffset(now, this).startOf('day'),
+ format = utils_hooks__hooks.calendarFormat(this, sod) || 'sameElse';
+
+ var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
+
+ return this.format(output || this.localeData().calendar(format, this, local__createLocal(now)));
}
function clone () {
@@ -1819,58 +2955,77 @@
}
function isAfter (input, units) {
- var inputMs;
- units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+ var localInput = isMoment(input) ? input : local__createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
if (units === 'millisecond') {
- input = isMoment(input) ? input : local__createLocal(input);
- return +this > +input;
+ return this.valueOf() > localInput.valueOf();
} else {
- inputMs = isMoment(input) ? +input : +local__createLocal(input);
- return inputMs < +this.clone().startOf(units);
+ return localInput.valueOf() < this.clone().startOf(units).valueOf();
}
}
function isBefore (input, units) {
- var inputMs;
- units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+ var localInput = isMoment(input) ? input : local__createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
if (units === 'millisecond') {
- input = isMoment(input) ? input : local__createLocal(input);
- return +this < +input;
+ return this.valueOf() < localInput.valueOf();
} else {
- inputMs = isMoment(input) ? +input : +local__createLocal(input);
- return +this.clone().endOf(units) < inputMs;
+ return this.clone().endOf(units).valueOf() < localInput.valueOf();
}
}
- function isBetween (from, to, units) {
- return this.isAfter(from, units) && this.isBefore(to, units);
+ function isBetween (from, to, units, inclusivity) {
+ inclusivity = inclusivity || '()';
+ return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
+ (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
}
function isSame (input, units) {
- var inputMs;
+ var localInput = isMoment(input) ? input : local__createLocal(input),
+ inputMs;
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
units = normalizeUnits(units || 'millisecond');
if (units === 'millisecond') {
- input = isMoment(input) ? input : local__createLocal(input);
- return +this === +input;
+ return this.valueOf() === localInput.valueOf();
} else {
- inputMs = +local__createLocal(input);
- return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));
+ inputMs = localInput.valueOf();
+ return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
}
}
- function absFloor (number) {
- if (number < 0) {
- return Math.ceil(number);
- } else {
- return Math.floor(number);
- }
+ function isSameOrAfter (input, units) {
+ return this.isSame(input, units) || this.isAfter(input,units);
+ }
+
+ function isSameOrBefore (input, units) {
+ return this.isSame(input, units) || this.isBefore(input,units);
}
function diff (input, units, asFloat) {
- var that = cloneWithOffset(input, this),
- zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4,
+ var that,
+ zoneDelta,
delta, output;
+ if (!this.isValid()) {
+ return NaN;
+ }
+
+ that = cloneWithOffset(input, this);
+
+ if (!that.isValid()) {
+ return NaN;
+ }
+
+ zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
units = normalizeUnits(units);
if (units === 'year' || units === 'month' || units === 'quarter') {
@@ -1909,10 +3064,12 @@
adjust = (b - anchor) / (anchor2 - anchor);
}
- return -(wholeMonthDiff + adjust);
+ //check for negative zero, return zero if negative zero
+ return -(wholeMonthDiff + adjust) || 0;
}
utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+ utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
function toString () {
return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
@@ -1921,7 +3078,7 @@
function moment_format__toISOString () {
var m = this.clone().utc();
if (0 < m.year() && m.year() <= 9999) {
- if ('function' === typeof Date.prototype.toISOString) {
+ if (isFunction(Date.prototype.toISOString)) {
// native implementation is ~50x faster, use it when we can
return this.toDate().toISOString();
} else {
@@ -1933,15 +3090,21 @@
}
function moment_format__format (inputString) {
- var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat);
+ if (!inputString) {
+ inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat;
+ }
+ var output = formatMoment(this, inputString);
return this.localeData().postformat(output);
}
function from (time, withoutSuffix) {
- if (!this.isValid()) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ local__createLocal(time).isValid())) {
+ return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
return this.localeData().invalidDate();
}
- return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
}
function fromNow (withoutSuffix) {
@@ -1949,16 +3112,22 @@
}
function to (time, withoutSuffix) {
- if (!this.isValid()) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ local__createLocal(time).isValid())) {
+ return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
return this.localeData().invalidDate();
}
- return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
}
function toNow (withoutSuffix) {
return this.to(local__createLocal(), withoutSuffix);
}
+ // If passed a locale key, it will set the locale for this
+ // instance. Otherwise, it will return the locale configuration
+ // variables for this instance.
function locale (key) {
var newLocaleData;
@@ -1993,26 +3162,27 @@
// the following switch intentionally omits break keywords
// to utilize falling through the cases.
switch (units) {
- case 'year':
- this.month(0);
- /* falls through */
- case 'quarter':
- case 'month':
- this.date(1);
- /* falls through */
- case 'week':
- case 'isoWeek':
- case 'day':
- this.hours(0);
- /* falls through */
- case 'hour':
- this.minutes(0);
- /* falls through */
- case 'minute':
- this.seconds(0);
- /* falls through */
- case 'second':
- this.milliseconds(0);
+ case 'year':
+ this.month(0);
+ /* falls through */
+ case 'quarter':
+ case 'month':
+ this.date(1);
+ /* falls through */
+ case 'week':
+ case 'isoWeek':
+ case 'day':
+ case 'date':
+ this.hours(0);
+ /* falls through */
+ case 'hour':
+ this.minutes(0);
+ /* falls through */
+ case 'minute':
+ this.seconds(0);
+ /* falls through */
+ case 'second':
+ this.milliseconds(0);
}
// weeks are a special case
@@ -2036,19 +3206,25 @@
if (units === undefined || units === 'millisecond') {
return this;
}
+
+ // 'date' is an alias for 'day', so it should be considered as such.
+ if (units === 'date') {
+ units = 'day';
+ }
+
return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
}
function to_type__valueOf () {
- return +this._d - ((this._offset || 0) * 60000);
+ return this._d.valueOf() - ((this._offset || 0) * 60000);
}
function unix () {
- return Math.floor(+this / 1000);
+ return Math.floor(this.valueOf() / 1000);
}
function toDate () {
- return this._offset ? new Date(+this) : this._d;
+ return new Date(this.valueOf());
}
function toArray () {
@@ -2056,6 +3232,24 @@
return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
}
+ function toObject () {
+ var m = this;
+ return {
+ years: m.year(),
+ months: m.month(),
+ date: m.date(),
+ hours: m.hours(),
+ minutes: m.minutes(),
+ seconds: m.seconds(),
+ milliseconds: m.milliseconds()
+ };
+ }
+
+ function toJSON () {
+ // new Date(NaN).toJSON() === null
+ return this.isValid() ? this.toISOString() : null;
+ }
+
function moment_valid__isValid () {
return valid__isValid(this);
}
@@ -2068,6 +3262,18 @@
return getParsingFlags(this).overflow;
}
+ function creationData() {
+ return {
+ input: this._i,
+ format: this._f,
+ locale: this._locale,
+ isUTC: this._isUTC,
+ strict: this._strict
+ };
+ }
+
+ // FORMATTING
+
addFormatToken(0, ['gg', 2], 0, function () {
return this.weekYear() % 100;
});
@@ -2090,6 +3296,12 @@
addUnitAlias('weekYear', 'gg');
addUnitAlias('isoWeekYear', 'GG');
+ // PRIORITY
+
+ addUnitPriority('weekYear', 1);
+ addUnitPriority('isoWeekYear', 1);
+
+
// PARSING
addRegexToken('G', matchSigned);
@@ -2109,22 +3321,20 @@
week[token] = utils_hooks__hooks.parseTwoDigitYear(input);
});
- // HELPERS
-
- function weeksInYear(year, dow, doy) {
- return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week;
- }
-
// MOMENTS
function getSetWeekYear (input) {
- var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;
- return input == null ? year : this.add((input - year), 'y');
+ return getSetWeekYearHelper.call(this,
+ input,
+ this.week(),
+ this.weekday(),
+ this.localeData()._week.dow,
+ this.localeData()._week.doy);
}
function getSetISOWeekYear (input) {
- var year = weekOfYear(this, 1, 4).year;
- return input == null ? year : this.add((input - year), 'y');
+ return getSetWeekYearHelper.call(this,
+ input, this.isoWeek(), this.isoWeekday(), 1, 4);
}
function getISOWeeksInYear () {
@@ -2136,12 +3346,41 @@
return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
}
- addFormatToken('Q', 0, 0, 'quarter');
+ function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+ var weeksTarget;
+ if (input == null) {
+ return weekOfYear(this, dow, doy).year;
+ } else {
+ weeksTarget = weeksInYear(input, dow, doy);
+ if (week > weeksTarget) {
+ week = weeksTarget;
+ }
+ return setWeekAll.call(this, input, week, weekday, dow, doy);
+ }
+ }
+
+ function setWeekAll(weekYear, week, weekday, dow, doy) {
+ var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+ date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+ this.year(date.getUTCFullYear());
+ this.month(date.getUTCMonth());
+ this.date(date.getUTCDate());
+ return this;
+ }
+
+ // FORMATTING
+
+ addFormatToken('Q', 0, 'Qo', 'quarter');
// ALIASES
addUnitAlias('quarter', 'Q');
+ // PRIORITY
+
+ addUnitPriority('quarter', 7);
+
// PARSING
addRegexToken('Q', match1);
@@ -2155,12 +3394,17 @@
return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
}
+ // FORMATTING
+
addFormatToken('D', ['DD', 2], 'Do', 'date');
// ALIASES
addUnitAlias('date', 'D');
+ // PRIOROITY
+ addUnitPriority('date', 9);
+
// PARSING
addRegexToken('D', match1to2);
@@ -2178,197 +3422,35 @@
var getSetDayOfMonth = makeGetSet('Date', true);
- addFormatToken('d', 0, 'do', 'day');
-
- addFormatToken('dd', 0, 0, function (format) {
- return this.localeData().weekdaysMin(this, format);
- });
-
- addFormatToken('ddd', 0, 0, function (format) {
- return this.localeData().weekdaysShort(this, format);
- });
-
- addFormatToken('dddd', 0, 0, function (format) {
- return this.localeData().weekdays(this, format);
- });
+ // FORMATTING
- addFormatToken('e', 0, 0, 'weekday');
- addFormatToken('E', 0, 0, 'isoWeekday');
+ addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
// ALIASES
- addUnitAlias('day', 'd');
- addUnitAlias('weekday', 'e');
- addUnitAlias('isoWeekday', 'E');
-
- // PARSING
+ addUnitAlias('dayOfYear', 'DDD');
- addRegexToken('d', match1to2);
- addRegexToken('e', match1to2);
- addRegexToken('E', match1to2);
- addRegexToken('dd', matchWord);
- addRegexToken('ddd', matchWord);
- addRegexToken('dddd', matchWord);
+ // PRIORITY
+ addUnitPriority('dayOfYear', 4);
- addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) {
- var weekday = config._locale.weekdaysParse(input);
- // if we didn't get a weekday name, mark the date as invalid
- if (weekday != null) {
- week.d = weekday;
- } else {
- getParsingFlags(config).invalidWeekday = input;
- }
- });
+ // PARSING
- addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
- week[token] = toInt(input);
+ addRegexToken('DDD', match1to3);
+ addRegexToken('DDDD', match3);
+ addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+ config._dayOfYear = toInt(input);
});
// HELPERS
- function parseWeekday(input, locale) {
- if (typeof input === 'string') {
- if (!isNaN(input)) {
- input = parseInt(input, 10);
- }
- else {
- input = locale.weekdaysParse(input);
- if (typeof input !== 'number') {
- return null;
- }
- }
- }
- return input;
- }
-
- // LOCALES
-
- var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
- function localeWeekdays (m) {
- return this._weekdays[m.day()];
- }
-
- var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
- function localeWeekdaysShort (m) {
- return this._weekdaysShort[m.day()];
- }
-
- var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
- function localeWeekdaysMin (m) {
- return this._weekdaysMin[m.day()];
- }
-
- function localeWeekdaysParse (weekdayName) {
- var i, mom, regex;
-
- if (!this._weekdaysParse) {
- this._weekdaysParse = [];
- }
-
- for (i = 0; i < 7; i++) {
- // make the regex if we don't have it already
- if (!this._weekdaysParse[i]) {
- mom = local__createLocal([2000, 1]).day(i);
- regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
- this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
- }
- // test the regex
- if (this._weekdaysParse[i].test(weekdayName)) {
- return i;
- }
- }
- }
-
// MOMENTS
- function getSetDayOfWeek (input) {
- var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
- if (input != null) {
- input = parseWeekday(input, this.localeData());
- return this.add(input - day, 'd');
- } else {
- return day;
- }
- }
-
- function getSetLocaleDayOfWeek (input) {
- var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
- return input == null ? weekday : this.add(input - weekday, 'd');
- }
-
- function getSetISODayOfWeek (input) {
- // behaves the same as moment#day except
- // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
- // as a setter, sunday should belong to the previous week.
- return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
- }
-
- addFormatToken('H', ['HH', 2], 0, 'hour');
- addFormatToken('h', ['hh', 2], 0, function () {
- return this.hours() % 12 || 12;
- });
-
- function meridiem (token, lowercase) {
- addFormatToken(token, 0, 0, function () {
- return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
- });
- }
-
- meridiem('a', true);
- meridiem('A', false);
-
- // ALIASES
-
- addUnitAlias('hour', 'h');
-
- // PARSING
-
- function matchMeridiem (isStrict, locale) {
- return locale._meridiemParse;
- }
-
- addRegexToken('a', matchMeridiem);
- addRegexToken('A', matchMeridiem);
- addRegexToken('H', match1to2);
- addRegexToken('h', match1to2);
- addRegexToken('HH', match1to2, match2);
- addRegexToken('hh', match1to2, match2);
-
- addParseToken(['H', 'HH'], HOUR);
- addParseToken(['a', 'A'], function (input, array, config) {
- config._isPm = config._locale.isPM(input);
- config._meridiem = input;
- });
- addParseToken(['h', 'hh'], function (input, array, config) {
- array[HOUR] = toInt(input);
- getParsingFlags(config).bigHour = true;
- });
-
- // LOCALES
-
- function localeIsPM (input) {
- // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
- // Using charAt should be more compatible.
- return ((input + '').toLowerCase().charAt(0) === 'p');
- }
-
- var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
- function localeMeridiem (hours, minutes, isLower) {
- if (hours > 11) {
- return isLower ? 'pm' : 'PM';
- } else {
- return isLower ? 'am' : 'AM';
- }
+ function getSetDayOfYear (input) {
+ var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+ return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
}
-
- // MOMENTS
-
- // Setting the hour should keep the time, because the user explicitly
- // specified which hour he wants. So trying to maintain the same hour (in
- // a new timezone) makes sense. Adding/subtracting hours does not follow
- // this rule.
- var getSetHour = makeGetSet('Hours', true);
+ // FORMATTING
addFormatToken('m', ['mm', 2], 0, 'minute');
@@ -2376,6 +3458,10 @@
addUnitAlias('minute', 'm');
+ // PRIORITY
+
+ addUnitPriority('minute', 14);
+
// PARSING
addRegexToken('m', match1to2);
@@ -2386,12 +3472,18 @@
var getSetMinute = makeGetSet('Minutes', false);
+ // FORMATTING
+
addFormatToken('s', ['ss', 2], 0, 'second');
// ALIASES
addUnitAlias('second', 's');
+ // PRIORITY
+
+ addUnitPriority('second', 15);
+
// PARSING
addRegexToken('s', match1to2);
@@ -2402,6 +3494,8 @@
var getSetSecond = makeGetSet('Seconds', false);
+ // FORMATTING
+
addFormatToken('S', 0, 0, function () {
return ~~(this.millisecond() / 100);
});
@@ -2410,31 +3504,59 @@
return ~~(this.millisecond() / 10);
});
- function millisecond__milliseconds (token) {
- addFormatToken(0, [token, 3], 0, 'millisecond');
- }
+ addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+ addFormatToken(0, ['SSSS', 4], 0, function () {
+ return this.millisecond() * 10;
+ });
+ addFormatToken(0, ['SSSSS', 5], 0, function () {
+ return this.millisecond() * 100;
+ });
+ addFormatToken(0, ['SSSSSS', 6], 0, function () {
+ return this.millisecond() * 1000;
+ });
+ addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+ return this.millisecond() * 10000;
+ });
+ addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+ return this.millisecond() * 100000;
+ });
+ addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+ return this.millisecond() * 1000000;
+ });
- millisecond__milliseconds('SSS');
- millisecond__milliseconds('SSSS');
// ALIASES
addUnitAlias('millisecond', 'ms');
+ // PRIORITY
+
+ addUnitPriority('millisecond', 16);
+
// PARSING
addRegexToken('S', match1to3, match1);
addRegexToken('SS', match1to3, match2);
addRegexToken('SSS', match1to3, match3);
- addRegexToken('SSSS', matchUnsigned);
- addParseToken(['S', 'SS', 'SSS', 'SSSS'], function (input, array) {
+
+ var token;
+ for (token = 'SSSS'; token.length <= 9; token += 'S') {
+ addRegexToken(token, matchUnsigned);
+ }
+
+ function parseMs(input, array) {
array[MILLISECOND] = toInt(('0.' + input) * 1000);
- });
+ }
+ for (token = 'S'; token.length <= 9; token += 'S') {
+ addParseToken(token, parseMs);
+ }
// MOMENTS
var getSetMillisecond = makeGetSet('Milliseconds', false);
+ // FORMATTING
+
addFormatToken('z', 0, 0, 'zoneAbbr');
addFormatToken('zz', 0, 0, 'zoneName');
@@ -2450,39 +3572,43 @@
var momentPrototype__proto = Moment.prototype;
- momentPrototype__proto.add = add_subtract__add;
- momentPrototype__proto.calendar = moment_calendar__calendar;
- momentPrototype__proto.clone = clone;
- momentPrototype__proto.diff = diff;
- momentPrototype__proto.endOf = endOf;
- momentPrototype__proto.format = moment_format__format;
- momentPrototype__proto.from = from;
- momentPrototype__proto.fromNow = fromNow;
- momentPrototype__proto.to = to;
- momentPrototype__proto.toNow = toNow;
- momentPrototype__proto.get = getSet;
- momentPrototype__proto.invalidAt = invalidAt;
- momentPrototype__proto.isAfter = isAfter;
- momentPrototype__proto.isBefore = isBefore;
- momentPrototype__proto.isBetween = isBetween;
- momentPrototype__proto.isSame = isSame;
- momentPrototype__proto.isValid = moment_valid__isValid;
- momentPrototype__proto.lang = lang;
- momentPrototype__proto.locale = locale;
- momentPrototype__proto.localeData = localeData;
- momentPrototype__proto.max = prototypeMax;
- momentPrototype__proto.min = prototypeMin;
- momentPrototype__proto.parsingFlags = parsingFlags;
- momentPrototype__proto.set = getSet;
- momentPrototype__proto.startOf = startOf;
- momentPrototype__proto.subtract = add_subtract__subtract;
- momentPrototype__proto.toArray = toArray;
- momentPrototype__proto.toDate = toDate;
- momentPrototype__proto.toISOString = moment_format__toISOString;
- momentPrototype__proto.toJSON = moment_format__toISOString;
- momentPrototype__proto.toString = toString;
- momentPrototype__proto.unix = unix;
- momentPrototype__proto.valueOf = to_type__valueOf;
+ momentPrototype__proto.add = add_subtract__add;
+ momentPrototype__proto.calendar = moment_calendar__calendar;
+ momentPrototype__proto.clone = clone;
+ momentPrototype__proto.diff = diff;
+ momentPrototype__proto.endOf = endOf;
+ momentPrototype__proto.format = moment_format__format;
+ momentPrototype__proto.from = from;
+ momentPrototype__proto.fromNow = fromNow;
+ momentPrototype__proto.to = to;
+ momentPrototype__proto.toNow = toNow;
+ momentPrototype__proto.get = stringGet;
+ momentPrototype__proto.invalidAt = invalidAt;
+ momentPrototype__proto.isAfter = isAfter;
+ momentPrototype__proto.isBefore = isBefore;
+ momentPrototype__proto.isBetween = isBetween;
+ momentPrototype__proto.isSame = isSame;
+ momentPrototype__proto.isSameOrAfter = isSameOrAfter;
+ momentPrototype__proto.isSameOrBefore = isSameOrBefore;
+ momentPrototype__proto.isValid = moment_valid__isValid;
+ momentPrototype__proto.lang = lang;
+ momentPrototype__proto.locale = locale;
+ momentPrototype__proto.localeData = localeData;
+ momentPrototype__proto.max = prototypeMax;
+ momentPrototype__proto.min = prototypeMin;
+ momentPrototype__proto.parsingFlags = parsingFlags;
+ momentPrototype__proto.set = stringSet;
+ momentPrototype__proto.startOf = startOf;
+ momentPrototype__proto.subtract = add_subtract__subtract;
+ momentPrototype__proto.toArray = toArray;
+ momentPrototype__proto.toObject = toObject;
+ momentPrototype__proto.toDate = toDate;
+ momentPrototype__proto.toISOString = moment_format__toISOString;
+ momentPrototype__proto.toJSON = toJSON;
+ momentPrototype__proto.toString = toString;
+ momentPrototype__proto.unix = unix;
+ momentPrototype__proto.valueOf = to_type__valueOf;
+ momentPrototype__proto.creationData = creationData;
// Year
momentPrototype__proto.year = getSetYear;
@@ -2531,7 +3657,6 @@
momentPrototype__proto.parseZone = setOffsetToParsedOffset;
momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;
momentPrototype__proto.isDST = isDaylightSavingTime;
- momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted;
momentPrototype__proto.isLocal = isLocal;
momentPrototype__proto.isUtcOffset = isUtcOffset;
momentPrototype__proto.isUtc = isUtc;
@@ -2545,7 +3670,8 @@
momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
- momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone);
+ momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+ momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
var momentPrototype = momentPrototype__proto;
@@ -2557,143 +3683,46 @@
return local__createLocal.apply(null, arguments).parseZone();
}
- var defaultCalendar = {
- sameDay : '[Today at] LT',
- nextDay : '[Tomorrow at] LT',
- nextWeek : 'dddd [at] LT',
- lastDay : '[Yesterday at] LT',
- lastWeek : '[Last] dddd [at] LT',
- sameElse : 'L'
- };
-
- function locale_calendar__calendar (key, mom, now) {
- var output = this._calendar[key];
- return typeof output === 'function' ? output.call(mom, now) : output;
- }
-
- var defaultLongDateFormat = {
- LTS : 'h:mm:ss A',
- LT : 'h:mm A',
- L : 'MM/DD/YYYY',
- LL : 'MMMM D, YYYY',
- LLL : 'MMMM D, YYYY LT',
- LLLL : 'dddd, MMMM D, YYYY LT'
- };
-
- function longDateFormat (key) {
- var output = this._longDateFormat[key];
- if (!output && this._longDateFormat[key.toUpperCase()]) {
- output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) {
- return val.slice(1);
- });
- this._longDateFormat[key] = output;
- }
- return output;
- }
-
- var defaultInvalidDate = 'Invalid date';
-
- function invalidDate () {
- return this._invalidDate;
- }
-
- var defaultOrdinal = '%d';
- var defaultOrdinalParse = /\d{1,2}/;
-
- function ordinal (number) {
- return this._ordinal.replace('%d', number);
- }
-
function preParsePostFormat (string) {
return string;
}
- var defaultRelativeTime = {
- future : 'in %s',
- past : '%s ago',
- s : 'a few seconds',
- m : 'a minute',
- mm : '%d minutes',
- h : 'an hour',
- hh : '%d hours',
- d : 'a day',
- dd : '%d days',
- M : 'a month',
- MM : '%d months',
- y : 'a year',
- yy : '%d years'
- };
-
- function relative__relativeTime (number, withoutSuffix, string, isFuture) {
- var output = this._relativeTime[string];
- return (typeof output === 'function') ?
- output(number, withoutSuffix, string, isFuture) :
- output.replace(/%d/i, number);
- }
-
- function pastFuture (diff, output) {
- var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
- return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);
- }
-
- function locale_set__set (config) {
- var prop, i;
- for (i in config) {
- prop = config[i];
- if (typeof prop === 'function') {
- this[i] = prop;
- } else {
- this['_' + i] = prop;
- }
- }
- // Lenient ordinal parsing accepts just a number in addition to
- // number + (possibly) stuff coming from _ordinalParseLenient.
- this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
- }
-
var prototype__proto = Locale.prototype;
- prototype__proto._calendar = defaultCalendar;
prototype__proto.calendar = locale_calendar__calendar;
- prototype__proto._longDateFormat = defaultLongDateFormat;
prototype__proto.longDateFormat = longDateFormat;
- prototype__proto._invalidDate = defaultInvalidDate;
prototype__proto.invalidDate = invalidDate;
- prototype__proto._ordinal = defaultOrdinal;
prototype__proto.ordinal = ordinal;
- prototype__proto._ordinalParse = defaultOrdinalParse;
prototype__proto.preparse = preParsePostFormat;
prototype__proto.postformat = preParsePostFormat;
- prototype__proto._relativeTime = defaultRelativeTime;
prototype__proto.relativeTime = relative__relativeTime;
prototype__proto.pastFuture = pastFuture;
prototype__proto.set = locale_set__set;
// Month
- prototype__proto.months = localeMonths;
- prototype__proto._months = defaultLocaleMonths;
- prototype__proto.monthsShort = localeMonthsShort;
- prototype__proto._monthsShort = defaultLocaleMonthsShort;
- prototype__proto.monthsParse = localeMonthsParse;
+ prototype__proto.months = localeMonths;
+ prototype__proto.monthsShort = localeMonthsShort;
+ prototype__proto.monthsParse = localeMonthsParse;
+ prototype__proto.monthsRegex = units_month__monthsRegex;
+ prototype__proto.monthsShortRegex = monthsShortRegex;
// Week
prototype__proto.week = localeWeek;
- prototype__proto._week = defaultLocaleWeek;
prototype__proto.firstDayOfYear = localeFirstDayOfYear;
prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;
// Day of Week
prototype__proto.weekdays = localeWeekdays;
- prototype__proto._weekdays = defaultLocaleWeekdays;
prototype__proto.weekdaysMin = localeWeekdaysMin;
- prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin;
prototype__proto.weekdaysShort = localeWeekdaysShort;
- prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort;
prototype__proto.weekdaysParse = localeWeekdaysParse;
+ prototype__proto.weekdaysRegex = weekdaysRegex;
+ prototype__proto.weekdaysShortRegex = weekdaysShortRegex;
+ prototype__proto.weekdaysMinRegex = weekdaysMinRegex;
+
// Hours
prototype__proto.isPM = localeIsPM;
- prototype__proto._meridiemParse = defaultLocaleMeridiemParse;
prototype__proto.meridiem = localeMeridiem;
function lists__get (format, index, field, setter) {
@@ -2702,7 +3731,7 @@
return locale[field](utc, format);
}
- function list (format, index, field, count, setter) {
+ function listMonthsImpl (format, index, field) {
if (typeof format === 'number') {
index = format;
format = undefined;
@@ -2711,35 +3740,79 @@
format = format || '';
if (index != null) {
- return lists__get(format, index, field, setter);
+ return lists__get(format, index, field, 'month');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 12; i++) {
+ out[i] = lists__get(format, i, field, 'month');
+ }
+ return out;
+ }
+
+ // ()
+ // (5)
+ // (fmt, 5)
+ // (fmt)
+ // (true)
+ // (true, 5)
+ // (true, fmt, 5)
+ // (true, fmt)
+ function listWeekdaysImpl (localeSorted, format, index, field) {
+ if (typeof localeSorted === 'boolean') {
+ if (typeof format === 'number') {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ } else {
+ format = localeSorted;
+ index = format;
+ localeSorted = false;
+
+ if (typeof format === 'number') {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ }
+
+ var locale = locale_locales__getLocale(),
+ shift = localeSorted ? locale._week.dow : 0;
+
+ if (index != null) {
+ return lists__get(format, (index + shift) % 7, field, 'day');
}
var i;
var out = [];
- for (i = 0; i < count; i++) {
- out[i] = lists__get(format, i, field, setter);
+ for (i = 0; i < 7; i++) {
+ out[i] = lists__get(format, (i + shift) % 7, field, 'day');
}
return out;
}
function lists__listMonths (format, index) {
- return list(format, index, 'months', 12, 'month');
+ return listMonthsImpl(format, index, 'months');
}
function lists__listMonthsShort (format, index) {
- return list(format, index, 'monthsShort', 12, 'month');
+ return listMonthsImpl(format, index, 'monthsShort');
}
- function lists__listWeekdays (format, index) {
- return list(format, index, 'weekdays', 7, 'day');
+ function lists__listWeekdays (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
}
- function lists__listWeekdaysShort (format, index) {
- return list(format, index, 'weekdaysShort', 7, 'day');
+ function lists__listWeekdaysShort (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
}
- function lists__listWeekdaysMin (format, index) {
- return list(format, index, 'weekdaysMin', 7, 'day');
+ function lists__listWeekdaysMin (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
}
locale_locales__getSetGlobalLocale('en', {
@@ -2797,12 +3870,29 @@
return duration_add_subtract__addSubtract(this, input, value, -1);
}
+ function absCeil (number) {
+ if (number < 0) {
+ return Math.floor(number);
+ } else {
+ return Math.ceil(number);
+ }
+ }
+
function bubble () {
var milliseconds = this._milliseconds;
var days = this._days;
var months = this._months;
var data = this._data;
- var seconds, minutes, hours, years = 0;
+ var seconds, minutes, hours, years, monthsFromDays;
+
+ // if we have a mix of positive and negative values, bubble down first
+ // check: https://github.com/moment/moment/issues/2166
+ if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+ (milliseconds <= 0 && days <= 0 && months <= 0))) {
+ milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+ days = 0;
+ months = 0;
+ }
// The following code bubbles up values, see the tests for
// examples of what that means.
@@ -2819,17 +3909,13 @@
days += absFloor(hours / 24);
- // Accurately convert days to years, assume start from year 0.
- years = absFloor(daysToYears(days));
- days -= absFloor(yearsToDays(years));
-
- // 30 days to a month
- // TODO (iskren): Use anchor date (like 1st Jan) to compute this.
- months += absFloor(days / 30);
- days %= 30;
+ // convert days to months
+ monthsFromDays = absFloor(daysToMonths(days));
+ months += monthsFromDays;
+ days -= absCeil(monthsToDays(monthsFromDays));
// 12 months -> 1 year
- years += absFloor(months / 12);
+ years = absFloor(months / 12);
months %= 12;
data.days = days;
@@ -2839,15 +3925,15 @@
return this;
}
- function daysToYears (days) {
+ function daysToMonths (days) {
// 400 years have 146097 days (taking into account leap year rules)
- return days * 400 / 146097;
+ // 400 years have 12 months === 4800
+ return days * 4800 / 146097;
}
- function yearsToDays (years) {
- // years * 365 + absFloor(years / 4) -
- // absFloor(years / 100) + absFloor(years / 400);
- return years * 146097 / 400;
+ function monthsToDays (months) {
+ // the reverse of daysToMonths
+ return months * 146097 / 4800;
}
function as (units) {
@@ -2859,11 +3945,11 @@
if (units === 'month' || units === 'year') {
days = this._days + milliseconds / 864e5;
- months = this._months + daysToYears(days) * 12;
+ months = this._months + daysToMonths(days);
return units === 'month' ? months : months / 12;
} else {
// handle milliseconds separately because of floating point math errors (issue #1867)
- days = this._days + Math.round(yearsToDays(this._months / 12));
+ days = this._days + Math.round(monthsToDays(this._months));
switch (units) {
case 'week' : return days / 7 + milliseconds / 6048e5;
case 'day' : return days + milliseconds / 864e5;
@@ -2913,7 +3999,7 @@
};
}
- var duration_get__milliseconds = makeGetter('milliseconds');
+ var milliseconds = makeGetter('milliseconds');
var seconds = makeGetter('seconds');
var minutes = makeGetter('minutes');
var hours = makeGetter('hours');
@@ -2949,15 +4035,15 @@
var years = round(duration.as('y'));
var a = seconds < thresholds.s && ['s', seconds] ||
- minutes === 1 && ['m'] ||
+ minutes <= 1 && ['m'] ||
minutes < thresholds.m && ['mm', minutes] ||
- hours === 1 && ['h'] ||
+ hours <= 1 && ['h'] ||
hours < thresholds.h && ['hh', hours] ||
- days === 1 && ['d'] ||
+ days <= 1 && ['d'] ||
days < thresholds.d && ['dd', days] ||
- months === 1 && ['M'] ||
+ months <= 1 && ['M'] ||
months < thresholds.M && ['MM', months] ||
- years === 1 && ['y'] || ['yy', years];
+ years <= 1 && ['y'] || ['yy', years];
a[2] = withoutSuffix;
a[3] = +posNegDuration > 0;
@@ -2965,6 +4051,18 @@
return substituteTimeAgo.apply(null, a);
}
+ // This function allows you to set the rounding function for relative time strings
+ function duration_humanize__getSetRelativeTimeRounding (roundingFunction) {
+ if (roundingFunction === undefined) {
+ return round;
+ }
+ if (typeof(roundingFunction) === 'function') {
+ round = roundingFunction;
+ return true;
+ }
+ return false;
+ }
+
// This function allows you to set a threshold for relative time strings
function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) {
if (thresholds[threshold] === undefined) {
@@ -2991,13 +4089,36 @@
var iso_string__abs = Math.abs;
function iso_string__toISOString() {
+ // for ISO strings we do not use the normal bubbling rules:
+ // * milliseconds bubble up until they become hours
+ // * days do not bubble at all
+ // * months bubble up until they become years
+ // This is because there is no context-free conversion between hours and days
+ // (think of clock changes)
+ // and also not between days and months (28-31 days per month)
+ var seconds = iso_string__abs(this._milliseconds) / 1000;
+ var days = iso_string__abs(this._days);
+ var months = iso_string__abs(this._months);
+ var minutes, hours, years;
+
+ // 3600 seconds -> 60 minutes -> 1 hour
+ minutes = absFloor(seconds / 60);
+ hours = absFloor(minutes / 60);
+ seconds %= 60;
+ minutes %= 60;
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+
// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
- var Y = iso_string__abs(this.years());
- var M = iso_string__abs(this.months());
- var D = iso_string__abs(this.days());
- var h = iso_string__abs(this.hours());
- var m = iso_string__abs(this.minutes());
- var s = iso_string__abs(this.seconds() + this.milliseconds() / 1000);
+ var Y = years;
+ var M = months;
+ var D = days;
+ var h = hours;
+ var m = minutes;
+ var s = seconds;
var total = this.asSeconds();
if (!total) {
@@ -3034,7 +4155,7 @@
duration_prototype__proto.valueOf = duration_as__valueOf;
duration_prototype__proto._bubble = bubble;
duration_prototype__proto.get = duration_get__get;
- duration_prototype__proto.milliseconds = duration_get__milliseconds;
+ duration_prototype__proto.milliseconds = milliseconds;
duration_prototype__proto.seconds = seconds;
duration_prototype__proto.minutes = minutes;
duration_prototype__proto.hours = hours;
@@ -3055,6 +4176,8 @@
// Side effect imports
+ // FORMATTING
+
addFormatToken('X', 0, 0, 'unix');
addFormatToken('x', 0, 0, 'valueOf');
@@ -3073,19 +4196,15 @@
;
- //! moment.js
- //! version : 2.10.3
- //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
- //! license : MIT
- //! momentjs.com
- utils_hooks__hooks.version = '2.10.3';
+ utils_hooks__hooks.version = '2.15.0';
setHookCallback(local__createLocal);
utils_hooks__hooks.fn = momentPrototype;
utils_hooks__hooks.min = min;
utils_hooks__hooks.max = max;
+ utils_hooks__hooks.now = now;
utils_hooks__hooks.utc = create_utc__createUTC;
utils_hooks__hooks.unix = moment_moment__createUnix;
utils_hooks__hooks.months = lists__listMonths;
@@ -3101,19 +4220,21 @@
utils_hooks__hooks.monthsShort = lists__listMonthsShort;
utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin;
utils_hooks__hooks.defineLocale = defineLocale;
+ utils_hooks__hooks.updateLocale = updateLocale;
+ utils_hooks__hooks.locales = locale_locales__listLocales;
utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort;
utils_hooks__hooks.normalizeUnits = normalizeUnits;
+ utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding;
utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;
+ utils_hooks__hooks.calendarFormat = getCalendarFormat;
+ utils_hooks__hooks.prototype = momentPrototype;
- var _moment__default = utils_hooks__hooks;
+ var moment__default = utils_hooks__hooks;
- //! moment.js locale configuration
- //! locale : afrikaans (af)
- //! author : Werner Mollentze : https://github.com/wernerm
- var af = _moment__default.defineLocale('af', {
+ var af = moment__default.defineLocale('af', {
months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
- monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+ monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
@@ -3130,11 +4251,11 @@
},
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[Vandag om] LT',
@@ -3169,24 +4290,129 @@
}
});
- //! moment.js locale configuration
- //! locale : Moroccan Arabic (ar-ma)
- //! author : ElFadili Yassine : https://github.com/ElFadiliY
- //! author : Abdel Said : https://github.com/abdelsaid
- var ar_ma = _moment__default.defineLocale('ar-ma', {
+ var ar_ly__symbolMap = {
+ '1': '1',
+ '2': '2',
+ '3': '3',
+ '4': '4',
+ '5': '5',
+ '6': '6',
+ '7': '7',
+ '8': '8',
+ '9': '9',
+ '0': '0'
+ }, ar_ly__pluralForm = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+ }, ar_ly__plurals = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+ }, ar_ly__pluralize = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = ar_ly__pluralForm(number),
+ str = ar_ly__plurals[u][ar_ly__pluralForm(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+ }, ar_ly__months = [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+ ];
+
+ var ar_ly = moment__default.defineLocale('ar-ly', {
+ months : ar_ly__months,
+ monthsShort : ar_ly__months,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : ar_ly__pluralize('s'),
+ m : ar_ly__pluralize('m'),
+ mm : ar_ly__pluralize('m'),
+ h : ar_ly__pluralize('h'),
+ hh : ar_ly__pluralize('h'),
+ d : ar_ly__pluralize('d'),
+ dd : ar_ly__pluralize('d'),
+ M : ar_ly__pluralize('M'),
+ MM : ar_ly__pluralize('M'),
+ y : ar_ly__pluralize('y'),
+ yy : ar_ly__pluralize('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return ar_ly__symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var ar_ma = moment__default.defineLocale('ar-ma', {
months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[اليوم على الساعة] LT',
@@ -3217,9 +4443,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Arabic Saudi Arabia (ar-sa)
- //! author : Suhail Alkowaileet : https://github.com/xsoh
var ar_sa__symbolMap = {
'1': '١',
@@ -3245,19 +4468,20 @@
'٠': '0'
};
- var ar_sa = _moment__default.defineLocale('ar-sa', {
+ var ar_sa = moment__default.defineLocale('ar-sa', {
months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
meridiemParse: /ص|م/,
isPM : function (input) {
@@ -3309,22 +4533,21 @@
}
});
- //! moment.js locale configuration
- //! locale : Tunisian Arabic (ar-tn)
- var ar_tn = _moment__default.defineLocale('ar-tn', {
+ var ar_tn = moment__default.defineLocale('ar-tn', {
months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'HH:mm',
- LTS: 'LT:ss',
+ LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
- LLL: 'D MMMM YYYY LT',
- LLLL: 'dddd D MMMM YYYY LT'
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
},
calendar: {
sameDay: '[اليوم على الساعة] LT',
@@ -3355,11 +4578,6 @@
}
});
- //! moment.js locale configuration
- //! Locale: Arabic (ar)
- //! Author: Abdel Said: https://github.com/abdelsaid
- //! Changes in months, weekdays: Ahmed Elkhatib
- //! Native plural forms: forabi https://github.com/forabi
var ar__symbolMap = {
'1': '١',
@@ -3383,19 +4601,19 @@
'٨': '8',
'٩': '9',
'٠': '0'
- }, pluralForm = function (n) {
+ }, ar__pluralForm = function (n) {
return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
- }, plurals = {
+ }, ar__plurals = {
s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
- }, pluralize = function (u) {
+ }, ar__pluralize = function (u) {
return function (number, withoutSuffix, string, isFuture) {
- var f = pluralForm(number),
- str = plurals[u][pluralForm(number)];
+ var f = ar__pluralForm(number),
+ str = ar__plurals[u][ar__pluralForm(number)];
if (f === 2) {
str = str[withoutSuffix ? 0 : 1];
}
@@ -3416,19 +4634,20 @@
'كانون الأول ديسمبر'
];
- var ar = _moment__default.defineLocale('ar', {
+ var ar = moment__default.defineLocale('ar', {
months : ar__months,
monthsShort : ar__months,
weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
LTS : 'HH:mm:ss',
L : 'D/\u200FM/\u200FYYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
meridiemParse: /ص|م/,
isPM : function (input) {
@@ -3452,17 +4671,17 @@
relativeTime : {
future : 'بعد %s',
past : 'منذ %s',
- s : pluralize('s'),
- m : pluralize('m'),
- mm : pluralize('m'),
- h : pluralize('h'),
- hh : pluralize('h'),
- d : pluralize('d'),
- dd : pluralize('d'),
- M : pluralize('M'),
- MM : pluralize('M'),
- y : pluralize('y'),
- yy : pluralize('y')
+ s : ar__pluralize('s'),
+ m : ar__pluralize('m'),
+ mm : ar__pluralize('m'),
+ h : ar__pluralize('h'),
+ hh : ar__pluralize('h'),
+ d : ar__pluralize('d'),
+ dd : ar__pluralize('d'),
+ M : ar__pluralize('M'),
+ MM : ar__pluralize('M'),
+ y : ar__pluralize('y'),
+ yy : ar__pluralize('y')
},
preparse: function (string) {
return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
@@ -3480,9 +4699,6 @@
}
});
- //! moment.js locale configuration
- //! locale : azerbaijani (az)
- //! author : topchiyev : https://github.com/topchiyev
var az__suffixes = {
1: '-inci',
@@ -3505,19 +4721,20 @@
90: '-ıncı'
};
- var az = _moment__default.defineLocale('az', {
+ var az = moment__default.defineLocale('az', {
months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[bugün saat] LT',
@@ -3573,11 +4790,6 @@
}
});
- //! moment.js locale configuration
- //! locale : belarusian (be)
- //! author : Dmitry Demidov : https://github.com/demidov91
- //! author: Praleska: http://praleska.pro/
- //! Author : Menelion Elensúle : https://github.com/Oire
function be__plural(word, num) {
var forms = word.split('_');
@@ -3601,40 +4813,27 @@
return number + ' ' + be__plural(format[key], +number);
}
}
- function be__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),
- 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')
- },
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function be__weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
- 'accusative': 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_')
- },
- nounCase = (/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/).test(format) ?
- 'accusative' :
- 'nominative';
- return weekdays[nounCase][m.day()];
- }
- var be = _moment__default.defineLocale('be', {
- months : be__monthsCaseReplace,
+ var be = moment__default.defineLocale('be', {
+ months : {
+ format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
+ standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
+ },
monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
- weekdays : be__weekdaysCaseReplace,
+ weekdays : {
+ format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
+ standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
+ },
weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY г.',
- LLL : 'D MMMM YYYY г., LT',
- LLLL : 'dddd, D MMMM YYYY г., LT'
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
},
calendar : {
sameDay: '[Сёння ў] LT',
@@ -3645,15 +4844,15 @@
},
lastWeek: function () {
switch (this.day()) {
- case 0:
- case 3:
- case 5:
- case 6:
- return '[У мінулую] dddd [ў] LT';
- case 1:
- case 2:
- case 4:
- return '[У мінулы] dddd [ў] LT';
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return '[У мінулую] dddd [ў] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[У мінулы] dddd [ў] LT';
}
},
sameElse: 'L'
@@ -3691,16 +4890,16 @@
ordinalParse: /\d{1,2}-(і|ы|га)/,
ordinal: function (number, period) {
switch (period) {
- case 'M':
- case 'd':
- case 'DDD':
- case 'w':
- case 'W':
- return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
- case 'D':
- return number + '-га';
- default:
- return number;
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
+ case 'D':
+ return number + '-га';
+ default:
+ return number;
}
},
week : {
@@ -3709,11 +4908,8 @@
}
});
- //! moment.js locale configuration
- //! locale : bulgarian (bg)
- //! author : Krasen Borisov : https://github.com/kraz
- var bg = _moment__default.defineLocale('bg', {
+ var bg = moment__default.defineLocale('bg', {
months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
@@ -3721,11 +4917,11 @@
weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'D.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
},
calendar : {
sameDay : '[Днес в] LT',
@@ -3734,15 +4930,15 @@
lastDay : '[Вчера в] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- case 3:
- case 6:
- return '[В изминалата] dddd [в] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[В изминалия] dddd [в] LT';
+ case 0:
+ case 3:
+ case 6:
+ return '[В изминалата] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[В изминалия] dddd [в] LT';
}
},
sameElse : 'L'
@@ -3788,9 +4984,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Bengali (bn)
- //! author : Kaushik Gandhi : https://github.com/kaushikgandhi
var bn__symbolMap = {
'1': '১',
@@ -3817,19 +5010,19 @@
'০': '0'
};
- var bn = _moment__default.defineLocale('bn', {
- months : 'জানুয়ারী_ফেবুয়ারী_মার্চ_এপ্রিল_মে_জুন_জুলাই_অগাস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
- monthsShort : 'জানু_ফেব_মার্চ_এপর_মে_জুন_জুল_অগ_সেপ্ট_অক্টো_নভ_ডিসেম্'.split('_'),
- weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পত্তিবার_শুক্রুবার_শনিবার'.split('_'),
- weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পত্তি_শুক্রু_শনি'.split('_'),
- weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split('_'),
+ var bn = moment__default.defineLocale('bn', {
+ months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
+ monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
+ weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
+ weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
+ weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
longDateFormat : {
LT : 'A h:mm সময়',
LTS : 'A h:mm:ss সময়',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm সময়',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
},
calendar : {
sameDay : '[আজ] LT',
@@ -3842,7 +5035,7 @@
relativeTime : {
future : '%s পরে',
past : '%s আগে',
- s : 'কএক সেকেন্ড',
+ s : 'কয়েক সেকেন্ড',
m : 'এক মিনিট',
mm : '%d মিনিট',
h : 'এক ঘন্টা',
@@ -3864,22 +5057,28 @@
return bn__symbolMap[match];
});
},
- meridiemParse: /রাত|শকাল|দুপুর|বিকেল|রাত/,
- isPM: function (input) {
- return /^(দুপুর|বিকেল|রাত)$/.test(input);
+ meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'রাত' && hour >= 4) ||
+ (meridiem === 'দুপুর' && hour < 5) ||
+ meridiem === 'বিকাল') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
},
- //Bengali is a vast language its spoken
- //in different forms in various parts of the world.
- //I have just generalized with most common one used
meridiem : function (hour, minute, isLower) {
if (hour < 4) {
return 'রাত';
} else if (hour < 10) {
- return 'শকাল';
+ return 'সকাল';
} else if (hour < 17) {
return 'দুপুর';
} else if (hour < 20) {
- return 'বিকেল';
+ return 'বিকাল';
} else {
return 'রাত';
}
@@ -3890,9 +5089,6 @@
}
});
- //! moment.js locale configuration
- //! locale : tibetan (bo)
- //! author : Thupten N. Chakrishar : https://github.com/vajradog
var bo__symbolMap = {
'1': '༡',
@@ -3919,7 +5115,7 @@
'༠': '0'
};
- var bo = _moment__default.defineLocale('bo', {
+ var bo = moment__default.defineLocale('bo', {
months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
@@ -3927,11 +5123,11 @@
weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
longDateFormat : {
LT : 'A h:mm',
- LTS : 'LT:ss',
+ LTS : 'A h:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
},
calendar : {
sameDay : '[དི་རིང] LT',
@@ -3967,8 +5163,17 @@
});
},
meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
- isPM: function (input) {
- return /^(ཉིན་གུང|དགོང་དག|མཚན་མོ)$/.test(input);
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
+ (meridiem === 'ཉིན་གུང' && hour < 5) ||
+ meridiem === 'དགོང་དག') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
},
meridiem : function (hour, minute, isLower) {
if (hour < 4) {
@@ -3989,9 +5194,6 @@
}
});
- //! moment.js locale configuration
- //! locale : breton (br)
- //! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
function relativeTimeWithMutation(number, withoutSuffix, key) {
var format = {
@@ -4003,14 +5205,14 @@
}
function specialMutationForYears(number) {
switch (lastNumber(number)) {
- case 1:
- case 3:
- case 4:
- case 5:
- case 9:
- return number + ' bloaz';
- default:
- return number + ' vloaz';
+ case 1:
+ case 3:
+ case 4:
+ case 5:
+ case 9:
+ return number + ' bloaz';
+ default:
+ return number + ' vloaz';
}
}
function lastNumber(number) {
@@ -4037,19 +5239,20 @@
return mutationTable[text.charAt(0)] + text.substring(1);
}
- var br = _moment__default.defineLocale('br', {
+ var br = moment__default.defineLocale('br', {
months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'h[e]mm A',
LTS : 'h[e]mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D [a viz] MMMM YYYY',
- LLL : 'D [a viz] MMMM YYYY LT',
- LLLL : 'dddd, D [a viz] MMMM YYYY LT'
+ LLL : 'D [a viz] MMMM YYYY h[e]mm A',
+ LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
},
calendar : {
sameDay : '[Hiziv da] LT',
@@ -4085,109 +5288,107 @@
}
});
- //! moment.js locale configuration
- //! locale : bosnian (bs)
- //! author : Nedim Cholich : https://github.com/frontyard
- //! based on (hr) translation by Bojan Marković
function bs__translate(number, withoutSuffix, key) {
var result = number + ' ';
switch (key) {
- case 'm':
- return withoutSuffix ? 'jedna minuta' : 'jedne minute';
- case 'mm':
- if (number === 1) {
- result += 'minuta';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'minute';
- } else {
- result += 'minuta';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'jedan sat' : 'jednog sata';
- case 'hh':
- if (number === 1) {
- result += 'sat';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'sata';
- } else {
- result += 'sati';
- }
- return result;
- case 'dd':
- if (number === 1) {
- result += 'dan';
- } else {
- result += 'dana';
- }
- return result;
- case 'MM':
- if (number === 1) {
- result += 'mjesec';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'mjeseca';
- } else {
- result += 'mjeseci';
- }
- return result;
- case 'yy':
- if (number === 1) {
- result += 'godina';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'godine';
- } else {
- result += 'godina';
- }
- return result;
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
}
}
- var bs = _moment__default.defineLocale('bs', {
+ var bs = moment__default.defineLocale('bs', {
months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
- L : 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[danas u] LT',
nextDay : '[sutra u] LT',
nextWeek : function () {
switch (this.day()) {
- case 0:
- return '[u] [nedjelju] [u] LT';
- case 3:
- return '[u] [srijedu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
}
},
lastDay : '[jučer u] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- case 3:
- return '[prošlu] dddd [u] LT';
- case 6:
- return '[prošle] [subote] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prošli] dddd [u] LT';
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
}
},
sameElse : 'L'
@@ -4215,23 +5416,22 @@
}
});
- //! moment.js locale configuration
- //! locale : catalan (ca)
- //! author : Juan G. Hurtado : https://github.com/juanghurtado
- var ca = _moment__default.defineLocale('ca', {
+ var ca = moment__default.defineLocale('ca', {
months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
+ monthsParseExact : true,
weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd D MMMM YYYY H:mm'
},
calendar : {
sameDay : function () {
@@ -4283,9 +5483,6 @@
}
});
- //! moment.js locale configuration
- //! locale : czech (cs)
- //! author : petrbela : https://github.com/petrbela
var cs__months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
cs__monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
@@ -4295,57 +5492,57 @@
function cs__translate(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
- case 's': // a few seconds / in a few seconds / a few seconds ago
- return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
- case 'm': // a minute / in a minute / a minute ago
- return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
- case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'minuty' : 'minut');
- } else {
- return result + 'minutami';
- }
- break;
- case 'h': // an hour / in an hour / an hour ago
- return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
- case 'hh': // 9 hours / in 9 hours / 9 hours ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'hodiny' : 'hodin');
- } else {
- return result + 'hodinami';
- }
- break;
- case 'd': // a day / in a day / a day ago
- return (withoutSuffix || isFuture) ? 'den' : 'dnem';
- case 'dd': // 9 days / in 9 days / 9 days ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'dny' : 'dní');
- } else {
- return result + 'dny';
- }
- break;
- case 'M': // a month / in a month / a month ago
- return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
- case 'MM': // 9 months / in 9 months / 9 months ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'měsíce' : 'měsíců');
- } else {
- return result + 'měsíci';
- }
- break;
- case 'y': // a year / in a year / a year ago
- return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
- case 'yy': // 9 years / in 9 years / 9 years ago
- if (withoutSuffix || isFuture) {
- return result + (cs__plural(number) ? 'roky' : 'let');
- } else {
- return result + 'lety';
- }
- break;
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'minuty' : 'minut');
+ } else {
+ return result + 'minutami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'hodiny' : 'hodin');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'den' : 'dnem';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'dny' : 'dní');
+ } else {
+ return result + 'dny';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'měsíce' : 'měsíců');
+ } else {
+ return result + 'měsíci';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (cs__plural(number) ? 'roky' : 'let');
+ } else {
+ return result + 'lety';
+ }
+ break;
}
}
- var cs = _moment__default.defineLocale('cs', {
+ var cs = moment__default.defineLocale('cs', {
months : cs__months,
monthsShort : cs__monthsShort,
monthsParse : (function (months, monthsShort) {
@@ -4356,52 +5553,67 @@
}
return _monthsParse;
}(cs__months, cs__monthsShort)),
+ shortMonthsParse : (function (monthsShort) {
+ var i, _shortMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
+ }
+ return _shortMonthsParse;
+ }(cs__monthsShort)),
+ longMonthsParse : (function (months) {
+ var i, _longMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
+ }
+ return _longMonthsParse;
+ }(cs__months)),
weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
longDateFormat : {
LT: 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm',
+ l : 'D. M. YYYY'
},
calendar : {
sameDay: '[dnes v] LT',
nextDay: '[zítra v] LT',
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[v neděli v] LT';
- case 1:
- case 2:
- return '[v] dddd [v] LT';
- case 3:
- return '[ve středu v] LT';
- case 4:
- return '[ve čtvrtek v] LT';
- case 5:
- return '[v pátek v] LT';
- case 6:
- return '[v sobotu v] LT';
+ case 0:
+ return '[v neděli v] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [v] LT';
+ case 3:
+ return '[ve středu v] LT';
+ case 4:
+ return '[ve čtvrtek v] LT';
+ case 5:
+ return '[v pátek v] LT';
+ case 6:
+ return '[v sobotu v] LT';
}
},
lastDay: '[včera v] LT',
lastWeek: function () {
switch (this.day()) {
- case 0:
- return '[minulou neděli v] LT';
- case 1:
- case 2:
- return '[minulé] dddd [v] LT';
- case 3:
- return '[minulou středu v] LT';
- case 4:
- case 5:
- return '[minulý] dddd [v] LT';
- case 6:
- return '[minulou sobotu v] LT';
+ case 0:
+ return '[minulou neděli v] LT';
+ case 1:
+ case 2:
+ return '[minulé] dddd [v] LT';
+ case 3:
+ return '[minulou středu v] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [v] LT';
+ case 6:
+ return '[minulou sobotu v] LT';
}
},
sameElse: 'L'
@@ -4429,11 +5641,8 @@
}
});
- //! moment.js locale configuration
- //! locale : chuvash (cv)
- //! author : Anatoly Mironov : https://github.com/mirontoli
- var cv = _moment__default.defineLocale('cv', {
+ var cv = moment__default.defineLocale('cv', {
months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
@@ -4441,11 +5650,11 @@
weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD-MM-YYYY',
LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
- LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], LT',
- LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], LT'
+ LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+ LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
},
calendar : {
sameDay: '[Паян] LT [сехетре]',
@@ -4481,24 +5690,22 @@
}
});
- //! moment.js locale configuration
- //! locale : Welsh (cy)
- //! author : Robert Allen
- var cy = _moment__default.defineLocale('cy', {
+ var cy = moment__default.defineLocale('cy', {
months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
// time formats are the same as en-gb
longDateFormat: {
LT: 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
- LLL: 'D MMMM YYYY LT',
- LLLL: 'dddd, D MMMM YYYY LT'
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
},
calendar: {
sameDay: '[Heddiw am] LT',
@@ -4549,11 +5756,8 @@
}
});
- //! moment.js locale configuration
- //! locale : danish (da)
- //! author : Ulrik Nielsen : https://github.com/mrbase
- var da = _moment__default.defineLocale('da', {
+ var da = moment__default.defineLocale('da', {
months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
@@ -4561,11 +5765,11 @@
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd [d.] D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[I dag kl.] LT',
@@ -4598,11 +5802,6 @@
}
});
- //! moment.js locale configuration
- //! locale : austrian german (de-at)
- //! author : lluchs : https://github.com/lluchs
- //! author: Menelion Elensúle: https://github.com/Oire
- //! author : Martin Groller : https://github.com/MadMG
function de_at__processRelativeTime(number, withoutSuffix, key, isFuture) {
var format = {
@@ -4618,26 +5817,28 @@
return withoutSuffix ? format[key][0] : format[key][1];
}
- var de_at = _moment__default.defineLocale('de-at', {
+ var de_at = moment__default.defineLocale('de-at', {
months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
},
calendar : {
- sameDay: '[Heute um] LT [Uhr]',
+ sameDay: '[heute um] LT [Uhr]',
sameElse: 'L',
- nextDay: '[Morgen um] LT [Uhr]',
+ nextDay: '[morgen um] LT [Uhr]',
nextWeek: 'dddd [um] LT [Uhr]',
- lastDay: '[Gestern um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
lastWeek: '[letzten] dddd [um] LT [Uhr]'
},
relativeTime : {
@@ -4663,10 +5864,6 @@
}
});
- //! moment.js locale configuration
- //! locale : german (de)
- //! author : lluchs : https://github.com/lluchs
- //! author: Menelion Elensúle: https://github.com/Oire
function de__processRelativeTime(number, withoutSuffix, key, isFuture) {
var format = {
@@ -4682,26 +5879,28 @@
return withoutSuffix ? format[key][0] : format[key][1];
}
- var de = _moment__default.defineLocale('de', {
+ var de = moment__default.defineLocale('de', {
months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT: 'HH:mm',
LTS: 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
},
calendar : {
- sameDay: '[Heute um] LT [Uhr]',
+ sameDay: '[heute um] LT [Uhr]',
sameElse: 'L',
- nextDay: '[Morgen um] LT [Uhr]',
+ nextDay: '[morgen um] LT [Uhr]',
nextWeek: 'dddd [um] LT [Uhr]',
- lastDay: '[Gestern um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
lastWeek: '[letzten] dddd [um] LT [Uhr]'
},
relativeTime : {
@@ -4727,11 +5926,93 @@
}
});
- //! moment.js locale configuration
- //! locale : modern greek (el)
- //! author : Aggelos Karalias : https://github.com/mehiel
- var el = _moment__default.defineLocale('el', {
+ var dv__months = [
+ 'ޖެނުއަރީ',
+ 'ފެބްރުއަރީ',
+ 'މާރިޗު',
+ 'އޭޕްރީލު',
+ 'މޭ',
+ 'ޖޫން',
+ 'ޖުލައި',
+ 'އޯގަސްޓު',
+ 'ސެޕްޓެމްބަރު',
+ 'އޮކްޓޯބަރު',
+ 'ނޮވެމްބަރު',
+ 'ޑިސެމްބަރު'
+ ], dv__weekdays = [
+ 'އާދިއްތަ',
+ 'ހޯމަ',
+ 'އަންގާރަ',
+ 'ބުދަ',
+ 'ބުރާސްފަތި',
+ 'ހުކުރު',
+ 'ހޮނިހިރު'
+ ];
+
+ var dv = moment__default.defineLocale('dv', {
+ months : dv__months,
+ monthsShort : dv__months,
+ weekdays : dv__weekdays,
+ weekdaysShort : dv__weekdays,
+ weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
+ longDateFormat : {
+
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/M/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /މކ|މފ/,
+ isPM : function (input) {
+ return 'މފ' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'މކ';
+ } else {
+ return 'މފ';
+ }
+ },
+ 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 (string) {
+ return string.replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/,/g, '،');
+ },
+ week : {
+ dow : 7, // Sunday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var el = moment__default.defineLocale('el', {
monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
months : function (momentToFormat, format) {
@@ -4761,8 +6042,8 @@
LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
},
calendarEl : {
sameDay : '[Σήμερα {}] LT',
@@ -4782,7 +6063,7 @@
calendar : function (key, mom) {
var output = this._calendarEl[key],
hours = mom && mom.hours();
- if (typeof output === 'function') {
+ if (isFunction(output)) {
output = output.apply(mom);
}
return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
@@ -4810,10 +6091,8 @@
}
});
- //! moment.js locale configuration
- //! locale : australian english (en-au)
- var en_au = _moment__default.defineLocale('en-au', {
+ var en_au = moment__default.defineLocale('en-au', {
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
@@ -4824,8 +6103,8 @@
LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
},
calendar : {
sameDay : '[Today at] LT',
@@ -4865,11 +6144,8 @@
}
});
- //! moment.js locale configuration
- //! locale : canadian english (en-ca)
- //! author : Jonathan Abourbih : https://github.com/jonbca
- var en_ca = _moment__default.defineLocale('en-ca', {
+ var en_ca = moment__default.defineLocale('en-ca', {
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
@@ -4879,9 +6155,9 @@
LT : 'h:mm A',
LTS : 'h:mm:ss A',
L : 'YYYY-MM-DD',
- LL : 'D MMMM, YYYY',
- LLL : 'D MMMM, YYYY LT',
- LLLL : 'dddd, D MMMM, YYYY LT'
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
},
calendar : {
sameDay : '[Today at] LT',
@@ -4917,11 +6193,8 @@
}
});
- //! moment.js locale configuration
- //! locale : great britain english (en-gb)
- //! author : Chris Gedrim : https://github.com/chrisgedrim
- var en_gb = _moment__default.defineLocale('en-gb', {
+ var en_gb = moment__default.defineLocale('en-gb', {
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
@@ -4932,8 +6205,8 @@
LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[Today at] LT',
@@ -4973,13 +6246,114 @@
}
});
- //! moment.js locale configuration
- //! locale : esperanto (eo)
- //! author : Colin Dean : https://github.com/colindean
- //! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
- //! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
- var eo = _moment__default.defineLocale('eo', {
+ var en_ie = moment__default.defineLocale('en-ie', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ 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'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var en_nz = moment__default.defineLocale('en-nz', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.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 : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var eo = moment__default.defineLocale('eo', {
months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),
@@ -4987,11 +6361,11 @@
weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'D[-an de] MMMM, YYYY',
- LLL : 'D[-an de] MMMM, YYYY LT',
- LLLL : 'dddd, [la] D[-an de] MMMM, YYYY LT'
+ LLL : 'D[-an de] MMMM, YYYY HH:mm',
+ LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm'
},
meridiemParse: /[ap]\.t\.m/i,
isPM: function (input) {
@@ -5035,32 +6409,98 @@
}
});
- //! moment.js locale configuration
- //! locale : spanish (es)
- //! author : Julio Napurí : https://github.com/julionc
- var monthsShortDot = 'Ene._Feb._Mar._Abr._May._Jun._Jul._Ago._Sep._Oct._Nov._Dic.'.split('_'),
- es__monthsShort = 'Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic'.split('_');
+ var es_do__monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
+ es_do__monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
- var es = _moment__default.defineLocale('es', {
- months : 'Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre'.split('_'),
+ var es_do = moment__default.defineLocale('es-do', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return es_do__monthsShort[m.month()];
+ } else {
+ return es_do__monthsShortDot[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY h:mm A',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var es__monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
+ es__monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+ var es = moment__default.defineLocale('es', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
monthsShort : function (m, format) {
if (/-MMM-/.test(format)) {
return es__monthsShort[m.month()];
} else {
- return monthsShortDot[m.month()];
+ return es__monthsShortDot[m.month()];
}
},
- weekdays : 'Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado'.split('_'),
- weekdaysShort : 'Dom._Lun._Mar._Mié._Jue._Vie._Sáb.'.split('_'),
- weekdaysMin : 'Do_Lu_Ma_Mi_Ju_Vi_Sá'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
- LLL : 'D [de] MMMM [de] YYYY LT',
- LLLL : 'dddd, D [de] MMMM [de] YYYY LT'
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
},
calendar : {
sameDay : function () {
@@ -5103,10 +6543,6 @@
}
});
- //! moment.js locale configuration
- //! locale : estonian (et)
- //! author : Henry Kehlmann : https://github.com/madhenry
- //! improvements : Illimar Tambek : https://github.com/ragulka
function et__processRelativeTime(number, withoutSuffix, key, isFuture) {
var format = {
@@ -5127,7 +6563,7 @@
return isFuture ? format[key][0] : format[key][1];
}
- var et = _moment__default.defineLocale('et', {
+ var et = moment__default.defineLocale('et', {
months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
@@ -5135,11 +6571,11 @@
weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[Täna,] LT',
@@ -5172,27 +6608,26 @@
}
});
- //! moment.js locale configuration
- //! locale : euskara (eu)
- //! author : Eneko Illarramendi : https://github.com/eillarra
- var eu = _moment__default.defineLocale('eu', {
+ var eu = moment__default.defineLocale('eu', {
months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
+ monthsParseExact : true,
weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'YYYY[ko] MMMM[ren] D[a]',
- LLL : 'YYYY[ko] MMMM[ren] D[a] LT',
- LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] LT',
+ LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
+ LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
l : 'YYYY-M-D',
ll : 'YYYY[ko] MMM D[a]',
- lll : 'YYYY[ko] MMM D[a] LT',
- llll : 'ddd, YYYY[ko] MMM D[a] LT'
+ lll : 'YYYY[ko] MMM D[a] HH:mm',
+ llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
},
calendar : {
sameDay : '[gaur] LT[etan]',
@@ -5225,9 +6660,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Persian (fa)
- //! author : Ebrahim Byagowi : https://github.com/ebraminio
var fa__symbolMap = {
'1': '۱',
@@ -5253,19 +6685,20 @@
'۰': '0'
};
- var fa = _moment__default.defineLocale('fa', {
+ var fa = moment__default.defineLocale('fa', {
months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
meridiemParse: /قبل از ظهر|بعد از ظهر/,
isPM: function (input) {
@@ -5319,9 +6752,6 @@
}
});
- //! moment.js locale configuration
- //! locale : finnish (fi)
- //! author : Tarmo Aidantausta : https://github.com/bleadof
var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
numbersFuture = [
@@ -5331,33 +6761,33 @@
function fi__translate(number, withoutSuffix, key, isFuture) {
var result = '';
switch (key) {
- case 's':
- return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
- case 'm':
- return isFuture ? 'minuutin' : 'minuutti';
- case 'mm':
- result = isFuture ? 'minuutin' : 'minuuttia';
- break;
- case 'h':
- return isFuture ? 'tunnin' : 'tunti';
- case 'hh':
- result = isFuture ? 'tunnin' : 'tuntia';
- break;
- case 'd':
- return isFuture ? 'päivän' : 'päivä';
- case 'dd':
- result = isFuture ? 'päivän' : 'päivää';
- break;
- case 'M':
- return isFuture ? 'kuukauden' : 'kuukausi';
- case 'MM':
- result = isFuture ? 'kuukauden' : 'kuukautta';
- break;
- case 'y':
- return isFuture ? 'vuoden' : 'vuosi';
- case 'yy':
- result = isFuture ? 'vuoden' : 'vuotta';
- break;
+ case 's':
+ return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+ case 'm':
+ return isFuture ? 'minuutin' : 'minuutti';
+ case 'mm':
+ result = isFuture ? 'minuutin' : 'minuuttia';
+ break;
+ case 'h':
+ return isFuture ? 'tunnin' : 'tunti';
+ case 'hh':
+ result = isFuture ? 'tunnin' : 'tuntia';
+ break;
+ case 'd':
+ return isFuture ? 'päivän' : 'päivä';
+ case 'dd':
+ result = isFuture ? 'päivän' : 'päivää';
+ break;
+ case 'M':
+ return isFuture ? 'kuukauden' : 'kuukausi';
+ case 'MM':
+ result = isFuture ? 'kuukauden' : 'kuukautta';
+ break;
+ case 'y':
+ return isFuture ? 'vuoden' : 'vuosi';
+ case 'yy':
+ result = isFuture ? 'vuoden' : 'vuotta';
+ break;
}
result = verbalNumber(number, isFuture) + ' ' + result;
return result;
@@ -5366,7 +6796,7 @@
return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
}
- var fi = _moment__default.defineLocale('fi', {
+ var fi = moment__default.defineLocale('fi', {
months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
@@ -5377,12 +6807,12 @@
LTS : 'HH.mm.ss',
L : 'DD.MM.YYYY',
LL : 'Do MMMM[ta] YYYY',
- LLL : 'Do MMMM[ta] YYYY, [klo] LT',
- LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] LT',
+ LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
+ LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
l : 'D.M.YYYY',
ll : 'Do MMM YYYY',
- lll : 'Do MMM YYYY, [klo] LT',
- llll : 'ddd, Do MMM YYYY, [klo] LT'
+ lll : 'Do MMM YYYY, [klo] HH.mm',
+ llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
},
calendar : {
sameDay : '[tänään] [klo] LT',
@@ -5415,11 +6845,8 @@
}
});
- //! moment.js locale configuration
- //! locale : faroese (fo)
- //! author : Ragnar Johannesen : https://github.com/ragnar123
- var fo = _moment__default.defineLocale('fo', {
+ var fo = moment__default.defineLocale('fo', {
months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
@@ -5427,11 +6854,11 @@
weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D. MMMM, YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D. MMMM, YYYY HH:mm'
},
calendar : {
sameDay : '[Í dag kl.] LT',
@@ -5464,23 +6891,22 @@
}
});
- //! moment.js locale configuration
- //! locale : canadian french (fr-ca)
- //! author : Jonathan Abourbih : https://github.com/jonbca
- var fr_ca = _moment__default.defineLocale('fr-ca', {
+ var fr_ca = moment__default.defineLocale('fr-ca', {
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[Aujourd\'hui à] LT',
@@ -5505,29 +6931,78 @@
y : 'un an',
yy : '%d ans'
},
- ordinalParse: /\d{1,2}(er|)/,
+ ordinalParse: /\d{1,2}(er|e)/,
ordinal : function (number) {
- return number + (number === 1 ? 'er' : '');
+ return number + (number === 1 ? 'er' : 'e');
}
});
- //! moment.js locale configuration
- //! locale : french (fr)
- //! author : John Fischer : https://github.com/jfroffice
- var fr = _moment__default.defineLocale('fr', {
+ var fr_ch = moment__default.defineLocale('fr-ch', {
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ 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'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var fr = moment__default.defineLocale('fr', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[Aujourd\'hui à] LT',
@@ -5562,14 +7037,11 @@
}
});
- //! moment.js locale configuration
- //! locale : frisian (fy)
- //! author : Robin van der Vliet : https://github.com/robin0van0der0v
var fy__monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),
fy__monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
- var fy = _moment__default.defineLocale('fy', {
+ var fy = moment__default.defineLocale('fy', {
months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
monthsShort : function (m, format) {
if (/-MMM-/.test(format)) {
@@ -5578,16 +7050,18 @@
return fy__monthsShortWithDots[m.month()];
}
},
+ monthsParseExact : true,
weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD-MM-YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[hjoed om] LT',
@@ -5622,23 +7096,84 @@
}
});
- //! moment.js locale configuration
- //! locale : galician (gl)
- //! author : Juan G. Hurtado : https://github.com/juanghurtado
- var gl = _moment__default.defineLocale('gl', {
- months : 'Xaneiro_Febreiro_Marzo_Abril_Maio_Xuño_Xullo_Agosto_Setembro_Outubro_Novembro_Decembro'.split('_'),
- monthsShort : 'Xan._Feb._Mar._Abr._Mai._Xuñ._Xul._Ago._Set._Out._Nov._Dec.'.split('_'),
- weekdays : 'Domingo_Luns_Martes_Mércores_Xoves_Venres_Sábado'.split('_'),
- weekdaysShort : 'Dom._Lun._Mar._Mér._Xov._Ven._Sáb.'.split('_'),
- weekdaysMin : 'Do_Lu_Ma_Mé_Xo_Ve_Sá'.split('_'),
+ var gd__months = [
+ 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
+ ];
+
+ var gd__monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
+
+ var gd__weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
+
+ var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
+
+ var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
+
+ var gd = moment__default.defineLocale('gd', {
+ months : gd__months,
+ monthsShort : gd__monthsShort,
+ monthsParseExact : true,
+ weekdays : gd__weekdays,
+ weekdaysShort : weekdaysShort,
+ weekdaysMin : weekdaysMin,
longDateFormat : {
- LT : 'H:mm',
- LTS : 'LT:ss',
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[An-diugh aig] LT',
+ nextDay : '[A-màireach aig] LT',
+ nextWeek : 'dddd [aig] LT',
+ lastDay : '[An-dè aig] LT',
+ lastWeek : 'dddd [seo chaidh] [aig] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ann an %s',
+ past : 'bho chionn %s',
+ s : 'beagan diogan',
+ m : 'mionaid',
+ mm : '%d mionaidean',
+ h : 'uair',
+ hh : '%d uairean',
+ d : 'latha',
+ dd : '%d latha',
+ M : 'mìos',
+ MM : '%d mìosan',
+ y : 'bliadhna',
+ yy : '%d bliadhna'
+ },
+ ordinalParse : /\d{1,2}(d|na|mh)/,
+ ordinal : function (number) {
+ var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var gl = moment__default.defineLocale('gl', {
+ months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
+ monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
},
calendar : {
sameDay : function () {
@@ -5660,8 +7195,8 @@
},
relativeTime : {
future : function (str) {
- if (str === 'uns segundos') {
- return 'nuns segundos';
+ if (str.indexOf('un') === 0) {
+ return 'n' + str;
}
return 'en ' + str;
},
@@ -5682,17 +7217,12 @@
ordinal : '%dº',
week : {
dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
}
});
- //! moment.js locale configuration
- //! locale : Hebrew (he)
- //! author : Tomer Cohen : https://github.com/tomer
- //! author : Moshe Simantov : https://github.com/DevelopmentIL
- //! author : Tal Ater : https://github.com/TalAter
- var he = _moment__default.defineLocale('he', {
+ var he = moment__default.defineLocale('he', {
months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
@@ -5700,15 +7230,15 @@
weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [ב]MMMM YYYY',
- LLL : 'D [ב]MMMM YYYY LT',
- LLLL : 'dddd, D [ב]MMMM YYYY LT',
+ LLL : 'D [ב]MMMM YYYY HH:mm',
+ LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
l : 'D/M/YYYY',
ll : 'D MMM YYYY',
- lll : 'D MMM YYYY LT',
- llll : 'ddd, D MMM YYYY LT'
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
},
calendar : {
sameDay : '[היום ב־]LT',
@@ -5754,12 +7284,26 @@
}
return number + ' שנים';
}
+ },
+ meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
+ isPM : function (input) {
+ return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 5) {
+ return 'לפנות בוקר';
+ } else if (hour < 10) {
+ return 'בבוקר';
+ } else if (hour < 12) {
+ return isLower ? 'לפנה"צ' : 'לפני הצהריים';
+ } else if (hour < 18) {
+ return isLower ? 'אחה"צ' : 'אחרי הצהריים';
+ } else {
+ return 'בערב';
+ }
}
});
- //! moment.js locale configuration
- //! locale : hindi (hi)
- //! author : Mayank Singhal : https://github.com/mayanksinghal
var hi__symbolMap = {
'1': '१',
@@ -5786,9 +7330,10 @@
'०': '0'
};
- var hi = _moment__default.defineLocale('hi', {
+ var hi = moment__default.defineLocale('hi', {
months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
+ monthsParseExact: true,
weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
@@ -5797,8 +7342,8 @@
LTS : 'A h:mm:ss बजे',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
},
calendar : {
sameDay : '[आज] LT',
@@ -5869,108 +7414,110 @@
}
});
- //! moment.js locale configuration
- //! locale : hrvatski (hr)
- //! author : Bojan Marković : https://github.com/bmarkovic
function hr__translate(number, withoutSuffix, key) {
var result = number + ' ';
switch (key) {
- case 'm':
- return withoutSuffix ? 'jedna minuta' : 'jedne minute';
- case 'mm':
- if (number === 1) {
- result += 'minuta';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'minute';
- } else {
- result += 'minuta';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'jedan sat' : 'jednog sata';
- case 'hh':
- if (number === 1) {
- result += 'sat';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'sata';
- } else {
- result += 'sati';
- }
- return result;
- case 'dd':
- if (number === 1) {
- result += 'dan';
- } else {
- result += 'dana';
- }
- return result;
- case 'MM':
- if (number === 1) {
- result += 'mjesec';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'mjeseca';
- } else {
- result += 'mjeseci';
- }
- return result;
- case 'yy':
- if (number === 1) {
- result += 'godina';
- } else if (number === 2 || number === 3 || number === 4) {
- result += 'godine';
- } else {
- result += 'godina';
- }
- return result;
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
}
}
- var hr = _moment__default.defineLocale('hr', {
- months : 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_'),
+ var hr = moment__default.defineLocale('hr', {
+ months : {
+ format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
+ standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
+ },
monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
+ monthsParseExact: true,
weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
- L : 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[danas u] LT',
nextDay : '[sutra u] LT',
nextWeek : function () {
switch (this.day()) {
- case 0:
- return '[u] [nedjelju] [u] LT';
- case 3:
- return '[u] [srijedu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
}
},
lastDay : '[jučer u] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- case 3:
- return '[prošlu] dddd [u] LT';
- case 6:
- return '[prošle] [subote] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prošli] dddd [u] LT';
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
}
},
sameElse : 'L'
@@ -5998,37 +7545,34 @@
}
});
- //! moment.js locale configuration
- //! locale : hungarian (hu)
- //! author : Adam Brunner : https://github.com/adambrunner
var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
function hu__translate(number, withoutSuffix, key, isFuture) {
var num = number,
suffix;
switch (key) {
- case 's':
- return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
- case 'm':
- return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
- case 'mm':
- return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
- case 'h':
- return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
- case 'hh':
- return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
- case 'd':
- return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
- case 'dd':
- return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
- case 'M':
- return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
- case 'MM':
- return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
- case 'y':
- return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
- case 'yy':
- return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+ case 's':
+ return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
+ case 'm':
+ return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'mm':
+ return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'h':
+ return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'hh':
+ return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'd':
+ return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'dd':
+ return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'M':
+ return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'MM':
+ return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'y':
+ return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+ case 'yy':
+ return num + (isFuture || withoutSuffix ? ' év' : ' éve');
}
return '';
}
@@ -6036,7 +7580,7 @@
return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
}
- var hu = _moment__default.defineLocale('hu', {
+ var hu = moment__default.defineLocale('hu', {
months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
@@ -6044,11 +7588,11 @@
weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'YYYY.MM.DD.',
LL : 'YYYY. MMMM D.',
- LLL : 'YYYY. MMMM D., LT',
- LLLL : 'YYYY. MMMM D., dddd LT'
+ LLL : 'YYYY. MMMM D. H:mm',
+ LLLL : 'YYYY. MMMM D., dddd H:mm'
},
meridiemParse: /de|du/i,
isPM: function (input) {
@@ -6096,42 +7640,23 @@
}
});
- //! moment.js locale configuration
- //! locale : Armenian (hy-am)
- //! author : Armendarabyan : https://github.com/armendarabyan
- function hy_am__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),
- 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')
+ var hy_am = moment__default.defineLocale('hy-am', {
+ months : {
+ format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
+ standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
},
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function hy_am__monthsShortCaseReplace(m, format) {
- var monthsShort = 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_');
- return monthsShort[m.month()];
- }
- function hy_am__weekdaysCaseReplace(m, format) {
- var weekdays = 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_');
- return weekdays[m.day()];
- }
-
- var hy_am = _moment__default.defineLocale('hy-am', {
- months : hy_am__monthsCaseReplace,
- monthsShort : hy_am__monthsShortCaseReplace,
- weekdays : hy_am__weekdaysCaseReplace,
+ monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+ weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY թ.',
- LLL : 'D MMMM YYYY թ., LT',
- LLLL : 'dddd, D MMMM YYYY թ., LT'
+ LLL : 'D MMMM YYYY թ., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY թ., HH:mm'
},
calendar : {
sameDay: '[այսօր] LT',
@@ -6178,16 +7703,16 @@
ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
ordinal: function (number, period) {
switch (period) {
- case 'DDD':
- case 'w':
- case 'W':
- case 'DDDo':
- if (number === 1) {
- return number + '-ին';
- }
- return number + '-րդ';
- default:
- return number;
+ case 'DDD':
+ case 'w':
+ case 'W':
+ case 'DDDo':
+ if (number === 1) {
+ return number + '-ին';
+ }
+ return number + '-րդ';
+ default:
+ return number;
}
},
week : {
@@ -6196,12 +7721,8 @@
}
});
- //! moment.js locale configuration
- //! locale : Bahasa Indonesia (id)
- //! author : Mohammad Satrio Utomo : https://github.com/tyok
- //! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
- var id = _moment__default.defineLocale('id', {
+ var id = moment__default.defineLocale('id', {
months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
@@ -6209,11 +7730,11 @@
weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
longDateFormat : {
LT : 'HH.mm',
- LTS : 'LT.ss',
+ LTS : 'HH.mm.ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY [pukul] LT',
- LLLL : 'dddd, D MMMM YYYY [pukul] LT'
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
},
meridiemParse: /pagi|siang|sore|malam/,
meridiemHour : function (hour, meridiem) {
@@ -6268,9 +7789,6 @@
}
});
- //! moment.js locale configuration
- //! locale : icelandic (is)
- //! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
function is__plural(n) {
if (n % 100 === 11) {
@@ -6283,63 +7801,63 @@
function is__translate(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
- case 's':
- return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
- case 'm':
- return withoutSuffix ? 'mínúta' : 'mínútu';
- case 'mm':
- if (is__plural(number)) {
- return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
- } else if (withoutSuffix) {
- return result + 'mínúta';
- }
- return result + 'mínútu';
- case 'hh':
- if (is__plural(number)) {
- return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
- }
- return result + 'klukkustund';
- case 'd':
- if (withoutSuffix) {
- return 'dagur';
- }
- return isFuture ? 'dag' : 'degi';
- case 'dd':
- if (is__plural(number)) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
+ case 'm':
+ return withoutSuffix ? 'mínúta' : 'mínútu';
+ case 'mm':
+ if (is__plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
+ } else if (withoutSuffix) {
+ return result + 'mínúta';
+ }
+ return result + 'mínútu';
+ case 'hh':
+ if (is__plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
+ }
+ return result + 'klukkustund';
+ case 'd':
if (withoutSuffix) {
- return result + 'dagar';
+ return 'dagur';
+ }
+ return isFuture ? 'dag' : 'degi';
+ case 'dd':
+ if (is__plural(number)) {
+ if (withoutSuffix) {
+ return result + 'dagar';
+ }
+ return result + (isFuture ? 'daga' : 'dögum');
+ } else if (withoutSuffix) {
+ return result + 'dagur';
}
- return result + (isFuture ? 'daga' : 'dögum');
- } else if (withoutSuffix) {
- return result + 'dagur';
- }
- return result + (isFuture ? 'dag' : 'degi');
- case 'M':
- if (withoutSuffix) {
- return 'mánuður';
- }
- return isFuture ? 'mánuð' : 'mánuði';
- case 'MM':
- if (is__plural(number)) {
+ return result + (isFuture ? 'dag' : 'degi');
+ case 'M':
if (withoutSuffix) {
- return result + 'mánuðir';
+ return 'mánuður';
}
- return result + (isFuture ? 'mánuði' : 'mánuðum');
- } else if (withoutSuffix) {
- return result + 'mánuður';
- }
- return result + (isFuture ? 'mánuð' : 'mánuði');
- case 'y':
- return withoutSuffix || isFuture ? 'ár' : 'ári';
- case 'yy':
- if (is__plural(number)) {
- return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
- }
- return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+ return isFuture ? 'mánuð' : 'mánuði';
+ case 'MM':
+ if (is__plural(number)) {
+ if (withoutSuffix) {
+ return result + 'mánuðir';
+ }
+ return result + (isFuture ? 'mánuði' : 'mánuðum');
+ } else if (withoutSuffix) {
+ return result + 'mánuður';
+ }
+ return result + (isFuture ? 'mánuð' : 'mánuði');
+ case 'y':
+ return withoutSuffix || isFuture ? 'ár' : 'ári';
+ case 'yy':
+ if (is__plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+ }
+ return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
}
}
- var is = _moment__default.defineLocale('is', {
+ var is = moment__default.defineLocale('is', {
months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
@@ -6347,11 +7865,11 @@
weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
- L : 'DD/MM/YYYY',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY [kl.] LT',
- LLLL : 'dddd, D. MMMM YYYY [kl.] LT'
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
},
calendar : {
sameDay : '[í dag kl.] LT',
@@ -6384,24 +7902,20 @@
}
});
- //! moment.js locale configuration
- //! locale : italian (it)
- //! author : Lorenzo : https://github.com/aliem
- //! author: Mattia Larentis: https://github.com/nostalgiaz
- var it = _moment__default.defineLocale('it', {
+ var it = moment__default.defineLocale('it', {
months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
- weekdaysMin : 'D_L_Ma_Me_G_V_S'.split('_'),
+ weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[Oggi alle] LT',
@@ -6443,11 +7957,8 @@
}
});
- //! moment.js locale configuration
- //! locale : japanese (ja)
- //! author : LI Long : https://github.com/baryon
- var ja = _moment__default.defineLocale('ja', {
+ var ja = moment__default.defineLocale('ja', {
months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
@@ -6455,11 +7966,11 @@
weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
longDateFormat : {
LT : 'Ah時m分',
- LTS : 'LTs秒',
+ LTS : 'Ah時m分s秒',
L : 'YYYY/MM/DD',
LL : 'YYYY年M月D日',
- LLL : 'YYYY年M月D日LT',
- LLLL : 'YYYY年M月D日LT dddd'
+ LLL : 'YYYY年M月D日Ah時m分',
+ LLLL : 'YYYY年M月D日Ah時m分 dddd'
},
meridiemParse: /午前|午後/i,
isPM : function (input) {
@@ -6480,6 +7991,17 @@
lastWeek : '[前週]dddd LT',
sameElse : 'L'
},
+ ordinalParse : /\d{1,2}日/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ default:
+ return number;
+ }
+ },
relativeTime : {
future : '%s後',
past : '%s前',
@@ -6497,12 +8019,8 @@
}
});
- //! moment.js locale configuration
- //! locale : Boso Jowo (jv)
- //! author : Rony Lantip : https://github.com/lantip
- //! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
- var jv = _moment__default.defineLocale('jv', {
+ var jv = moment__default.defineLocale('jv', {
months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
@@ -6510,11 +8028,11 @@
weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
longDateFormat : {
LT : 'HH.mm',
- LTS : 'LT.ss',
+ LTS : 'HH.mm.ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY [pukul] LT',
- LLLL : 'dddd, D MMMM YYYY [pukul] LT'
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
},
meridiemParse: /enjing|siyang|sonten|ndalu/,
meridiemHour : function (hour, meridiem) {
@@ -6569,35 +8087,18 @@
}
});
- //! moment.js locale configuration
- //! locale : Georgian (ka)
- //! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
- function ka__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
- 'accusative': 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
- },
- nounCase = (/D[oD] *MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function ka__weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
- 'accusative': 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_')
+ var ka = moment__default.defineLocale('ka', {
+ months : {
+ standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+ format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
},
- nounCase = (/(წინა|შემდეგ)/).test(format) ?
- 'accusative' :
- 'nominative';
- return weekdays[nounCase][m.day()];
- }
-
- var ka = _moment__default.defineLocale('ka', {
- months : ka__monthsCaseReplace,
monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
- weekdays : ka__weekdaysCaseReplace,
+ weekdays : {
+ standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+ format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
+ isFormat: /(წინა|შემდეგ)/
+ },
weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
longDateFormat : {
@@ -6605,8 +8106,8 @@
LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
},
calendar : {
sameDay : '[დღეს] LT[-ზე]',
@@ -6661,26 +8162,96 @@
}
});
- //! moment.js locale configuration
- //! locale : khmer (km)
- //! author : Kruy Vanna : https://github.com/kruyvanna
- var km = _moment__default.defineLocale('km', {
- months: 'មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
- monthsShort: 'មករា_កុម្ភៈ_មិនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ var kk__suffixes = {
+ 0: '-ші',
+ 1: '-ші',
+ 2: '-ші',
+ 3: '-ші',
+ 4: '-ші',
+ 5: '-ші',
+ 6: '-шы',
+ 7: '-ші',
+ 8: '-ші',
+ 9: '-шы',
+ 10: '-шы',
+ 20: '-шы',
+ 30: '-шы',
+ 40: '-шы',
+ 50: '-ші',
+ 60: '-шы',
+ 70: '-ші',
+ 80: '-ші',
+ 90: '-шы',
+ 100: '-ші'
+ };
+
+ var kk = moment__default.defineLocale('kk', {
+ 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 : 'dddd, D MMMM YYYY 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 жыл'
+ },
+ ordinalParse: /\d{1,2}-(ші|шы)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (kk__suffixes[number] || kk__suffixes[a] || kk__suffixes[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var km = moment__default.defineLocale('km', {
+ months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
longDateFormat: {
LT: 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
- LLL: 'D MMMM YYYY LT',
- LLLL: 'dddd, D MMMM YYYY LT'
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
},
calendar: {
- sameDay: '[ថ្ងៃនៈ ម៉ោង] LT',
+ sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
nextDay: '[ស្អែក ម៉ោង] LT',
nextWeek: 'dddd [ម៉ោង] LT',
lastDay: '[ម្សិលមិញ ម៉ោង] LT',
@@ -6708,15 +8279,8 @@
}
});
- //! moment.js locale configuration
- //! locale : korean (ko)
- //!
- //! authors
- //!
- //! - Kyungwook, Park : https://github.com/kyungw00k
- //! - Jeeeyul Lee <jeeeyul@gmail.com>
- var ko = _moment__default.defineLocale('ko', {
+ var ko = moment__default.defineLocale('ko', {
months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
@@ -6727,8 +8291,8 @@
LTS : 'A h시 m분 s초',
L : 'YYYY.MM.DD',
LL : 'YYYY년 MMMM D일',
- LLL : 'YYYY년 MMMM D일 LT',
- LLLL : 'YYYY년 MMMM D일 dddd LT'
+ LLL : 'YYYY년 MMMM D일 A h시 m분',
+ LLLL : 'YYYY년 MMMM D일 dddd A h시 m분'
},
calendar : {
sameDay : '오늘 LT',
@@ -6741,17 +8305,17 @@
relativeTime : {
future : '%s 후',
past : '%s 전',
- s : '몇초',
+ s : '몇 초',
ss : '%d초',
m : '일분',
mm : '%d분',
- h : '한시간',
+ h : '한 시간',
hh : '%d시간',
d : '하루',
dd : '%d일',
- M : '한달',
+ M : '한 달',
MM : '%d달',
- y : '일년',
+ y : '일 년',
yy : '%d년'
},
ordinalParse : /\d{1,2}일/,
@@ -6765,9 +8329,80 @@
}
});
- //! moment.js locale configuration
- //! locale : Luxembourgish (lb)
- //! author : mweimerskirch : https://github.com/mweimerskirch, David Raison : https://github.com/kwisatz
+
+
+ var ky__suffixes = {
+ 0: '-чү',
+ 1: '-чи',
+ 2: '-чи',
+ 3: '-чү',
+ 4: '-чү',
+ 5: '-чи',
+ 6: '-чы',
+ 7: '-чи',
+ 8: '-чи',
+ 9: '-чу',
+ 10: '-чу',
+ 20: '-чы',
+ 30: '-чу',
+ 40: '-чы',
+ 50: '-чү',
+ 60: '-чы',
+ 70: '-чи',
+ 80: '-чи',
+ 90: '-чу',
+ 100: '-чү'
+ };
+
+ var ky = moment__default.defineLocale('ky', {
+ 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 : 'dddd, D MMMM YYYY 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 жыл'
+ },
+ ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (ky__suffixes[number] || ky__suffixes[a] || ky__suffixes[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
function lb__processRelativeTime(number, withoutSuffix, key, isFuture) {
var format = {
@@ -6834,19 +8469,21 @@
}
}
- var lb = _moment__default.defineLocale('lb', {
+ var lb = moment__default.defineLocale('lb', {
months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'H:mm [Auer]',
LTS: 'H:mm:ss [Auer]',
L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
- LLL: 'D. MMMM YYYY LT',
- LLLL: 'dddd, D. MMMM YYYY LT'
+ LLL: 'D. MMMM YYYY H:mm [Auer]',
+ LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
},
calendar: {
sameDay: '[Haut um] LT',
@@ -6888,9 +8525,62 @@
}
});
- //! moment.js locale configuration
- //! locale : Lithuanian (lt)
- //! author : Mindaugas Mozūras : https://github.com/mmozuras
+
+ var lo = moment__default.defineLocale('lo', {
+ months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+ weekdaysParseExact : true,
+ 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 (input) {
+ return input === 'ຕອນແລງ';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ຕອນເຊົ້າ';
+ } else {
+ return 'ຕອນແລງ';
+ }
+ },
+ calendar : {
+ sameDay : '[ມື້ນີ້ເວລາ] LT',
+ nextDay : '[ມື້ອື່ນເວລາ] LT',
+ nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
+ lastDay : '[ມື້ວານນີ້ເວລາ] LT',
+ lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
+ sameElse : 'L'
+ },
+ 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 ປີ'
+ },
+ ordinalParse: /(ທີ່)\d{1,2}/,
+ ordinal : function (number) {
+ return 'ທີ່' + number;
+ }
+ });
+
var lt__units = {
'm' : 'minutė_minutės_minutę',
@@ -6903,8 +8593,7 @@
'MM': 'mėnesiai_mėnesių_mėnesius',
'y' : 'metai_metų_metus',
'yy': 'metai_metų_metus'
- },
- weekDays = 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_');
+ };
function translateSeconds(number, withoutSuffix, key, isFuture) {
if (withoutSuffix) {
return 'kelios sekundės';
@@ -6935,29 +8624,32 @@
}
}
}
- function relativeWeekDay(moment, format) {
- var nominative = format.indexOf('dddd HH:mm') === -1,
- weekDay = weekDays[moment.day()];
- return nominative ? weekDay : weekDay.substring(0, weekDay.length - 2) + 'į';
- }
-
- var lt = _moment__default.defineLocale('lt', {
- months : 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+ var lt = moment__default.defineLocale('lt', {
+ months : {
+ format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+ standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
+ isFormat: /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?|MMMM?(\[[^\[\]]*\]|\s+)+D[oD]?/
+ },
monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
- weekdays : relativeWeekDay,
+ weekdays : {
+ format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
+ standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
+ isFormat: /dddd HH:mm/
+ },
weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'YYYY [m.] MMMM D [d.]',
- LLL : 'YYYY [m.] MMMM D [d.], LT [val.]',
- LLLL : 'YYYY [m.] MMMM D [d.], dddd, LT [val.]',
+ LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
l : 'YYYY-MM-DD',
ll : 'YYYY [m.] MMMM D [d.]',
- lll : 'YYYY [m.] MMMM D [d.], LT [val.]',
- llll : 'YYYY [m.] MMMM D [d.], ddd, LT [val.]'
+ lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
},
calendar : {
sameDay : '[Šiandien] LT',
@@ -6992,10 +8684,6 @@
}
});
- //! moment.js locale configuration
- //! locale : latvian (lv)
- //! author : Kristaps Karlsons : https://github.com/skakri
- //! author : Jānis Elmeris : https://github.com/JanisE
var lv__units = {
'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
@@ -7015,11 +8703,11 @@
function lv__format(forms, number, withoutSuffix) {
if (withoutSuffix) {
// E.g. "21 minūte", "3 minūtes".
- return number % 10 === 1 && number !== 11 ? forms[2] : forms[3];
+ return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
} else {
// E.g. "21 minūtes" as in "pēc 21 minūtes".
// E.g. "3 minūtēm" as in "pēc 3 minūtēm".
- return number % 10 === 1 && number !== 11 ? forms[0] : forms[1];
+ return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
}
}
function lv__relativeTimeWithPlural(number, withoutSuffix, key) {
@@ -7032,19 +8720,20 @@
return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
}
- var lv = _moment__default.defineLocale('lv', {
+ var lv = moment__default.defineLocale('lv', {
months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY.',
LL : 'YYYY. [gada] D. MMMM',
- LLL : 'YYYY. [gada] D. MMMM, LT',
- LLLL : 'YYYY. [gada] D. MMMM, dddd, LT'
+ LLL : 'YYYY. [gada] D. MMMM, HH:mm',
+ LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
},
calendar : {
sameDay : '[Šodien pulksten] LT',
@@ -7077,9 +8766,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Montenegrin (me)
- //! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
var me__translator = {
words: { //Different grammatical cases
@@ -7104,19 +8790,21 @@
}
};
- var me = _moment__default.defineLocale('me', {
- months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],
- monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],
- weekdays: ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],
- weekdaysShort: ['ned.', 'pon.', 'uto.', 'sri.', 'čet.', 'pet.', 'sub.'],
- weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
+ var me = moment__default.defineLocale('me', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'H:mm',
- LTS : 'LT:ss',
- L: 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
- LLL: 'D. MMMM YYYY LT',
- LLLL: 'dddd, D. MMMM YYYY LT'
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
},
calendar: {
sameDay: '[danas u] LT',
@@ -7124,17 +8812,17 @@
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[u] [nedjelju] [u] LT';
- case 3:
- return '[u] [srijedu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
}
},
lastDay : '[juče u] LT',
@@ -7175,11 +8863,58 @@
}
});
- //! moment.js locale configuration
- //! locale : macedonian (mk)
- //! author : Borislav Mickov : https://github.com/B0k0
- var mk = _moment__default.defineLocale('mk', {
+ var mi = moment__default.defineLocale('mi', {
+ months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
+ monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
+ monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
+ weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
+ weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY [i] HH:mm',
+ LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
+ },
+ calendar: {
+ sameDay: '[i teie mahana, i] LT',
+ nextDay: '[apopo i] LT',
+ nextWeek: 'dddd [i] LT',
+ lastDay: '[inanahi i] LT',
+ lastWeek: 'dddd [whakamutunga i] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'i roto i %s',
+ past: '%s i mua',
+ s: 'te hēkona ruarua',
+ m: 'he meneti',
+ mm: '%d meneti',
+ h: 'te haora',
+ hh: '%d haora',
+ d: 'he ra',
+ dd: '%d ra',
+ M: 'he marama',
+ MM: '%d marama',
+ y: 'he tau',
+ yy: '%d tau'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var mk = moment__default.defineLocale('mk', {
months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
@@ -7187,28 +8922,28 @@
weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'D.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
},
calendar : {
sameDay : '[Денес во] LT',
nextDay : '[Утре во] LT',
- nextWeek : 'dddd [во] LT',
+ nextWeek : '[Во] dddd [во] LT',
lastDay : '[Вчера во] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- case 3:
- case 6:
- return '[Во изминатата] dddd [во] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[Во изминатиот] dddd [во] LT';
+ case 0:
+ case 3:
+ case 6:
+ return '[Изминатата] dddd [во] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[Изминатиот] dddd [во] LT';
}
},
sameElse : 'L'
@@ -7254,13 +8989,11 @@
}
});
- //! moment.js locale configuration
- //! locale : malayalam (ml)
- //! author : Floyd Pink : https://github.com/floydpink
- var ml = _moment__default.defineLocale('ml', {
+ var ml = moment__default.defineLocale('ml', {
months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
+ monthsParseExact : true,
weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
@@ -7269,8 +9002,8 @@
LTS : 'A h:mm:ss -നു',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm -നു',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
},
calendar : {
sameDay : '[ഇന്ന്] LT',
@@ -7296,8 +9029,17 @@
yy : '%d വർഷം'
},
meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
- isPM : function (input) {
- return /^(ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി)$/.test(input);
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'രാത്രി' && hour >= 4) ||
+ meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
+ meridiem === 'വൈകുന്നേരം') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
},
meridiem : function (hour, minute, isLower) {
if (hour < 4) {
@@ -7314,9 +9056,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Marathi (mr)
- //! author : Harshad Kale : https://github.com/kalehv
var mr__symbolMap = {
'1': '१',
@@ -7343,9 +9082,46 @@
'०': '0'
};
- var mr = _moment__default.defineLocale('mr', {
+ function relativeTimeMr(number, withoutSuffix, string, isFuture)
+ {
+ var output = '';
+ if (withoutSuffix) {
+ switch (string) {
+ case 's': output = 'काही सेकंद'; break;
+ case 'm': output = 'एक मिनिट'; break;
+ case 'mm': output = '%d मिनिटे'; break;
+ case 'h': output = 'एक तास'; break;
+ case 'hh': output = '%d तास'; break;
+ case 'd': output = 'एक दिवस'; break;
+ case 'dd': output = '%d दिवस'; break;
+ case 'M': output = 'एक महिना'; break;
+ case 'MM': output = '%d महिने'; break;
+ case 'y': output = 'एक वर्ष'; break;
+ case 'yy': output = '%d वर्षे'; break;
+ }
+ }
+ else {
+ switch (string) {
+ case 's': output = 'काही सेकंदां'; break;
+ case 'm': output = 'एका मिनिटा'; break;
+ case 'mm': output = '%d मिनिटां'; break;
+ case 'h': output = 'एका तासा'; break;
+ case 'hh': output = '%d तासां'; break;
+ case 'd': output = 'एका दिवसा'; break;
+ case 'dd': output = '%d दिवसां'; break;
+ case 'M': output = 'एका महिन्या'; break;
+ case 'MM': output = '%d महिन्यां'; break;
+ case 'y': output = 'एका वर्षा'; break;
+ case 'yy': output = '%d वर्षां'; break;
+ }
+ }
+ return output.replace(/%d/i, number);
+ }
+
+ var mr = moment__default.defineLocale('mr', {
months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
+ monthsParseExact : true,
weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
@@ -7354,8 +9130,8 @@
LTS : 'A h:mm:ss वाजता',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, A h:mm वाजता',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
},
calendar : {
sameDay : '[आज] LT',
@@ -7366,19 +9142,19 @@
sameElse : 'L'
},
relativeTime : {
- future : '%s नंतर',
- past : '%s पूर्वी',
- s : 'सेकंद',
- m: 'एक मिनिट',
- mm: '%d मिनिटे',
- h : 'एक तास',
- hh : '%d तास',
- d : 'एक दिवस',
- dd : '%d दिवस',
- M : 'एक महिना',
- MM : '%d महिने',
- y : 'एक वर्ष',
- yy : '%d वर्षे'
+ future: '%sमध्ये',
+ past: '%sपूर्वी',
+ s: relativeTimeMr,
+ m: relativeTimeMr,
+ mm: relativeTimeMr,
+ h: relativeTimeMr,
+ hh: relativeTimeMr,
+ d: relativeTimeMr,
+ dd: relativeTimeMr,
+ M: relativeTimeMr,
+ MM: relativeTimeMr,
+ y: relativeTimeMr,
+ yy: relativeTimeMr
},
preparse: function (string) {
return string.replace(/[१२३४५६७८९०]/g, function (match) {
@@ -7424,11 +9200,76 @@
}
});
- //! moment.js locale configuration
- //! locale : Bahasa Malaysia (ms-MY)
- //! author : Weldan Jamili : https://github.com/weldan
- var ms_my = _moment__default.defineLocale('ms-my', {
+ var ms_my = moment__default.defineLocale('ms-my', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var locale_ms = moment__default.defineLocale('ms', {
months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
@@ -7436,11 +9277,11 @@
weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
longDateFormat : {
LT : 'HH.mm',
- LTS : 'LT.ss',
+ LTS : 'HH.mm.ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY [pukul] LT',
- LLLL : 'dddd, D MMMM YYYY [pukul] LT'
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
},
meridiemParse: /pagi|tengahari|petang|malam/,
meridiemHour: function (hour, meridiem) {
@@ -7495,9 +9336,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Burmese (my)
- //! author : Squar team, mysquar.com
var my__symbolMap = {
'1': '၁',
@@ -7523,7 +9361,7 @@
'၀': '0'
};
- var my = _moment__default.defineLocale('my', {
+ var my = moment__default.defineLocale('my', {
months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
@@ -7535,8 +9373,8 @@
LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
- LLL: 'D MMMM YYYY LT',
- LLLL: 'dddd D MMMM YYYY LT'
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
},
calendar: {
sameDay: '[ယနေ.] LT [မှာ]',
@@ -7577,24 +9415,22 @@
}
});
- //! moment.js locale configuration
- //! locale : norwegian bokmål (nb)
- //! authors : Espen Hovlandsdal : https://github.com/rexxars
- //! Sigurd Gartmann : https://github.com/sigurdga
- var nb = _moment__default.defineLocale('nb', {
+ var nb = moment__default.defineLocale('nb', {
months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
- monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
+ monthsParseExact : true,
weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
- weekdaysShort : 'søn_man_tirs_ons_tors_fre_lør'.split('_'),
+ weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
- LT : 'H.mm',
- LTS : 'LT.ss',
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY [kl.] LT',
- LLLL : 'dddd D. MMMM YYYY [kl.] LT'
+ LLL : 'D. MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
},
calendar : {
sameDay: '[i dag kl.] LT',
@@ -7606,7 +9442,7 @@
},
relativeTime : {
future : 'om %s',
- past : 'for %s siden',
+ past : '%s siden',
s : 'noen sekunder',
m : 'ett minutt',
mm : '%d minutter',
@@ -7627,9 +9463,6 @@
}
});
- //! moment.js locale configuration
- //! locale : nepali/nepalese
- //! author : suvash : https://github.com/suvash
var ne__symbolMap = {
'1': '१',
@@ -7656,19 +9489,21 @@
'०': '0'
};
- var ne = _moment__default.defineLocale('ne', {
+ var ne = moment__default.defineLocale('ne', {
months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
+ monthsParseExact : true,
weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
- weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split('_'),
+ weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'Aको h:mm बजे',
LTS : 'Aको h:mm:ss बजे',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, Aको h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
},
preparse: function (string) {
return string.replace(/[१२३४५६७८९०]/g, function (match) {
@@ -7680,39 +9515,37 @@
return ne__symbolMap[match];
});
},
- meridiemParse: /राती|बिहान|दिउँसो|बेलुका|साँझ|राती/,
+ meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
meridiemHour : function (hour, meridiem) {
if (hour === 12) {
hour = 0;
}
- if (meridiem === 'राती') {
- return hour < 3 ? hour : hour + 12;
+ if (meridiem === 'राति') {
+ return hour < 4 ? hour : hour + 12;
} else if (meridiem === 'बिहान') {
return hour;
} else if (meridiem === 'दिउँसो') {
return hour >= 10 ? hour : hour + 12;
- } else if (meridiem === 'बेलुका' || meridiem === 'साँझ') {
+ } else if (meridiem === 'साँझ') {
return hour + 12;
}
},
meridiem : function (hour, minute, isLower) {
if (hour < 3) {
- return 'राती';
- } else if (hour < 10) {
+ return 'राति';
+ } else if (hour < 12) {
return 'बिहान';
- } else if (hour < 15) {
+ } else if (hour < 16) {
return 'दिउँसो';
- } else if (hour < 18) {
- return 'बेलुका';
} else if (hour < 20) {
return 'साँझ';
} else {
- return 'राती';
+ return 'राति';
}
},
calendar : {
sameDay : '[आज] LT',
- nextDay : '[भोली] LT',
+ nextDay : '[भोलि] LT',
nextWeek : '[आउँदो] dddd[,] LT',
lastDay : '[हिजो] LT',
lastWeek : '[गएको] dddd[,] LT',
@@ -7720,8 +9553,8 @@
},
relativeTime : {
future : '%sमा',
- past : '%s अगाडी',
- s : 'केही समय',
+ past : '%s अगाडि',
+ s : 'केही क्षण',
m : 'एक मिनेट',
mm : '%d मिनेट',
h : 'एक घण्टा',
@@ -7734,19 +9567,19 @@
yy : '%d बर्ष'
},
week : {
- dow : 1, // Monday is the first day of the week.
- doy : 7 // The week that contains Jan 1st is the first week of the year.
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
}
});
- //! moment.js locale configuration
- //! locale : dutch (nl)
- //! author : Joris Röling : https://github.com/jjupiter
var nl__monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
nl__monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
- var nl = _moment__default.defineLocale('nl', {
+ var nl__monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+ var nl__monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+ var nl = moment__default.defineLocale('nl', {
months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
monthsShort : function (m, format) {
if (/-MMM-/.test(format)) {
@@ -7755,16 +9588,27 @@
return nl__monthsShortWithDots[m.month()];
}
},
+
+ monthsRegex: nl__monthsRegex,
+ monthsShortRegex: nl__monthsRegex,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : nl__monthsParse,
+ longMonthsParse : nl__monthsParse,
+ shortMonthsParse : nl__monthsParse,
+
weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD-MM-YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[vandaag om] LT',
@@ -7799,11 +9643,8 @@
}
});
- //! moment.js locale configuration
- //! locale : norwegian nynorsk (nn)
- //! author : https://github.com/mechuwind
- var nn = _moment__default.defineLocale('nn', {
+ var nn = moment__default.defineLocale('nn', {
months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
@@ -7811,11 +9652,11 @@
weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
- LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
},
calendar : {
sameDay: '[I dag klokka] LT',
@@ -7827,7 +9668,7 @@
},
relativeTime : {
future : 'om %s',
- past : 'for %s sidan',
+ past : '%s sidan',
s : 'nokre sekund',
m : 'eit minutt',
mm : '%d minutt',
@@ -7848,9 +9689,116 @@
}
});
- //! moment.js locale configuration
- //! locale : polish (pl)
- //! author : Rafal Hirsz : https://github.com/evoL
+
+ var pa_in__symbolMap = {
+ '1': '੧',
+ '2': '੨',
+ '3': '੩',
+ '4': '੪',
+ '5': '੫',
+ '6': '੬',
+ '7': '੭',
+ '8': '੮',
+ '9': '੯',
+ '0': '੦'
+ },
+ pa_in__numberMap = {
+ '੧': '1',
+ '੨': '2',
+ '੩': '3',
+ '੪': '4',
+ '੫': '5',
+ '੬': '6',
+ '੭': '7',
+ '੮': '8',
+ '੯': '9',
+ '੦': '0'
+ };
+
+ var pa_in = moment__default.defineLocale('pa-in', {
+ // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
+ months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
+ weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm ਵਜੇ',
+ LTS : 'A h:mm:ss ਵਜੇ',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
+ LLLL : 'dddd, D MMMM YYYY, A h: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 ਸਾਲ'
+ },
+ preparse: function (string) {
+ return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
+ return pa_in__numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return pa_in__symbolMap[match];
+ });
+ },
+ // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+ meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ਰਾਤ') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ਸਵੇਰ') {
+ return hour;
+ } else if (meridiem === 'ਦੁਪਹਿਰ') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'ਸ਼ਾਮ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ਰਾਤ';
+ } else if (hour < 10) {
+ return 'ਸਵੇਰ';
+ } else if (hour < 17) {
+ return 'ਦੁਪਹਿਰ';
+ } else if (hour < 20) {
+ return 'ਸ਼ਾਮ';
+ } else {
+ return 'ਰਾਤ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
@@ -7860,22 +9808,22 @@
function pl__translate(number, withoutSuffix, key) {
var result = number + ' ';
switch (key) {
- case 'm':
- return withoutSuffix ? 'minuta' : 'minutę';
- case 'mm':
- return result + (pl__plural(number) ? 'minuty' : 'minut');
- case 'h':
- return withoutSuffix ? 'godzina' : 'godzinę';
- case 'hh':
- return result + (pl__plural(number) ? 'godziny' : 'godzin');
- case 'MM':
- return result + (pl__plural(number) ? 'miesiące' : 'miesięcy');
- case 'yy':
- return result + (pl__plural(number) ? 'lata' : 'lat');
- }
- }
-
- var pl = _moment__default.defineLocale('pl', {
+ case 'm':
+ return withoutSuffix ? 'minuta' : 'minutę';
+ case 'mm':
+ return result + (pl__plural(number) ? 'minuty' : 'minut');
+ case 'h':
+ return withoutSuffix ? 'godzina' : 'godzinę';
+ case 'hh':
+ return result + (pl__plural(number) ? 'godziny' : 'godzin');
+ case 'MM':
+ return result + (pl__plural(number) ? 'miesiące' : 'miesięcy');
+ case 'yy':
+ return result + (pl__plural(number) ? 'lata' : 'lat');
+ }
+ }
+
+ var pl = moment__default.defineLocale('pl', {
months : function (momentToFormat, format) {
if (format === '') {
// Hack: if format empty we know this is used to generate
@@ -7891,14 +9839,14 @@
monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
weekdaysShort : 'nie_pon_wt_śr_czw_pt_sb'.split('_'),
- weekdaysMin : 'N_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+ weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[Dziś o] LT',
@@ -7907,14 +9855,14 @@
lastDay: '[Wczoraj o] LT',
lastWeek: function () {
switch (this.day()) {
- case 0:
- return '[W zeszłą niedzielę o] LT';
- case 3:
- return '[W zeszłą środę o] LT';
- case 6:
- return '[W zeszłą sobotę o] LT';
- default:
- return '[W zeszły] dddd [o] LT';
+ case 0:
+ return '[W zeszłą niedzielę o] LT';
+ case 3:
+ return '[W zeszłą środę o] LT';
+ case 6:
+ return '[W zeszłą sobotę o] LT';
+ default:
+ return '[W zeszły] dddd [o] LT';
}
},
sameElse: 'L'
@@ -7942,23 +9890,21 @@
}
});
- //! moment.js locale configuration
- //! locale : brazilian portuguese (pt-br)
- //! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
- var pt_br = _moment__default.defineLocale('pt-br', {
+ var pt_br = moment__default.defineLocale('pt-br', {
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
- weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
+ weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
- LLL : 'D [de] MMMM [de] YYYY [às] LT',
- LLLL : 'dddd, D [de] MMMM [de] YYYY [às] LT'
+ LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
},
calendar : {
sameDay: '[Hoje às] LT',
@@ -7975,7 +9921,7 @@
relativeTime : {
future : 'em %s',
past : '%s atrás',
- s : 'segundos',
+ s : 'poucos segundos',
m : 'um minuto',
mm : '%d minutos',
h : 'uma hora',
@@ -7991,23 +9937,21 @@
ordinal : '%dº'
});
- //! moment.js locale configuration
- //! locale : portuguese (pt)
- //! author : Jefferson : https://github.com/jalex79
- var pt = _moment__default.defineLocale('pt', {
+ var pt = moment__default.defineLocale('pt', {
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
- LLL : 'D [de] MMMM [de] YYYY LT',
- LLLL : 'dddd, D [de] MMMM [de] YYYY LT'
+ LLL : 'D [de] MMMM [de] YYYY HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
},
calendar : {
sameDay: '[Hoje às] LT',
@@ -8044,10 +9988,6 @@
}
});
- //! moment.js locale configuration
- //! locale : romanian (ro)
- //! author : Vlad Gurdiga : https://github.com/gurdiga
- //! author : Valentin Agachi : https://github.com/avaly
function ro__relativeTimeWithPlural(number, withoutSuffix, key) {
var format = {
@@ -8064,15 +10004,16 @@
return number + separator + format[key];
}
- var ro = _moment__default.defineLocale('ro', {
+ var ro = moment__default.defineLocale('ro', {
months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
+ monthsParseExact: true,
weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY H:mm',
@@ -8107,10 +10048,6 @@
}
});
- //! moment.js locale configuration
- //! locale : russian (ru)
- //! author : Viktorminator : https://github.com/Viktorminator
- //! Author : Menelion Elensúle : https://github.com/Oire
function ru__plural(word, num) {
var forms = word.split('_');
@@ -8131,72 +10068,90 @@
return number + ' ' + ru__plural(format[key], +number);
}
}
- function ru__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
- 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')
+ var ru__monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
+
+ // http://new.gramota.ru/spravka/rules/139-prop : § 103
+ // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+ // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+ var ru = moment__default.defineLocale('ru', {
+ months : {
+ format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
+ standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
},
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function ru__monthsShortCaseReplace(m, format) {
- var monthsShort = {
- 'nominative': 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
- 'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')
+ monthsShort : {
+ // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
+ format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
+ standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
},
- nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return monthsShort[nounCase][m.month()];
- }
- function ru__weekdaysCaseReplace(m, format) {
- var weekdays = {
- 'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
- 'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_')
+ weekdays : {
+ standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
+ format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
},
- nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/).test(format) ?
- 'accusative' :
- 'nominative';
- return weekdays[nounCase][m.day()];
- }
-
- var ru = _moment__default.defineLocale('ru', {
- months : ru__monthsCaseReplace,
- monthsShort : ru__monthsShortCaseReplace,
- weekdays : ru__weekdaysCaseReplace,
weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
- monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i],
+ monthsParse : ru__monthsParse,
+ longMonthsParse : ru__monthsParse,
+ shortMonthsParse : ru__monthsParse,
+
+ // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+ monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // копия предыдущего
+ monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // полные названия с падежами
+ monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+
+ // Выражение, которое соотвествует только сокращённым формам
+ monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY г.',
- LLL : 'D MMMM YYYY г., LT',
- LLLL : 'dddd, D MMMM YYYY г., LT'
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
},
calendar : {
sameDay: '[Сегодня в] LT',
nextDay: '[Завтра в] LT',
lastDay: '[Вчера в] LT',
- nextWeek: function () {
- return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
+ nextWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В следующее] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В следующий] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В следующую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
},
lastWeek: function (now) {
if (now.week() !== this.week()) {
switch (this.day()) {
- case 0:
- return '[В прошлое] dddd [в] LT';
- case 1:
- case 2:
- case 4:
- return '[В прошлый] dddd [в] LT';
- case 3:
- case 5:
- case 6:
- return '[В прошлую] dddd [в] LT';
+ case 0:
+ return '[В прошлое] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В прошлый] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В прошлую] dddd [в] LT';
}
} else {
if (this.day() === 2) {
@@ -8241,17 +10196,17 @@
ordinalParse: /\d{1,2}-(й|го|я)/,
ordinal: function (number, period) {
switch (period) {
- case 'M':
- case 'd':
- case 'DDD':
- return number + '-й';
- case 'D':
- return number + '-го';
- case 'w':
- case 'W':
- return number + '-я';
- default:
- return number;
+ case 'M':
+ case 'd':
+ case 'DDD':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ case 'w':
+ case 'W':
+ return number + '-я';
+ default:
+ return number;
}
},
week : {
@@ -8260,23 +10215,69 @@
}
});
- //! moment.js locale configuration
- //! locale : Sinhalese (si)
- //! author : Sampath Sitinamaluwa : https://github.com/sampathsris
- var si = _moment__default.defineLocale('si', {
+
+ var se = moment__default.defineLocale('se', {
+ months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
+ monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
+ weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
+ weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
+ weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'MMMM D. [b.] YYYY',
+ LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
+ LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[otne ti] LT',
+ nextDay: '[ihttin ti] LT',
+ nextWeek: 'dddd [ti] LT',
+ lastDay: '[ikte ti] LT',
+ lastWeek: '[ovddit] dddd [ti] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s geažes',
+ past : 'maŋit %s',
+ s : 'moadde sekunddat',
+ m : 'okta minuhta',
+ mm : '%d minuhtat',
+ h : 'okta diimmu',
+ hh : '%d diimmut',
+ d : 'okta beaivi',
+ dd : '%d beaivvit',
+ M : 'okta mánnu',
+ MM : '%d mánut',
+ y : 'okta jahki',
+ yy : '%d jagit'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ /*jshint -W100*/
+ var si = moment__default.defineLocale('si', {
months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'a h:mm',
LTS : 'a h:mm:ss',
L : 'YYYY/MM/DD',
LL : 'YYYY MMMM D',
- LLL : 'YYYY MMMM D, LT',
- LLLL : 'YYYY MMMM D [වැනි] dddd, LTS'
+ LLL : 'YYYY MMMM D, a h:mm',
+ LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
},
calendar : {
sameDay : '[අද] LT[ට]',
@@ -8305,6 +10306,10 @@
ordinal : function (number) {
return number + ' වැනි';
},
+ meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
+ isPM : function (input) {
+ return input === 'ප.ව.' || input === 'පස් වරු';
+ },
meridiem : function (hours, minutes, isLower) {
if (hours > 11) {
return isLower ? 'ප.ව.' : 'පස් වරු';
@@ -8314,10 +10319,6 @@
}
});
- //! moment.js locale configuration
- //! locale : slovak (sk)
- //! author : Martin Minka : https://github.com/k2s
- //! based on work of petrbela : https://github.com/petrbela
var sk__months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
sk__monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
@@ -8327,113 +10328,105 @@
function sk__translate(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
- case 's': // a few seconds / in a few seconds / a few seconds ago
- return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
- case 'm': // a minute / in a minute / a minute ago
- return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
- case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'minúty' : 'minút');
- } else {
- return result + 'minútami';
- }
- break;
- case 'h': // an hour / in an hour / an hour ago
- return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
- case 'hh': // 9 hours / in 9 hours / 9 hours ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'hodiny' : 'hodín');
- } else {
- return result + 'hodinami';
- }
- break;
- case 'd': // a day / in a day / a day ago
- return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
- case 'dd': // 9 days / in 9 days / 9 days ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'dni' : 'dní');
- } else {
- return result + 'dňami';
- }
- break;
- case 'M': // a month / in a month / a month ago
- return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
- case 'MM': // 9 months / in 9 months / 9 months ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'mesiace' : 'mesiacov');
- } else {
- return result + 'mesiacmi';
- }
- break;
- case 'y': // a year / in a year / a year ago
- return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
- case 'yy': // 9 years / in 9 years / 9 years ago
- if (withoutSuffix || isFuture) {
- return result + (sk__plural(number) ? 'roky' : 'rokov');
- } else {
- return result + 'rokmi';
- }
- break;
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'minúty' : 'minút');
+ } else {
+ return result + 'minútami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'hodiny' : 'hodín');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'dni' : 'dní');
+ } else {
+ return result + 'dňami';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'mesiace' : 'mesiacov');
+ } else {
+ return result + 'mesiacmi';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (sk__plural(number) ? 'roky' : 'rokov');
+ } else {
+ return result + 'rokmi';
+ }
+ break;
}
}
- var sk = _moment__default.defineLocale('sk', {
+ var sk = moment__default.defineLocale('sk', {
months : sk__months,
monthsShort : sk__monthsShort,
- monthsParse : (function (months, monthsShort) {
- var i, _monthsParse = [];
- for (i = 0; i < 12; i++) {
- // use custom parser to solve problem with July (červenec)
- _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
- }
- return _monthsParse;
- }(sk__months, sk__monthsShort)),
weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
longDateFormat : {
LT: 'H:mm',
- LTS : 'LT:ss',
+ LTS : 'H:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm'
},
calendar : {
sameDay: '[dnes o] LT',
nextDay: '[zajtra o] LT',
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[v nedeľu o] LT';
- case 1:
- case 2:
- return '[v] dddd [o] LT';
- case 3:
- return '[v stredu o] LT';
- case 4:
- return '[vo štvrtok o] LT';
- case 5:
- return '[v piatok o] LT';
- case 6:
- return '[v sobotu o] LT';
+ case 0:
+ return '[v nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [o] LT';
+ case 3:
+ return '[v stredu o] LT';
+ case 4:
+ return '[vo štvrtok o] LT';
+ case 5:
+ return '[v piatok o] LT';
+ case 6:
+ return '[v sobotu o] LT';
}
},
lastDay: '[včera o] LT',
lastWeek: function () {
switch (this.day()) {
- case 0:
- return '[minulú nedeľu o] LT';
- case 1:
- case 2:
- return '[minulý] dddd [o] LT';
- case 3:
- return '[minulú stredu o] LT';
- case 4:
- case 5:
- return '[minulý] dddd [o] LT';
- case 6:
- return '[minulú sobotu o] LT';
+ case 0:
+ return '[minulú nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[minulý] dddd [o] LT';
+ case 3:
+ return '[minulú stredu o] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [o] LT';
+ case 6:
+ return '[minulú sobotu o] LT';
}
},
sameElse: 'L'
@@ -8461,94 +10454,93 @@
}
});
- //! moment.js locale configuration
- //! locale : slovenian (sl)
- //! author : Robert Sedovšek : https://github.com/sedovsek
function sl__processRelativeTime(number, withoutSuffix, key, isFuture) {
var result = number + ' ';
switch (key) {
- case 's':
- return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
- case 'm':
- return withoutSuffix ? 'ena minuta' : 'eno minuto';
- case 'mm':
- if (number === 1) {
- result += withoutSuffix ? 'minuta' : 'minuto';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
- } else if (number < 5) {
- result += withoutSuffix || isFuture ? 'minute' : 'minutami';
- } else {
- result += withoutSuffix || isFuture ? 'minut' : 'minutami';
- }
- return result;
- case 'h':
- return withoutSuffix ? 'ena ura' : 'eno uro';
- case 'hh':
- if (number === 1) {
- result += withoutSuffix ? 'ura' : 'uro';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'uri' : 'urama';
- } else if (number < 5) {
- result += withoutSuffix || isFuture ? 'ure' : 'urami';
- } else {
- result += withoutSuffix || isFuture ? 'ur' : 'urami';
- }
- return result;
- case 'd':
- return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
- case 'dd':
- if (number === 1) {
- result += withoutSuffix || isFuture ? 'dan' : 'dnem';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
- } else {
- result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
- }
- return result;
- case 'M':
- return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
- case 'MM':
- if (number === 1) {
- result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
- } else if (number < 5) {
- result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
- } else {
- result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
- }
- return result;
- case 'y':
- return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
- case 'yy':
- if (number === 1) {
- result += withoutSuffix || isFuture ? 'leto' : 'letom';
- } else if (number === 2) {
- result += withoutSuffix || isFuture ? 'leti' : 'letoma';
- } else if (number < 5) {
- result += withoutSuffix || isFuture ? 'leta' : 'leti';
- } else {
- result += withoutSuffix || isFuture ? 'let' : 'leti';
- }
- return result;
+ case 's':
+ return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
+ case 'm':
+ return withoutSuffix ? 'ena minuta' : 'eno minuto';
+ case 'mm':
+ if (number === 1) {
+ result += withoutSuffix ? 'minuta' : 'minuto';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'minute' : 'minutami';
+ } else {
+ result += withoutSuffix || isFuture ? 'minut' : 'minutami';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'ena ura' : 'eno uro';
+ case 'hh':
+ if (number === 1) {
+ result += withoutSuffix ? 'ura' : 'uro';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'uri' : 'urama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'ure' : 'urami';
+ } else {
+ result += withoutSuffix || isFuture ? 'ur' : 'urami';
+ }
+ return result;
+ case 'd':
+ return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
+ case 'dd':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'dan' : 'dnem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
+ } else {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
+ }
+ return result;
+ case 'M':
+ return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
+ case 'MM':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
+ } else {
+ result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
+ }
+ return result;
+ case 'y':
+ return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
+ case 'yy':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'leto' : 'letom';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'leti' : 'letoma';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'leta' : 'leti';
+ } else {
+ result += withoutSuffix || isFuture ? 'let' : 'leti';
+ }
+ return result;
}
}
- var sl = _moment__default.defineLocale('sl', {
+ var sl = moment__default.defineLocale('sl', {
months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
LT : 'H:mm',
- LTS : 'LT:ss',
- L : 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
- LLL : 'D. MMMM YYYY LT',
- LLLL : 'dddd, D. MMMM YYYY LT'
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
},
calendar : {
sameDay : '[danes ob] LT',
@@ -8556,33 +10548,33 @@
nextWeek : function () {
switch (this.day()) {
- case 0:
- return '[v] [nedeljo] [ob] LT';
- case 3:
- return '[v] [sredo] [ob] LT';
- case 6:
- return '[v] [soboto] [ob] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[v] dddd [ob] LT';
+ case 0:
+ return '[v] [nedeljo] [ob] LT';
+ case 3:
+ return '[v] [sredo] [ob] LT';
+ case 6:
+ return '[v] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[v] dddd [ob] LT';
}
},
lastDay : '[včeraj ob] LT',
lastWeek : function () {
switch (this.day()) {
- case 0:
- return '[prejšnjo] [nedeljo] [ob] LT';
- case 3:
- return '[prejšnjo] [sredo] [ob] LT';
- case 6:
- return '[prejšnjo] [soboto] [ob] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[prejšnji] dddd [ob] LT';
+ case 0:
+ return '[prejšnjo] [nedeljo] [ob] LT';
+ case 3:
+ return '[prejšnjo] [sredo] [ob] LT';
+ case 6:
+ return '[prejšnjo] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prejšnji] dddd [ob] LT';
}
},
sameElse : 'L'
@@ -8610,18 +10602,14 @@
}
});
- //! moment.js locale configuration
- //! locale : Albanian (sq)
- //! author : Flakërim Ismani : https://github.com/flakerimi
- //! author: Menelion Elensúle: https://github.com/Oire (tests)
- //! author : Oerd Cukalla : https://github.com/oerd (fixes)
- var sq = _moment__default.defineLocale('sq', {
+ var sq = moment__default.defineLocale('sq', {
months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
+ weekdaysParseExact : true,
meridiemParse: /PD|MD/,
isPM: function (input) {
return input.charAt(0) === 'M';
@@ -8631,11 +10619,11 @@
},
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[Sot në] LT',
@@ -8668,9 +10656,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Serbian-cyrillic (sr-cyrl)
- //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
var sr_cyrl__translator = {
words: { //Different grammatical cases
@@ -8695,36 +10680,38 @@
}
};
- var sr_cyrl = _moment__default.defineLocale('sr-cyrl', {
- months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],
- monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],
- weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],
- weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],
- weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
+ var sr_cyrl = moment__default.defineLocale('sr-cyrl', {
+ months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
+ monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+ weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+ weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'H:mm',
- LTS : 'LT:ss',
- L: 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
- LLL: 'D. MMMM YYYY LT',
- LLLL: 'dddd, D. MMMM YYYY LT'
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
},
calendar: {
sameDay: '[данас у] LT',
nextDay: '[сутра у] LT',
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[у] [недељу] [у] LT';
- case 3:
- return '[у] [среду] [у] LT';
- case 6:
- return '[у] [суботу] [у] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[у] dddd [у] LT';
+ case 0:
+ return '[у] [недељу] [у] LT';
+ case 3:
+ return '[у] [среду] [у] LT';
+ case 6:
+ return '[у] [суботу] [у] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[у] dddd [у] LT';
}
},
lastDay : '[јуче у] LT',
@@ -8765,9 +10752,6 @@
}
});
- //! moment.js locale configuration
- //! locale : Serbian-latin (sr)
- //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
var sr__translator = {
words: { //Different grammatical cases
@@ -8792,36 +10776,38 @@
}
};
- var sr = _moment__default.defineLocale('sr', {
- months: ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],
- monthsShort: ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],
- weekdays: ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'],
- weekdaysShort: ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'],
- weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
+ var sr = moment__default.defineLocale('sr', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
longDateFormat: {
LT: 'H:mm',
- LTS : 'LT:ss',
- L: 'DD. MM. YYYY',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
- LLL: 'D. MMMM YYYY LT',
- LLLL: 'dddd, D. MMMM YYYY LT'
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
},
calendar: {
sameDay: '[danas u] LT',
nextDay: '[sutra u] LT',
nextWeek: function () {
switch (this.day()) {
- case 0:
- return '[u] [nedelju] [u] LT';
- case 3:
- return '[u] [sredu] [u] LT';
- case 6:
- return '[u] [subotu] [u] LT';
- case 1:
- case 2:
- case 4:
- case 5:
- return '[u] dddd [u] LT';
+ case 0:
+ return '[u] [nedelju] [u] LT';
+ case 3:
+ return '[u] [sredu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
}
},
lastDay : '[juče u] LT',
@@ -8862,11 +10848,83 @@
}
});
- //! moment.js locale configuration
- //! locale : swedish (sv)
- //! author : Jens Alm : https://github.com/ulmus
- var sv = _moment__default.defineLocale('sv', {
+
+ var ss = moment__default.defineLocale('ss', {
+ months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
+ monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
+ weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
+ weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
+ weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
+ weekdaysParseExact : true,
+ 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 : '[Namuhla nga] LT',
+ nextDay : '[Kusasa nga] LT',
+ nextWeek : 'dddd [nga] LT',
+ lastDay : '[Itolo nga] LT',
+ lastWeek : 'dddd [leliphelile] [nga] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'nga %s',
+ past : 'wenteka nga %s',
+ s : 'emizuzwana lomcane',
+ m : 'umzuzu',
+ mm : '%d emizuzu',
+ h : 'lihora',
+ hh : '%d emahora',
+ d : 'lilanga',
+ dd : '%d emalanga',
+ M : 'inyanga',
+ MM : '%d tinyanga',
+ y : 'umnyaka',
+ yy : '%d iminyaka'
+ },
+ meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'ekuseni';
+ } else if (hours < 15) {
+ return 'emini';
+ } else if (hours < 19) {
+ return 'entsambama';
+ } else {
+ return 'ebusuku';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ekuseni') {
+ return hour;
+ } else if (meridiem === 'emini') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
+ if (hour === 0) {
+ return 0;
+ }
+ return hour + 12;
+ }
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : '%d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var sv = moment__default.defineLocale('sv', {
months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
@@ -8874,11 +10932,13 @@
weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'YYYY-MM-DD',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd D MMM YYYY HH:mm'
},
calendar : {
sameDay: '[Idag] LT',
@@ -8918,11 +10978,77 @@
}
});
- //! moment.js locale configuration
- //! locale : tamil (ta)
- //! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
- var ta = _moment__default.defineLocale('ta', {
+ var sw = moment__default.defineLocale('sw', {
+ months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
+ weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
+ weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+ weekdaysParseExact : true,
+ 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'
+ },
+ calendar : {
+ sameDay : '[leo saa] LT',
+ nextDay : '[kesho saa] LT',
+ nextWeek : '[wiki ijayo] dddd [saat] LT',
+ lastDay : '[jana] LT',
+ lastWeek : '[wiki iliyopita] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s baadaye',
+ past : 'tokea %s',
+ s : 'hivi punde',
+ m : 'dakika moja',
+ mm : 'dakika %d',
+ h : 'saa limoja',
+ hh : 'masaa %d',
+ d : 'siku moja',
+ dd : 'masiku %d',
+ M : 'mwezi mmoja',
+ MM : 'miezi %d',
+ y : 'mwaka mmoja',
+ yy : 'miaka %d'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var ta__symbolMap = {
+ '1': '௧',
+ '2': '௨',
+ '3': '௩',
+ '4': '௪',
+ '5': '௫',
+ '6': '௬',
+ '7': '௭',
+ '8': '௮',
+ '9': '௯',
+ '0': '௦'
+ }, ta__numberMap = {
+ '௧': '1',
+ '௨': '2',
+ '௩': '3',
+ '௪': '4',
+ '௫': '5',
+ '௬': '6',
+ '௭': '7',
+ '௮': '8',
+ '௯': '9',
+ '௦': '0'
+ };
+
+ var ta = moment__default.defineLocale('ta', {
months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
@@ -8930,11 +11056,11 @@
weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY, LT',
- LLLL : 'dddd, D MMMM YYYY, LT'
+ LLL : 'D MMMM YYYY, HH:mm',
+ LLLL : 'dddd, D MMMM YYYY, HH:mm'
},
calendar : {
sameDay : '[இன்று] LT',
@@ -8963,6 +11089,16 @@
ordinal : function (number) {
return number + 'வது';
},
+ preparse: function (string) {
+ return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+ return ta__numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return ta__symbolMap[match];
+ });
+ },
// refer http://ta.wikipedia.org/s/1er1
meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
meridiem : function (hour, minute, isLower) {
@@ -9002,23 +11138,97 @@
}
});
- //! moment.js locale configuration
- //! locale : thai (th)
- //! author : Kridsada Thanabulpong : https://github.com/sirn
- var th = _moment__default.defineLocale('th', {
+ var te = moment__default.defineLocale('te', {
+ months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
+ monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
+ weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
+ weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h: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 సంవత్సరాలు'
+ },
+ ordinalParse : /\d{1,2}వ/,
+ ordinal : '%dవ',
+ meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'రాత్రి') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ఉదయం') {
+ return hour;
+ } else if (meridiem === 'మధ్యాహ్నం') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'సాయంత్రం') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'రాత్రి';
+ } else if (hour < 10) {
+ return 'ఉదయం';
+ } else if (hour < 17) {
+ return 'మధ్యాహ్నం';
+ } else if (hour < 20) {
+ return 'సాయంత్రం';
+ } else {
+ return 'రాత్రి';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+ });
+
+
+ var th = moment__default.defineLocale('th', {
months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
- monthsShort : 'มกรา_กุมภา_มีนา_เมษา_พฤษภา_มิถุนา_กรกฎา_สิงหา_กันยา_ตุลา_พฤศจิกา_ธันวา'.split('_'),
+ monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
+ monthsParseExact: true,
weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+ weekdaysParseExact : true,
longDateFormat : {
- LT : 'H นาฬิกา m นาที',
- LTS : 'LT s วินาที',
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
L : 'YYYY/MM/DD',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY เวลา LT',
- LLLL : 'วันddddที่ D MMMM YYYY เวลา LT'
+ LLL : 'D MMMM YYYY เวลา H:mm',
+ LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
},
meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
isPM: function (input) {
@@ -9056,11 +11266,8 @@
}
});
- //! moment.js locale configuration
- //! locale : Tagalog/Filipino (tl-ph)
- //! author : Dan Hagman
- var tl_ph = _moment__default.defineLocale('tl-ph', {
+ var tl_ph = moment__default.defineLocale('tl-ph', {
months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
@@ -9068,11 +11275,11 @@
weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'MM/D/YYYY',
LL : 'MMMM D, YYYY',
- LLL : 'MMMM D, YYYY LT',
- LLLL : 'dddd, MMMM DD, YYYY LT'
+ LLL : 'MMMM D, YYYY HH:mm',
+ LLLL : 'dddd, MMMM DD, YYYY HH:mm'
},
calendar : {
sameDay: '[Ngayon sa] LT',
@@ -9107,10 +11314,112 @@
}
});
- //! moment.js locale configuration
- //! locale : turkish (tr)
- //! authors : Erhan Gundogan : https://github.com/erhangundogan,
- //! Burak Yiğit Kaya: https://github.com/BYK
+
+ var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
+
+ function translateFuture(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'leS' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'waQ' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'nem' :
+ time + ' pIq';
+ return time;
+ }
+
+ function translatePast(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'Hu’' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'wen' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'ben' :
+ time + ' ret';
+ return time;
+ }
+
+ function tlh__translate(number, withoutSuffix, string, isFuture) {
+ var numberNoun = numberAsNoun(number);
+ switch (string) {
+ case 'mm':
+ return numberNoun + ' tup';
+ case 'hh':
+ return numberNoun + ' rep';
+ case 'dd':
+ return numberNoun + ' jaj';
+ case 'MM':
+ return numberNoun + ' jar';
+ case 'yy':
+ return numberNoun + ' DIS';
+ }
+ }
+
+ function numberAsNoun(number) {
+ var hundred = Math.floor((number % 1000) / 100),
+ ten = Math.floor((number % 100) / 10),
+ one = number % 10,
+ word = '';
+ if (hundred > 0) {
+ word += numbersNouns[hundred] + 'vatlh';
+ }
+ if (ten > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
+ }
+ if (one > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[one];
+ }
+ return (word === '') ? 'pagh' : word;
+ }
+
+ var tlh = moment__default.defineLocale('tlh', {
+ months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
+ monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ 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'
+ },
+ calendar : {
+ sameDay: '[DaHjaj] LT',
+ nextDay: '[wa’leS] LT',
+ nextWeek: 'LLL',
+ lastDay: '[wa’Hu’] LT',
+ lastWeek: 'LLL',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : translateFuture,
+ past : translatePast,
+ s : 'puS lup',
+ m : 'wa’ tup',
+ mm : tlh__translate,
+ h : 'wa’ rep',
+ hh : tlh__translate,
+ d : 'wa’ jaj',
+ dd : tlh__translate,
+ M : 'wa’ jar',
+ MM : tlh__translate,
+ y : 'wa’ DIS',
+ yy : tlh__translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
var tr__suffixes = {
1: '\'inci',
@@ -9133,7 +11442,7 @@
90: '\'ıncı'
};
- var tr = _moment__default.defineLocale('tr', {
+ var tr = moment__default.defineLocale('tr', {
months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
@@ -9141,11 +11450,11 @@
weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd, D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
},
calendar : {
sameDay : '[bugün saat] LT',
@@ -9186,11 +11495,84 @@
}
});
- //! moment.js locale configuration
- //! locale : Morocco Central Atlas Tamaziɣt in Latin (tzm-latn)
- //! author : Abdel Said : https://github.com/abdelsaid
- var tzm_latn = _moment__default.defineLocale('tzm-latn', {
+ // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+ // This is currently too difficult (maybe even impossible) to add.
+ var tzl = moment__default.defineLocale('tzl', {
+ months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
+ weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
+ weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
+ weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM [dallas] YYYY',
+ LLL : 'D. MMMM [dallas] YYYY HH.mm',
+ LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
+ },
+ meridiemParse: /d\'o|d\'a/i,
+ isPM : function (input) {
+ return 'd\'o' === input.toLowerCase();
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'd\'o' : 'D\'O';
+ } else {
+ return isLower ? 'd\'a' : 'D\'A';
+ }
+ },
+ calendar : {
+ sameDay : '[oxhi à] LT',
+ nextDay : '[demà à] LT',
+ nextWeek : 'dddd [à] LT',
+ lastDay : '[ieiri à] LT',
+ lastWeek : '[sür el] dddd [lasteu à] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'osprei %s',
+ past : 'ja%s',
+ s : tzl__processRelativeTime,
+ m : tzl__processRelativeTime,
+ mm : tzl__processRelativeTime,
+ h : tzl__processRelativeTime,
+ hh : tzl__processRelativeTime,
+ d : tzl__processRelativeTime,
+ dd : tzl__processRelativeTime,
+ M : tzl__processRelativeTime,
+ MM : tzl__processRelativeTime,
+ y : tzl__processRelativeTime,
+ yy : tzl__processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+ function tzl__processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's': ['viensas secunds', '\'iensas secunds'],
+ 'm': ['\'n míut', '\'iens míut'],
+ 'mm': [number + ' míuts', '' + number + ' míuts'],
+ 'h': ['\'n þora', '\'iensa þora'],
+ 'hh': [number + ' þoras', '' + number + ' þoras'],
+ 'd': ['\'n ziua', '\'iensa ziua'],
+ 'dd': [number + ' ziuas', '' + number + ' ziuas'],
+ 'M': ['\'n mes', '\'iens mes'],
+ 'MM': [number + ' mesen', '' + number + ' mesen'],
+ 'y': ['\'n ar', '\'iens ar'],
+ 'yy': [number + ' ars', '' + number + ' ars']
+ };
+ return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
+ }
+
+
+ var tzm_latn = moment__default.defineLocale('tzm-latn', {
months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
@@ -9198,11 +11580,11 @@
weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[asdkh g] LT',
@@ -9233,11 +11615,8 @@
}
});
- //! moment.js locale configuration
- //! locale : Morocco Central Atlas Tamaziɣt (tzm)
- //! author : Abdel Said : https://github.com/abdelsaid
- var tzm = _moment__default.defineLocale('tzm', {
+ var tzm = moment__default.defineLocale('tzm', {
months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
@@ -9245,11 +11624,11 @@
weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS: 'LT:ss',
+ LTS: 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'dddd D MMMM YYYY LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
},
calendar : {
sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
@@ -9280,10 +11659,6 @@
}
});
- //! moment.js locale configuration
- //! locale : ukrainian (uk)
- //! author : zemlanin : https://github.com/zemlanin
- //! Author : Menelion Elensúle : https://github.com/Oire
function uk__plural(word, num) {
var forms = word.split('_');
@@ -9291,8 +11666,8 @@
}
function uk__relativeTimeWithPlural(number, withoutSuffix, key) {
var format = {
- 'mm': 'хвилина_хвилини_хвилин',
- 'hh': 'година_години_годин',
+ 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
+ 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
'dd': 'день_дні_днів',
'MM': 'місяць_місяці_місяців',
'yy': 'рік_роки_років'
@@ -9307,17 +11682,7 @@
return number + ' ' + uk__plural(format[key], +number);
}
}
- function uk__monthsCaseReplace(m, format) {
- var months = {
- 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'),
- 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')
- },
- nounCase = (/D[oD]? *MMMM?/).test(format) ?
- 'accusative' :
- 'nominative';
- return months[nounCase][m.month()];
- }
- function uk__weekdaysCaseReplace(m, format) {
+ function weekdaysCaseReplace(m, format) {
var weekdays = {
'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
@@ -9336,19 +11701,22 @@
};
}
- var uk = _moment__default.defineLocale('uk', {
- months : uk__monthsCaseReplace,
+ var uk = moment__default.defineLocale('uk', {
+ months : {
+ 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
+ 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
+ },
monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
- weekdays : uk__weekdaysCaseReplace,
+ weekdays : weekdaysCaseReplace,
weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY р.',
- LLL : 'D MMMM YYYY р., LT',
- LLLL : 'dddd, D MMMM YYYY р., LT'
+ LLL : 'D MMMM YYYY р., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY р., HH:mm'
},
calendar : {
sameDay: processHoursFunction('[Сьогодні '),
@@ -9357,15 +11725,15 @@
nextWeek: processHoursFunction('[У] dddd ['),
lastWeek: function () {
switch (this.day()) {
- case 0:
- case 3:
- case 5:
- case 6:
- return processHoursFunction('[Минулої] dddd [').call(this);
- case 1:
- case 2:
- case 4:
- return processHoursFunction('[Минулого] dddd [').call(this);
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return processHoursFunction('[Минулої] dddd [').call(this);
+ case 1:
+ case 2:
+ case 4:
+ return processHoursFunction('[Минулого] dddd [').call(this);
}
},
sameElse: 'L'
@@ -9404,16 +11772,16 @@
ordinalParse: /\d{1,2}-(й|го)/,
ordinal: function (number, period) {
switch (period) {
- case 'M':
- case 'd':
- case 'DDD':
- case 'w':
- case 'W':
- return number + '-й';
- case 'D':
- return number + '-го';
- default:
- return number;
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ default:
+ return number;
}
},
week : {
@@ -9422,23 +11790,20 @@
}
});
- //! moment.js locale configuration
- //! locale : uzbek (uz)
- //! author : Sardor Muminov : https://github.com/muminoff
- var uz = _moment__default.defineLocale('uz', {
- months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ var uz = moment__default.defineLocale('uz', {
+ months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY LT',
- LLLL : 'D MMMM YYYY, dddd LT'
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'D MMMM YYYY, dddd HH:mm'
},
calendar : {
sameDay : '[Бугун соат] LT [да]',
@@ -9469,27 +11834,37 @@
}
});
- //! moment.js locale configuration
- //! locale : vietnamese (vi)
- //! author : Bang Nguyen : https://github.com/bangnk
- var vi = _moment__default.defineLocale('vi', {
+ var vi = moment__default.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 : true,
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 : true,
+ meridiemParse: /sa|ch/i,
+ isPM : function (input) {
+ return /^ch$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'sa' : 'SA';
+ } else {
+ return isLower ? 'ch' : 'CH';
+ }
+ },
longDateFormat : {
LT : 'HH:mm',
- LTS : 'LT:ss',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM [năm] YYYY',
- LLL : 'D MMMM [năm] YYYY LT',
- LLLL : 'dddd, D MMMM [năm] YYYY LT',
+ 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 LT',
- llll : 'ddd, D MMM YYYY LT'
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
},
calendar : {
sameDay: '[Hôm nay lúc] LT',
@@ -9524,12 +11899,62 @@
}
});
- //! moment.js locale configuration
- //! locale : chinese (zh-cn)
- //! author : suupic : https://github.com/suupic
- //! author : Zeno Zeng : https://github.com/zenozeng
- var zh_cn = _moment__default.defineLocale('zh-cn', {
+ var x_pseudo = moment__default.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 : true,
+ 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 : true,
+ 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'
+ },
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+ });
+
+
+ var zh_cn = moment__default.defineLocale('zh-cn', {
months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
@@ -9540,12 +11965,12 @@
LTS : 'Ah点m分s秒',
L : 'YYYY-MM-DD',
LL : 'YYYY年MMMD日',
- LLL : 'YYYY年MMMD日LT',
- LLLL : 'YYYY年MMMD日ddddLT',
+ LLL : 'YYYY年MMMD日Ah点mm分',
+ LLLL : 'YYYY年MMMD日ddddAh点mm分',
l : 'YYYY-MM-DD',
ll : 'YYYY年MMMD日',
- lll : 'YYYY年MMMD日LT',
- llll : 'YYYY年MMMD日ddddLT'
+ lll : 'YYYY年MMMD日Ah点mm分',
+ llll : 'YYYY年MMMD日ddddAh点mm分'
},
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
meridiemHour: function (hour, meridiem) {
@@ -9590,13 +12015,13 @@
},
nextWeek : function () {
var startOfWeek, prefix;
- startOfWeek = _moment__default().startOf('week');
- prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
+ startOfWeek = moment__default().startOf('week');
+ prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
},
lastWeek : function () {
var startOfWeek, prefix;
- startOfWeek = _moment__default().startOf('week');
+ startOfWeek = moment__default().startOf('week');
prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
},
@@ -9605,17 +12030,17 @@
ordinalParse: /\d{1,2}(日|月|周)/,
ordinal : function (number, period) {
switch (period) {
- case 'd':
- case 'D':
- case 'DDD':
- return number + '日';
- case 'M':
- return number + '月';
- case 'w':
- case 'W':
- return number + '周';
- default:
- return number;
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ case 'M':
+ return number + '月';
+ case 'w':
+ case 'W':
+ return number + '周';
+ default:
+ return number;
}
},
relativeTime : {
@@ -9640,11 +12065,8 @@
}
});
- //! moment.js locale configuration
- //! locale : traditional chinese (zh-tw)
- //! author : Ben : https://github.com/ben-lin
- var zh_tw = _moment__default.defineLocale('zh-tw', {
+ var zh_hk = moment__default.defineLocale('zh-hk', {
months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
@@ -9655,19 +12077,19 @@
LTS : 'Ah點m分s秒',
L : 'YYYY年MMMD日',
LL : 'YYYY年MMMD日',
- LLL : 'YYYY年MMMD日LT',
- LLLL : 'YYYY年MMMD日ddddLT',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
l : 'YYYY年MMMD日',
ll : 'YYYY年MMMD日',
- lll : 'YYYY年MMMD日LT',
- llll : 'YYYY年MMMD日ddddLT'
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
},
- meridiemParse: /早上|上午|中午|下午|晚上/,
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
meridiemHour : function (hour, meridiem) {
if (hour === 12) {
hour = 0;
}
- if (meridiem === '早上' || meridiem === '上午') {
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
return hour;
} else if (meridiem === '中午') {
return hour >= 11 ? hour : hour + 12;
@@ -9677,7 +12099,9 @@
},
meridiem : function (hour, minute, isLower) {
var hm = hour * 100 + minute;
- if (hm < 900) {
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
return '早上';
} else if (hm < 1130) {
return '上午';
@@ -9700,37 +12124,127 @@
ordinalParse: /\d{1,2}(日|月|週)/,
ordinal : function (number, period) {
switch (period) {
- case 'd' :
- case 'D' :
- case 'DDD' :
- return number + '日';
- case 'M' :
- return number + '月';
- case 'w' :
- case 'W' :
- return number + '週';
- default :
- return number;
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
}
},
relativeTime : {
future : '%s內',
past : '%s前',
s : '幾秒',
- m : '一分鐘',
- mm : '%d分鐘',
- h : '一小時',
- hh : '%d小時',
- d : '一天',
- dd : '%d天',
- M : '一個月',
- MM : '%d個月',
- y : '一年',
- yy : '%d年'
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+ });
+
+
+ var zh_tw = moment__default.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 : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ 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日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ 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 年'
}
});
- var moment_with_locales = _moment__default;
+ var moment_with_locales = moment__default;
+ moment_with_locales.locale('en');
return moment_with_locales;
diff --git a/l10n/.tx/config b/l10n/.tx/config
index 19eaa68390c..6f489f031d5 100644
--- a/l10n/.tx/config
+++ b/l10n/.tx/config
@@ -97,3 +97,9 @@ file_filter = <lang>/twofactor_backupcodes.po
source_file = templates/twofactor_backupcodes.pot
source_lang = en
type = PO
+
+[nextcloud.workflowengine]
+file_filter = <lang>/workflowengine.po
+source_file = templates/workflowengine.pot
+source_lang = en
+type = PO
diff --git a/lib/base.php b/lib/base.php
index b2e45595a3e..7d86245818d 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -520,6 +520,14 @@ class OC {
return;
}
+ // Chrome on Android has a bug that it doesn't sent cookies with the
+ // same-site attribute for the download manager. To work around that
+ // all same-site cookies get deleted and recreated directly. Awesome!
+ // FIXME: Remove once Chrome 54 is deployed to end-users
+ // @see https://github.com/nextcloud/server/pull/1454
+ if($request->isUserAgent([\OC\AppFramework\Http\Request::USER_AGENT_ANDROID_MOBILE_CHROME])) {
+ return;
+ }
if(count($_COOKIE) > 0) {
$requestUri = $request->getScriptName();
diff --git a/lib/l10n/el.js b/lib/l10n/el.js
index b05ad5b98fe..fe3634411b6 100644
--- a/lib/l10n/el.js
+++ b/lib/l10n/el.js
@@ -23,6 +23,7 @@ OC.L10N.register(
"yesterday" : "χτες",
"_%n day ago_::_%n days ago_" : ["%n ημέρα πριν","%n ημέρες πριν"],
"last month" : "τελευταίο μήνα",
+ "_%n month ago_::_%n months ago_" : ["πριν %n μήνα","πριν %n μήνες"],
"last year" : "τελευταίο χρόνο",
"_%n year ago_::_%n years ago_" : ["%n χρόνο πριν","%n χρόνια πριν"],
"seconds ago" : "δευτερόλεπτα πριν",
@@ -99,6 +100,7 @@ OC.L10N.register(
"A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
"A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
"The username is already being used" : "Το όνομα χρήστη είναι κατειλημμένο",
+ "Help" : "Βοήθεια",
"Personal" : "Προσωπικά",
"Users" : "Χρήστες",
"Admin" : "Διαχείριση",
@@ -125,6 +127,7 @@ OC.L10N.register(
"PHP setting \"%s\" is not set to \"%s\"." : "Η ρύθμιση \"%s\"της PHP δεν είναι ορισμένη σε \"%s\".",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "Το mbstring.func_overload έχει ορισθεί σε \"%s\" αντί για την αναμενόμενη τιμή \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Για να διορθώσετε αυτό το πρόβλημα ορίστε το <code>mbstring.func_overload</code> σε <code>0</code> στο αρχείο php.ini",
+ "To fix this issue update your libxml2 version and restart your web server." : "Για να διορθώσετε το σφάλμα ενημερώστε την έκδοση του libxml2 και επανεκκινήστε τον διακομιστή.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Η PHP φαίνεται να είναι ρυθμισμένη ώστε να αφαιρεί inline doc blocks. Αυτό θα καταστήσει πολλές βασικές εφαρμογές μη διαθέσιμες.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "Κάποιες μονάδες PHP έχουν εγκατασταθεί, αλλά είναι ακόμα καταγεγραμμένες ως απούσες;",
@@ -138,6 +141,7 @@ OC.L10N.register(
"Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.",
"Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".",
- "Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος"
+ "Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος",
+ "ownCloud %s or higher is required." : "Απαιτείται έκδοση nextcloud %s ή ψηλότερη."
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
index f3314f75867..1fb35d1ef05 100644
--- a/lib/l10n/el.json
+++ b/lib/l10n/el.json
@@ -21,6 +21,7 @@
"yesterday" : "χτες",
"_%n day ago_::_%n days ago_" : ["%n ημέρα πριν","%n ημέρες πριν"],
"last month" : "τελευταίο μήνα",
+ "_%n month ago_::_%n months ago_" : ["πριν %n μήνα","πριν %n μήνες"],
"last year" : "τελευταίο χρόνο",
"_%n year ago_::_%n years ago_" : ["%n χρόνο πριν","%n χρόνια πριν"],
"seconds ago" : "δευτερόλεπτα πριν",
@@ -97,6 +98,7 @@
"A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
"A valid password must be provided" : "Πρέπει να δοθεί έγκυρο συνθηματικό",
"The username is already being used" : "Το όνομα χρήστη είναι κατειλημμένο",
+ "Help" : "Βοήθεια",
"Personal" : "Προσωπικά",
"Users" : "Χρήστες",
"Admin" : "Διαχείριση",
@@ -123,6 +125,7 @@
"PHP setting \"%s\" is not set to \"%s\"." : "Η ρύθμιση \"%s\"της PHP δεν είναι ορισμένη σε \"%s\".",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "Το mbstring.func_overload έχει ορισθεί σε \"%s\" αντί για την αναμενόμενη τιμή \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Για να διορθώσετε αυτό το πρόβλημα ορίστε το <code>mbstring.func_overload</code> σε <code>0</code> στο αρχείο php.ini",
+ "To fix this issue update your libxml2 version and restart your web server." : "Για να διορθώσετε το σφάλμα ενημερώστε την έκδοση του libxml2 και επανεκκινήστε τον διακομιστή.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Η PHP φαίνεται να είναι ρυθμισμένη ώστε να αφαιρεί inline doc blocks. Αυτό θα καταστήσει πολλές βασικές εφαρμογές μη διαθέσιμες.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "Κάποιες μονάδες PHP έχουν εγκατασταθεί, αλλά είναι ακόμα καταγεγραμμένες ως απούσες;",
@@ -136,6 +139,7 @@
"Data directory (%s) is invalid" : "Ο κατάλογος δεδομένων (%s) είναι άκυρος",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Παρακαλώ ελέγξτε ότι ο κατάλογος δεδομένων περιέχει ένα αρχείο \".ocdata\" στη βάση του.",
"Could not obtain lock type %d on \"%s\"." : "Αδυναμία ανάκτησης τύπου κλειδιού %d στο \"%s\".",
- "Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος"
+ "Storage not available" : "Μη διαθέσιμος αποθηκευτικός χώρος",
+ "ownCloud %s or higher is required." : "Απαιτείται έκδοση nextcloud %s ή ψηλότερη."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js
index 4eeea52f279..48d1828ec28 100644
--- a/lib/l10n/fr.js
+++ b/lib/l10n/fr.js
@@ -55,6 +55,7 @@ OC.L10N.register(
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Paramètres serveur",
+ "Sharing" : "Partage",
"Encryption" : "Chiffrement",
"Logging" : "Connexion",
"Additional settings" : "Paramètres supplémentaires",
diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json
index b57c4f217fc..03d57754fc9 100644
--- a/lib/l10n/fr.json
+++ b/lib/l10n/fr.json
@@ -53,6 +53,7 @@
"APCu" : "APCu",
"Redis" : "Redis",
"Server settings" : "Paramètres serveur",
+ "Sharing" : "Partage",
"Encryption" : "Chiffrement",
"Logging" : "Connexion",
"Additional settings" : "Paramètres supplémentaires",
diff --git a/lib/l10n/hu_HU.js b/lib/l10n/hu_HU.js
index 8507fb179ef..79daf00e520 100644
--- a/lib/l10n/hu_HU.js
+++ b/lib/l10n/hu_HU.js
@@ -13,6 +13,8 @@ OC.L10N.register(
"Following databases are supported: %s" : "A következő adatbázisok támogatottak: %s",
"The command line tool %s could not be found" : "A parancssori eszköz nem található: %s",
"The library %s is not available." : "A könyvtár %s nem áll rendelkezésre.",
+ "Library %s with a version higher than %s is required - available version %s." : "%s könyvtár %s vagy újabb verziója szükséges - elérhető verzió: %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "%s könyvtár %s vagy régebbi verziója szükséges - elérhető verzió: %s.",
"Following platforms are supported: %s" : "Ezek a platformok támogatottak: %s",
"Server version %s or higher is required." : "%s vagy újabb szerver verzió szükséges.",
"Server version %s or lower is required." : "%s vagy régebbi szerver verzió szükséges.",
@@ -49,6 +51,9 @@ OC.L10N.register(
"App can't be installed because of not allowed code in the App" : "Az alkalmazást nem lehet telepíteni, mert abban nem engedélyezett programkód szerepel",
"App can't be installed because it is not compatible with this version of the server" : "Az alkalmazást nem lehet telepíteni, mert nem kompatibilis ezzel a szerver verzióval",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Az alkalmazást nem lehet telepíteni, mert tartalmazza a \n<shipped>\ntrue\n</shipped>\ncímkét, ami a nem szállított alkalmazások esetén nem engedélyezett",
+ "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml fájlban tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
"Server settings" : "Szerver beállítások",
"Sharing" : "Megosztás",
"Encryption" : "Titkosítás",
@@ -68,6 +73,7 @@ OC.L10N.register(
"PostgreSQL username and/or password not valid" : "A PostgreSQL felhasználói név és/vagy jelszó érvénytelen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
"For the best results, please consider using a GNU/Linux server instead." : "A legjobb eredmény érdekében érdemes GNU/Linux-alapú szervert használni.",
+ "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." : "Úgy tűnik, hogy ez a %s példány 32-bites PHP környezetben fut és az open_basedir konfigurálva van a php.ini fájlban. Ez 4 GB-nál nagyobb fájlok esetén problémákat okozhat így erősen ellenjavallt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Kérlek távolítsd el az open_basedir beállítást a php.ini-ből, vagy válts 64bit-es PHP-ra.",
"Set an admin username." : "Állítson be egy felhasználói nevet az adminisztrációhoz.",
"Set an admin password." : "Állítson be egy jelszót az adminisztrációhoz.",
@@ -103,17 +109,30 @@ OC.L10N.register(
"Sharing %s failed, because resharing is not allowed" : "%s megosztása nem sikerült, mert a megosztás továbbadása nincs engedélyezve",
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s megosztása nem sikerült, mert %s megosztási alrendszere nem találja",
"Sharing %s failed, because the file could not be found in the file cache" : "%s megosztása nem sikerült, mert a fájl nem található a gyorsítótárban",
+ "Cannot increase permissions of %s" : "%s jogosultságait nem lehet megemelni",
+ "Files can't be shared with delete permissions" : "A fájlokat nem lehet megosztani a törlési jogosultságokkal",
+ "Files can't be shared with create permissions" : "A fájlokat nem lehet megosztani a létrehozási jogosultságokkal",
+ "Expiration date is in the past" : "A lejárati dátum már elmúlt",
+ "Cannot set expiration date more than %s days in the future" : "%s napnál távolabbi lejárati dátumot nem lehet beállítani",
"Could not find category \"%s\"" : "Ez a kategória nem található: \"%s\"",
"Apps" : "Alkalmazások",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "A felhasználónévben csak a következő karakterek engedélyezettek: \"a-z\", \"A-Z\", \"0-9\", és \"_.@-'\"",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
+ "Username contains whitespace at the beginning or at the end" : "A felhasználónév szóközt tartalmaz az elején vagy a végén",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
"The username is already being used" : "Ez a bejelentkezési név már foglalt",
+ "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
+ "User disabled" : "Felhasználó letiltva",
"Help" : "Súgó",
"Personal" : "Személyes",
"Users" : "Felhasználók",
"Admin" : "Adminisztrátor",
"Recommended" : "Ajánlott",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "\"%s\" alkalmazás nem lehet telepíteni, mert az appinfo fájl nem olvasható.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" alkalmazás nem lehet telepíteni, mert nem kompatibilis a szerver jelen verziójával.",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" alkalmazás nem lehet telepíteni, mert a következő függőségek nincsenek kielégítve: %s",
"No app name specified" : "Nincs az alkalmazás név megadva.",
+ "App '%s' could not be installed!" : "\"%s\" alkalmazás nem lehet telepíthető!",
"a safe home for all your data" : "egy biztonságos hely az adataidnak",
"File is currently busy, please try again later" : "A fájl jelenleg elfoglalt, kérjük próbáld újra később!",
"Can't read file" : "Nem olvasható a fájl",
@@ -123,16 +142,24 @@ OC.L10N.register(
"Unknown user" : "Ismeretlen felhasználó",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Nincs telepítve adatbázis-meghajtóprogram (sqlite, mysql vagy postgresql).",
"Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben.",
"Cannot write into \"config\" directory" : "Nem írható a \"config\" könyvtár",
"Cannot write into \"apps\" directory" : "Nem írható az \"apps\" könyvtár",
"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek az app könyvtárra%s, vagy letiltjuk a config fájlban az appstore használatát.",
"Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">a webszervernek írási jogosultságot adsz a root könyvtárra</a>.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Az elérési problémák rendszerint megoldhatók azzal, ha a %swebszervernek írásjogot adunk a gyökérkönyvtárra%s.",
"Setting locale to %s failed" : "A lokalizáció %s-re való állítása nem sikerült",
"Please install one of these locales on your system and restart your webserver." : "Kérjük állítsa be a következő lokalizációk valamelyikét a rendszeren és indítsa újra a webszervert!",
"Please ask your server administrator to install the module." : "Kérje meg a rendszergazdát, hogy telepítse a modult!",
"PHP module %s not installed." : "A %s PHP modul nincs telepítve.",
"PHP setting \"%s\" is not set to \"%s\"." : "%s PHP beállítás nincs \"%s\"-re állítva.",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "A beállítás változtatása a php.ini fájlban újra futtatja a Nexcloud-ot",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload értéke: \"%s\" az elvárt \"0\" helyett",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "A probléma javításához állítsd a <code>mbstring.func_overload</code> értékét <code>0</code>-ra a php.ini fájlban.",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Legalább libxml2 2.7.0 szükséges. Jelenleg telepített: %s",
+ "To fix this issue update your libxml2 version and restart your web server." : "A probléma javításához frissítsd a libxml2 verziót és indítsd újra a webszervert.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.",
"PHP modules have been installed, but they are still listed as missing?" : "A PHP modulok telepítve vannak, de a listában mégsincsenek felsorolva?",
"Please ask your server administrator to restart the web server." : "Kérje meg a rendszergazdát, hogy indítsa újra a webszervert!",
@@ -141,9 +168,22 @@ OC.L10N.register(
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Kérjük módosítsa a könyvtár elérhetőségi engedélybeállítását 0770-re, hogy a tartalmát más felhasználó ne listázhassa!",
"Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ",
"Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie",
+ "Check the value of \"datadirectory\" in your configuration" : "Ellenőrizd a \"datadirectory\" értékét a konfigurációban",
"Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) ",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Kérjük ellenőrizze, hogy az adatkönyvtár tartalmaz a gyökerében egy \".ocdata\" nevű fájlt!",
"Could not obtain lock type %d on \"%s\"." : "Nem sikerült %d típusú zárolást elérni itt: \"%s\".",
- "Storage not available" : "A tároló elérhetetlen."
+ "Storage unauthorized. %s" : "A tároló jogosulatlan. %s",
+ "Storage incomplete configuration. %s" : "A tároló beállítása nem teljes. %s",
+ "Storage connection error. %s" : "Tároló kapcsolódási hiba. %s",
+ "Storage not available" : "A tároló elérhetetlen.",
+ "Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s",
+ "ownCloud %s or higher is required." : "ownCloud %s vagy újabb szükséges.",
+ "ownCloud %s or lower is required." : "ownCloud %s vagy régebbi szükséges.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "\"%s\" alkalmazás nem telepíthető, mert nem kompatibilis az Nextcloud ezen verziójával",
+ "App can't be installed because it is not compatible with this version of Nextcloud" : "Az alkalmazás nem telepíthető, mert nem kompatibilis az Nextcloud ezen verziójával",
+ "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml/version részben tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
+ "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: A következő SQL parancs segítségével manuálisan felgyorsíthatod a frissítést: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben. Linux csomagokat és könnyen üzembe helyezhető virtuális gép képfájlokat itt találhatsz: <a href=\"%s\">%s</a>. Létező telepítések Linux migrációjához tippeket és migrációs szkriptet a <a href=\"%s\">dokumentációban</a> találhatsz.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\">a webszervernek írási jogosultságot adsz a root könyvtárra</a>."
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/hu_HU.json b/lib/l10n/hu_HU.json
index b17ba4dbd89..8ea2db56d5f 100644
--- a/lib/l10n/hu_HU.json
+++ b/lib/l10n/hu_HU.json
@@ -11,6 +11,8 @@
"Following databases are supported: %s" : "A következő adatbázisok támogatottak: %s",
"The command line tool %s could not be found" : "A parancssori eszköz nem található: %s",
"The library %s is not available." : "A könyvtár %s nem áll rendelkezésre.",
+ "Library %s with a version higher than %s is required - available version %s." : "%s könyvtár %s vagy újabb verziója szükséges - elérhető verzió: %s.",
+ "Library %s with a version lower than %s is required - available version %s." : "%s könyvtár %s vagy régebbi verziója szükséges - elérhető verzió: %s.",
"Following platforms are supported: %s" : "Ezek a platformok támogatottak: %s",
"Server version %s or higher is required." : "%s vagy újabb szerver verzió szükséges.",
"Server version %s or lower is required." : "%s vagy régebbi szerver verzió szükséges.",
@@ -47,6 +49,9 @@
"App can't be installed because of not allowed code in the App" : "Az alkalmazást nem lehet telepíteni, mert abban nem engedélyezett programkód szerepel",
"App can't be installed because it is not compatible with this version of the server" : "Az alkalmazást nem lehet telepíteni, mert nem kompatibilis ezzel a szerver verzióval",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "Az alkalmazást nem lehet telepíteni, mert tartalmazza a \n<shipped>\ntrue\n</shipped>\ncímkét, ami a nem szállított alkalmazások esetén nem engedélyezett",
+ "App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml fájlban tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
"Server settings" : "Szerver beállítások",
"Sharing" : "Megosztás",
"Encryption" : "Titkosítás",
@@ -66,6 +71,7 @@
"PostgreSQL username and/or password not valid" : "A PostgreSQL felhasználói név és/vagy jelszó érvénytelen",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "A Mac OS X nem támogatott és %s nem lesz teljesen működőképes. Csak saját felelősségre használja!",
"For the best results, please consider using a GNU/Linux server instead." : "A legjobb eredmény érdekében érdemes GNU/Linux-alapú szervert használni.",
+ "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." : "Úgy tűnik, hogy ez a %s példány 32-bites PHP környezetben fut és az open_basedir konfigurálva van a php.ini fájlban. Ez 4 GB-nál nagyobb fájlok esetén problémákat okozhat így erősen ellenjavallt.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Kérlek távolítsd el az open_basedir beállítást a php.ini-ből, vagy válts 64bit-es PHP-ra.",
"Set an admin username." : "Állítson be egy felhasználói nevet az adminisztrációhoz.",
"Set an admin password." : "Állítson be egy jelszót az adminisztrációhoz.",
@@ -101,17 +107,30 @@
"Sharing %s failed, because resharing is not allowed" : "%s megosztása nem sikerült, mert a megosztás továbbadása nincs engedélyezve",
"Sharing %s failed, because the sharing backend for %s could not find its source" : "%s megosztása nem sikerült, mert %s megosztási alrendszere nem találja",
"Sharing %s failed, because the file could not be found in the file cache" : "%s megosztása nem sikerült, mert a fájl nem található a gyorsítótárban",
+ "Cannot increase permissions of %s" : "%s jogosultságait nem lehet megemelni",
+ "Files can't be shared with delete permissions" : "A fájlokat nem lehet megosztani a törlési jogosultságokkal",
+ "Files can't be shared with create permissions" : "A fájlokat nem lehet megosztani a létrehozási jogosultságokkal",
+ "Expiration date is in the past" : "A lejárati dátum már elmúlt",
+ "Cannot set expiration date more than %s days in the future" : "%s napnál távolabbi lejárati dátumot nem lehet beállítani",
"Could not find category \"%s\"" : "Ez a kategória nem található: \"%s\"",
"Apps" : "Alkalmazások",
+ "Only the following characters are allowed in a username: \"a-z\", \"A-Z\", \"0-9\", and \"_.@-'\"" : "A felhasználónévben csak a következő karakterek engedélyezettek: \"a-z\", \"A-Z\", \"0-9\", és \"_.@-'\"",
"A valid username must be provided" : "Érvényes felhasználónevet kell megadnia",
+ "Username contains whitespace at the beginning or at the end" : "A felhasználónév szóközt tartalmaz az elején vagy a végén",
"A valid password must be provided" : "Érvényes jelszót kell megadnia",
"The username is already being used" : "Ez a bejelentkezési név már foglalt",
+ "Login canceled by app" : "Bejelentkezés megszakítva az alkalmazás által",
+ "User disabled" : "Felhasználó letiltva",
"Help" : "Súgó",
"Personal" : "Személyes",
"Users" : "Felhasználók",
"Admin" : "Adminisztrátor",
"Recommended" : "Ajánlott",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "\"%s\" alkalmazás nem lehet telepíteni, mert az appinfo fájl nem olvasható.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "\"%s\" alkalmazás nem lehet telepíteni, mert nem kompatibilis a szerver jelen verziójával.",
+ "App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "\"%s\" alkalmazás nem lehet telepíteni, mert a következő függőségek nincsenek kielégítve: %s",
"No app name specified" : "Nincs az alkalmazás név megadva.",
+ "App '%s' could not be installed!" : "\"%s\" alkalmazás nem lehet telepíthető!",
"a safe home for all your data" : "egy biztonságos hely az adataidnak",
"File is currently busy, please try again later" : "A fájl jelenleg elfoglalt, kérjük próbáld újra később!",
"Can't read file" : "Nem olvasható a fájl",
@@ -121,16 +140,24 @@
"Unknown user" : "Ismeretlen felhasználó",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Nincs telepítve adatbázis-meghajtóprogram (sqlite, mysql vagy postgresql).",
"Microsoft Windows Platform is not supported" : "Microsoft Windows platform nem támogatott",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben.",
"Cannot write into \"config\" directory" : "Nem írható a \"config\" könyvtár",
"Cannot write into \"apps\" directory" : "Nem írható az \"apps\" könyvtár",
"This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Ez rendszerint úgy oldható meg, hogy %sírási jogot adunk a webszervernek az app könyvtárra%s, vagy letiltjuk a config fájlban az appstore használatát.",
"Cannot create \"data\" directory (%s)" : "Nem sikerült létrehozni a \"data\" könyvtárt (%s)",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">a webszervernek írási jogosultságot adsz a root könyvtárra</a>.",
"Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Az elérési problémák rendszerint megoldhatók azzal, ha a %swebszervernek írásjogot adunk a gyökérkönyvtárra%s.",
"Setting locale to %s failed" : "A lokalizáció %s-re való állítása nem sikerült",
"Please install one of these locales on your system and restart your webserver." : "Kérjük állítsa be a következő lokalizációk valamelyikét a rendszeren és indítsa újra a webszervert!",
"Please ask your server administrator to install the module." : "Kérje meg a rendszergazdát, hogy telepítse a modult!",
"PHP module %s not installed." : "A %s PHP modul nincs telepítve.",
"PHP setting \"%s\" is not set to \"%s\"." : "%s PHP beállítás nincs \"%s\"-re állítva.",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "A beállítás változtatása a php.ini fájlban újra futtatja a Nexcloud-ot",
+ "mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload értéke: \"%s\" az elvárt \"0\" helyett",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "A probléma javításához állítsd a <code>mbstring.func_overload</code> értékét <code>0</code>-ra a php.ini fájlban.",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Legalább libxml2 2.7.0 szükséges. Jelenleg telepített: %s",
+ "To fix this issue update your libxml2 version and restart your web server." : "A probléma javításához frissítsd a libxml2 verziót és indítsd újra a webszervert.",
+ "PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.",
"PHP modules have been installed, but they are still listed as missing?" : "A PHP modulok telepítve vannak, de a listában mégsincsenek felsorolva?",
"Please ask your server administrator to restart the web server." : "Kérje meg a rendszergazdát, hogy indítsa újra a webszervert!",
@@ -139,9 +166,22 @@
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Kérjük módosítsa a könyvtár elérhetőségi engedélybeállítását 0770-re, hogy a tartalmát más felhasználó ne listázhassa!",
"Data directory (%s) is readable by other users" : "Az adatkönyvtár (%s) más felhasználók számára is olvasható ",
"Data directory (%s) must be an absolute path" : "Az adatkönyvtárnak (%s) abszolút elérési útnak kell lennie",
+ "Check the value of \"datadirectory\" in your configuration" : "Ellenőrizd a \"datadirectory\" értékét a konfigurációban",
"Data directory (%s) is invalid" : "Érvénytelen a megadott adatkönyvtár (%s) ",
"Please check that the data directory contains a file \".ocdata\" in its root." : "Kérjük ellenőrizze, hogy az adatkönyvtár tartalmaz a gyökerében egy \".ocdata\" nevű fájlt!",
"Could not obtain lock type %d on \"%s\"." : "Nem sikerült %d típusú zárolást elérni itt: \"%s\".",
- "Storage not available" : "A tároló elérhetetlen."
+ "Storage unauthorized. %s" : "A tároló jogosulatlan. %s",
+ "Storage incomplete configuration. %s" : "A tároló beállítása nem teljes. %s",
+ "Storage connection error. %s" : "Tároló kapcsolódási hiba. %s",
+ "Storage not available" : "A tároló elérhetetlen.",
+ "Storage connection timeout. %s" : "Tároló kapcsolat időtúllépés. %s",
+ "ownCloud %s or higher is required." : "ownCloud %s vagy újabb szükséges.",
+ "ownCloud %s or lower is required." : "ownCloud %s vagy régebbi szükséges.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "\"%s\" alkalmazás nem telepíthető, mert nem kompatibilis az Nextcloud ezen verziójával",
+ "App can't be installed because it is not compatible with this version of Nextcloud" : "Az alkalmazás nem telepíthető, mert nem kompatibilis az Nextcloud ezen verziójával",
+ "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "Az alkalmazás nem telepíthető, mert az info.xml/version részben tárolt verzió nem egyezik meg az alkalmazás boltban elérhető verzióval",
+ "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Tipp: A következő SQL parancs segítségével manuálisan felgyorsíthatod a frissítést: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "A Nextcloud Server Microsoft Windows platformon való futtatása nem támogatott. Ha nincs más lehetőséged a szerver migrációjára, akkor javasoljuk, hogy Linux szervert használj virtuális gépben. Linux csomagokat és könnyen üzembe helyezhető virtuális gép képfájlokat itt találhatsz: <a href=\"%s\">%s</a>. Létező telepítések Linux migrációjához tippeket és migrációs szkriptet a <a href=\"%s\">dokumentációban</a> találhatsz.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Ez általában úgy javítható, hogy <a href=\"%s\" target=\"_blank\">a webszervernek írási jogosultságot adsz a root könyvtárra</a>."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/nb_NO.js b/lib/l10n/nb_NO.js
index de9946b5e8f..54a7d62561e 100644
--- a/lib/l10n/nb_NO.js
+++ b/lib/l10n/nb_NO.js
@@ -2,19 +2,22 @@ OC.L10N.register(
"lib",
{
"Cannot write into \"config\" directory!" : "Kan ikke skrive i \"config\"-mappen!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi web-serveren skrivetilgang til config-mappen",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi web-tjeneren skrivetilgang til config-mappen",
"See %s" : "Se %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til config-mappen%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til config-mappen%s.",
"Sample configuration detected" : "Eksempelkonfigurasjon oppdaget",
"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" : "Det ble oppdaget at eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
"PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"PHP with a version lower than %s is required." : "PHP med en versjon lavere enn %s kreves.",
+ "%sbit or higher PHP required." : "%sbit eller høyere PHP kreves",
"Following databases are supported: %s" : "Følgende databaser støttes: %s",
"The command line tool %s could not be found" : "Kommandolinjeverktøyet %s ble ikke funnet",
"The library %s is not available." : "Biblioteket %s er ikke tilgjengelig.",
"Library %s with a version higher than %s is required - available version %s." : "Bibliotek %s med en versjon høyere enn %s kreves - tilgjengelig versjon %s.",
"Library %s with a version lower than %s is required - available version %s." : "Bibliotek %s med en versjon lavere nn %s kreves - tilgjengelig version %s.",
"Following platforms are supported: %s" : "Følgende plattformer støttes: %s",
+ "Server version %s or higher is required." : "Tjenerversjon %s eller høyere kreves.",
+ "Server version %s or lower is required." : "Tjenerversjon %s eller lavere kreves.",
"Unknown filetype" : "Ukjent filtype",
"Invalid image" : "Ugyldig bilde",
"today" : "i dag",
@@ -43,10 +46,21 @@ OC.L10N.register(
"Archives of type %s are not supported" : "Arkiver av type %s støttes ikke",
"Failed to open archive when installing app" : "Klarte ikke å åpne arkiv ved installering av app",
"App does not provide an info.xml file" : "App-en inneholder ikke filen info.xml",
+ "App cannot be installed because appinfo file cannot be read." : "App kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
"Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur kunne ikke sjekkes. Kontakt app-utvikleren og sjekk admin-bildet.",
"App can't be installed because of not allowed code in the App" : "App kan ikke installeres på grunn av ulovlig kode i appen.",
+ "App can't be installed because it is not compatible with this version of the server" : "Appen kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "App kan ikke installeres fordi den er merket med <shipped>true</shipped> som ikke er tillatt for apper som ikke leveres med systemet",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml ikke er den samme som versjonen som rapporteres fra app-butikken",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Tjenerinnstillinger",
+ "Sharing" : "Deling",
+ "Encryption" : "Kryptering",
+ "Logging" : "Logging",
+ "Additional settings" : "Flere innstillinger",
+ "Tips & tricks" : "Tips og triks",
+ "%s enter the database username and name." : "%s legg inn database brukernavn og navn.",
"%s enter the database username." : "%s legg inn brukernavn for databasen.",
"%s enter the database name." : "%s legg inn navnet på databasen.",
"%s you may not use dots in the database name" : "%s du kan ikke bruke punktum i databasenavnet",
@@ -58,7 +72,7 @@ OC.L10N.register(
"Offending command was: \"%s\", name: %s, password: %s" : "Kommando som feilet: \"%s\", navn: %s, passord: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL-brukernavn og/eller passord er ikke gyldig",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
- "For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.",
+ "For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-tjener i stedet.",
"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." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir konfigurert i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Vennligst fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
"Set an admin username." : "Sett et admin-brukernavn.",
@@ -80,7 +94,7 @@ OC.L10N.register(
"You need to provide a password to create a public link, only protected links are allowed" : "Du må oppgi et passord for å lage en offentlig lenke. Bare beskyttede lenker er tillatt",
"Sharing %s failed, because sharing with links is not allowed" : "Deling av %s feilet, fordi deling med lenker ikke er tillatt",
"Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje servern er utilgjengelig for øyeblikket.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.",
"Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting av tillatelser for %s feilet, fordi tillatelsene gikk ut over tillatelsene som er gitt til %s",
"Setting permissions for %s failed, because the item was not found" : "Setting av tillatelser for %s feilet, fordi elementet ikke ble funnet",
@@ -96,6 +110,8 @@ OC.L10N.register(
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
"Cannot increase permissions of %s" : "Kan ikke øke tillatelser for %s",
+ "Files can't be shared with delete permissions" : "Filer kan ikke deles med rettigheter til sletting",
+ "Files can't be shared with create permissions" : "Filer kan ikke deles med rettigheter til å opprette",
"Expiration date is in the past" : "Utløpsdato er tilbake i tid",
"Cannot set expiration date more than %s days in the future" : "Kan ikke sette utløpsdato mer enn %s dager fram i tid",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
@@ -105,12 +121,19 @@ OC.L10N.register(
"Username contains whitespace at the beginning or at the end" : "Brukernavn inneholder blanke på begynnelsen eller slutten",
"A valid password must be provided" : "Oppgi et gyldig passord",
"The username is already being used" : "Brukernavnet er allerede i bruk",
+ "Login canceled by app" : "Innlogging avbrutt av app",
+ "User disabled" : "Brukeren er deaktivert",
+ "Help" : "Hjelp",
"Personal" : "Personlig",
"Users" : "Brukere",
"Admin" : "Admin",
"Recommended" : "Anbefalt",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "Appen \"%s\" kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Appen \"%s\" kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
"No app name specified" : "Intet app-navn spesifisert",
+ "App '%s' could not be installed!" : "Appen '%s' kunne ikke installeres!",
+ "a safe home for all your data" : "et sikkert hjem for alle dine data",
"File is currently busy, please try again later" : "Filen er opptatt for øyeblikket, prøv igjen senere",
"Can't read file" : "Kan ikke lese fil",
"Application is not enabled" : "Applikasjon er ikke påslått",
@@ -119,22 +142,27 @@ OC.L10N.register(
"Unknown user" : "Ukjent bruker",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-plattform støttes ikke",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere tjeneren selv.",
"Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen",
"Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen",
- "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
"Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til rotmappen%s.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren skrivetilgang til rotmappen</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi webtjeneren skrivetilgang til rotmappen%s.",
"Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s feilet.",
- "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.",
- "Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.",
+ "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webtjeneren på nytt.",
+ "Please ask your server administrator to install the module." : "Be tjener-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP-innstilling \"%s\" er ikke satt til \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Ved å endre denne innstillingen i php.ini gjør at Nextcloud vil kjøre igjen.",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er satt til \"%s\" i stedet for den forventede verdien \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Sett <code>mbstring.func_overload</code> til <code>0</code> in php.ini for å fikse dette problemet",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Krever minst libxml2 2.7.0. Per nå er %s installert.",
+ "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart webtjeneren.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?",
- "Please ask your server administrator to restart the web server." : "Be server-administratoren om å starte web-serveren på nytt.",
+ "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte webtjeneren på nytt.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves",
"Please upgrade your database version" : "Vennligst oppgrader versjonen av databasen din",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.",
@@ -148,6 +176,14 @@ OC.L10N.register(
"Storage incomplete configuration. %s" : "Ikke komplett oppsett for lager. %s",
"Storage connection error. %s" : "Tilkoblingsfeil for lager. %s",
"Storage not available" : "Lagringsplass ikke tilgjengelig",
- "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s"
+ "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s",
+ "ownCloud %s or higher is required." : "Nextcloud %s eller høyere er påkrevd.",
+ "ownCloud %s or lower is required." : "Nextcloud %s eller lavere er påkrevd.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Appen \"%s\" kan ikke installeres da den ikke er kompatibel med denne versjonen av Nextcloud",
+ "App can't be installed because it is not compatible with this version of Nextcloud" : "Appen kan ikke installeres da den ikke er kompatibel med denne versjonen av Nextcloud",
+ "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml/version ikke er den samme som versjonen som rapporteres fra app-butikken",
+ "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Hint: Du kan øke hastigheten på oppgraderingen ved å kjøre denne SQL kommandoen manuelt: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere selve tjeneren. Finn Linuxpakker og virtuelle maskiner på <a href=\"%s\">%s</a>. For å migrere eksisterende installasjon til Linux kan du finne gode tips og migreringsskript i vår <a href=\"%s\">dokumentasjon</a>.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren skrivetilgang til rotmappen</a>."
},
"nplurals=2; plural=(n != 1);");
diff --git a/lib/l10n/nb_NO.json b/lib/l10n/nb_NO.json
index 5e83f702811..ba689e6d2a2 100644
--- a/lib/l10n/nb_NO.json
+++ b/lib/l10n/nb_NO.json
@@ -1,18 +1,21 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "Kan ikke skrive i \"config\"-mappen!",
- "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi web-serveren skrivetilgang til config-mappen",
+ "This can usually be fixed by giving the webserver write access to the config directory" : "Dette kan vanligvis ordnes ved å gi web-tjeneren skrivetilgang til config-mappen",
"See %s" : "Se %s",
- "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til config-mappen%s.",
+ "This can usually be fixed by %sgiving the webserver write access to the config directory%s." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til config-mappen%s.",
"Sample configuration detected" : "Eksempelkonfigurasjon oppdaget",
"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" : "Det ble oppdaget at eksempelkonfigurasjonen er blitt kopiert. Dette kan ødelegge installasjonen din og støttes ikke. Les dokumentasjonen før du gjør endringer i config.php",
"PHP %s or higher is required." : "PHP %s eller nyere kreves.",
"PHP with a version lower than %s is required." : "PHP med en versjon lavere enn %s kreves.",
+ "%sbit or higher PHP required." : "%sbit eller høyere PHP kreves",
"Following databases are supported: %s" : "Følgende databaser støttes: %s",
"The command line tool %s could not be found" : "Kommandolinjeverktøyet %s ble ikke funnet",
"The library %s is not available." : "Biblioteket %s er ikke tilgjengelig.",
"Library %s with a version higher than %s is required - available version %s." : "Bibliotek %s med en versjon høyere enn %s kreves - tilgjengelig versjon %s.",
"Library %s with a version lower than %s is required - available version %s." : "Bibliotek %s med en versjon lavere nn %s kreves - tilgjengelig version %s.",
"Following platforms are supported: %s" : "Følgende plattformer støttes: %s",
+ "Server version %s or higher is required." : "Tjenerversjon %s eller høyere kreves.",
+ "Server version %s or lower is required." : "Tjenerversjon %s eller lavere kreves.",
"Unknown filetype" : "Ukjent filtype",
"Invalid image" : "Ugyldig bilde",
"today" : "i dag",
@@ -41,10 +44,21 @@
"Archives of type %s are not supported" : "Arkiver av type %s støttes ikke",
"Failed to open archive when installing app" : "Klarte ikke å åpne arkiv ved installering av app",
"App does not provide an info.xml file" : "App-en inneholder ikke filen info.xml",
+ "App cannot be installed because appinfo file cannot be read." : "App kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
"Signature could not get checked. Please contact the app developer and check your admin screen." : "Signatur kunne ikke sjekkes. Kontakt app-utvikleren og sjekk admin-bildet.",
"App can't be installed because of not allowed code in the App" : "App kan ikke installeres på grunn av ulovlig kode i appen.",
+ "App can't be installed because it is not compatible with this version of the server" : "Appen kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "App kan ikke installeres fordi den er merket med <shipped>true</shipped> som ikke er tillatt for apper som ikke leveres med systemet",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml ikke er den samme som versjonen som rapporteres fra app-butikken",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "Tjenerinnstillinger",
+ "Sharing" : "Deling",
+ "Encryption" : "Kryptering",
+ "Logging" : "Logging",
+ "Additional settings" : "Flere innstillinger",
+ "Tips & tricks" : "Tips og triks",
+ "%s enter the database username and name." : "%s legg inn database brukernavn og navn.",
"%s enter the database username." : "%s legg inn brukernavn for databasen.",
"%s enter the database name." : "%s legg inn navnet på databasen.",
"%s you may not use dots in the database name" : "%s du kan ikke bruke punktum i databasenavnet",
@@ -56,7 +70,7 @@
"Offending command was: \"%s\", name: %s, password: %s" : "Kommando som feilet: \"%s\", navn: %s, passord: %s",
"PostgreSQL username and/or password not valid" : "PostgreSQL-brukernavn og/eller passord er ikke gyldig",
"Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X støttes ikke og %s vil ikke fungere korrekt på denne plattformen. Bruk på egen risiko!",
- "For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-server i stedet.",
+ "For the best results, please consider using a GNU/Linux server instead." : "For beste resultat, vurder å bruke en GNU/Linux-tjener i stedet.",
"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." : "Det ser ut for at %s-instansen kjører i et 32-bit PHP-miljø med open_basedir konfigurert i php.ini. Dette vil føre til problemer med filer over 4 GB og frarådes på det sterkeste.",
"Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Vennligst fjern innstillingen open_basedir i php.ini eller bytt til 64-bit PHP.",
"Set an admin username." : "Sett et admin-brukernavn.",
@@ -78,7 +92,7 @@
"You need to provide a password to create a public link, only protected links are allowed" : "Du må oppgi et passord for å lage en offentlig lenke. Bare beskyttede lenker er tillatt",
"Sharing %s failed, because sharing with links is not allowed" : "Deling av %s feilet, fordi deling med lenker ikke er tillatt",
"Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
- "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje servern er utilgjengelig for øyeblikket.",
+ "Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje tjeneren er utilgjengelig for øyeblikket.",
"Share type %s is not valid for %s" : "Delingstype %s er ikke gyldig for %s",
"Setting permissions for %s failed, because the permissions exceed permissions granted to %s" : "Setting av tillatelser for %s feilet, fordi tillatelsene gikk ut over tillatelsene som er gitt til %s",
"Setting permissions for %s failed, because the item was not found" : "Setting av tillatelser for %s feilet, fordi elementet ikke ble funnet",
@@ -94,6 +108,8 @@
"Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling av %s feilet, fordi delings-serveren for %s ikke kunne finne kilden",
"Sharing %s failed, because the file could not be found in the file cache" : "Deling av %s feilet, fordi filen ikke ble funnet i fil-mellomlageret",
"Cannot increase permissions of %s" : "Kan ikke øke tillatelser for %s",
+ "Files can't be shared with delete permissions" : "Filer kan ikke deles med rettigheter til sletting",
+ "Files can't be shared with create permissions" : "Filer kan ikke deles med rettigheter til å opprette",
"Expiration date is in the past" : "Utløpsdato er tilbake i tid",
"Cannot set expiration date more than %s days in the future" : "Kan ikke sette utløpsdato mer enn %s dager fram i tid",
"Could not find category \"%s\"" : "Kunne ikke finne kategori \"%s\"",
@@ -103,12 +119,19 @@
"Username contains whitespace at the beginning or at the end" : "Brukernavn inneholder blanke på begynnelsen eller slutten",
"A valid password must be provided" : "Oppgi et gyldig passord",
"The username is already being used" : "Brukernavnet er allerede i bruk",
+ "Login canceled by app" : "Innlogging avbrutt av app",
+ "User disabled" : "Brukeren er deaktivert",
+ "Help" : "Hjelp",
"Personal" : "Personlig",
"Users" : "Brukere",
"Admin" : "Admin",
"Recommended" : "Anbefalt",
+ "App \"%s\" cannot be installed because appinfo file cannot be read." : "Appen \"%s\" kan ikke installeres på grunn av at appinfo filen ikke kan leses.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of the server." : "Appen \"%s\" kan ikke installere fordi den ikke er kompatibel med denne tjenerversjonen.",
"App \"%s\" cannot be installed because the following dependencies are not fulfilled: %s" : "App \"%s\" kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt: %s",
"No app name specified" : "Intet app-navn spesifisert",
+ "App '%s' could not be installed!" : "Appen '%s' kunne ikke installeres!",
+ "a safe home for all your data" : "et sikkert hjem for alle dine data",
"File is currently busy, please try again later" : "Filen er opptatt for øyeblikket, prøv igjen senere",
"Can't read file" : "Kan ikke lese fil",
"Application is not enabled" : "Applikasjon er ikke påslått",
@@ -117,22 +140,27 @@
"Unknown user" : "Ukjent bruker",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Ingen databasedrivere (sqlite, mysql, or postgresql) installert.",
"Microsoft Windows Platform is not supported" : "Microsoft Windows-plattform støttes ikke",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere tjeneren selv.",
"Cannot write into \"config\" directory" : "Kan ikke skrive i \"config\"-mappen",
"Cannot write into \"apps\" directory" : "Kan ikke skrive i \"apps\"-mappen",
- "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
+ "This can usually be fixed by %sgiving the webserver write access to the apps directory%s or disabling the appstore in the config file." : "Dette kan vanligvis ordnes ved %så gi web-tjeneren skrivetilgang til apps-mappen%s eller ved å deaktivere app-butikken i config-filen.",
"Cannot create \"data\" directory (%s)" : "Kan ikke opprette \"data\"-mappen (%s)",
- "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi web-serveren skrivetilgang til rotmappen%s.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren skrivetilgang til rotmappen</a>.",
+ "Permissions can usually be fixed by %sgiving the webserver write access to the root directory%s." : "Tillatelser kan vanligvis ordnes ved %så gi webtjeneren skrivetilgang til rotmappen%s.",
"Setting locale to %s failed" : "Setting av nasjonale innstillinger til %s feilet.",
- "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webserveren på nytt.",
- "Please ask your server administrator to install the module." : "Be server-administratoren om å installere modulen.",
+ "Please install one of these locales on your system and restart your webserver." : "Vennligst installer en av disse nasjonale innstillingene på systemet ditt og start webtjeneren på nytt.",
+ "Please ask your server administrator to install the module." : "Be tjener-administratoren om å installere modulen.",
"PHP module %s not installed." : "PHP-modul %s er ikke installert.",
"PHP setting \"%s\" is not set to \"%s\"." : "PHP-innstilling \"%s\" er ikke satt til \"%s\".",
+ "Adjusting this setting in php.ini will make Nextcloud run again" : "Ved å endre denne innstillingen i php.ini gjør at Nextcloud vil kjøre igjen.",
"mbstring.func_overload is set to \"%s\" instead of the expected value \"0\"" : "mbstring.func_overload er satt til \"%s\" i stedet for den forventede verdien \"0\"",
"To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini" : "Sett <code>mbstring.func_overload</code> til <code>0</code> in php.ini for å fikse dette problemet",
+ "libxml2 2.7.0 is at least required. Currently %s is installed." : "Krever minst libxml2 2.7.0. Per nå er %s installert.",
+ "To fix this issue update your libxml2 version and restart your web server." : "For å fikse dette problemet, oppdater din libxml2 versjon og omstart webtjeneren.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
"PHP modules have been installed, but they are still listed as missing?" : "PHP-moduler har blitt installert, men de listes fortsatt som fraværende?",
- "Please ask your server administrator to restart the web server." : "Be server-administratoren om å starte web-serveren på nytt.",
+ "Please ask your server administrator to restart the web server." : "Be tjener-administratoren om å starte webtjeneren på nytt.",
"PostgreSQL >= 9 required" : "PostgreSQL >= 9 kreves",
"Please upgrade your database version" : "Vennligst oppgrader versjonen av databasen din",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Endre tillatelsene til 0770 slik at mappen ikke kan listes av andre brukere.",
@@ -146,6 +174,14 @@
"Storage incomplete configuration. %s" : "Ikke komplett oppsett for lager. %s",
"Storage connection error. %s" : "Tilkoblingsfeil for lager. %s",
"Storage not available" : "Lagringsplass ikke tilgjengelig",
- "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s"
+ "Storage connection timeout. %s" : "Tidsavbrudd ved tilkobling av lager: %s",
+ "ownCloud %s or higher is required." : "Nextcloud %s eller høyere er påkrevd.",
+ "ownCloud %s or lower is required." : "Nextcloud %s eller lavere er påkrevd.",
+ "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "Appen \"%s\" kan ikke installeres da den ikke er kompatibel med denne versjonen av Nextcloud",
+ "App can't be installed because it is not compatible with this version of Nextcloud" : "Appen kan ikke installeres da den ikke er kompatibel med denne versjonen av Nextcloud",
+ "App can't be installed because the version in info.xml/version is not the same as the version reported from the app store" : "App kan ikke installeres fordi versjonen i info.xml/version ikke er den samme som versjonen som rapporteres fra app-butikken",
+ "Hint: You can speed up the upgrade by executing this SQL command manually: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;" : "Hint: Du kan øke hastigheten på oppgraderingen ved å kjøre denne SQL kommandoen manuelt: ALTER TABLE %s ADD COLUMN checksum varchar(255) DEFAULT NULL AFTER permissions;",
+ "Running Nextcloud Server on the Microsoft Windows platform is not supported. We suggest you use a Linux server in a virtual machine if you have no option for migrating the server itself. Find Linux packages as well as easy to deploy virtual machine images on <a href=\"%s\">%s</a>. For migrating existing installations to Linux you can find some tips and a migration script in <a href=\"%s\">our documentation</a>." : "Kjøring av Nextcloud tjeneren på en Microsoft Windows plattform er ikke støttet. Vi foreslår at du bruker en Linux tjener i en virtuell maskin hvis du ikke har mulighet til å migrere selve tjeneren. Finn Linuxpakker og virtuelle maskiner på <a href=\"%s\">%s</a>. For å migrere eksisterende installasjon til Linux kan du finne gode tips og migreringsskript i vår <a href=\"%s\">dokumentasjon</a>.",
+ "This can usually be fixed by <a href=\"%s\" target=\"_blank\">giving the webserver write access to the root directory</a>." : "Dette fikses vanligvis ved å <a href=\"%s\" target=\"_blank\" rel=\"noreferrer\">gi webtjeneren skrivetilgang til rotmappen</a>."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index bf9f98219d9..7b1d79dbcf5 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -52,6 +52,14 @@ OC.L10N.register(
"App can't be installed because it is not compatible with this version of the server" : "程式無法安裝,因為伺服器版本不符。",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "無法安裝應用程式,因為它包含了 <shipped>true</shipped> 標籤,在未發行的應用程式當中這是不允許的",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "程式無法安裝,因為info.xml檔案中版本與app商店中要求不同。",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "伺服器設定",
+ "Sharing" : "分享",
+ "Encryption" : "加密",
+ "Logging" : "記錄",
+ "Additional settings" : "其他設定",
+ "Tips & tricks" : "使用祕訣",
"%s enter the database username and name." : "%s 輸入資料庫名稱及使用者名稱",
"%s enter the database username." : "%s 輸入資料庫使用者名稱。",
"%s enter the database name." : "%s 輸入資料庫名稱。",
@@ -168,6 +176,8 @@ OC.L10N.register(
"Storage incomplete configuration. %s" : "儲存空間配置尚未完成。%s",
"Storage connection error. %s" : "儲存空間連線錯誤。%s",
"Storage not available" : "無法存取儲存空間",
- "Storage connection timeout. %s" : "儲存空間連線逾時。%s"
+ "Storage connection timeout. %s" : "儲存空間連線逾時。%s",
+ "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "應用程式 \"%s\" 無法安裝,因為與此版本 Nextcloud 不相容",
+ "App can't be installed because it is not compatible with this version of Nextcloud" : "應用程式無法安裝,因為與此版本 Nextcloud 不相容"
},
"nplurals=1; plural=0;");
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index 4383312af1e..586d1ad488a 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -50,6 +50,14 @@
"App can't be installed because it is not compatible with this version of the server" : "程式無法安裝,因為伺服器版本不符。",
"App can't be installed because it contains the <shipped>true</shipped> tag which is not allowed for non shipped apps" : "無法安裝應用程式,因為它包含了 <shipped>true</shipped> 標籤,在未發行的應用程式當中這是不允許的",
"App can't be installed because the version in info.xml is not the same as the version reported from the app store" : "程式無法安裝,因為info.xml檔案中版本與app商店中要求不同。",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "Server settings" : "伺服器設定",
+ "Sharing" : "分享",
+ "Encryption" : "加密",
+ "Logging" : "記錄",
+ "Additional settings" : "其他設定",
+ "Tips & tricks" : "使用祕訣",
"%s enter the database username and name." : "%s 輸入資料庫名稱及使用者名稱",
"%s enter the database username." : "%s 輸入資料庫使用者名稱。",
"%s enter the database name." : "%s 輸入資料庫名稱。",
@@ -166,6 +174,8 @@
"Storage incomplete configuration. %s" : "儲存空間配置尚未完成。%s",
"Storage connection error. %s" : "儲存空間連線錯誤。%s",
"Storage not available" : "無法存取儲存空間",
- "Storage connection timeout. %s" : "儲存空間連線逾時。%s"
+ "Storage connection timeout. %s" : "儲存空間連線逾時。%s",
+ "App \"%s\" cannot be installed because it is not compatible with this version of Nextcloud." : "應用程式 \"%s\" 無法安裝,因為與此版本 Nextcloud 不相容",
+ "App can't be installed because it is not compatible with this version of Nextcloud" : "應用程式無法安裝,因為與此版本 Nextcloud 不相容"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
index 3bfef2df025..5e253d0954a 100644
--- a/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
+++ b/lib/private/AppFramework/Middleware/Security/SecurityMiddleware.php
@@ -37,6 +37,7 @@ use OC\AppFramework\Middleware\Security\Exceptions\StrictCookieMissingException;
use OC\AppFramework\Utility\ControllerMethodReflector;
use OC\Security\CSP\ContentSecurityPolicyManager;
use OCP\AppFramework\Http\ContentSecurityPolicy;
+use OCP\AppFramework\Http\EmptyContentSecurityPolicy;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Middleware;
@@ -182,6 +183,10 @@ class SecurityMiddleware extends Middleware {
public function afterController($controller, $methodName, Response $response) {
$policy = !is_null($response->getContentSecurityPolicy()) ? $response->getContentSecurityPolicy() : new ContentSecurityPolicy();
+ if (get_class($policy) === EmptyContentSecurityPolicy::class) {
+ return $response;
+ }
+
$defaultPolicy = $this->contentSecurityPolicyManager->getDefaultPolicy();
$defaultPolicy = $this->contentSecurityPolicyManager->mergePolicies($defaultPolicy, $policy);
diff --git a/lib/private/AppFramework/OCS/BaseResponse.php b/lib/private/AppFramework/OCS/BaseResponse.php
index fa22498ac0f..59b8660a382 100644
--- a/lib/private/AppFramework/OCS/BaseResponse.php
+++ b/lib/private/AppFramework/OCS/BaseResponse.php
@@ -23,6 +23,7 @@
namespace OC\AppFramework\OCS;
use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\Http\EmptyContentSecurityPolicy;
use OCP\AppFramework\Http\Response;
abstract class BaseResponse extends Response {
@@ -67,7 +68,7 @@ abstract class BaseResponse extends Response {
$this->setETag($dataResponse->getETag());
$this->setLastModified($dataResponse->getLastModified());
$this->setCookies($dataResponse->getCookies());
- $this->setContentSecurityPolicy($dataResponse->getContentSecurityPolicy());
+ $this->setContentSecurityPolicy(new EmptyContentSecurityPolicy());
if ($format === 'json') {
$this->addHeader(
diff --git a/lib/private/AppFramework/Utility/SimpleContainer.php b/lib/private/AppFramework/Utility/SimpleContainer.php
index 5f637518f4d..60496ca329e 100644
--- a/lib/private/AppFramework/Utility/SimpleContainer.php
+++ b/lib/private/AppFramework/Utility/SimpleContainer.php
@@ -62,7 +62,16 @@ class SimpleContainer extends Container implements IContainer {
$resolveName = $parameterClass->name;
}
- $parameters[] = $this->query($resolveName);
+ try {
+ $parameters[] = $this->query($resolveName);
+ } catch (\Exception $e) {
+ // Service not found, use the default value when available
+ if ($parameter->isDefaultValueAvailable()) {
+ $parameters[] = $parameter->getDefaultValue();
+ } else {
+ throw $e;
+ }
+ }
}
return $class->newInstanceArgs($parameters);
}
diff --git a/lib/private/Setup.php b/lib/private/Setup.php
index 3b3a57c3e96..4c72fbc9623 100644
--- a/lib/private/Setup.php
+++ b/lib/private/Setup.php
@@ -410,6 +410,7 @@ class Setup {
/**
* Append the correct ErrorDocument path for Apache hosts
+ * @return bool True when success, False otherwise
*/
public static function updateHtaccess() {
$config = \OC::$server->getConfig();
@@ -418,7 +419,7 @@ class Setup {
if(\OC::$CLI) {
$webRoot = $config->getSystemValue('overwrite.cli.url', '');
if($webRoot === '') {
- return;
+ return false;
}
$webRoot = parse_url($webRoot, PHP_URL_PATH);
$webRoot = rtrim($webRoot, '/');
@@ -472,9 +473,10 @@ class Setup {
if ($content !== '') {
//suppress errors in case we don't have permissions for it
- @file_put_contents($setupHelper->pathToHtaccess(), $htaccessContent.$content . "\n");
+ return (bool) @file_put_contents($setupHelper->pathToHtaccess(), $htaccessContent.$content . "\n");
}
+ return false;
}
public static function protectDataDirectory() {
diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php
index 04dcb8fc896..cb52949779f 100644
--- a/lib/private/legacy/util.php
+++ b/lib/private/legacy/util.php
@@ -336,7 +336,16 @@ class OC_Util {
* @return void
*/
public static function copyr($source, \OCP\Files\Folder $target) {
+ $logger = \OC::$server->getLogger();
+
+ // Verify if folder exists
$dir = opendir($source);
+ if($dir === false) {
+ $logger->error(sprintf('Could not opendir "%s"', $source), ['app' => 'core']);
+ return;
+ }
+
+ // Copy the files
while (false !== ($file = readdir($dir))) {
if (!\OC\Files\Filesystem::isIgnoredDir($file)) {
if (is_dir($source . '/' . $file)) {
@@ -344,7 +353,13 @@ class OC_Util {
self::copyr($source . '/' . $file, $child);
} else {
$child = $target->newFile($file);
- stream_copy_to_stream(fopen($source . '/' . $file,'r'), $child->fopen('w'));
+ $sourceStream = fopen($source . '/' . $file, 'r');
+ if($sourceStream === false) {
+ $logger->error(sprintf('Could not fopen "%s"', $source . '/' . $file), ['app' => 'core']);
+ closedir($dir);
+ return;
+ }
+ stream_copy_to_stream($sourceStream, $child->fopen('w'));
}
}
}
diff --git a/lib/public/AppFramework/Http/Response.php b/lib/public/AppFramework/Http/Response.php
index 0b162b453a0..8591d6abc68 100644
--- a/lib/public/AppFramework/Http/Response.php
+++ b/lib/public/AppFramework/Http/Response.php
@@ -248,18 +248,18 @@ class Response {
/**
* Set a Content-Security-Policy
- * @param ContentSecurityPolicy $csp Policy to set for the response object
+ * @param EmptyContentSecurityPolicy $csp Policy to set for the response object
* @return $this
* @since 8.1.0
*/
- public function setContentSecurityPolicy(ContentSecurityPolicy $csp) {
+ public function setContentSecurityPolicy(EmptyContentSecurityPolicy $csp) {
$this->contentSecurityPolicy = $csp;
return $this;
}
/**
* Get the currently used Content-Security-Policy
- * @return ContentSecurityPolicy|null Used Content-Security-Policy or null if
+ * @return EmptyContentSecurityPolicy|null Used Content-Security-Policy or null if
* none specified.
* @since 8.1.0
*/
diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js
index 5ef1751162e..b009a834c9f 100644
--- a/settings/l10n/cs_CZ.js
+++ b/settings/l10n/cs_CZ.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Přidat důvěryhodnou doménu",
"Migration in progress. Please wait until the migration is finished" : "Migrace probíhá. Počkejte prosím než bude dokončena",
"Migration started …" : "Migrace spuštěna ...",
+ "Not saved" : "Neuloženo",
"Sending..." : "Odesílání...",
"Official" : "Oficiální",
"Approved" : "Potvrzeno",
@@ -217,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Vyjmout skupiny ze sdílení",
"These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možno sdílet, nemohou ale sami sdílet ostatním.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Povolit automatické vyplňování v dialogu sdílení. Pokud je toto vypnuto, je třeba ručně vyplňovat celé uživatelské jméno.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zobrazit text upozornění na stránce pro nahrání veřejného odkazu. (Zobrazit pouze pokud je seznam souborů skrytý.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Tento text bude zobrazen on stránce pro nahrání veřejného odkazu, pokud bude seznam souborů skrytý.",
"Tips & tricks" : "Tipy a triky",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Je použita databáze SQLite. Pro větší instalace doporučujeme přejít na robustnější databázi.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.",
diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json
index c97580dbdf4..428c050356d 100644
--- a/settings/l10n/cs_CZ.json
+++ b/settings/l10n/cs_CZ.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Přidat důvěryhodnou doménu",
"Migration in progress. Please wait until the migration is finished" : "Migrace probíhá. Počkejte prosím než bude dokončena",
"Migration started …" : "Migrace spuštěna ...",
+ "Not saved" : "Neuloženo",
"Sending..." : "Odesílání...",
"Official" : "Oficiální",
"Approved" : "Potvrzeno",
@@ -215,6 +216,8 @@
"Exclude groups from sharing" : "Vyjmout skupiny ze sdílení",
"These groups will still be able to receive shares, but not to initiate them." : "Těmto skupinám bude stále možno sdílet, nemohou ale sami sdílet ostatním.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Povolit automatické vyplňování v dialogu sdílení. Pokud je toto vypnuto, je třeba ručně vyplňovat celé uživatelské jméno.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zobrazit text upozornění na stránce pro nahrání veřejného odkazu. (Zobrazit pouze pokud je seznam souborů skrytý.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Tento text bude zobrazen on stránce pro nahrání veřejného odkazu, pokud bude seznam souborů skrytý.",
"Tips & tricks" : "Tipy a triky",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Je použita databáze SQLite. Pro větší instalace doporučujeme přejít na robustnější databázi.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.",
diff --git a/settings/l10n/de.js b/settings/l10n/de.js
index b445917abbb..532e7d2ca6d 100644
--- a/settings/l10n/de.js
+++ b/settings/l10n/de.js
@@ -218,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
"Tips & tricks" : "Tipps & Tricks",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
diff --git a/settings/l10n/de.json b/settings/l10n/de.json
index 62188ffd660..8a60e77793f 100644
--- a/settings/l10n/de.json
+++ b/settings/l10n/de.json
@@ -216,6 +216,8 @@
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
"Tips & tricks" : "Tipps & Tricks",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js
index 26822fdb724..766bbb7ae74 100644
--- a/settings/l10n/de_DE.js
+++ b/settings/l10n/de_DE.js
@@ -218,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
"Tips & tricks" : "Tipps & Tricks",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json
index 54408385321..62345ef9c6e 100644
--- a/settings/l10n/de_DE.json
+++ b/settings/l10n/de_DE.json
@@ -216,6 +216,8 @@
"Exclude groups from sharing" : "Gruppen von Freigaben ausschließen",
"These groups will still be able to receive shares, but not to initiate them." : "Diese Gruppen können weiterhin Freigaben empfangen, aber selbst keine mehr initiieren.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Die Auto-Vervollständigung von Benutzernamen im Teilen-Dialog erlauben. Wenn dies deaktiviert ist, muss der vollständige Benutzername eingegeben werden.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Zeige Haftungsausschluss auf der öffentlichen Upload-Seite. (Wird nur gezeigt wenn die Dateiliste nicht angezeigt wird.) ",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Dieser Text wird auf der öffentlichen Upload-Seite angezeigt wenn die Dateiliste nicht angezeigt wird.",
"Tips & tricks" : "Tipps & Tricks",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite wird als Datenbank verwendet. Bei größeren Installationen wird empfohlen, auf ein anderes Datenbank-Backend zu wechseln.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei der Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.",
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index fbf10565970..cb8ebd18616 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -46,6 +46,7 @@ OC.L10N.register(
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
"Migration started …" : "Η μετάβαση ξεκίνησε ...",
+ "Not saved" : "Δεν αποθηκεύτηκε",
"Sending..." : "Αποστέλεται...",
"Official" : "Επίσημο",
"Approved" : "Εγκεκριμένο",
@@ -60,6 +61,9 @@ OC.L10N.register(
"Disable" : "Απενεργοποίηση",
"Enable" : "Ενεργοποίηση",
"Error while enabling app" : "Σφάλμα κατά την ενεργοποίηση της εφαρμογής",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Σφάλμα: αυτή η εφαρμογή δεν μπορεί να ενεργοποιηθεί γιατί θα καταστήσει ασταθή τον διακομιστή.",
+ "Error: could not disable broken app" : "Σφάλμα: αδυναμία απενεργοποίησης κατεστραμμένης εφαρμογής",
+ "Error while disabling broken app" : "Σφάλμα κατά την απενεργοποίηση κατεστραμμένης εφαρμογής",
"Updating...." : "Ενημέρωση...",
"Error while updating app" : "Σφάλμα κατά την ενημέρωση της εφαρμογής",
"Updated" : "Ενημερώθηκε",
@@ -68,15 +72,25 @@ OC.L10N.register(
"Uninstall" : "Απεγκατάσταση",
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Η εφαρμογή έχει ενεργοποιηθεί αλλά χρειάζεται ενημέρωση. Θα μεταφερθείτε στη σελίδα ενημέρωσης σε 5 δευτερόλεπτα.",
"App update" : "Ενημέρωση εφαρμογής",
+ "No apps found for {query}" : "Δεν βρέθηκαν εφαρμογές για {query}",
"Disconnect" : "Αποσύνδεση",
+ "Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome για Android",
"iPhone" : "iPhone",
+ "iOS Client" : "Πελάτης iOS",
+ "Android Client" : "Πελάτης Android",
+ "This session" : "Αυτή η συνεδρία",
+ "Copied!" : "Αντιγράφτηκε!",
+ "Not supported!" : "Δεν υποστηρίζονται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
"Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.",
+ "Error while loading browser sessions and device tokens" : "Σφάλμα κατά την φόρτωση συνεδριών περιηγητή και διακριτικών συσκευής",
+ "Error while creating device token" : "Σφάλμα κατά τη δημιουργία διακριτικού συσκευής",
+ "Error while deleting the token" : "Σφάλμα κατά την διαγραφή του διακριτικού",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Προέκυψε σφάλμα. Παρακαλούμε μεταφορτώστε ένα πιστοποιητικό PEM κωδικοποιημένο κατά ASCII.",
"Valid until {date}" : "Έγκυρο έως {date}",
"Delete" : "Διαγραφή",
@@ -89,11 +103,14 @@ OC.L10N.register(
"Strong password" : "Δυνατό συνθηματικό",
"Groups" : "Ομάδες",
"Unable to delete {objName}" : "Αδυναμία διαγραφής του {objName}",
+ "Error creating group: {message}" : "Σφάλμα δημιουργίας ομάδας: {message}",
"A valid group name must be provided" : "Πρέπει να δοθεί ένα έγκυρο όνομα ομάδας",
"deleted {groupName}" : "διαγραφή {groupName}",
"undo" : "αναίρεση",
"never" : "ποτέ",
"deleted {userName}" : "διαγραφή {userName}",
+ "Add group" : "Προσθήκη ομάδας",
+ "no group" : "καμια ομάδα",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Η αλλαγή του κωδικού πρόσβασης θα έχει ως αποτέλεσμα το χάσιμο δεδομένων, επειδή η ανάκτηση δεδομένων δεν είναι διαθέσιμη γι' αυτόν τον χρήστη",
"Password successfully changed" : "Το συνθηματικό αλλάχτηκε επιτυχώς",
"A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
@@ -103,6 +120,8 @@ OC.L10N.register(
"__language_name__" : "__όνομα_γλώσσας__",
"Unlimited" : "Απεριόριστο",
"Personal info" : "Προσωπικές Πληροφορίες",
+ "Sessions" : "Συνεδρίες",
+ "App passwords" : "Συνθηματικά εφαρμογής",
"Sync clients" : "Συγχρονισμός πελατών",
"None" : "Τίποτα",
"Login" : "Σύνδεση",
@@ -152,6 +171,7 @@ OC.L10N.register(
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Το αρχείο ιστορικού είναι μεγαλύτερο από 100ΜΒ. Η λήψη του ίσως πάρει λίγη ώρα!",
"Security & setup warnings" : "Προειδοποιήσεις ασφάλειας & ρυθμίσεων",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Η php δεν φαίνεται να είναι σωστά ρυθμισμένη για ερωτήματα σε μεταβλητές περιβάλλοντος του συστήματος. Η δοκιμή με την εντολή getenv(\"PATH\") επιστρέφει κενή απάντηση.",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">τεκμηρίωση εγκατάστασης ↗</a> για τις σημειώσεις ρυθμίσεων php και για τις ρυθμίσεις της php του διακομιστή, ειδικότερα όταν χρησιμοποιείτε το php-fpm.",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Η ρύθμιση \"μόνο ανάγνωση\" έχει ενεργοποιηθεί. Αυτό εμποδίζει τον καθορισμό κάποιων ρυθμίσεων μέσω της διεπαφής web. Επιπλέον, το αρχείο πρέπει να γίνει χειροκίνητα εγγράψιμο πριν από κάθε διαδικασία ενημέρωσης.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Ο PHP φαίνεται να είναι ρυθμισμένος ώστε να αφαιρεί μπλοκ εσωτερικών κειμένων (inline doc). Αυτό θα καταστήσει κύριες εφαρμογές μη-διαθέσιμες.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.",
@@ -181,6 +201,7 @@ OC.L10N.register(
"days" : "ημέρες",
"Enforce expiration date" : "Επιβολή της ημερομηνίας λήξης",
"Allow resharing" : "Επιτρέπεται ο επαναδιαμοιρασμός",
+ "Allow sharing with groups" : "Να επιτρέπεται ο διαμοιρασμός με ομάδες",
"Restrict users to only share with users in their groups" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μόνο με χρήστες που ανήκουν στις ομάδες τους",
"Allow users to send mail notification for shared files to other users" : "Να επιτρέπεται η αποστολή ειδοποιήσεων σε άλλους χρήστες, μέσω αλληλογραφίας για κοινόχρηστα αρχεία",
"Exclude groups from sharing" : "Εξαίρεση ομάδων από τον διαμοιρασμό",
@@ -210,6 +231,7 @@ OC.L10N.register(
"Enable only for specific groups" : "Ενεργοποίηση μόνο για καθορισμένες ομάδες",
"Uninstall App" : "Απεγκατάσταση Εφαρμογής",
"Enable experimental apps" : "Ενεργοποίηση πειραματικών εφαρμογών",
+ "SSL Root Certificates" : "Πιστοποιητικά SSL του Root",
"Common Name" : "Κοινό Όνομα",
"Valid until" : "Έγκυρο έως",
"Issued By" : "Έκδόθηκε από",
@@ -223,11 +245,13 @@ OC.L10N.register(
"Forum" : "Φόρουμ",
"Issue tracker" : "Ιχνηλάτης ζητημάτων",
"Commercial support" : "Εμπορική Υποστήριξη",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Χρησιμοποιείτε <strong>%s</strong> από <strong>%s</strong>",
"Profile picture" : "Φωτογραφία προφίλ",
"Upload new" : "Μεταφόρτωση νέου",
"Select from Files" : "Επιλογή από τα Αρχεία",
"Remove image" : "Αφαίρεση εικόνας",
"png or jpg, max. 20 MB" : "png ή jpg, μεγ. 20 MB",
+ "Picture provided by original account" : "Φωτογραφία που παρέχεται από τον πρωτότυπο λογαριασμό",
"Cancel" : "Άκυρο",
"Choose as profile picture" : "Επιλέξτε εικόνα προφίλ",
"Full name" : "Πλήρες όνομα",
@@ -253,10 +277,13 @@ OC.L10N.register(
"Name" : "Όνομα",
"App name" : "Όνομα εφαρμογής",
"Create new app password" : "Δημιουργία νέου συνθηματικού εφαρμογής",
+ "For security reasons this password will only be shown once." : "Για λόγους ασφαλείας αυτό το συνθηματικό θα εμφανιστεί μόνο μια φορά.",
"Username" : "Όνομα χρήστη",
"Done" : "Ολοκληρώθηκε",
"Follow us on Google Plus!" : "Ακολουθήστε μας στο Google Plus!",
+ "Like our facebook page!" : "Ακολουθήστε μας στην σελίδα μας στο facebook!",
"Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!",
+ "Subscribe to our news feed!" : "Εγγραφείτε στην ροή των νέων μας!",
"Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης",
"Show last log in" : "Εμφάνιση τελευταίας εισόδου",
"Show user backend" : "Εμφάνιση χρήστη συστήματος υποστήριξης",
@@ -269,6 +296,7 @@ OC.L10N.register(
"Group" : "Ομάδα",
"Everyone" : "Όλοι",
"Admins" : "Διαχειριστές",
+ "Default quota" : "Προεπιλέγμενη χωρητικότητα",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Παρακαλώ εισάγετε επιτρεπόμενα μερίδια αποθηκευτικού χώρου (π.χ. \"512 MB\" ή \"12 GB\")",
"Other" : "Άλλο",
"Quota" : "Σύνολο Χώρου",
@@ -280,12 +308,22 @@ OC.L10N.register(
"change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας",
"Default" : "Προκαθορισμένο",
"add group" : "προσθήκη ομάδας",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Εάν θέλετε να υποστηρίξετε το έργο\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">συνεργαστείτε με τους προγραμματιστές</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">προωθήστε το</a>!",
"Add Group" : "Προσθήκη ομάδας",
+ "Default Quota" : "Προεπιλεγμένη χωρητικότητα",
"Full Name" : "Πλήρες όνομα",
+ "Storage Location" : "Τοποθεσία αποθηκευτικού χώρου",
+ "User Backend" : "Σύστημα υποστήριξης χρήστη",
"Last Login" : "Τελευταία είσοδος",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο",
- "Updates" : "Ενημερώσεις"
+ "Updates" : "Ενημερώσεις",
+ "No apps found for \"{query}\"" : "Δεν βρέθηκαν εφαρμογές για \"{query}\"",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" href=\"%s\">τεκμηρίωση εγκατάστασης ↗</a> για τις σημειώσεις ρυθμίσεων php και για τις ρυθμίσεις της php του διακομιστή, ειδικότερα όταν χρησιμοποιείτε το php-fpm.",
+ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ο διακομιστής σας εκτελείται σε Microsoft Windows. Σας συνιστούμε το Linux για μια βέλτιστη εμπειρία χρήστη.",
+ "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Παρακαλώ ελέγξτε διπλά τα <a target=\"_blank\" href=\"%s\">εγχειρίδια εγκατάστασης ↗</a>, και ελέγξτε για σφάλματα ή προειδοποιήσεις στο <a href=\"#log-section\">ιστορικό</a>.",
+ "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Μονάχα η κρυπτογράφηση δεν σας εγγυάται την ασφάλεια του συστήματος. Παρακαλώ δείτε στην τεκμηρίωση του Nextcloud για περισσότερες πληροφορίες σχετικά με τον τρόπο που δουλεύει η εφαρμογή κρυπτογράφησης, και τις υποστηριζόμενες περιπτώσεις.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Για να μεταφερθείτε σε άλλη βάση δεδομένων χρησιμοποιήστε το εργαλείο της γραμμής εντολών: 'occ db:convert-type', ή δείτε στην <a target=\"_blank\" href=\"%s\">τεκμηρίωση ↗</a>."
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 3aa684615e7..bef21661f4d 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -44,6 +44,7 @@
"Add trusted domain" : "Προσθέστε αξιόπιστη περιοχή",
"Migration in progress. Please wait until the migration is finished" : "Μετάβαση σε εξέλιξη. Παρακαλούμε περιμένετε μέχρι να ολοκληρωθεί η μετάβαση",
"Migration started …" : "Η μετάβαση ξεκίνησε ...",
+ "Not saved" : "Δεν αποθηκεύτηκε",
"Sending..." : "Αποστέλεται...",
"Official" : "Επίσημο",
"Approved" : "Εγκεκριμένο",
@@ -58,6 +59,9 @@
"Disable" : "Απενεργοποίηση",
"Enable" : "Ενεργοποίηση",
"Error while enabling app" : "Σφάλμα κατά την ενεργοποίηση της εφαρμογής",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Σφάλμα: αυτή η εφαρμογή δεν μπορεί να ενεργοποιηθεί γιατί θα καταστήσει ασταθή τον διακομιστή.",
+ "Error: could not disable broken app" : "Σφάλμα: αδυναμία απενεργοποίησης κατεστραμμένης εφαρμογής",
+ "Error while disabling broken app" : "Σφάλμα κατά την απενεργοποίηση κατεστραμμένης εφαρμογής",
"Updating...." : "Ενημέρωση...",
"Error while updating app" : "Σφάλμα κατά την ενημέρωση της εφαρμογής",
"Updated" : "Ενημερώθηκε",
@@ -66,15 +70,25 @@
"Uninstall" : "Απεγκατάσταση",
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Η εφαρμογή έχει ενεργοποιηθεί αλλά χρειάζεται ενημέρωση. Θα μεταφερθείτε στη σελίδα ενημέρωσης σε 5 δευτερόλεπτα.",
"App update" : "Ενημέρωση εφαρμογής",
+ "No apps found for {query}" : "Δεν βρέθηκαν εφαρμογές για {query}",
"Disconnect" : "Αποσύνδεση",
+ "Internet Explorer" : "Internet Explorer",
"Edge" : "Edge",
"Firefox" : "Firefox",
"Google Chrome" : "Google Chrome",
"Safari" : "Safari",
"Google Chrome for Android" : "Google Chrome για Android",
"iPhone" : "iPhone",
+ "iOS Client" : "Πελάτης iOS",
+ "Android Client" : "Πελάτης Android",
+ "This session" : "Αυτή η συνεδρία",
+ "Copied!" : "Αντιγράφτηκε!",
+ "Not supported!" : "Δεν υποστηρίζονται!",
"Press ⌘-C to copy." : "Για αντιγραφή πατήστε ⌘-C.",
"Press Ctrl-C to copy." : "Για αντιγραφή πατήστε Ctrl-C.",
+ "Error while loading browser sessions and device tokens" : "Σφάλμα κατά την φόρτωση συνεδριών περιηγητή και διακριτικών συσκευής",
+ "Error while creating device token" : "Σφάλμα κατά τη δημιουργία διακριτικού συσκευής",
+ "Error while deleting the token" : "Σφάλμα κατά την διαγραφή του διακριτικού",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Προέκυψε σφάλμα. Παρακαλούμε μεταφορτώστε ένα πιστοποιητικό PEM κωδικοποιημένο κατά ASCII.",
"Valid until {date}" : "Έγκυρο έως {date}",
"Delete" : "Διαγραφή",
@@ -87,11 +101,14 @@
"Strong password" : "Δυνατό συνθηματικό",
"Groups" : "Ομάδες",
"Unable to delete {objName}" : "Αδυναμία διαγραφής του {objName}",
+ "Error creating group: {message}" : "Σφάλμα δημιουργίας ομάδας: {message}",
"A valid group name must be provided" : "Πρέπει να δοθεί ένα έγκυρο όνομα ομάδας",
"deleted {groupName}" : "διαγραφή {groupName}",
"undo" : "αναίρεση",
"never" : "ποτέ",
"deleted {userName}" : "διαγραφή {userName}",
+ "Add group" : "Προσθήκη ομάδας",
+ "no group" : "καμια ομάδα",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Η αλλαγή του κωδικού πρόσβασης θα έχει ως αποτέλεσμα το χάσιμο δεδομένων, επειδή η ανάκτηση δεδομένων δεν είναι διαθέσιμη γι' αυτόν τον χρήστη",
"Password successfully changed" : "Το συνθηματικό αλλάχτηκε επιτυχώς",
"A valid username must be provided" : "Πρέπει να δοθεί έγκυρο όνομα χρήστη",
@@ -101,6 +118,8 @@
"__language_name__" : "__όνομα_γλώσσας__",
"Unlimited" : "Απεριόριστο",
"Personal info" : "Προσωπικές Πληροφορίες",
+ "Sessions" : "Συνεδρίες",
+ "App passwords" : "Συνθηματικά εφαρμογής",
"Sync clients" : "Συγχρονισμός πελατών",
"None" : "Τίποτα",
"Login" : "Σύνδεση",
@@ -150,6 +169,7 @@
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Το αρχείο ιστορικού είναι μεγαλύτερο από 100ΜΒ. Η λήψη του ίσως πάρει λίγη ώρα!",
"Security & setup warnings" : "Προειδοποιήσεις ασφάλειας & ρυθμίσεων",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Η php δεν φαίνεται να είναι σωστά ρυθμισμένη για ερωτήματα σε μεταβλητές περιβάλλοντος του συστήματος. Η δοκιμή με την εντολή getenv(\"PATH\") επιστρέφει κενή απάντηση.",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">τεκμηρίωση εγκατάστασης ↗</a> για τις σημειώσεις ρυθμίσεων php και για τις ρυθμίσεις της php του διακομιστή, ειδικότερα όταν χρησιμοποιείτε το php-fpm.",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Η ρύθμιση \"μόνο ανάγνωση\" έχει ενεργοποιηθεί. Αυτό εμποδίζει τον καθορισμό κάποιων ρυθμίσεων μέσω της διεπαφής web. Επιπλέον, το αρχείο πρέπει να γίνει χειροκίνητα εγγράψιμο πριν από κάθε διαδικασία ενημέρωσης.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Ο PHP φαίνεται να είναι ρυθμισμένος ώστε να αφαιρεί μπλοκ εσωτερικών κειμένων (inline doc). Αυτό θα καταστήσει κύριες εφαρμογές μη-διαθέσιμες.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.",
@@ -179,6 +199,7 @@
"days" : "ημέρες",
"Enforce expiration date" : "Επιβολή της ημερομηνίας λήξης",
"Allow resharing" : "Επιτρέπεται ο επαναδιαμοιρασμός",
+ "Allow sharing with groups" : "Να επιτρέπεται ο διαμοιρασμός με ομάδες",
"Restrict users to only share with users in their groups" : "Να επιτρέπεται σε χρήστες ο διαμοιρασμός μόνο με χρήστες που ανήκουν στις ομάδες τους",
"Allow users to send mail notification for shared files to other users" : "Να επιτρέπεται η αποστολή ειδοποιήσεων σε άλλους χρήστες, μέσω αλληλογραφίας για κοινόχρηστα αρχεία",
"Exclude groups from sharing" : "Εξαίρεση ομάδων από τον διαμοιρασμό",
@@ -208,6 +229,7 @@
"Enable only for specific groups" : "Ενεργοποίηση μόνο για καθορισμένες ομάδες",
"Uninstall App" : "Απεγκατάσταση Εφαρμογής",
"Enable experimental apps" : "Ενεργοποίηση πειραματικών εφαρμογών",
+ "SSL Root Certificates" : "Πιστοποιητικά SSL του Root",
"Common Name" : "Κοινό Όνομα",
"Valid until" : "Έγκυρο έως",
"Issued By" : "Έκδόθηκε από",
@@ -221,11 +243,13 @@
"Forum" : "Φόρουμ",
"Issue tracker" : "Ιχνηλάτης ζητημάτων",
"Commercial support" : "Εμπορική Υποστήριξη",
+ "You are using <strong>%s</strong> of <strong>%s</strong>" : "Χρησιμοποιείτε <strong>%s</strong> από <strong>%s</strong>",
"Profile picture" : "Φωτογραφία προφίλ",
"Upload new" : "Μεταφόρτωση νέου",
"Select from Files" : "Επιλογή από τα Αρχεία",
"Remove image" : "Αφαίρεση εικόνας",
"png or jpg, max. 20 MB" : "png ή jpg, μεγ. 20 MB",
+ "Picture provided by original account" : "Φωτογραφία που παρέχεται από τον πρωτότυπο λογαριασμό",
"Cancel" : "Άκυρο",
"Choose as profile picture" : "Επιλέξτε εικόνα προφίλ",
"Full name" : "Πλήρες όνομα",
@@ -251,10 +275,13 @@
"Name" : "Όνομα",
"App name" : "Όνομα εφαρμογής",
"Create new app password" : "Δημιουργία νέου συνθηματικού εφαρμογής",
+ "For security reasons this password will only be shown once." : "Για λόγους ασφαλείας αυτό το συνθηματικό θα εμφανιστεί μόνο μια φορά.",
"Username" : "Όνομα χρήστη",
"Done" : "Ολοκληρώθηκε",
"Follow us on Google Plus!" : "Ακολουθήστε μας στο Google Plus!",
+ "Like our facebook page!" : "Ακολουθήστε μας στην σελίδα μας στο facebook!",
"Subscribe to our twitter channel!" : "Εγγραφείτε στο κανάλι μας στο twitter!",
+ "Subscribe to our news feed!" : "Εγγραφείτε στην ροή των νέων μας!",
"Show storage location" : "Εμφάνιση τοποθεσίας αποθήκευσης",
"Show last log in" : "Εμφάνιση τελευταίας εισόδου",
"Show user backend" : "Εμφάνιση χρήστη συστήματος υποστήριξης",
@@ -267,6 +294,7 @@
"Group" : "Ομάδα",
"Everyone" : "Όλοι",
"Admins" : "Διαχειριστές",
+ "Default quota" : "Προεπιλέγμενη χωρητικότητα",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Παρακαλώ εισάγετε επιτρεπόμενα μερίδια αποθηκευτικού χώρου (π.χ. \"512 MB\" ή \"12 GB\")",
"Other" : "Άλλο",
"Quota" : "Σύνολο Χώρου",
@@ -278,12 +306,22 @@
"change email address" : "αλλαγή διεύθυνσης ηλ. αλληλογραφίας",
"Default" : "Προκαθορισμένο",
"add group" : "προσθήκη ομάδας",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Εάν θέλετε να υποστηρίξετε το έργο\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">συνεργαστείτε με τους προγραμματιστές</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">προωθήστε το</a>!",
"Add Group" : "Προσθήκη ομάδας",
+ "Default Quota" : "Προεπιλεγμένη χωρητικότητα",
"Full Name" : "Πλήρες όνομα",
+ "Storage Location" : "Τοποθεσία αποθηκευτικού χώρου",
+ "User Backend" : "Σύστημα υποστήριξης χρήστη",
"Last Login" : "Τελευταία είσοδος",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Εξωτερικό Αποθηκευτικό Μέσο",
- "Updates" : "Ενημερώσεις"
+ "Updates" : "Ενημερώσεις",
+ "No apps found for \"{query}\"" : "Δεν βρέθηκαν εφαρμογές για \"{query}\"",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" href=\"%s\">τεκμηρίωση εγκατάστασης ↗</a> για τις σημειώσεις ρυθμίσεων php και για τις ρυθμίσεις της php του διακομιστή, ειδικότερα όταν χρησιμοποιείτε το php-fpm.",
+ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Ο διακομιστής σας εκτελείται σε Microsoft Windows. Σας συνιστούμε το Linux για μια βέλτιστη εμπειρία χρήστη.",
+ "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Παρακαλώ ελέγξτε διπλά τα <a target=\"_blank\" href=\"%s\">εγχειρίδια εγκατάστασης ↗</a>, και ελέγξτε για σφάλματα ή προειδοποιήσεις στο <a href=\"#log-section\">ιστορικό</a>.",
+ "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "Μονάχα η κρυπτογράφηση δεν σας εγγυάται την ασφάλεια του συστήματος. Παρακαλώ δείτε στην τεκμηρίωση του Nextcloud για περισσότερες πληροφορίες σχετικά με τον τρόπο που δουλεύει η εφαρμογή κρυπτογράφησης, και τις υποστηριζόμενες περιπτώσεις.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Για να μεταφερθείτε σε άλλη βάση δεδομένων χρησιμοποιήστε το εργαλείο της γραμμής εντολών: 'occ db:convert-type', ή δείτε στην <a target=\"_blank\" href=\"%s\">τεκμηρίωση ↗</a>."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js
index f59889fb8e4..d4c44cb5a1d 100644
--- a/settings/l10n/fr.js
+++ b/settings/l10n/fr.js
@@ -218,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Empêcher certains groupes de partager",
"These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.",
"Tips & tricks" : "Trucs et astuces",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.",
diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json
index 2c3482a4169..0d9dd3c0822 100644
--- a/settings/l10n/fr.json
+++ b/settings/l10n/fr.json
@@ -216,6 +216,8 @@
"Exclude groups from sharing" : "Empêcher certains groupes de partager",
"These groups will still be able to receive shares, but not to initiate them." : "Ces groupes ne pourront plus initier de partage, mais ils pourront toujours rejoindre les partages faits par d'autres. ",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Activer l'autocomplétion des noms d'utilisateurs dans la fenêtre de partage. Si cette option est désactivée, les noms complets doivent être indiqués.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Afficher les conditions d'utilisation sur la page publique de téléversement. (Visible seulement quand la liste des fichiers est masquée.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ce texte sera visible sur la page publique de téléversement quand la liste des fichiers est masquée.",
"Tips & tricks" : "Trucs et astuces",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite est actuellement utilisé comme gestionnaire de base de données. Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'utilisation de SQLite est particulièrement déconseillée si vous utilisez le client de bureau pour synchroniser vos données.",
diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js
index b43e9487595..b45d491958b 100644
--- a/settings/l10n/hu_HU.js
+++ b/settings/l10n/hu_HU.js
@@ -15,7 +15,7 @@ OC.L10N.register(
"Federated Cloud Sharing" : "Megosztás Egyesített Felhőben",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL elavult %s verziót (%s) használ. Kérjük, frissítse az operációs rendszerét, vagy egyes funkciók (mint például a %s) megbízhatatlanul fognak működni.",
"A problem occurred, please check your log files (Error: %s)" : "Probléma történt, kérjük nézd meg a naplófájlokat (Hiba: %s).",
- "Migration Completed" : "Migráció kész!",
+ "Migration Completed" : "Migráció befejezve",
"Group already exists." : "A csoport már létezik.",
"Unable to add group." : "Nem lehet létrehozni a csoportot.",
"Unable to delete group." : "Nem lehet törölni a csoportot.",
@@ -54,7 +54,7 @@ OC.L10N.register(
"All" : "Mind",
"No apps found for your version" : "Nem található alkalmazás a verziód számára",
"The app will be downloaded from the app store" : "Az alkalmazás letöltésre kerül az alkalmazástárból",
- "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "A hivatalos applikációkat a közösség fejleszti. Ezek adják a központi funkcionalitásokat és éles rendszerekben használhatóak.",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "A hivatalos alkalmazásokat a közösség fejleszti. Ezek adják a központi funkcionalitásokat és éles rendszerekben használhatóak.",
"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." : "A jóváhagyott alkalmazásokat megbízható fejlesztők készítik, amik megfelelnek a felületes biztonsági ellenőrzésnek. Nyílt forráskódú tárolóban aktívan karbantartják és biztosítják a stabil használatot.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!",
"Update to %s" : "Frissítés erre: %s",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Sync clients" : "Szinkronizáló kliensek",
"None" : "Egyik sem",
"Login" : "Login",
- "Plain" : "Plain",
+ "Plain" : "Egyszerű",
"NT LAN Manager" : "NT LAN Manager",
"SSL" : "SSL",
"TLS" : "TLS",
@@ -155,7 +155,7 @@ OC.L10N.register(
"Enable server-side encryption" : "Szerver-oldali titkosítás engedélyezése",
"Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:",
"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." : "Ha egyszer engedélyezve lett a titkosítás, akkor onnantól kezdve a szerveren az összes fájl titkosításra kerül, melyet később csak akkor lehet visszafordítani, ha azt az aktív titkosítási modul támogatja és minden elő-követelmény (például helyreállító kulcs) teljesül.",
- "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." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérem olvassa el a dokumentációt, hogy további információkat szerezzen a titkosítási applikáció működéséről, és a támogatott lehetőségekről.",
+ "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." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérem olvassa el a dokumentációt, hogy további információkat szerezzen a titkosítási alkalmazás működéséről, és a támogatott lehetőségekről.",
"Be aware that encryption always increases the file size." : "Ügyeljen arra, hogy a titkosítás mindig megnöveli a fájl méretét!",
"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." : "Mindig jó ötlet rendszeres biztonsági mentést készíteni az adatokról. Titkosítás esetén a titkosító kulcsok biztonsági mentését elkülönítve tárolja az adatoktól!",
"This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?",
@@ -182,14 +182,16 @@ OC.L10N.register(
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden frissítés alkalmával.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázis nem tud \"READ COMMITTED\" tranzakció elkülönítési szinttel futni. Ez problémákat okozhat több egyidejű esemény végrehajtásakor.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s %2$s verziója van telepítve, de a stabilitási és teljesítményi okok miatt javasoljuk az újabb, %1$s verzióra való frissítést.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.",
- "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerülje ezeket a problémákat. Nézze meg a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezd a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerüld ezeket a problémákat. Nézd meg a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
"System locale can not be set to a one which supports UTF-8." : "A rendszer lokalizációs fájljai között nem sikerült olyat beállítani, ami támogatja az UTF-8-at.",
"This means that there might be problems with certain characters in file names." : "Ez azt jelenti, hogy probléma lehet bizonyos karakterekkel a fájlnevekben.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwrite.cli.url\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Az ütemezett feladat (cronjob) nem futott le parancssorból. A következő hibák tűntek fel:",
+ "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>." : "Kérjük, ellenőrizd a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"%s\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
"All checks passed." : "Minden ellenőrzés sikeres.",
"Cron" : "Ütemezett feladatok",
"Last cron job execution: %s." : "Az utolsó cron feladat ekkor futott le: %s.",
@@ -216,6 +218,8 @@ OC.L10N.register(
"Exclude groups from sharing" : "Csoportok megosztási jogának tiltása",
"These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Felhasználónév automatikus befejezése engedélyezése a megosztás ablakban. Ha le van tiltva, akkor a teljes felhasználónevet kell beírni.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Nyilatkozat szövegének megjelenítése a nyilvános feltöltési oldalon. (Csak akkor jelenik meg, ha fájl lista rejtett.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ez a szöveg jelenik meg a nyilvános feltöltési oldalon, amikor a fájl lista el van rejtve.",
"Tips & tricks" : "Tippek és trükkök",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.",
@@ -228,7 +232,7 @@ OC.L10N.register(
"Hardening and security guidance" : "Erősítési és biztonsági útmutató",
"Developer documentation" : "Fejlesztői dokumentáció",
"Experimental applications ahead" : "Kísérleti alkalmazások",
- "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "A kísérleti applikációk nincsenek biztonsági ellenőrizve, ismert vagy ismeretlen hibák lehetnek bennük és aktív fejlesztés alatt állnak. A telepítésük adatvesztéshez vezethet, vagy biztonsági kockázata lehet.",
+ "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "A kísérleti alkalmazások nincsenek biztonsági ellenőrizve, ismert vagy ismeretlen hibák lehetnek bennük és aktív fejlesztés alatt állnak. A telepítésük adatvesztéshez vezethet, vagy biztonsági kockázata lehet.",
"by %s" : "készítő: %s",
"%s-licensed" : "%s-licencelt",
"Documentation:" : "Dokumentációk:",
@@ -239,9 +243,9 @@ OC.L10N.register(
"Show description …" : "Leírás megjelenítése ...",
"Hide description …" : "Leírás elrejtése ...",
"This app has an update available." : "Frissítés érhető el az alkalmazáshoz.",
- "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ennek az applikációnak nincs minimum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
- "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ennek az applikációnak nincs maximum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
- "This app cannot be installed because the following dependencies are not fulfilled:" : "Ezt az applikációt nem lehet telepíteni, mert a következő függőségek hiányoznak:",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ennek az alkalmazásnak nincs minimum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ennek az alkalmazásnak nincs maximum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Ezt az alkalmazást nem lehet telepíteni, mert a következő függőségek hiányoznak:",
"Enable only for specific groups" : "Csak bizonyos csoportok számára tegyük elérhetővé",
"Uninstall App" : "Alkalmazás eltávolítása",
"Enable experimental apps" : "Kísérleti alkalmazások engedélyezése",
@@ -285,16 +289,20 @@ OC.L10N.register(
"Desktop client" : "Asztali kliens",
"Android app" : "Android alkalmazás",
"iOS app" : "IOS alkalmazás",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hírdesd</a>!",
"Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!",
+ "Web, desktop and mobile clients currently logged in to your account." : "A fiókodba jelenleg bejelentkezett web, asztali és mobil kliensek.",
"Device" : "Eszköz",
"Last activity" : "Utolsó tevékenység",
"Passcodes that give an app or device permissions to access your account." : "A számkódok jogosultságot adnak egy alkalmazás vagy eszköz részére a fiókod hozzáféréséhez.",
"Name" : "Név",
"App name" : "Alkalmazás név",
"Create new app password" : "Új alkalmazás jelszó létrehozása",
- "Use the credentials below to configure your app or device." : "Használja a lenti hitelesítő adatokat hogy beállítsa az applikációját vagy eszközét.",
+ "Use the credentials below to configure your app or device." : "Használja a lenti hitelesítő adatokat hogy beállítsa az alkalmazását vagy eszközét.",
+ "For security reasons this password will only be shown once." : "Biztonsági okokból ez a jelszó csak egyszer jelenik meg.",
"Username" : "Felhasználónév",
"Done" : "Kész",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Fejleszti a {communityopen}Nextcloud közösség{linkclose}, a {githubopen}forráskódra{linkclose} az {licenseopen}AGPL{linkclose} licenc vonatkozik.",
"Follow us on Google Plus!" : "Kövess minket a Googe Plus-szon!",
"Like our facebook page!" : "Kedveld a Facebook oldalunkat!",
"Subscribe to our twitter channel!" : "Iratkozz fel a Twitter csatornánkra!",
@@ -325,6 +333,7 @@ OC.L10N.register(
"change email address" : "e-mail cím megváltoztatása",
"Default" : "Alapértelmezett",
"add group" : "csoport hozzáadása",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztőkhöz</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">terjeszd</a>!",
"Add Group" : "csoport hozzáadása",
"Default Quota" : "Alapértelmezett kvóta",
"Full Name" : "Teljes név",
@@ -336,9 +345,18 @@ OC.L10N.register(
"Redis" : "Redis",
"External Storage" : "Külső tárolási szolgáltatások becsatolása",
"Updates" : "Frissítések",
+ "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "A hivatalos alkalmazásokat a Nextcloud közösség fejleszti. Ezek adják a Nextcloud központi funkcionalitásait és éles rendszerekben használhatóak.",
"No apps found for \"{query}\"" : "\"{query}\" keresésre nincs találat",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használsz.",
"Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel.",
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience.",
+ "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\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerüld ezeket a problémákat. Nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
+ "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"#log-section\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
+ "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérlek olvassa el a Nextcloud dokumentációt, hogy további információkat szerezhess a titkosítási alkalmazás működéséről, és a támogatott lehetőségekről.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használd ezt a parancssort: 'occ db:convert-type', vagy nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a>.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Ennek az alkalmazásnak nincs minimum szükséges Nextcloud verziója megadva. A Nextcloud 11-et követően ez hibát fog okozni.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Ennek az alkalmazásnak nincs maximum szükséges Nextcloud verziója megadva. A Nextcloud 11-et követően ez hibát fog okozni.",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">segítsd a többi felhasználót</a>!",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Fejlesztve a {communityopen}Nextcloud közösség{linkclose} által, a {githubopen}forráskód{linkclose} az {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} licensz alá tartozik."
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json
index 85ca63fa140..e060ae62e93 100644
--- a/settings/l10n/hu_HU.json
+++ b/settings/l10n/hu_HU.json
@@ -13,7 +13,7 @@
"Federated Cloud Sharing" : "Megosztás Egyesített Felhőben",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL elavult %s verziót (%s) használ. Kérjük, frissítse az operációs rendszerét, vagy egyes funkciók (mint például a %s) megbízhatatlanul fognak működni.",
"A problem occurred, please check your log files (Error: %s)" : "Probléma történt, kérjük nézd meg a naplófájlokat (Hiba: %s).",
- "Migration Completed" : "Migráció kész!",
+ "Migration Completed" : "Migráció befejezve",
"Group already exists." : "A csoport már létezik.",
"Unable to add group." : "Nem lehet létrehozni a csoportot.",
"Unable to delete group." : "Nem lehet törölni a csoportot.",
@@ -52,7 +52,7 @@
"All" : "Mind",
"No apps found for your version" : "Nem található alkalmazás a verziód számára",
"The app will be downloaded from the app store" : "Az alkalmazás letöltésre kerül az alkalmazástárból",
- "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "A hivatalos applikációkat a közösség fejleszti. Ezek adják a központi funkcionalitásokat és éles rendszerekben használhatóak.",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "A hivatalos alkalmazásokat a közösség fejleszti. Ezek adják a központi funkcionalitásokat és éles rendszerekben használhatóak.",
"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." : "A jóváhagyott alkalmazásokat megbízható fejlesztők készítik, amik megfelelnek a felületes biztonsági ellenőrzésnek. Nyílt forráskódú tárolóban aktívan karbantartják és biztosítják a stabil használatot.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!",
"Update to %s" : "Frissítés erre: %s",
@@ -128,7 +128,7 @@
"Sync clients" : "Szinkronizáló kliensek",
"None" : "Egyik sem",
"Login" : "Login",
- "Plain" : "Plain",
+ "Plain" : "Egyszerű",
"NT LAN Manager" : "NT LAN Manager",
"SSL" : "SSL",
"TLS" : "TLS",
@@ -153,7 +153,7 @@
"Enable server-side encryption" : "Szerver-oldali titkosítás engedélyezése",
"Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:",
"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." : "Ha egyszer engedélyezve lett a titkosítás, akkor onnantól kezdve a szerveren az összes fájl titkosításra kerül, melyet később csak akkor lehet visszafordítani, ha azt az aktív titkosítási modul támogatja és minden elő-követelmény (például helyreállító kulcs) teljesül.",
- "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." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérem olvassa el a dokumentációt, hogy további információkat szerezzen a titkosítási applikáció működéséről, és a támogatott lehetőségekről.",
+ "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." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérem olvassa el a dokumentációt, hogy további információkat szerezzen a titkosítási alkalmazás működéséről, és a támogatott lehetőségekről.",
"Be aware that encryption always increases the file size." : "Ügyeljen arra, hogy a titkosítás mindig megnöveli a fájl méretét!",
"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." : "Mindig jó ötlet rendszeres biztonsági mentést készíteni az adatokról. Titkosítás esetén a titkosító kulcsok biztonsági mentését elkülönítve tárolja az adatoktól!",
"This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?",
@@ -180,14 +180,16 @@
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Csak olvasható beállítófájl engedélyezve. Ez meggátolja a beállítások módosítását a webes felületről. Továbbá, a fájlt kézzel kell írhatóvá tenni minden frissítés alkalmával.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.",
+ "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Az adatbázis nem tud \"READ COMMITTED\" tranzakció elkülönítési szinttel futni. Ez problémákat okozhat több egyidejű esemény végrehajtásakor.",
"%1$s below version %2$s is installed, for stability and performance reasons we recommend updating to a newer %1$s version." : "%1$s %2$s verziója van telepítve, de a stabilitási és teljesítményi okok miatt javasoljuk az újabb, %1$s verzióra való frissítést.",
"The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.",
- "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerülje ezeket a problémákat. Nézze meg a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
+ "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezd a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerüld ezeket a problémákat. Nézd meg a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
"System locale can not be set to a one which supports UTF-8." : "A rendszer lokalizációs fájljai között nem sikerült olyat beállítani, ami támogatja az UTF-8-at.",
"This means that there might be problems with certain characters in file names." : "Ez azt jelenti, hogy probléma lehet bizonyos karakterekkel a fájlnevekben.",
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwrite.cli.url\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Az ütemezett feladat (cronjob) nem futott le parancssorból. A következő hibák tűntek fel:",
+ "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>." : "Kérjük, ellenőrizd a <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"%s\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
"All checks passed." : "Minden ellenőrzés sikeres.",
"Cron" : "Ütemezett feladatok",
"Last cron job execution: %s." : "Az utolsó cron feladat ekkor futott le: %s.",
@@ -214,6 +216,8 @@
"Exclude groups from sharing" : "Csoportok megosztási jogának tiltása",
"These groups will still be able to receive shares, but not to initiate them." : "E csoportok tagjaival meg lehet osztani anyagokat, de ők nem hozhatnak létre megosztást.",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "Felhasználónév automatikus befejezése engedélyezése a megosztás ablakban. Ha le van tiltva, akkor a teljes felhasználónevet kell beírni.",
+ "Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)" : "Nyilatkozat szövegének megjelenítése a nyilvános feltöltési oldalon. (Csak akkor jelenik meg, ha fájl lista rejtett.)",
+ "This text will be shown on the public link upload page when the file list is hidden." : "Ez a szöveg jelenik meg a nyilvános feltöltési oldalon, amikor a fájl lista el van rejtve.",
"Tips & tricks" : "Tippek és trükkök",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "Adatbázisként az SQLite-ot fogjuk használni. Nagyobb telepítések esetén javasoljuk, hogy váltson másik adatbázis háttérkiszolgálóra",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Amikor az asztali klienset használja fálj szinkronizációra, akkor az SQLite használata nem ajánlott.",
@@ -226,7 +230,7 @@
"Hardening and security guidance" : "Erősítési és biztonsági útmutató",
"Developer documentation" : "Fejlesztői dokumentáció",
"Experimental applications ahead" : "Kísérleti alkalmazások",
- "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "A kísérleti applikációk nincsenek biztonsági ellenőrizve, ismert vagy ismeretlen hibák lehetnek bennük és aktív fejlesztés alatt állnak. A telepítésük adatvesztéshez vezethet, vagy biztonsági kockázata lehet.",
+ "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "A kísérleti alkalmazások nincsenek biztonsági ellenőrizve, ismert vagy ismeretlen hibák lehetnek bennük és aktív fejlesztés alatt állnak. A telepítésük adatvesztéshez vezethet, vagy biztonsági kockázata lehet.",
"by %s" : "készítő: %s",
"%s-licensed" : "%s-licencelt",
"Documentation:" : "Dokumentációk:",
@@ -237,9 +241,9 @@
"Show description …" : "Leírás megjelenítése ...",
"Hide description …" : "Leírás elrejtése ...",
"This app has an update available." : "Frissítés érhető el az alkalmazáshoz.",
- "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ennek az applikációnak nincs minimum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
- "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ennek az applikációnak nincs maximum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
- "This app cannot be installed because the following dependencies are not fulfilled:" : "Ezt az applikációt nem lehet telepíteni, mert a következő függőségek hiányoznak:",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Ennek az alkalmazásnak nincs minimum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Ennek az alkalmazásnak nincs maximum szükséges Nextcloud verziója megadva. Ez hiba lesz a jövőben.",
+ "This app cannot be installed because the following dependencies are not fulfilled:" : "Ezt az alkalmazást nem lehet telepíteni, mert a következő függőségek hiányoznak:",
"Enable only for specific groups" : "Csak bizonyos csoportok számára tegyük elérhetővé",
"Uninstall App" : "Alkalmazás eltávolítása",
"Enable experimental apps" : "Kísérleti alkalmazások engedélyezése",
@@ -283,16 +287,20 @@
"Desktop client" : "Asztali kliens",
"Android app" : "Android alkalmazás",
"iOS app" : "IOS alkalmazás",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">hírdesd</a>!",
"Show First Run Wizard again" : "Nézzük meg újra az első bejelentkezéskori segítséget!",
+ "Web, desktop and mobile clients currently logged in to your account." : "A fiókodba jelenleg bejelentkezett web, asztali és mobil kliensek.",
"Device" : "Eszköz",
"Last activity" : "Utolsó tevékenység",
"Passcodes that give an app or device permissions to access your account." : "A számkódok jogosultságot adnak egy alkalmazás vagy eszköz részére a fiókod hozzáféréséhez.",
"Name" : "Név",
"App name" : "Alkalmazás név",
"Create new app password" : "Új alkalmazás jelszó létrehozása",
- "Use the credentials below to configure your app or device." : "Használja a lenti hitelesítő adatokat hogy beállítsa az applikációját vagy eszközét.",
+ "Use the credentials below to configure your app or device." : "Használja a lenti hitelesítő adatokat hogy beállítsa az alkalmazását vagy eszközét.",
+ "For security reasons this password will only be shown once." : "Biztonsági okokból ez a jelszó csak egyszer jelenik meg.",
"Username" : "Felhasználónév",
"Done" : "Kész",
+ "Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "Fejleszti a {communityopen}Nextcloud közösség{linkclose}, a {githubopen}forráskódra{linkclose} az {licenseopen}AGPL{linkclose} licenc vonatkozik.",
"Follow us on Google Plus!" : "Kövess minket a Googe Plus-szon!",
"Like our facebook page!" : "Kedveld a Facebook oldalunkat!",
"Subscribe to our twitter channel!" : "Iratkozz fel a Twitter csatornánkra!",
@@ -323,6 +331,7 @@
"change email address" : "e-mail cím megváltoztatása",
"Default" : "Alapértelmezett",
"add group" : "csoport hozzáadása",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Ha támogatni szeretnéd a projektet\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztőkhöz</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">terjeszd</a>!",
"Add Group" : "csoport hozzáadása",
"Default Quota" : "Alapértelmezett kvóta",
"Full Name" : "Teljes név",
@@ -334,9 +343,18 @@
"Redis" : "Redis",
"External Storage" : "Külső tárolási szolgáltatások becsatolása",
"Updates" : "Frissítések",
+ "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "A hivatalos alkalmazásokat a Nextcloud közösség fejleszti. Ezek adják a Nextcloud központi funkcionalitásait és éles rendszerekben használhatóak.",
"No apps found for \"{query}\"" : "\"{query}\" keresésre nincs találat",
+ "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használsz.",
"Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Your database does not run with \"READ COMMITED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel.",
"Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience.",
+ "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\" href=\"%s\">documentation ↗</a> for more information." : "Tranzakcionális fájl lezárás tiltva van, ez problémákat okozhat versenyhelyzetben. Engedélyezze a 'filelocking.enabled' beállítást a config.php -ben, hogy elkerüld ezeket a problémákat. Nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a> bővebb információért.",
+ "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Kérjük, ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> és a <a href=\"#log-section\">naplót</a>, hogy tartalmaz-e bármilyen hibát vagy figyelmeztetést.",
+ "Encryption alone does not guarantee security of the system. Please see Nextcloud documentation for more information about how the encryption app works, and the supported use cases." : "A titkosítás önmagában nem garantálja a rendszer biztonságát. Kérlek olvassa el a Nextcloud dokumentációt, hogy további információkat szerezhess a titkosítási alkalmazás működéséről, és a támogatott lehetőségekről.",
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "Más adatbázisról való áttéréshez használd ezt a parancssort: 'occ db:convert-type', vagy nézd meg a <a target=\"_blank\" href=\"%s\">dokumentációt ↗</a>.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Ennek az alkalmazásnak nincs minimum szükséges Nextcloud verziója megadva. A Nextcloud 11-et követően ez hibát fog okozni.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Ennek az alkalmazásnak nincs maximum szükséges Nextcloud verziója megadva. A Nextcloud 11-et követően ez hibát fog okozni.",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\tor\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">help other users</a>!" : "Ha támogatni szeretnéd a projektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">csatlakozz a fejlesztéshez</a>\n\t\tvagy\n\t\t<a href=\"https://help.nextcloud.com/\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">segítsd a többi felhasználót</a>!",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Fejlesztve a {communityopen}Nextcloud közösség{linkclose} által, a {githubopen}forráskód{linkclose} az {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} licensz alá tartozik."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js
index 396410067ce..39ae3054092 100644
--- a/settings/l10n/nb_NO.js
+++ b/settings/l10n/nb_NO.js
@@ -46,12 +46,15 @@ OC.L10N.register(
"Add trusted domain" : "Legg til et klarert domene",
"Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.",
"Migration started …" : "Migrering startet ..",
+ "Not saved" : "Ikke lagret",
"Sending..." : "Sender...",
"Official" : "Offisiell",
"Approved" : "Godkjent",
"Experimental" : "Eksperimentell",
"All" : "Alle",
"No apps found for your version" : "Ingen apper funnet for din versjon",
+ "The app will be downloaded from the app store" : "Denne appen blir lastet ned fra app butikken",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offisielle apper er utviklet av og innenfor miljøet, de byr på sentral funksjonalitet og er klare for bruk i produksjon.",
"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." : "Godkjente apper er utviklet av tiltrodde utviklere og har gjennomgått en rask sikkerhetssjekk. De vedlikeholdes aktivt i et åpent kode-depot og utviklerne anser dem for å være stabile for tidvis eller normal bruk.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denne appen er ikke sjekket for sikkerhetsproblemer og er ny eller ansett for å være ustabil. Installer på egen risiko.",
"Update to %s" : "Oppdater til %s",
@@ -61,7 +64,7 @@ OC.L10N.register(
"Disable" : "Deaktiver ",
"Enable" : "Aktiver",
"Error while enabling app" : "Aktivering av app feilet",
- "Error: this app cannot be enabled because it makes the server unstable" : "Feil: Denne appen kan ikke aktiveres fordi den gjør serveren ustabil",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Feil: Denne appen kan ikke aktiveres fordi den gjør tjeneren ustabil",
"Error: could not disable broken app" : "Feil: Kunne ikke deaktivere ustabil app",
"Error while disabling broken app" : "Feil ved deaktivering av ustabil app",
"Updating...." : "Oppdaterer...",
@@ -73,6 +76,25 @@ OC.L10N.register(
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Appen er aktivert men må oppdateres. Du vil bli omdirigert til oppdateringssiden om 5 sekunder.",
"App update" : "Oppdatering av applikasjon",
"No apps found for {query}" : "Ingen apper funnet for \"{query}\"",
+ "Disconnect" : "Koble fra",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome for Android",
+ "iPhone" : "iPhone",
+ "iOS Client" : "iOS klient",
+ "Android Client" : "Android klient",
+ "Sync client - {os}" : "Synkroniseringsklient - {os}",
+ "This session" : "Denne økten",
+ "Copied!" : "Kopiert!",
+ "Not supported!" : "Ikke støttet!",
+ "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
+ "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere",
+ "Error while loading browser sessions and device tokens" : "Feil under lasting av nettleserøkt og enhetsnøkler",
+ "Error while creating device token" : "Feil under opprettelse av enhetsnøkkel",
+ "Error while deleting the token" : "Feil under sletting av nøkkel",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Vennligst last opp et ASCII-kodet PEM-sertifikat.",
"Valid until {date}" : "Gyldig til {date}",
"Delete" : "Slett",
@@ -91,7 +113,11 @@ OC.L10N.register(
"undo" : "angre",
"never" : "aldri",
"deleted {userName}" : "slettet {userName}",
+ "Add group" : "Legg til gruppe",
+ "Invalid quota value \"{val}\"" : "Ugyldig kvoteverdi \"{val}\"",
+ "no group" : "ingen gruppe",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Forandring av passordet vil føre til tap av data, fordi datagjennoppretting er utilgjengelig for denne brukeren",
+ "Password successfully changed" : "Passordet ble endret.",
"A valid username must be provided" : "Oppgi et gyldig brukernavn",
"Error creating user: {message}" : "Feil ved oppretting av bruker: {message}",
"A valid password must be provided" : "Oppgi et gyldig passord",
@@ -99,6 +125,8 @@ OC.L10N.register(
"__language_name__" : "__language_name__",
"Unlimited" : "Ubegrenset",
"Personal info" : "Personlig informasjon",
+ "Sessions" : "Økt",
+ "App passwords" : "App passord",
"Sync clients" : "Synkroniseringsklienter",
"None" : "Ingen",
"Login" : "Logg inn",
@@ -106,7 +134,7 @@ OC.L10N.register(
"NT LAN Manager" : "NT LAN Manager",
"SSL" : "SSL",
"TLS" : "TLS",
- "Email server" : "E-postserver",
+ "Email server" : "E-posttjener",
"Open documentation" : "Åpne dokumentasjonen",
"This is used for sending out notifications." : "Dette brukes for utsending av varsler.",
"Send mode" : "Sendemåte",
@@ -115,7 +143,7 @@ OC.L10N.register(
"mail" : "e-post",
"Authentication method" : "Autentiseringsmetode",
"Authentication required" : "Autentisering kreves",
- "Server address" : "Server-adresse",
+ "Server address" : "Tjeneradresse",
"Port" : "Port",
"Credentials" : "Påloggingsdetaljer",
"SMTP Username" : "SMTP-brukernavn",
@@ -123,10 +151,10 @@ OC.L10N.register(
"Store credentials" : "Lagre påloggingsdetaljer",
"Test email settings" : "Test innstillinger for e-post",
"Send email" : "Send e-post",
- "Server-side encryption" : "Serverkryptering",
- "Enable server-side encryption" : "Aktiver serverkryptering",
- "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer serverkrykptering:",
- "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." : "Når kryptering er blitt aktivert, vil alle filer som lastes opp til serveren fra det tidspunktet av bli lagret kryptert på serveren. Det vil kun være mulig å deaktivere kryptering senere dersom den aktive krypteringsmodulen støtter det og alle forutsetninger (f.eks. å sette en gjenopprettingsnøkkel) er til stede.",
+ "Server-side encryption" : "Tjenerkryptering",
+ "Enable server-side encryption" : "Aktiver tjenerkryptering",
+ "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer tjenerkrykptering:",
+ "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." : "Når kryptering er blitt aktivert, vil alle filer som lastes opp til tjeneren fra det tidspunktet av bli lagret kryptert på tjeneren. Det vil kun være mulig å deaktivere kryptering senere dersom den aktive krypteringsmodulen støtter det og alle forutsetninger (f.eks. å sette en gjenopprettingsnøkkel) er til stede.",
"Be aware that encryption always increases the file size." : "Vær oppmerksom på at kryptering alltid øker filstørrelsen.",
"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." : "Det er alltid bra å ta regelmessig sikkerhetskopi av dataene dine. Pass på å ta kopi av krypteringsnøklene sammen med dataene når kryptering er i bruk.",
"This is the final warning: Do you really want to enable encryption?" : "Dette er siste advarsel: Vil du virkelig aktivere kryptering?",
@@ -149,7 +177,7 @@ OC.L10N.register(
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!",
"Security & setup warnings" : "Advarsler om sikkerhet og oppsett",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.",
- "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på serveren din, særlig om du bruker php-fpm.",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
@@ -205,9 +233,13 @@ OC.L10N.register(
"Documentation:" : "Dokumentasjon:",
"User documentation" : "Brukerdokumentasjon",
"Admin documentation" : "Admin-dokumentasjon",
+ "Visit website" : "Besøk nettsiden",
+ "Report a bug" : "Rapporter en feil",
"Show description …" : "Vis beskrivelse …",
"Hide description …" : "Skjul beskrivelse …",
"This app has an update available." : "En oppdatering er tilgjengelig for denne appen.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Denne appen har ingen laveste versjon av Nextcloud definert. Dette vil være en feil i fremtiden.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Denne appen har ingen høyeste versjon av Nextcloud definert. Dette vil være en feil i fremtiden.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Denne appen kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt:",
"Enable only for specific groups" : "Aktiver kun for visse grupper",
"Uninstall App" : "Avinstaller app",
@@ -253,9 +285,19 @@ OC.L10N.register(
"Android app" : "Android-app",
"iOS app" : "iOS-app",
"Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt",
+ "Device" : "Enhet",
+ "Last activity" : "Seneste aktivitet",
"Name" : "Navn",
+ "App name" : "App navn",
+ "Create new app password" : "Lag nytt app passord",
+ "For security reasons this password will only be shown once." : "For sikkerhetens skyld vil dette passordet kun vises en gang.",
"Username" : "Brukernavn",
"Done" : "Ferdig",
+ "Follow us on Google Plus!" : "Følg oss på Google Plus!",
+ "Like our facebook page!" : "Lik vår facebook side!",
+ "Subscribe to our twitter channel!" : "Abonner på vår twitter kanal!",
+ "Subscribe to our news feed!" : "Abonner på vår nyhetsstrøm!",
+ "Subscribe to our newsletter!" : "Abonner på vårt nyhetsbrev!",
"Show storage location" : "Vis lagringssted",
"Show last log in" : "Vis site innlogging",
"Show user backend" : "Vis bruker-server",
@@ -268,16 +310,35 @@ OC.L10N.register(
"Group" : "Gruppe",
"Everyone" : "Alle",
"Admins" : "Administratorer",
+ "Default quota" : "Standard kvote",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Legg inn lagringskvote (f.eks. \"512 MB\" eller \"12 GB\")",
"Other" : "Annet",
+ "Group admin for" : "Gruppeadministrator for",
"Quota" : "Kvote",
+ "Storage location" : "Lagringsplassering",
+ "User backend" : "Bruker-tjener",
+ "Last login" : "Siste innlogging",
"change full name" : "endre fullt navn",
"set new password" : "sett nytt passord",
"change email address" : "endre e-postadresse",
"Default" : "Standard",
+ "add group" : "legg til gruppe",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Hvis du vil støtte prosjektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i utviklingen</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spre ordet</a>!",
+ "Add Group" : "Legg til gruppe",
+ "Default Quota" : "Standard kvote",
+ "Full Name" : "Fullt navn",
+ "Group Admin for" : "Gruppeadministrator for",
+ "Storage Location" : "Lagringsplassering",
+ "User Backend" : "Bruker-tjener",
+ "Last Login" : "Siste innlogging",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Ekstern lagring",
- "Updates" : "Oppdateringer"
+ "Updates" : "Oppdateringer",
+ "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offisielle apper er utviklet av og innenfor miljøet, de byr på sentral funksjonalitet og er klare for bruk i produksjon.",
+ "No apps found for \"{query}\"" : "Ingen apper funnet for \"{query}\"",
+ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Serveren din kjører på Microsoft Windows. Vi anbefaler sterkt Linux for en optimal brukeropplevelse.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Denne appen har ingen laveste versjon av Nextcloud definert. Dette vil være en feil i Nextcloud 11 og senere.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Denne appen har ingen maksimum versjon av Nextcloud definert. Dette vil være en feil i Nextcloud 11 og senere."
},
"nplurals=2; plural=(n != 1);");
diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json
index 5be9bfa54ce..4a971318974 100644
--- a/settings/l10n/nb_NO.json
+++ b/settings/l10n/nb_NO.json
@@ -44,12 +44,15 @@
"Add trusted domain" : "Legg til et klarert domene",
"Migration in progress. Please wait until the migration is finished" : "Migrering utføres. Vent til migreringen er ferdig.",
"Migration started …" : "Migrering startet ..",
+ "Not saved" : "Ikke lagret",
"Sending..." : "Sender...",
"Official" : "Offisiell",
"Approved" : "Godkjent",
"Experimental" : "Eksperimentell",
"All" : "Alle",
"No apps found for your version" : "Ingen apper funnet for din versjon",
+ "The app will be downloaded from the app store" : "Denne appen blir lastet ned fra app butikken",
+ "Official apps are developed by and within the community. They offer central functionality and are ready for production use." : "Offisielle apper er utviklet av og innenfor miljøet, de byr på sentral funksjonalitet og er klare for bruk i produksjon.",
"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." : "Godkjente apper er utviklet av tiltrodde utviklere og har gjennomgått en rask sikkerhetssjekk. De vedlikeholdes aktivt i et åpent kode-depot og utviklerne anser dem for å være stabile for tidvis eller normal bruk.",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Denne appen er ikke sjekket for sikkerhetsproblemer og er ny eller ansett for å være ustabil. Installer på egen risiko.",
"Update to %s" : "Oppdater til %s",
@@ -59,7 +62,7 @@
"Disable" : "Deaktiver ",
"Enable" : "Aktiver",
"Error while enabling app" : "Aktivering av app feilet",
- "Error: this app cannot be enabled because it makes the server unstable" : "Feil: Denne appen kan ikke aktiveres fordi den gjør serveren ustabil",
+ "Error: this app cannot be enabled because it makes the server unstable" : "Feil: Denne appen kan ikke aktiveres fordi den gjør tjeneren ustabil",
"Error: could not disable broken app" : "Feil: Kunne ikke deaktivere ustabil app",
"Error while disabling broken app" : "Feil ved deaktivering av ustabil app",
"Updating...." : "Oppdaterer...",
@@ -71,6 +74,25 @@
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Appen er aktivert men må oppdateres. Du vil bli omdirigert til oppdateringssiden om 5 sekunder.",
"App update" : "Oppdatering av applikasjon",
"No apps found for {query}" : "Ingen apper funnet for \"{query}\"",
+ "Disconnect" : "Koble fra",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome" : "Google Chrome",
+ "Safari" : "Safari",
+ "Google Chrome for Android" : "Google Chrome for Android",
+ "iPhone" : "iPhone",
+ "iOS Client" : "iOS klient",
+ "Android Client" : "Android klient",
+ "Sync client - {os}" : "Synkroniseringsklient - {os}",
+ "This session" : "Denne økten",
+ "Copied!" : "Kopiert!",
+ "Not supported!" : "Ikke støttet!",
+ "Press ⌘-C to copy." : "Trykk ⌘-C for å kopiere",
+ "Press Ctrl-C to copy." : "Trykk Ctrl-C for å kopiere",
+ "Error while loading browser sessions and device tokens" : "Feil under lasting av nettleserøkt og enhetsnøkler",
+ "Error while creating device token" : "Feil under opprettelse av enhetsnøkkel",
+ "Error while deleting the token" : "Feil under sletting av nøkkel",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "Det oppstod en feil. Vennligst last opp et ASCII-kodet PEM-sertifikat.",
"Valid until {date}" : "Gyldig til {date}",
"Delete" : "Slett",
@@ -89,7 +111,11 @@
"undo" : "angre",
"never" : "aldri",
"deleted {userName}" : "slettet {userName}",
+ "Add group" : "Legg til gruppe",
+ "Invalid quota value \"{val}\"" : "Ugyldig kvoteverdi \"{val}\"",
+ "no group" : "ingen gruppe",
"Changing the password will result in data loss, because data recovery is not available for this user" : "Forandring av passordet vil føre til tap av data, fordi datagjennoppretting er utilgjengelig for denne brukeren",
+ "Password successfully changed" : "Passordet ble endret.",
"A valid username must be provided" : "Oppgi et gyldig brukernavn",
"Error creating user: {message}" : "Feil ved oppretting av bruker: {message}",
"A valid password must be provided" : "Oppgi et gyldig passord",
@@ -97,6 +123,8 @@
"__language_name__" : "__language_name__",
"Unlimited" : "Ubegrenset",
"Personal info" : "Personlig informasjon",
+ "Sessions" : "Økt",
+ "App passwords" : "App passord",
"Sync clients" : "Synkroniseringsklienter",
"None" : "Ingen",
"Login" : "Logg inn",
@@ -104,7 +132,7 @@
"NT LAN Manager" : "NT LAN Manager",
"SSL" : "SSL",
"TLS" : "TLS",
- "Email server" : "E-postserver",
+ "Email server" : "E-posttjener",
"Open documentation" : "Åpne dokumentasjonen",
"This is used for sending out notifications." : "Dette brukes for utsending av varsler.",
"Send mode" : "Sendemåte",
@@ -113,7 +141,7 @@
"mail" : "e-post",
"Authentication method" : "Autentiseringsmetode",
"Authentication required" : "Autentisering kreves",
- "Server address" : "Server-adresse",
+ "Server address" : "Tjeneradresse",
"Port" : "Port",
"Credentials" : "Påloggingsdetaljer",
"SMTP Username" : "SMTP-brukernavn",
@@ -121,10 +149,10 @@
"Store credentials" : "Lagre påloggingsdetaljer",
"Test email settings" : "Test innstillinger for e-post",
"Send email" : "Send e-post",
- "Server-side encryption" : "Serverkryptering",
- "Enable server-side encryption" : "Aktiver serverkryptering",
- "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer serverkrykptering:",
- "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." : "Når kryptering er blitt aktivert, vil alle filer som lastes opp til serveren fra det tidspunktet av bli lagret kryptert på serveren. Det vil kun være mulig å deaktivere kryptering senere dersom den aktive krypteringsmodulen støtter det og alle forutsetninger (f.eks. å sette en gjenopprettingsnøkkel) er til stede.",
+ "Server-side encryption" : "Tjenerkryptering",
+ "Enable server-side encryption" : "Aktiver tjenerkryptering",
+ "Please read carefully before activating server-side encryption: " : "Vennligst les dette nøye før du aktiverer tjenerkrykptering:",
+ "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." : "Når kryptering er blitt aktivert, vil alle filer som lastes opp til tjeneren fra det tidspunktet av bli lagret kryptert på tjeneren. Det vil kun være mulig å deaktivere kryptering senere dersom den aktive krypteringsmodulen støtter det og alle forutsetninger (f.eks. å sette en gjenopprettingsnøkkel) er til stede.",
"Be aware that encryption always increases the file size." : "Vær oppmerksom på at kryptering alltid øker filstørrelsen.",
"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." : "Det er alltid bra å ta regelmessig sikkerhetskopi av dataene dine. Pass på å ta kopi av krypteringsnøklene sammen med dataene når kryptering er i bruk.",
"This is the final warning: Do you really want to enable encryption?" : "Dette er siste advarsel: Vil du virkelig aktivere kryptering?",
@@ -147,7 +175,7 @@
"The logfile is bigger than 100 MB. Downloading it may take some time!" : "Loggfilen er over 100 MB, nedlastingen kan ta en stund!",
"Security & setup warnings" : "Advarsler om sikkerhet og oppsett",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.",
- "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på serveren din, særlig om du bruker php-fpm.",
+ "Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Vennligst sjekk <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installasjonsdokumentasjonen ↗</a> etter php konfigurasjonsnotater og konfigurering av php på tjeneren din, særlig om du bruker php-fpm.",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.",
"PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.",
"This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.",
@@ -203,9 +231,13 @@
"Documentation:" : "Dokumentasjon:",
"User documentation" : "Brukerdokumentasjon",
"Admin documentation" : "Admin-dokumentasjon",
+ "Visit website" : "Besøk nettsiden",
+ "Report a bug" : "Rapporter en feil",
"Show description …" : "Vis beskrivelse …",
"Hide description …" : "Skjul beskrivelse …",
"This app has an update available." : "En oppdatering er tilgjengelig for denne appen.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in the future." : "Denne appen har ingen laveste versjon av Nextcloud definert. Dette vil være en feil i fremtiden.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in the future." : "Denne appen har ingen høyeste versjon av Nextcloud definert. Dette vil være en feil i fremtiden.",
"This app cannot be installed because the following dependencies are not fulfilled:" : "Denne appen kan ikke installeres fordi følgende avhengigheter ikke er tilfredsstilt:",
"Enable only for specific groups" : "Aktiver kun for visse grupper",
"Uninstall App" : "Avinstaller app",
@@ -251,9 +283,19 @@
"Android app" : "Android-app",
"iOS app" : "iOS-app",
"Show First Run Wizard again" : "Vis \"Førstegangs veiviser\" på nytt",
+ "Device" : "Enhet",
+ "Last activity" : "Seneste aktivitet",
"Name" : "Navn",
+ "App name" : "App navn",
+ "Create new app password" : "Lag nytt app passord",
+ "For security reasons this password will only be shown once." : "For sikkerhetens skyld vil dette passordet kun vises en gang.",
"Username" : "Brukernavn",
"Done" : "Ferdig",
+ "Follow us on Google Plus!" : "Følg oss på Google Plus!",
+ "Like our facebook page!" : "Lik vår facebook side!",
+ "Subscribe to our twitter channel!" : "Abonner på vår twitter kanal!",
+ "Subscribe to our news feed!" : "Abonner på vår nyhetsstrøm!",
+ "Subscribe to our newsletter!" : "Abonner på vårt nyhetsbrev!",
"Show storage location" : "Vis lagringssted",
"Show last log in" : "Vis site innlogging",
"Show user backend" : "Vis bruker-server",
@@ -266,16 +308,35 @@
"Group" : "Gruppe",
"Everyone" : "Alle",
"Admins" : "Administratorer",
+ "Default quota" : "Standard kvote",
"Please enter storage quota (ex: \"512 MB\" or \"12 GB\")" : "Legg inn lagringskvote (f.eks. \"512 MB\" eller \"12 GB\")",
"Other" : "Annet",
+ "Group admin for" : "Gruppeadministrator for",
"Quota" : "Kvote",
+ "Storage location" : "Lagringsplassering",
+ "User backend" : "Bruker-tjener",
+ "Last login" : "Siste innlogging",
"change full name" : "endre fullt navn",
"set new password" : "sett nytt passord",
"change email address" : "endre e-postadresse",
"Default" : "Standard",
+ "add group" : "legg til gruppe",
+ "If you want to support the project\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">join development</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spread the word</a>!" : "Hvis du vil støtte prosjektet \n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">delta i utviklingen</a>\n\t\t<or></or>\n\t\t<a href=\"https://nextcloud.com/contribute\"\n\t\t\ttarget=\"_blank\" rel=\"noreferrer\">spre ordet</a>!",
+ "Add Group" : "Legg til gruppe",
+ "Default Quota" : "Standard kvote",
+ "Full Name" : "Fullt navn",
+ "Group Admin for" : "Gruppeadministrator for",
+ "Storage Location" : "Lagringsplassering",
+ "User Backend" : "Bruker-tjener",
+ "Last Login" : "Siste innlogging",
"APCu" : "APCu",
"Redis" : "Redis",
"External Storage" : "Ekstern lagring",
- "Updates" : "Oppdateringer"
+ "Updates" : "Oppdateringer",
+ "Official apps are developed by and within the Nextcloud community. They offer functionality central to Nextcloud and are ready for production use." : "Offisielle apper er utviklet av og innenfor miljøet, de byr på sentral funksjonalitet og er klare for bruk i produksjon.",
+ "No apps found for \"{query}\"" : "Ingen apper funnet for \"{query}\"",
+ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Serveren din kjører på Microsoft Windows. Vi anbefaler sterkt Linux for en optimal brukeropplevelse.",
+ "This app has no minimum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Denne appen har ingen laveste versjon av Nextcloud definert. Dette vil være en feil i Nextcloud 11 og senere.",
+ "This app has no maximum Nextcloud version assigned. This will be an error in Nextcloud 11 and later." : "Denne appen har ingen maksimum versjon av Nextcloud definert. Dette vil være en feil i Nextcloud 11 og senere."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js
index 3cdcb90f896..4ab34057b74 100644
--- a/settings/l10n/zh_TW.js
+++ b/settings/l10n/zh_TW.js
@@ -1,16 +1,16 @@
OC.L10N.register(
"settings",
{
+ "Enabled" : "已啓用",
+ "Not enabled" : "未啟用",
"Wrong password" : "密碼錯誤",
"Saved" : "已儲存",
"No user supplied" : "未提供使用者",
+ "Unable to change password" : "無法修改密碼",
"Authentication error" : "認證錯誤",
"Please provide an admin recovery password, otherwise all user data will be lost" : "請提供管理者還原密碼,否則會遺失所有使用者資料",
"Wrong admin recovery password. Please check the password and try again." : "錯誤的管理者還原密碼",
"Backend doesn't support password change, but the user's encryption key was successfully updated." : "後端不支援變更密碼,但成功更新使用者的加密金鑰",
- "Unable to change password" : "無法修改密碼",
- "Enabled" : "已啓用",
- "Not enabled" : "未啟用",
"installing and updating apps via the app store or Federated Cloud Sharing" : "透過應用程式中心或是聯盟式雲端分享來安裝、更新應用程式",
"Federated Cloud Sharing" : "聯盟式雲端分享",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL 使用的 %s 版本已經過期 (%s),請您更新您的作業系統,否則功能如 %s 可能無法正常運作",
@@ -35,17 +35,6 @@ OC.L10N.register(
"Email saved" : "Email 已儲存",
"Your full name has been changed." : "您的全名已變更",
"Unable to change full name" : "無法變更全名",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "Security & setup warnings" : "安全及設定警告",
- "Sharing" : "分享",
- "Server-side encryption" : "伺服器端加密",
- "External Storage" : "外部儲存",
- "Cron" : "工作排程",
- "Email server" : "郵件伺服器",
- "Log" : "紀錄檔",
- "Tips & tricks" : "技巧和提示",
- "Updates" : "更新",
"Couldn't remove app." : "無法移除應用程式",
"Language changed" : "語言已變更",
"Invalid request" : "無效請求",
@@ -57,12 +46,14 @@ OC.L10N.register(
"Add trusted domain" : "新增信任的網域",
"Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束",
"Migration started …" : "開始遷移…",
+ "Not saved" : "未儲存",
"Sending..." : "傳送中…",
"Official" : "官方",
"Approved" : "審查通過",
"Experimental" : "實驗性質",
"All" : "所有",
"No apps found for your version" : "沒有找到適合您的版本的應用程式",
+ "The app will be downloaded from the app store" : "將會從應用程式商店下載這個應用程式",
"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." : "審查通過的應用程式經由可信任的開發人員所設計,並且經過一連串的安全測試,他們在開放的程式庫中維護這些應用程式,而且確保這些應用程式能穩定運作",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "這個新應用程式並沒有經過安全檢測,可能會是不穩定的,如果您要安裝的話,風險自行負責。",
"Update to %s" : "更新到 %s",
@@ -79,6 +70,20 @@ OC.L10N.register(
"Uninstall" : "解除安裝",
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "這個應用程式已啟用但是需要更新,您將會在 5 秒後被引導至更新頁面",
"App update" : "應用程式更新",
+ "Disconnect" : "中斷連線",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome for Android" : "Google Chrome for Android",
+ "iPhone" : "iPhone",
+ "iOS Client" : "iOS 客戶端",
+ "Android Client" : "Android 客戶端",
+ "Sync client - {os}" : "同步客戶端 - {os}",
+ "This session" : "目前的工作階段",
+ "Copied!" : "已複製",
+ "Not supported!" : "不支援!",
+ "Press ⌘-C to copy." : "按下 ⌘-C 來複製",
+ "Press Ctrl-C to copy." : "按下 Ctrl-C 來複製",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "發生錯誤,請您上傳 ASCII 編碼的 PEM 憑證",
"Valid until {date}" : "{date} 前有效",
"Delete" : "刪除",
@@ -103,18 +108,57 @@ OC.L10N.register(
"__language_name__" : "__language_name__",
"Unlimited" : "無限制",
"Personal info" : "個人資訊",
+ "Sessions" : "工作階段",
+ "App passwords" : "應用程式密碼",
"Sync clients" : "同步客戶端",
- "Everything (fatal issues, errors, warnings, info, debug)" : "全部(嚴重問題、錯誤、警告、資訊、除錯訊息)",
- "Info, warnings, errors and fatal issues" : "嚴重問題、錯誤、警告、資訊",
- "Warnings, errors and fatal issues" : "嚴重問題、錯誤、警告",
- "Errors and fatal issues" : "錯誤和嚴重問題",
- "Fatal issues only" : "只有嚴重問題",
"None" : "無",
"Login" : "登入",
"Plain" : "Plain",
"NT LAN Manager" : "NT LAN Manager",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Email server" : "郵件伺服器",
+ "Open documentation" : "開啟說明文件",
+ "This is used for sending out notifications." : "用於寄送通知",
+ "Send mode" : "寄送模式",
+ "Encryption" : "加密",
+ "From address" : "寄件地址",
+ "mail" : "電子郵件",
+ "Authentication method" : "認證方式",
+ "Authentication required" : "需要認證",
+ "Server address" : "伺服器位址",
+ "Port" : "連接埠",
+ "Credentials" : "帳密",
+ "SMTP Username" : "SMTP 帳號",
+ "SMTP Password" : "SMTP 密碼",
+ "Store credentials" : "儲存帳密",
+ "Test email settings" : "測試郵件設定",
+ "Send email" : "寄送郵件",
+ "Server-side encryption" : "伺服器端加密",
+ "Enable server-side encryption" : "啟用伺服器端加密",
+ "Please read carefully before activating server-side encryption: " : "在您啟動伺服器端加密之前,請仔細閱讀:",
+ "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密模式啟動,從各地上傳到伺服器端的檔案都會被加密,若日後要停用加密,需要加密模組的支援,而且所有的設定(例如: 還原金鑰)都正確",
+ "Be aware that encryption always increases the file size." : "請注意,加密一定會增加檔案的大小",
+ "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "定時備份您的資料沒有壞處,若您有啟用加密,請確保您也有備份加密金鑰",
+ "This is the final warning: Do you really want to enable encryption?" : "這是最後的警告:請問您真的要開啟加密模式?",
+ "Enable encryption" : "啟用加密",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "沒有載入加密模組,請您在應用程式清單中啟用加密模組",
+ "Select default encryption module:" : "選擇預設的加密模組:",
+ "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'" : " 您需要遷移您的加密金鑰從舊版的加密 (ownCloud <= 8.0) 到新版,請啟用「預設加密模組」並執行 'occ encryption:migrate'",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : " 您需要遷移您的加密金鑰從舊版的加密 (ownCloud <= 8.0) 到新版",
+ "Start migration" : "開始遷移",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "全部(嚴重問題、錯誤、警告、資訊、除錯訊息)",
+ "Info, warnings, errors and fatal issues" : "嚴重問題、錯誤、警告、資訊",
+ "Warnings, errors and fatal issues" : "嚴重問題、錯誤、警告",
+ "Errors and fatal issues" : "錯誤和嚴重問題",
+ "Fatal issues only" : "只有嚴重問題",
+ "Log" : "紀錄檔",
+ "What to log" : "記錄哪些訊息",
+ "Download logfile" : "下載記錄檔",
+ "More" : "更多",
+ "Less" : "更少",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "記錄檔大於 100MB,下載可能需要一些時間!",
+ "Security & setup warnings" : "安全及設定警告",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 看起來沒有設定完成,無法正確取得系統環境變數,getenv(\"PATH\") 回傳資料為空值",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "請您參考 <a target=\\\"_blank\\\" href=\\\"%s\\\">安裝文件手冊 ↗</a> 來確認php的設定值以及伺服器端的php設定,特別是當您使用php-fpm。",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "「唯讀設定檔」已經啟用,這樣可以防止來自網頁端的設定操作,每次需要更改設定時,都需要手動將設定檔暫時改為可讀寫。",
@@ -127,9 +171,16 @@ OC.L10N.register(
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系:%s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果您的安裝不在網域的最上層,並且使用 cron 作為排程器,URL 的生成可能會有問題,為了避免這樣的狀況,請您在 config.php 檔案裡設定 overwrite.cli.url 為您安裝的 webroot 路徑(建議值:\"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : " 無法透過 CLI 來執行排程工作,發生以下技術性錯誤:",
- "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "請再次檢查 <a target=\"_blank\" href=\"%s\">安裝手冊 ↗</a>,並且確定沒有任何的錯誤或是警告訊息在 <a href=\"#log-section\">記錄檔</a>",
"All checks passed." : "所有檢查正常",
- "Open documentation" : "開啟說明文件",
+ "Cron" : "工作排程",
+ "Last cron job execution: %s." : "最近一次執行的排程工作:%s",
+ "Last cron job execution: %s. Something seems wrong." : "最近一次執行的排程工作:%s ,看起來發生了一些錯誤",
+ "Cron was not executed yet!" : "Cron 沒有執行!",
+ "Execute one task with each page loaded" : "每個頁面載入時執行",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每 15 分鐘透過 HTTP 呼叫 cron.php",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "使用系統的 cron 服務每 15 分鐘呼叫 cron.php 一次",
+ "Version" : "版本",
+ "Sharing" : "分享",
"Allow apps to use the Share API" : "允許 apps 使用分享 API",
"Allow users to share via link" : "允許使用者透過連結分享",
"Allow public uploads" : "允許公開上傳",
@@ -145,44 +196,7 @@ OC.L10N.register(
"Exclude groups from sharing" : "禁止特定群組分享檔案",
"These groups will still be able to receive shares, but not to initiate them." : "這些群組仍然能接受其他人的分享,但是沒有辦法發起分享",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "允許使用者名稱自動補齊在分享對話框,如果取消這個功能,必須完整輸入使用者名稱",
- "Last cron job execution: %s." : "最近一次執行的排程工作:%s",
- "Last cron job execution: %s. Something seems wrong." : "最近一次執行的排程工作:%s ,看起來發生了一些錯誤",
- "Cron was not executed yet!" : "Cron 沒有執行!",
- "Execute one task with each page loaded" : "每個頁面載入時執行",
- "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每 15 分鐘透過 HTTP 呼叫 cron.php",
- "Use system's cron service to call the cron.php file every 15 minutes." : "使用系統的 cron 服務每 15 分鐘呼叫 cron.php 一次",
- "Enable server-side encryption" : "啟用伺服器端加密",
- "Please read carefully before activating server-side encryption: " : "在您啟動伺服器端加密之前,請仔細閱讀:",
- "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密模式啟動,從各地上傳到伺服器端的檔案都會被加密,若日後要停用加密,需要加密模組的支援,而且所有的設定(例如: 還原金鑰)都正確",
- "Be aware that encryption always increases the file size." : "請注意,加密一定會增加檔案的大小",
- "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "定時備份您的資料沒有壞處,若您有啟用加密,請確保您也有備份加密金鑰",
- "This is the final warning: Do you really want to enable encryption?" : "這是最後的警告:請問您真的要開啟加密模式?",
- "Enable encryption" : "啟用加密",
- "No encryption module loaded, please enable an encryption module in the app menu." : "沒有載入加密模組,請您在應用程式清單中啟用加密模組",
- "Select default encryption module:" : "選擇預設的加密模組:",
- "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'" : " 您需要遷移您的加密金鑰從舊版的加密 (ownCloud <= 8.0) 到新版,請啟用「預設加密模組」並執行 'occ encryption:migrate'",
- "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : " 您需要遷移您的加密金鑰從舊版的加密 (ownCloud <= 8.0) 到新版",
- "Start migration" : "開始遷移",
- "This is used for sending out notifications." : "用於寄送通知",
- "Send mode" : "寄送模式",
- "Encryption" : "加密",
- "From address" : "寄件地址",
- "mail" : "電子郵件",
- "Authentication method" : "認證方式",
- "Authentication required" : "需要認證",
- "Server address" : "伺服器位址",
- "Port" : "連接埠",
- "Credentials" : "帳密",
- "SMTP Username" : "SMTP 帳號",
- "SMTP Password" : "SMTP 密碼",
- "Store credentials" : "儲存帳密",
- "Test email settings" : "測試郵件設定",
- "Send email" : "寄送郵件",
- "What to log" : "記錄哪些訊息",
- "Download logfile" : "下載記錄檔",
- "More" : "更多",
- "Less" : "更少",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "記錄檔大於 100MB,下載可能需要一些時間!",
+ "Tips & tricks" : "技巧和提示",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "將會使用 SQLite 作為資料庫,在大型安裝中建議使用其他種資料庫",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "若使用桌面版程式同步檔案,不建議使用 SQLite",
"How to do backups" : "如何備份",
@@ -191,15 +205,18 @@ OC.L10N.register(
"Improving the config.php" : "改進 config.php",
"Theming" : "佈景主題",
"Hardening and security guidance" : "增強安全性",
- "Version" : "版本",
"Developer documentation" : "開發者說明文件",
"Experimental applications ahead" : "以下是實驗性質的應用程式",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "實驗性質的應用程式並沒有經過安全檢測,可能會不穩定而且正在開發中,安裝他們可能會造成資料遺失或是安全問題",
+ "%s-licensed" : "%s 授權",
"Documentation:" : "說明文件:",
"User documentation" : "用戶說明文件",
"Admin documentation" : "管理者文件",
+ "Visit website" : "開啟網站",
+ "Report a bug" : "回報問題",
"Show description …" : "顯示描述",
"Hide description …" : "隱藏描述",
+ "This app has an update available." : "此應用程式有可用的更新",
"This app cannot be installed because the following dependencies are not fulfilled:" : "這個應用程式無法被安裝,因為欠缺下列相依套件:",
"Enable only for specific groups" : "僅對特定的群組啟用",
"Uninstall App" : "解除安裝 App",
@@ -239,13 +256,13 @@ OC.L10N.register(
"Change password" : "變更密碼",
"Language" : "語言",
"Help translate" : "幫助翻譯",
- "Name" : "名稱",
- "Username" : "使用者名稱",
"Get the apps to sync your files" : "下載應用程式來同步您的檔案",
"Desktop client" : "桌面客戶端",
"Android app" : "Android 應用程式",
"iOS app" : "iOS 應用程式",
"Show First Run Wizard again" : "再次顯示首次使用精靈",
+ "Name" : "名稱",
+ "Username" : "使用者名稱",
"Show storage location" : "顯示儲存位置",
"Show last log in" : "顯示最近登入",
"Show user backend" : "顯示用戶後台",
@@ -264,6 +281,10 @@ OC.L10N.register(
"change full name" : "變更全名",
"set new password" : "設定新密碼",
"change email address" : "更改電子郵件地址",
- "Default" : "預設"
+ "Default" : "預設",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "External Storage" : "外部儲存",
+ "Updates" : "更新"
},
"nplurals=1; plural=0;");
diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json
index 1b1514c151e..f678c3312fb 100644
--- a/settings/l10n/zh_TW.json
+++ b/settings/l10n/zh_TW.json
@@ -1,14 +1,14 @@
{ "translations": {
+ "Enabled" : "已啓用",
+ "Not enabled" : "未啟用",
"Wrong password" : "密碼錯誤",
"Saved" : "已儲存",
"No user supplied" : "未提供使用者",
+ "Unable to change password" : "無法修改密碼",
"Authentication error" : "認證錯誤",
"Please provide an admin recovery password, otherwise all user data will be lost" : "請提供管理者還原密碼,否則會遺失所有使用者資料",
"Wrong admin recovery password. Please check the password and try again." : "錯誤的管理者還原密碼",
"Backend doesn't support password change, but the user's encryption key was successfully updated." : "後端不支援變更密碼,但成功更新使用者的加密金鑰",
- "Unable to change password" : "無法修改密碼",
- "Enabled" : "已啓用",
- "Not enabled" : "未啟用",
"installing and updating apps via the app store or Federated Cloud Sharing" : "透過應用程式中心或是聯盟式雲端分享來安裝、更新應用程式",
"Federated Cloud Sharing" : "聯盟式雲端分享",
"cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL 使用的 %s 版本已經過期 (%s),請您更新您的作業系統,否則功能如 %s 可能無法正常運作",
@@ -33,17 +33,6 @@
"Email saved" : "Email 已儲存",
"Your full name has been changed." : "您的全名已變更",
"Unable to change full name" : "無法變更全名",
- "APCu" : "APCu",
- "Redis" : "Redis",
- "Security & setup warnings" : "安全及設定警告",
- "Sharing" : "分享",
- "Server-side encryption" : "伺服器端加密",
- "External Storage" : "外部儲存",
- "Cron" : "工作排程",
- "Email server" : "郵件伺服器",
- "Log" : "紀錄檔",
- "Tips & tricks" : "技巧和提示",
- "Updates" : "更新",
"Couldn't remove app." : "無法移除應用程式",
"Language changed" : "語言已變更",
"Invalid request" : "無效請求",
@@ -55,12 +44,14 @@
"Add trusted domain" : "新增信任的網域",
"Migration in progress. Please wait until the migration is finished" : "資料搬移中,請耐心等候直到資料搬移結束",
"Migration started …" : "開始遷移…",
+ "Not saved" : "未儲存",
"Sending..." : "傳送中…",
"Official" : "官方",
"Approved" : "審查通過",
"Experimental" : "實驗性質",
"All" : "所有",
"No apps found for your version" : "沒有找到適合您的版本的應用程式",
+ "The app will be downloaded from the app store" : "將會從應用程式商店下載這個應用程式",
"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." : "審查通過的應用程式經由可信任的開發人員所設計,並且經過一連串的安全測試,他們在開放的程式庫中維護這些應用程式,而且確保這些應用程式能穩定運作",
"This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "這個新應用程式並沒有經過安全檢測,可能會是不穩定的,如果您要安裝的話,風險自行負責。",
"Update to %s" : "更新到 %s",
@@ -77,6 +68,20 @@
"Uninstall" : "解除安裝",
"The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "這個應用程式已啟用但是需要更新,您將會在 5 秒後被引導至更新頁面",
"App update" : "應用程式更新",
+ "Disconnect" : "中斷連線",
+ "Internet Explorer" : "Internet Explorer",
+ "Edge" : "Edge",
+ "Firefox" : "Firefox",
+ "Google Chrome for Android" : "Google Chrome for Android",
+ "iPhone" : "iPhone",
+ "iOS Client" : "iOS 客戶端",
+ "Android Client" : "Android 客戶端",
+ "Sync client - {os}" : "同步客戶端 - {os}",
+ "This session" : "目前的工作階段",
+ "Copied!" : "已複製",
+ "Not supported!" : "不支援!",
+ "Press ⌘-C to copy." : "按下 ⌘-C 來複製",
+ "Press Ctrl-C to copy." : "按下 Ctrl-C 來複製",
"An error occurred. Please upload an ASCII-encoded PEM certificate." : "發生錯誤,請您上傳 ASCII 編碼的 PEM 憑證",
"Valid until {date}" : "{date} 前有效",
"Delete" : "刪除",
@@ -101,18 +106,57 @@
"__language_name__" : "__language_name__",
"Unlimited" : "無限制",
"Personal info" : "個人資訊",
+ "Sessions" : "工作階段",
+ "App passwords" : "應用程式密碼",
"Sync clients" : "同步客戶端",
- "Everything (fatal issues, errors, warnings, info, debug)" : "全部(嚴重問題、錯誤、警告、資訊、除錯訊息)",
- "Info, warnings, errors and fatal issues" : "嚴重問題、錯誤、警告、資訊",
- "Warnings, errors and fatal issues" : "嚴重問題、錯誤、警告",
- "Errors and fatal issues" : "錯誤和嚴重問題",
- "Fatal issues only" : "只有嚴重問題",
"None" : "無",
"Login" : "登入",
"Plain" : "Plain",
"NT LAN Manager" : "NT LAN Manager",
"SSL" : "SSL",
"TLS" : "TLS",
+ "Email server" : "郵件伺服器",
+ "Open documentation" : "開啟說明文件",
+ "This is used for sending out notifications." : "用於寄送通知",
+ "Send mode" : "寄送模式",
+ "Encryption" : "加密",
+ "From address" : "寄件地址",
+ "mail" : "電子郵件",
+ "Authentication method" : "認證方式",
+ "Authentication required" : "需要認證",
+ "Server address" : "伺服器位址",
+ "Port" : "連接埠",
+ "Credentials" : "帳密",
+ "SMTP Username" : "SMTP 帳號",
+ "SMTP Password" : "SMTP 密碼",
+ "Store credentials" : "儲存帳密",
+ "Test email settings" : "測試郵件設定",
+ "Send email" : "寄送郵件",
+ "Server-side encryption" : "伺服器端加密",
+ "Enable server-side encryption" : "啟用伺服器端加密",
+ "Please read carefully before activating server-side encryption: " : "在您啟動伺服器端加密之前,請仔細閱讀:",
+ "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密模式啟動,從各地上傳到伺服器端的檔案都會被加密,若日後要停用加密,需要加密模組的支援,而且所有的設定(例如: 還原金鑰)都正確",
+ "Be aware that encryption always increases the file size." : "請注意,加密一定會增加檔案的大小",
+ "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "定時備份您的資料沒有壞處,若您有啟用加密,請確保您也有備份加密金鑰",
+ "This is the final warning: Do you really want to enable encryption?" : "這是最後的警告:請問您真的要開啟加密模式?",
+ "Enable encryption" : "啟用加密",
+ "No encryption module loaded, please enable an encryption module in the app menu." : "沒有載入加密模組,請您在應用程式清單中啟用加密模組",
+ "Select default encryption module:" : "選擇預設的加密模組:",
+ "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'" : " 您需要遷移您的加密金鑰從舊版的加密 (ownCloud <= 8.0) 到新版,請啟用「預設加密模組」並執行 'occ encryption:migrate'",
+ "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : " 您需要遷移您的加密金鑰從舊版的加密 (ownCloud <= 8.0) 到新版",
+ "Start migration" : "開始遷移",
+ "Everything (fatal issues, errors, warnings, info, debug)" : "全部(嚴重問題、錯誤、警告、資訊、除錯訊息)",
+ "Info, warnings, errors and fatal issues" : "嚴重問題、錯誤、警告、資訊",
+ "Warnings, errors and fatal issues" : "嚴重問題、錯誤、警告",
+ "Errors and fatal issues" : "錯誤和嚴重問題",
+ "Fatal issues only" : "只有嚴重問題",
+ "Log" : "紀錄檔",
+ "What to log" : "記錄哪些訊息",
+ "Download logfile" : "下載記錄檔",
+ "More" : "更多",
+ "Less" : "更少",
+ "The logfile is bigger than 100 MB. Downloading it may take some time!" : "記錄檔大於 100MB,下載可能需要一些時間!",
+ "Security & setup warnings" : "安全及設定警告",
"php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 看起來沒有設定完成,無法正確取得系統環境變數,getenv(\"PATH\") 回傳資料為空值",
"Please check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "請您參考 <a target=\\\"_blank\\\" href=\\\"%s\\\">安裝文件手冊 ↗</a> 來確認php的設定值以及伺服器端的php設定,特別是當您使用php-fpm。",
"The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "「唯讀設定檔」已經啟用,這樣可以防止來自網頁端的設定操作,每次需要更改設定時,都需要手動將設定檔暫時改為可讀寫。",
@@ -125,9 +169,16 @@
"We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我們強烈建議在您的系統上安裝必要的套件來支援以下的語系:%s",
"If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果您的安裝不在網域的最上層,並且使用 cron 作為排程器,URL 的生成可能會有問題,為了避免這樣的狀況,請您在 config.php 檔案裡設定 overwrite.cli.url 為您安裝的 webroot 路徑(建議值:\"%s\")",
"It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : " 無法透過 CLI 來執行排程工作,發生以下技術性錯誤:",
- "Please double check the <a target=\"_blank\" rel=\"noreferrer\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "請再次檢查 <a target=\"_blank\" href=\"%s\">安裝手冊 ↗</a>,並且確定沒有任何的錯誤或是警告訊息在 <a href=\"#log-section\">記錄檔</a>",
"All checks passed." : "所有檢查正常",
- "Open documentation" : "開啟說明文件",
+ "Cron" : "工作排程",
+ "Last cron job execution: %s." : "最近一次執行的排程工作:%s",
+ "Last cron job execution: %s. Something seems wrong." : "最近一次執行的排程工作:%s ,看起來發生了一些錯誤",
+ "Cron was not executed yet!" : "Cron 沒有執行!",
+ "Execute one task with each page loaded" : "每個頁面載入時執行",
+ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每 15 分鐘透過 HTTP 呼叫 cron.php",
+ "Use system's cron service to call the cron.php file every 15 minutes." : "使用系統的 cron 服務每 15 分鐘呼叫 cron.php 一次",
+ "Version" : "版本",
+ "Sharing" : "分享",
"Allow apps to use the Share API" : "允許 apps 使用分享 API",
"Allow users to share via link" : "允許使用者透過連結分享",
"Allow public uploads" : "允許公開上傳",
@@ -143,44 +194,7 @@
"Exclude groups from sharing" : "禁止特定群組分享檔案",
"These groups will still be able to receive shares, but not to initiate them." : "這些群組仍然能接受其他人的分享,但是沒有辦法發起分享",
"Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered." : "允許使用者名稱自動補齊在分享對話框,如果取消這個功能,必須完整輸入使用者名稱",
- "Last cron job execution: %s." : "最近一次執行的排程工作:%s",
- "Last cron job execution: %s. Something seems wrong." : "最近一次執行的排程工作:%s ,看起來發生了一些錯誤",
- "Cron was not executed yet!" : "Cron 沒有執行!",
- "Execute one task with each page loaded" : "每個頁面載入時執行",
- "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每 15 分鐘透過 HTTP 呼叫 cron.php",
- "Use system's cron service to call the cron.php file every 15 minutes." : "使用系統的 cron 服務每 15 分鐘呼叫 cron.php 一次",
- "Enable server-side encryption" : "啟用伺服器端加密",
- "Please read carefully before activating server-side encryption: " : "在您啟動伺服器端加密之前,請仔細閱讀:",
- "Once encryption is enabled, all files uploaded to the server from that point forward will be encrypted at rest on the server. It will only be possible to disable encryption at a later date if the active encryption module supports that function, and all pre-conditions (e.g. setting a recover key) are met." : "一旦加密模式啟動,從各地上傳到伺服器端的檔案都會被加密,若日後要停用加密,需要加密模組的支援,而且所有的設定(例如: 還原金鑰)都正確",
- "Be aware that encryption always increases the file size." : "請注意,加密一定會增加檔案的大小",
- "It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "定時備份您的資料沒有壞處,若您有啟用加密,請確保您也有備份加密金鑰",
- "This is the final warning: Do you really want to enable encryption?" : "這是最後的警告:請問您真的要開啟加密模式?",
- "Enable encryption" : "啟用加密",
- "No encryption module loaded, please enable an encryption module in the app menu." : "沒有載入加密模組,請您在應用程式清單中啟用加密模組",
- "Select default encryption module:" : "選擇預設的加密模組:",
- "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'" : " 您需要遷移您的加密金鑰從舊版的加密 (ownCloud <= 8.0) 到新版,請啟用「預設加密模組」並執行 'occ encryption:migrate'",
- "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : " 您需要遷移您的加密金鑰從舊版的加密 (ownCloud <= 8.0) 到新版",
- "Start migration" : "開始遷移",
- "This is used for sending out notifications." : "用於寄送通知",
- "Send mode" : "寄送模式",
- "Encryption" : "加密",
- "From address" : "寄件地址",
- "mail" : "電子郵件",
- "Authentication method" : "認證方式",
- "Authentication required" : "需要認證",
- "Server address" : "伺服器位址",
- "Port" : "連接埠",
- "Credentials" : "帳密",
- "SMTP Username" : "SMTP 帳號",
- "SMTP Password" : "SMTP 密碼",
- "Store credentials" : "儲存帳密",
- "Test email settings" : "測試郵件設定",
- "Send email" : "寄送郵件",
- "What to log" : "記錄哪些訊息",
- "Download logfile" : "下載記錄檔",
- "More" : "更多",
- "Less" : "更少",
- "The logfile is bigger than 100 MB. Downloading it may take some time!" : "記錄檔大於 100MB,下載可能需要一些時間!",
+ "Tips & tricks" : "技巧和提示",
"SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "將會使用 SQLite 作為資料庫,在大型安裝中建議使用其他種資料庫",
"Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "若使用桌面版程式同步檔案,不建議使用 SQLite",
"How to do backups" : "如何備份",
@@ -189,15 +203,18 @@
"Improving the config.php" : "改進 config.php",
"Theming" : "佈景主題",
"Hardening and security guidance" : "增強安全性",
- "Version" : "版本",
"Developer documentation" : "開發者說明文件",
"Experimental applications ahead" : "以下是實驗性質的應用程式",
"Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "實驗性質的應用程式並沒有經過安全檢測,可能會不穩定而且正在開發中,安裝他們可能會造成資料遺失或是安全問題",
+ "%s-licensed" : "%s 授權",
"Documentation:" : "說明文件:",
"User documentation" : "用戶說明文件",
"Admin documentation" : "管理者文件",
+ "Visit website" : "開啟網站",
+ "Report a bug" : "回報問題",
"Show description …" : "顯示描述",
"Hide description …" : "隱藏描述",
+ "This app has an update available." : "此應用程式有可用的更新",
"This app cannot be installed because the following dependencies are not fulfilled:" : "這個應用程式無法被安裝,因為欠缺下列相依套件:",
"Enable only for specific groups" : "僅對特定的群組啟用",
"Uninstall App" : "解除安裝 App",
@@ -237,13 +254,13 @@
"Change password" : "變更密碼",
"Language" : "語言",
"Help translate" : "幫助翻譯",
- "Name" : "名稱",
- "Username" : "使用者名稱",
"Get the apps to sync your files" : "下載應用程式來同步您的檔案",
"Desktop client" : "桌面客戶端",
"Android app" : "Android 應用程式",
"iOS app" : "iOS 應用程式",
"Show First Run Wizard again" : "再次顯示首次使用精靈",
+ "Name" : "名稱",
+ "Username" : "使用者名稱",
"Show storage location" : "顯示儲存位置",
"Show last log in" : "顯示最近登入",
"Show user backend" : "顯示用戶後台",
@@ -262,6 +279,10 @@
"change full name" : "變更全名",
"set new password" : "設定新密碼",
"change email address" : "更改電子郵件地址",
- "Default" : "預設"
+ "Default" : "預設",
+ "APCu" : "APCu",
+ "Redis" : "Redis",
+ "External Storage" : "外部儲存",
+ "Updates" : "更新"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/tests/lib/AppFramework/Controller/OCSControllerTest.php b/tests/lib/AppFramework/Controller/OCSControllerTest.php
index c1f8e4a6574..0d379a8822c 100644
--- a/tests/lib/AppFramework/Controller/OCSControllerTest.php
+++ b/tests/lib/AppFramework/Controller/OCSControllerTest.php
@@ -26,6 +26,7 @@ namespace Test\AppFramework\Controller;
use OC\AppFramework\Http\Request;
use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\Http\EmptyContentSecurityPolicy;
use OCP\AppFramework\OCSController;
use OCP\IConfig;
use OCP\Security\ISecureRandom;
@@ -92,8 +93,9 @@ class OCSControllerTest extends \Test\TestCase {
$params = new DataResponse(['test' => 'hi']);
- $out = $controller->buildResponse($params, 'xml')->render();
- $this->assertEquals($expected, $out);
+ $response = $controller->buildResponse($params, 'xml');
+ $this->assertSame(EmptyContentSecurityPolicy::class, get_class($response->getContentSecurityPolicy()));
+ $this->assertEquals($expected, $response->render());
}
public function testJSON() {
@@ -111,8 +113,10 @@ class OCSControllerTest extends \Test\TestCase {
'"totalitems":"","itemsperpage":""},"data":{"test":"hi"}}}';
$params = new DataResponse(['test' => 'hi']);
- $out = $controller->buildResponse($params, 'json')->render();
- $this->assertEquals($expected, $out);
+ $response = $controller->buildResponse($params, 'json');
+ $this->assertSame(EmptyContentSecurityPolicy::class, get_class($response->getContentSecurityPolicy()));
+ $this->assertEquals($expected, $response->render());
+ $this->assertEquals($expected, $response->render());
}
public function testXMLV2() {
@@ -141,8 +145,9 @@ class OCSControllerTest extends \Test\TestCase {
$params = new DataResponse(['test' => 'hi']);
- $out = $controller->buildResponse($params, 'xml')->render();
- $this->assertEquals($expected, $out);
+ $response = $controller->buildResponse($params, 'xml');
+ $this->assertSame(EmptyContentSecurityPolicy::class, get_class($response->getContentSecurityPolicy()));
+ $this->assertEquals($expected, $response->render());
}
public function testJSONV2() {
@@ -159,7 +164,8 @@ class OCSControllerTest extends \Test\TestCase {
$expected = '{"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":{"test":"hi"}}}';
$params = new DataResponse(['test' => 'hi']);
- $out = $controller->buildResponse($params, 'json')->render();
- $this->assertEquals($expected, $out);
+ $response = $controller->buildResponse($params, 'json');
+ $this->assertSame(EmptyContentSecurityPolicy::class, get_class($response->getContentSecurityPolicy()));
+ $this->assertEquals($expected, $response->render());
}
}
diff --git a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
index bfd810bc6b9..55bf3e46e07 100644
--- a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
+++ b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
@@ -37,13 +37,17 @@ use OC\AppFramework\Utility\ControllerMethodReflector;
use OC\Security\CSP\ContentSecurityPolicy;
use OC\Security\CSP\ContentSecurityPolicyManager;
use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\EmptyContentSecurityPolicy;
use OCP\AppFramework\Http\RedirectResponse;
use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IConfig;
use OCP\ILogger;
use OCP\INavigationManager;
use OCP\IRequest;
use OCP\IURLGenerator;
+use OCP\Security\ISecureRandom;
class SecurityMiddlewareTest extends \Test\TestCase {
@@ -72,30 +76,13 @@ class SecurityMiddlewareTest extends \Test\TestCase {
protected function setUp() {
parent::setUp();
- $this->controller = $this->getMockBuilder('OCP\AppFramework\Controller')
- ->disableOriginalConstructor()
- ->getMock();
+ $this->controller = $this->createMock(Controller::class);
$this->reader = new ControllerMethodReflector();
- $this->logger = $this->getMockBuilder(
- 'OCP\ILogger')
- ->disableOriginalConstructor()
- ->getMock();
- $this->navigationManager = $this->getMockBuilder(
- 'OCP\INavigationManager')
- ->disableOriginalConstructor()
- ->getMock();
- $this->urlGenerator = $this->getMockBuilder(
- 'OCP\IURLGenerator')
- ->disableOriginalConstructor()
- ->getMock();
- $this->request = $this->getMockBuilder(
- 'OCP\IRequest')
- ->disableOriginalConstructor()
- ->getMock();
- $this->contentSecurityPolicyManager = $this->getMockBuilder(
- 'OC\Security\CSP\ContentSecurityPolicyManager')
- ->disableOriginalConstructor()
- ->getMock();
+ $this->logger = $this->createMock(ILogger::class);
+ $this->navigationManager = $this->createMock(INavigationManager::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->request = $this->createMock(IRequest::class);
+ $this->contentSecurityPolicyManager = $this->createMock(ContentSecurityPolicyManager::class);
$this->middleware = $this->getMiddleware(true, true);
$this->secException = new SecurityException('hey', false);
$this->secAjaxException = new SecurityException('hey', true);
@@ -459,8 +446,8 @@ class SecurityMiddlewareTest extends \Test\TestCase {
'REQUEST_URI' => 'owncloud/index.php/apps/specialapp'
]
],
- $this->getMockBuilder('\OCP\Security\ISecureRandom')->getMock(),
- $this->getMockBuilder('\OCP\IConfig')->getMock()
+ $this->createMock(ISecureRandom::class),
+ $this->createMock(IConfig::class)
);
$this->middleware = $this->getMiddleware(false, false);
$this->urlGenerator
@@ -494,8 +481,8 @@ class SecurityMiddlewareTest extends \Test\TestCase {
'REQUEST_URI' => 'owncloud/index.php/apps/specialapp',
],
],
- $this->getMockBuilder('\OCP\Security\ISecureRandom')->getMock(),
- $this->getMockBuilder('\OCP\IConfig')->getMock()
+ $this->createMock(ISecureRandom::class),
+ $this->createMock(IConfig::class)
);
$this->middleware = $this->getMiddleware(false, false);
@@ -540,8 +527,8 @@ class SecurityMiddlewareTest extends \Test\TestCase {
'REQUEST_URI' => 'owncloud/index.php/apps/specialapp'
]
],
- $this->getMockBuilder('\OCP\Security\ISecureRandom')->getMock(),
- $this->getMockBuilder('\OCP\IConfig')->getMock()
+ $this->createMock(ISecureRandom::class),
+ $this->createMock(IConfig::class)
);
$this->middleware = $this->getMiddleware(false, false);
$this->logger
@@ -566,7 +553,7 @@ class SecurityMiddlewareTest extends \Test\TestCase {
}
public function testAfterController() {
- $response = $this->getMockBuilder('\OCP\AppFramework\Http\Response')->disableOriginalConstructor()->getMock();
+ $response = $this->createMock(Response::class);
$defaultPolicy = new ContentSecurityPolicy();
$defaultPolicy->addAllowedImageDomain('defaultpolicy');
$currentPolicy = new ContentSecurityPolicy();
@@ -592,4 +579,16 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$this->middleware->afterController($this->controller, 'test', $response);
}
+
+ public function testAfterControllerEmptyCSP() {
+ $response = $this->createMock(Response::class);
+ $emptyPolicy = new EmptyContentSecurityPolicy();
+ $response->expects($this->any())
+ ->method('getContentSecurityPolicy')
+ ->willReturn($emptyPolicy);
+ $response->expects($this->never())
+ ->method('setContentSecurityPolicy');
+
+ $this->middleware->afterController($this->controller, 'test', $response);
+ }
}