Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/passman.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPassman Bot <info@passman.cc>2017-07-29 13:03:47 +0300
committerPassman Bot <info@passman.cc>2017-07-29 13:03:47 +0300
commitbd7b066f1c2125fd09a44668f15d906ae34df6ec (patch)
tree9b7ba3ac264ef0790c8a9e34b3e290d0e2f190d7
parenta2cfbcfcb08f91355c1e0a7f831cf94330043018 (diff)
Passman 2.1.3
Release passman 2.1.3 - Fix font awesome not found. (Fixes #286) - Export urls of credentials - Check if variable exists before comparing. Fixes #316 - Remove password generator from change vault key. Solves #313 - Add padlock importer - Remove log message on cron run - Signed-off-by: brantje <brantje@gmail.com> Signed-off-by: Passman Bot <info@passman.cc>
-rw-r--r--README.md24
-rw-r--r--appinfo/info.xml7
-rw-r--r--controller/translationcontroller.php70
-rw-r--r--js/passman.min.js13
-rw-r--r--l10n/ast.js124
-rw-r--r--l10n/ast.json122
-rw-r--r--l10n/ca.js64
-rw-r--r--l10n/ca.json64
-rw-r--r--l10n/cs.js94
-rw-r--r--l10n/cs.json94
-rw-r--r--l10n/da.js34
-rw-r--r--l10n/da.json34
-rw-r--r--l10n/de.js108
-rw-r--r--l10n/de.json108
-rw-r--r--l10n/de_DE.js104
-rw-r--r--l10n/de_DE.json104
-rw-r--r--l10n/el.js71
-rw-r--r--l10n/el.json71
-rw-r--r--l10n/en_GB.js327
-rw-r--r--l10n/en_GB.json325
-rw-r--r--l10n/es.js180
-rw-r--r--l10n/es.json180
-rw-r--r--l10n/es_AR.js291
-rw-r--r--l10n/es_AR.json289
-rw-r--r--l10n/es_MX.js188
-rw-r--r--l10n/es_MX.json188
-rw-r--r--l10n/fi.js37
-rw-r--r--l10n/fi.json37
-rw-r--r--l10n/fr.js96
-rw-r--r--l10n/fr.json96
-rw-r--r--l10n/hu.js25
-rw-r--r--l10n/hu.json25
-rw-r--r--l10n/is.js60
-rw-r--r--l10n/is.json60
-rw-r--r--l10n/it.js52
-rw-r--r--l10n/it.json52
-rw-r--r--l10n/lt_LT.js50
-rw-r--r--l10n/lt_LT.json50
-rw-r--r--l10n/lv.js20
-rw-r--r--l10n/lv.json20
-rw-r--r--l10n/nb.js127
-rw-r--r--l10n/nb.json127
-rw-r--r--l10n/nl.js94
-rw-r--r--l10n/nl.json94
-rw-r--r--l10n/pl.js143
-rw-r--r--l10n/pl.json143
-rw-r--r--l10n/pt_BR.js110
-rw-r--r--l10n/pt_BR.json110
-rw-r--r--l10n/ru.js106
-rw-r--r--l10n/ru.json106
-rw-r--r--l10n/sk.js14
-rw-r--r--l10n/sk.json14
-rw-r--r--l10n/sq.js131
-rw-r--r--l10n/sq.json131
-rw-r--r--l10n/sv.js56
-rw-r--r--l10n/sv.json56
-rw-r--r--l10n/tr.js122
-rw-r--r--l10n/tr.json122
-rw-r--r--l10n/zh_CN.js42
-rw-r--r--l10n/zh_CN.json42
-rw-r--r--launch_phpunit.sh.sample8
-rw-r--r--lib/Service/CronService.php3
-rw-r--r--templates/part.admin.php2
63 files changed, 3712 insertions, 2149 deletions
diff --git a/README.md b/README.md
index 4a4f3388..f5a7ec49 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-#Passman
+# Passman
Passman is a full featured password manager.
[![Build Status](https://travis-ci.org/nextcloud/passman.svg?branch=master)](https://travis-ci.org/nextcloud/passman)
@@ -22,7 +22,7 @@ Passman is a full featured password manager.
-##Screenshots
+## Screenshots
![Logged in to vault](http://i.imgur.com/ciShQZg.png)
![Credential selected](http://i.imgur.com/3tENldT.png)
@@ -104,14 +104,14 @@ Passman allows users to share passwords (this can be turned off by an administra
## API
-For developers passman offers an [api](https://github.com/nextcloud/passman/wiki/API).
+For developers Passman offers an [api](https://github.com/nextcloud/passman/wiki/API).
## Support Passman
-Passman is open source, but we would gladly accept a beer (or pizza!)
-Please consider donating via
-- [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6YS8F97PETVU2)
+Passman is open source, and we would gladly accept a beer (or pizza!)
+Please consider donating
+- [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6YS8F97PETVU2)
- [Patreon](https://www.patreon.com/user?u=4833592)
-- Bitcoin: 1H2c5tkGX54n48yEtM4Wm4UrAGTW85jQpe
+- bitcoin: 1H2c5tkGX54n48yEtM4Wm4UrAGTW85jQpe
## Code reviews
If you have any improvements regarding our code.
@@ -119,13 +119,13 @@ Please do the following
- Clone us
- Make your edits
- Add your name to the contributors
-- Send a PR
+- Send a [PR](https://github.com/nextcloud/passman/pulls)
Or if you're feeling lazy, create an issue, and we'll think about it.
## Docker
-To run passman with docker you can use `docker run -p 8080:80 -p 8443:443 brantje/passman`
-You have to supply your own ssl certs.
+To run Passman with [Docker](https://www.docker.com/) you can use `docker run -p 8080:80 -p 8443:443 brantje/passman`
+You have to supply your own SSL certs.
Example:
`docker run -p 8080:80 -p 8443:443 -v /directory/cert.pem:/data/ssl/cert.pem -v /directory/cert.key:/data/ssl/cert.key brantje/passman`
@@ -142,10 +142,10 @@ To run the unit tests install phpunit globally, and setup the environment variab
- Animalillo
## Contributors
-Add yours when creating a pull request!
+Add yours when creating a [pull request](https://help.github.com/articles/creating-a-pull-request/)!
- None
## FAQ
**Are you adding something to check if malicious code is executing on the browser?**
-No, because malicious code could edit the functions that check for malicious code. \ No newline at end of file
+No, because malicious code could edit the functions that check for malicious code.
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 02b37cd0..9904dc0d 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -18,7 +18,7 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
]]></description>
<licence>AGPL</licence>
- <version>2.1.2</version>
+ <version>2.1.3</version>
<author homepage="https://github.com/brantje">Sander Brand</author>
<author homepage="https://github.com/animalillo">Marcos Zuriaga</author>
<namespace>Passman</namespace>
@@ -37,9 +37,10 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
<dependencies>
<php min-version="5.6"/>
<owncloud min-version="9" max-version="11" />
- <nextcloud min-version="9" max-version="12" />
+ <nextcloud min-version="9" max-version="13" />
<database>sqlite</database>
<database min-version="5.5">mysql</database>
+ <database>pgsql</database>
<lib>openssl</lib>
</dependencies>
@@ -52,4 +53,4 @@ For an demo of this app visit [https://demo.passman.cc](https://demo.passman.cc)
<background-jobs>
<job>OCA\Passman\BackgroundJob\ExpireCredentials</job>
</background-jobs>
-</info> \ No newline at end of file
+</info>
diff --git a/controller/translationcontroller.php b/controller/translationcontroller.php
index 7bb75162..6eac3266 100644
--- a/controller/translationcontroller.php
+++ b/controller/translationcontroller.php
@@ -46,18 +46,18 @@ class TranslationController extends ApiController {
'password.do.not.match' => $this->trans->t('Passwords do not match'),
'general' => $this->trans->t('General'),
'custom.fields' => $this->trans->t('Custom Fields'),
- 'error.no.label' => $this->trans->t('Please fill in a label!'),
- 'error.no.value' => $this->trans->t('Please fill in a value!'),
+ 'error.no.label' => $this->trans->t('Please fill in a label.'),
+ 'error.no.value' => $this->trans->t('Please fill in a value.'),
'error.loading.file' => $this->trans->t('Error loading file'),
// js/app/controllers/credential.js
- 'error.decrypt' => $this->trans->t('An error happened during decryption'),
+ 'error.decrypt' => $this->trans->t('An error occurred during decryption'),
'credential.created' => $this->trans->t('Credential created!'),
'credential.deleted' => $this->trans->t('Credential deleted'),
'credential.updated' => $this->trans->t('Credential updated'),
'credential.recovered' => $this->trans->t('Credential recovered'),
'credential.destroyed' => $this->trans->t('Credential destroyed'),
- 'error.loading.file.perm' => $this->trans->t('Error downloading file, you probably don\'t have enough permissions'),
+ 'error.loading.file.perm' => $this->trans->t('Error downloading file, you probably don\'t have sufficient permissions'),
// js/app/controllers/edit_credential.js
'invalid.qr' => $this->trans->t('Invalid QR code'),
@@ -68,8 +68,8 @@ class TranslationController extends ApiController {
'done' => $this->trans->t('Done'),
// js/app/controllers/import.js
- 'import.file.read' => $this->trans->t('File read successfully!'),
- 'import.steps' => $this->trans->t('Follow the following steps to import your file'),
+ 'import.file.read' => $this->trans->t('File read successfully.'),
+ 'import.steps' => $this->trans->t('Proceed with the following steps to import your file'),
'import.no.label' => $this->trans->t('Credential has no label, skipping'),
'import.adding' => $this->trans->t('Adding {{credential}}'),
@@ -83,9 +83,9 @@ class TranslationController extends ApiController {
'parsed.csv.rows' => $this->trans->t('Parsed {{rows}} lines from CSV file'),
'skip.first.row' => $this->trans->t('Skip first row'),
'import.csv.label.req' => $this->trans->t('You need to assign the label field before you can start the import.'),
- 'first.five.lines' => $this->trans->t('First 5 lines of the CSV are shown.'),
+ 'first.five.lines' => $this->trans->t('The first 5 lines of the CSV are shown.'),
'assign.column' => $this->trans->t('Assign the proper fields to each column.'),
- 'example.credential' => $this->trans->t('Example imported credential'),
+ 'example.credential' => $this->trans->t('Example of imported credential'),
'missing.importer' => $this->trans->t('Missing an importer? Try it with the generic CSV importer.'),
'missing.importer.back' => $this->trans->t('Go back to importers.'),
@@ -95,18 +95,18 @@ class TranslationController extends ApiController {
'revision.restored' => $this->trans->t('Revision restored'),
// js/app/controllers/settings.js
- 'bookmarklet.text' => $this->trans->t('Save in passman'),
+ 'bookmarklet.text' => $this->trans->t('Save in Passman'),
'settings.saved' => $this->trans->t('Settings saved'),
'settings.general' => $this->trans->t('General settings'),
- 'settings.audit' => $this->trans->t('Password Audit'),
+ 'settings.audit' => $this->trans->t('Password audit'),
'settings.password' => $this->trans->t('Password settings'),
'settings.import' => $this->trans->t('Import credentials'),
'settings.export' => $this->trans->t('Export credentials'),
'settings.sharing' => $this->trans->t('Sharing'),
- 'changepw.navigate.away.warning' => $this->trans->t('Are you sure you want to leave? This WILL corrupt all your credentials'),
+ 'changepw.navigate.away.warning' => $this->trans->t('Are you sure you want to leave? This will destroy all your credentials'),
'incorrect.password' => $this->trans->t('Your old password is incorrect!'),
- 'password.no.match' => $this->trans->t('New passwords do not match!'),
- 'login.new.pass' => $this->trans->t('Please login with your new vault password'),
+ 'password.no.match' => $this->trans->t('New password does not match!'),
+ 'login.new.pass' => $this->trans->t('Please log in with your new vault password'),
// js/app/controllers/share.js
'share.u.g' => $this->trans->t('Share with users and groups'),
@@ -138,7 +138,7 @@ class TranslationController extends ApiController {
// templates/views/partials/edit_credential/basics.html
'username' => $this->trans->t('Username'),
'password.r' => $this->trans->t('Repeat password'),
- 'add.tag' => $this->trans->t('Add Tag'),
+ 'add.tag' => $this->trans->t('Add tag'),
// templates/views/partials/edit_credential/custom_fields.html
'field.label' => $this->trans->t('Field label'),
@@ -166,8 +166,8 @@ class TranslationController extends ApiController {
// templates/views/partials/edit_credential/password.html
- 'expire.date' => $this->trans->t('Expire date'),
- 'no.expire.date' => $this->trans->t('No expire date set'),
+ 'expire.date' => $this->trans->t('Expiration date'),
+ 'no.expire.date' => $this->trans->t('No expiration date set'),
'renew.interval' => $this->trans->t('Renew interval'),
'disabled' => $this->trans->t('Disabled'),
'days' => $this->trans->t('Day(s)'),
@@ -197,7 +197,7 @@ class TranslationController extends ApiController {
'change.vault.key' => $this->trans->t('Change vault key'),
'old.vault.password' => $this->trans->t('Old vault password'),
'new.vault.password' => $this->trans->t('New vault password'),
- 'new.vault.pw.r' => $this->trans->t('New vault password repeat'),
+ 'new.vault.pw.r' => $this->trans->t('Repeat new vault password'),
'warning.leave' => $this->trans->t('Please wait your vault is being updated, do not leave this page.'),
'processing' => $this->trans->t('Processing'),
'total.progress' => $this->trans->t('Total progress'),
@@ -211,7 +211,7 @@ class TranslationController extends ApiController {
'vault.password' => $this->trans->t('Vault password'),
'vault.remove.notice' => $this->trans->t('This process is irreversible'),
'delete.vault.checkbox' => $this->trans->t('Delete my precious passwords'),
- 'deleting.pw' => $this->trans->t('Deleting {{password}}...'),
+ 'deleting.pw' => $this->trans->t('Deleting {{password}}…'),
'delete.vault.confirm' => $this->trans->t('Yes, delete my precious passwords'),
@@ -242,7 +242,7 @@ class TranslationController extends ApiController {
'action' => $this->trans->t('Action'),
// templates/vieuws/partials/forms/share_credential/basics.html
- 'search.u.g' => $this->trans->t('Search users or groups...'),
+ 'search.u.g' => $this->trans->t('Search users or groups…'),
'search.result.missing' => $this->trans->t('Missing users? Only users that have vaults are shown.'),
'cyphering' => $this->trans->t('Cyphering'),
'uploading' => $this->trans->t('Uploading'),
@@ -260,7 +260,7 @@ class TranslationController extends ApiController {
'enable.link.sharing' => $this->trans->t('Enable link sharing'),
'share.until.date' => $this->trans->t('Share until date'),
'expire.views' => $this->trans->t('Expire after views'),
- 'click.share' => $this->trans->t('Click share first'),
+ 'click.share' => $this->trans->t('Click Share first'),
'show.files' => $this->trans->t('Show files'),
@@ -314,9 +314,9 @@ class TranslationController extends ApiController {
// templates/views/show_vault.html
'deleted.since' => $this->trans->t('Showing deleted since'),
- 'alltime' => $this->trans->t('All time'),
+ 'alltime' => $this->trans->t('Beginning'),
'number.filtered' => $this->trans->t('Showing {{number_filtered}} of {{credential_number}} credentials'),
- 'search.credential' => $this->trans->t('Search credential...'),
+ 'search.credential' => $this->trans->t('Search for credential…'),
'account' => $this->trans->t('Account'),
'password' => $this->trans->t('Password'),
'otp' => $this->trans->t('OTP'),
@@ -324,7 +324,7 @@ class TranslationController extends ApiController {
'url' => $this->trans->t('URL'),
'notes' => $this->trans->t('Notes'),
'files' => $this->trans->t('Files'),
- 'expire.time' => $this->trans->t('Expire time'),
+ 'expire.time' => $this->trans->t('Expiry time'),
'changed' => $this->trans->t('Changed'),
'created' => $this->trans->t('Created'),
'edit' => $this->trans->t('Edit'),
@@ -335,8 +335,8 @@ class TranslationController extends ApiController {
'destroy' => $this->trans->t('Destroy'),
'use.regex' => $this->trans->t('Use regex'),
'sharereq.title' => $this->trans->t('You have incoming share requests.'),
- 'sharereq.line1' => $this->trans->t('If you want to put the credential in a other vault,'),
- 'sharereq.line2' => $this->trans->t('logout of this vault and login to the vault you want the shared credential in.'),
+ 'sharereq.line1' => $this->trans->t('If you want to put the credential in another vault,'),
+ 'sharereq.line2' => $this->trans->t('log out of this vault and log in to the vault you want the shared credential in.'),
'permissions' => $this->trans->t('Permissions'),
'received.from' => $this->trans->t('Received from'),
'date' => $this->trans->t('Date'),
@@ -356,21 +356,21 @@ class TranslationController extends ApiController {
'new.vault.name' => $this->trans->t('Please give your new vault a name.'),
'new.vault.pass' => $this->trans->t('Vault password'),
'new.vault.passr' => $this->trans->t('Repeat vault password'),
- 'new.vault.sharing_key_notice' => $this->trans->t('Your sharing key\'s will have a strength of 1024 bit, which you can change later in settings.'),
+ 'new.vault.sharing_key_notice' => $this->trans->t('Your sharing key\'s will have a strength of 1024 bit, which you can change in Settings later .'),
'new.vault.create' => $this->trans->t('Create vault'),
'go.back.vaults' => $this->trans->t('Go back to vaults'),
'input.vault.password' => $this->trans->t('Please input the password for'),
- 'vault.default' => $this->trans->t('Set this vault as default.'),
+ 'vault.default' => $this->trans->t('Set this vault as the default.'),
'vault.auto.login' => $this->trans->t('Log into this vault automatically.'),
- 'auto.logout' => $this->trans->t('Logout of this vault automatically after: '),
+ 'auto.logout' => $this->trans->t('Log out of this vault automatically after: '),
'vault.decrypt' => $this->trans->t('Decrypt vault'),
- 'req.intro1' => $this->trans->t('Seems you lost the vault password and you\'re unable to login.'),
+ 'req.intro1' => $this->trans->t('Seems you lost the vault password and you\'re unable to log in.'),
'req.intro2' => $this->trans->t('If you want this vault to be removed you can request that here.'),
- 'req.intro3' => $this->trans->t('An admin then accepts to the request (or not)'),
+ 'req.intro3' => $this->trans->t('An admin then accepts or declines the request'),
- 'request.deletion.warning' => $this->trans->t('After an admin destroys this vault, all credentials inside will be lost'),
- 'request.deletion.reason' => $this->trans->t('Reason to request deletion (optional):'),
+ 'request.deletion.warning' => $this->trans->t('After an admin destroys this vault, all credentials in it will be lost'),
+ 'request.deletion.reason' => $this->trans->t('Reason for requesting deletion (optional):'),
'request.deletion' => $this->trans->t('Request vault destruction'),
'request.deletion.accept' => $this->trans->t('Yes, request an admin to destroy this vault'),
'cancel.request.deletion' => $this->trans->t('Cancel destruction request'),
@@ -380,7 +380,7 @@ class TranslationController extends ApiController {
// templates/bookmarklet.php
- 'http.warning' => $this->trans->t('Warning! Adding credentials over http can be insecure!'),
+ 'http.warning' => $this->trans->t('Warning! Adding credentials over HTTP is insecure!'),
'bm.active.vault' => $this->trans->t('Logged in to {{vault_name}}'),
'change.vault' => $this->trans->t('Change vault'),
@@ -392,8 +392,8 @@ class TranslationController extends ApiController {
// templates/public_share.php
'share.page.text' => $this->trans->t('Someone has shared a credential with you.'),
'share.page.link' => $this->trans->t('Click here to request it'),
- 'share.page.link_loading' => $this->trans->t('Loading...'),
- 'expired.share' => $this->trans->t('Awwhh.... credential not found. Maybe it expired'),
+ 'share.page.link_loading' => $this->trans->t('Loading…'),
+ 'expired.share' => $this->trans->t('Awwhh… credential not found. Maybe it expired'),
);
return new JSONResponse($translations);
diff --git a/js/passman.min.js b/js/passman.min.js
index 5c42cabb..f405e16c 100644
--- a/js/passman.min.js
+++ b/js/passman.min.js
@@ -1,4 +1,4 @@
-/*! Passman 2017-05-06 */
+/*! Passman 2017-07-29 */
function _a1(b,a){this.count=b,this._fc=a,this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("_dm",function(){return this._fc})}function _a2(a,c,b){this._bm=a,b?this._do=new Array(c,b):this._do=new Array(c),this.__defineGetter__("_bo",function(){return this._bm}),this.__defineGetter__("_dn",function(){return this._bm*this._fo}),this.__defineGetter__("_fo",function(){for(var e=0,d=0;d<this._do.length;d++)e+=this._do[d].length;return e}),this._fb=function(){return this._do}}function _a3(k,l,h,g,f,e){this._bs=k,this._ar=l,this._do=new Array(h,g,f,e);for(var j=0,b=h._bo,a=h._fb(),d=0;d<a.length;d++){var c=a[d];j+=c.Count*(c._dm+b)}this._br=j,this.__defineGetter__("_fd",function(){return this._bs}),this.__defineGetter__("_as",function(){return this._ar}),this.__defineGetter__("_dp",function(){return this._br}),this.__defineGetter__("_cr",function(){return 17+4*this._bs}),this._aq=function(){var r=this._cr,o=new _ac(r);o._bq(0,0,9,9),o._bq(r-8,0,8,9),o._bq(0,r-8,9,8);for(var n=this._ar.length,m=0;m<n;m++)for(var q=this._ar[m]-2,s=0;s<n;s++)0==m&&(0==s||s==n-1)||m==n-1&&0==s||o._bq(this._ar[s]-2,q,5,5);return o._bq(6,9,1,r-17),o._bq(9,6,r-17,1),this._bs>6&&(o._bq(r-11,0,3,6),o._bq(0,r-11,6,3)),o},this._bu=function(i){return this._do[i.ordinal()]}}function _ay(){return new Array(new _a3(1,new Array,new _a2(7,new _a1(1,19)),new _a2(10,new _a1(1,16)),new _a2(13,new _a1(1,13)),new _a2(17,new _a1(1,9))),new _a3(2,new Array(6,18),new _a2(10,new _a1(1,34)),new _a2(16,new _a1(1,28)),new _a2(22,new _a1(1,22)),new _a2(28,new _a1(1,16))),new _a3(3,new Array(6,22),new _a2(15,new _a1(1,55)),new _a2(26,new _a1(1,44)),new _a2(18,new _a1(2,17)),new _a2(22,new _a1(2,13))),new _a3(4,new Array(6,26),new _a2(20,new _a1(1,80)),new _a2(18,new _a1(2,32)),new _a2(26,new _a1(2,24)),new _a2(16,new _a1(4,9))),new _a3(5,new Array(6,30),new _a2(26,new _a1(1,108)),new _a2(24,new _a1(2,43)),new _a2(18,new _a1(2,15),new _a1(2,16)),new _a2(22,new _a1(2,11),new _a1(2,12))),new _a3(6,new Array(6,34),new _a2(18,new _a1(2,68)),new _a2(16,new _a1(4,27)),new _a2(24,new _a1(4,19)),new _a2(28,new _a1(4,15))),new _a3(7,new Array(6,22,38),new _a2(20,new _a1(2,78)),new _a2(18,new _a1(4,31)),new _a2(18,new _a1(2,14),new _a1(4,15)),new _a2(26,new _a1(4,13),new _a1(1,14))),new _a3(8,new Array(6,24,42),new _a2(24,new _a1(2,97)),new _a2(22,new _a1(2,38),new _a1(2,39)),new _a2(22,new _a1(4,18),new _a1(2,19)),new _a2(26,new _a1(4,14),new _a1(2,15))),new _a3(9,new Array(6,26,46),new _a2(30,new _a1(2,116)),new _a2(22,new _a1(3,36),new _a1(2,37)),new _a2(20,new _a1(4,16),new _a1(4,17)),new _a2(24,new _a1(4,12),new _a1(4,13))),new _a3(10,new Array(6,28,50),new _a2(18,new _a1(2,68),new _a1(2,69)),new _a2(26,new _a1(4,43),new _a1(1,44)),new _a2(24,new _a1(6,19),new _a1(2,20)),new _a2(28,new _a1(6,15),new _a1(2,16))),new _a3(11,new Array(6,30,54),new _a2(20,new _a1(4,81)),new _a2(30,new _a1(1,50),new _a1(4,51)),new _a2(28,new _a1(4,22),new _a1(4,23)),new _a2(24,new _a1(3,12),new _a1(8,13))),new _a3(12,new Array(6,32,58),new _a2(24,new _a1(2,92),new _a1(2,93)),new _a2(22,new _a1(6,36),new _a1(2,37)),new _a2(26,new _a1(4,20),new _a1(6,21)),new _a2(28,new _a1(7,14),new _a1(4,15))),new _a3(13,new Array(6,34,62),new _a2(26,new _a1(4,107)),new _a2(22,new _a1(8,37),new _a1(1,38)),new _a2(24,new _a1(8,20),new _a1(4,21)),new _a2(22,new _a1(12,11),new _a1(4,12))),new _a3(14,new Array(6,26,46,66),new _a2(30,new _a1(3,115),new _a1(1,116)),new _a2(24,new _a1(4,40),new _a1(5,41)),new _a2(20,new _a1(11,16),new _a1(5,17)),new _a2(24,new _a1(11,12),new _a1(5,13))),new _a3(15,new Array(6,26,48,70),new _a2(22,new _a1(5,87),new _a1(1,88)),new _a2(24,new _a1(5,41),new _a1(5,42)),new _a2(30,new _a1(5,24),new _a1(7,25)),new _a2(24,new _a1(11,12),new _a1(7,13))),new _a3(16,new Array(6,26,50,74),new _a2(24,new _a1(5,98),new _a1(1,99)),new _a2(28,new _a1(7,45),new _a1(3,46)),new _a2(24,new _a1(15,19),new _a1(2,20)),new _a2(30,new _a1(3,15),new _a1(13,16))),new _a3(17,new Array(6,30,54,78),new _a2(28,new _a1(1,107),new _a1(5,108)),new _a2(28,new _a1(10,46),new _a1(1,47)),new _a2(28,new _a1(1,22),new _a1(15,23)),new _a2(28,new _a1(2,14),new _a1(17,15))),new _a3(18,new Array(6,30,56,82),new _a2(30,new _a1(5,120),new _a1(1,121)),new _a2(26,new _a1(9,43),new _a1(4,44)),new _a2(28,new _a1(17,22),new _a1(1,23)),new _a2(28,new _a1(2,14),new _a1(19,15))),new _a3(19,new Array(6,30,58,86),new _a2(28,new _a1(3,113),new _a1(4,114)),new _a2(26,new _a1(3,44),new _a1(11,45)),new _a2(26,new _a1(17,21),new _a1(4,22)),new _a2(26,new _a1(9,13),new _a1(16,14))),new _a3(20,new Array(6,34,62,90),new _a2(28,new _a1(3,107),new _a1(5,108)),new _a2(26,new _a1(3,41),new _a1(13,42)),new _a2(30,new _a1(15,24),new _a1(5,25)),new _a2(28,new _a1(15,15),new _a1(10,16))),new _a3(21,new Array(6,28,50,72,94),new _a2(28,new _a1(4,116),new _a1(4,117)),new _a2(26,new _a1(17,42)),new _a2(28,new _a1(17,22),new _a1(6,23)),new _a2(30,new _a1(19,16),new _a1(6,17))),new _a3(22,new Array(6,26,50,74,98),new _a2(28,new _a1(2,111),new _a1(7,112)),new _a2(28,new _a1(17,46)),new _a2(30,new _a1(7,24),new _a1(16,25)),new _a2(24,new _a1(34,13))),new _a3(23,new Array(6,30,54,74,102),new _a2(30,new _a1(4,121),new _a1(5,122)),new _a2(28,new _a1(4,47),new _a1(14,48)),new _a2(30,new _a1(11,24),new _a1(14,25)),new _a2(30,new _a1(16,15),new _a1(14,16))),new _a3(24,new Array(6,28,54,80,106),new _a2(30,new _a1(6,117),new _a1(4,118)),new _a2(28,new _a1(6,45),new _a1(14,46)),new _a2(30,new _a1(11,24),new _a1(16,25)),new _a2(30,new _a1(30,16),new _a1(2,17))),new _a3(25,new Array(6,32,58,84,110),new _a2(26,new _a1(8,106),new _a1(4,107)),new _a2(28,new _a1(8,47),new _a1(13,48)),new _a2(30,new _a1(7,24),new _a1(22,25)),new _a2(30,new _a1(22,15),new _a1(13,16))),new _a3(26,new Array(6,30,58,86,114),new _a2(28,new _a1(10,114),new _a1(2,115)),new _a2(28,new _a1(19,46),new _a1(4,47)),new _a2(28,new _a1(28,22),new _a1(6,23)),new _a2(30,new _a1(33,16),new _a1(4,17))),new _a3(27,new Array(6,34,62,90,118),new _a2(30,new _a1(8,122),new _a1(4,123)),new _a2(28,new _a1(22,45),new _a1(3,46)),new _a2(30,new _a1(8,23),new _a1(26,24)),new _a2(30,new _a1(12,15),new _a1(28,16))),new _a3(28,new Array(6,26,50,74,98,122),new _a2(30,new _a1(3,117),new _a1(10,118)),new _a2(28,new _a1(3,45),new _a1(23,46)),new _a2(30,new _a1(4,24),new _a1(31,25)),new _a2(30,new _a1(11,15),new _a1(31,16))),new _a3(29,new Array(6,30,54,78,102,126),new _a2(30,new _a1(7,116),new _a1(7,117)),new _a2(28,new _a1(21,45),new _a1(7,46)),new _a2(30,new _a1(1,23),new _a1(37,24)),new _a2(30,new _a1(19,15),new _a1(26,16))),new _a3(30,new Array(6,26,52,78,104,130),new _a2(30,new _a1(5,115),new _a1(10,116)),new _a2(28,new _a1(19,47),new _a1(10,48)),new _a2(30,new _a1(15,24),new _a1(25,25)),new _a2(30,new _a1(23,15),new _a1(25,16))),new _a3(31,new Array(6,30,56,82,108,134),new _a2(30,new _a1(13,115),new _a1(3,116)),new _a2(28,new _a1(2,46),new _a1(29,47)),new _a2(30,new _a1(42,24),new _a1(1,25)),new _a2(30,new _a1(23,15),new _a1(28,16))),new _a3(32,new Array(6,34,60,86,112,138),new _a2(30,new _a1(17,115)),new _a2(28,new _a1(10,46),new _a1(23,47)),new _a2(30,new _a1(10,24),new _a1(35,25)),new _a2(30,new _a1(19,15),new _a1(35,16))),new _a3(33,new Array(6,30,58,86,114,142),new _a2(30,new _a1(17,115),new _a1(1,116)),new _a2(28,new _a1(14,46),new _a1(21,47)),new _a2(30,new _a1(29,24),new _a1(19,25)),new _a2(30,new _a1(11,15),new _a1(46,16))),new _a3(34,new Array(6,34,62,90,118,146),new _a2(30,new _a1(13,115),new _a1(6,116)),new _a2(28,new _a1(14,46),new _a1(23,47)),new _a2(30,new _a1(44,24),new _a1(7,25)),new _a2(30,new _a1(59,16),new _a1(1,17))),new _a3(35,new Array(6,30,54,78,102,126,150),new _a2(30,new _a1(12,121),new _a1(7,122)),new _a2(28,new _a1(12,47),new _a1(26,48)),new _a2(30,new _a1(39,24),new _a1(14,25)),new _a2(30,new _a1(22,15),new _a1(41,16))),new _a3(36,new Array(6,24,50,76,102,128,154),new _a2(30,new _a1(6,121),new _a1(14,122)),new _a2(28,new _a1(6,47),new _a1(34,48)),new _a2(30,new _a1(46,24),new _a1(10,25)),new _a2(30,new _a1(2,15),new _a1(64,16))),new _a3(37,new Array(6,28,54,80,106,132,158),new _a2(30,new _a1(17,122),new _a1(4,123)),new _a2(28,new _a1(29,46),new _a1(14,47)),new _a2(30,new _a1(49,24),new _a1(10,25)),new _a2(30,new _a1(24,15),new _a1(46,16))),new _a3(38,new Array(6,32,58,84,110,136,162),new _a2(30,new _a1(4,122),new _a1(18,123)),new _a2(28,new _a1(13,46),new _a1(32,47)),new _a2(30,new _a1(48,24),new _a1(14,25)),new _a2(30,new _a1(42,15),new _a1(32,16))),new _a3(39,new Array(6,26,54,82,110,138,166),new _a2(30,new _a1(20,117),new _a1(4,118)),new _a2(28,new _a1(40,47),new _a1(7,48)),new _a2(30,new _a1(43,24),new _a1(22,25)),new _a2(30,new _a1(10,15),new _a1(67,16))),new _a3(40,new Array(6,30,58,86,114,142,170),new _a2(30,new _a1(19,118),new _a1(6,119)),new _a2(28,new _a1(18,47),new _a1(31,48)),new _a2(30,new _a1(34,24),new _a1(34,25)),new _a2(30,new _a1(20,15),new _a1(61,16))))}function _ae(i,f,c,h,e,b,g,d,a){this.a11=i,this.a12=h,this.a13=g,this.a21=f,this.a22=e,this.a23=d,this.a31=c,this.a32=b,this.a33=a,this._ad=function(w){for(var t=w.length,A=this.a11,z=this.a12,v=this.a13,r=this.a21,q=this.a22,o=this.a23,m=this.a31,k=this.a32,j=this.a33,n=0;n<t;n+=2){var u=w[n],s=w[n+1],l=v*u+o*s+j;w[n]=(A*u+r*s+m)/l,w[n+1]=(z*u+q*s+k)/l}},this._fp=function(m,k){for(var r=m.length,l=0;l<r;l++){var j=m[l],q=k[l],o=this.a13*j+this.a23*q+this.a33;m[l]=(this.a11*j+this.a21*q+this.a31)/o,k[l]=(this.a12*j+this.a22*q+this.a32)/o}},this._fr=function(){return new _ae(this.a22*this.a33-this.a23*this.a32,this.a23*this.a31-this.a21*this.a33,this.a21*this.a32-this.a22*this.a31,this.a13*this.a32-this.a12*this.a33,this.a11*this.a33-this.a13*this.a31,this.a12*this.a31-this.a11*this.a32,this.a12*this.a23-this.a13*this.a22,this.a13*this.a21-this.a11*this.a23,this.a11*this.a22-this.a12*this.a21)},this.times=function(j){return new _ae(this.a11*j.a11+this.a21*j.a12+this.a31*j.a13,this.a11*j.a21+this.a21*j.a22+this.a31*j.a23,this.a11*j.a31+this.a21*j.a32+this.a31*j.a33,this.a12*j.a11+this.a22*j.a12+this.a32*j.a13,this.a12*j.a21+this.a22*j.a22+this.a32*j.a23,this.a12*j.a31+this.a22*j.a32+this.a32*j.a33,this.a13*j.a11+this.a23*j.a12+this.a33*j.a13,this.a13*j.a21+this.a23*j.a22+this.a33*j.a23,this.a13*j.a31+this.a23*j.a32+this.a33*j.a33)}}function _bg(b,a){this.bits=b,this.points=a}function Detector(a){this.image=a,this._am=null,this._bi=function(m,l,c,b){var d=Math.abs(b-l)>Math.abs(c-m);if(d){var s=m;m=l,l=s,s=c,c=b,b=s}for(var j=Math.abs(c-m),i=Math.abs(b-l),q=-j>>1,v=l<b?1:-1,f=m<c?1:-1,e=0,h=m,g=l;h!=c;h+=f){var u=d?g:h,t=d?h:g;if(1==e?this.image[u+t*qrcode.width]&&e++:this.image[u+t*qrcode.width]||e++,3==e){var o=h-m,n=g-l;return Math.sqrt(o*o+n*n)}if(q+=i,q>0){if(g==b)break;g+=v,q-=j}}var k=c-m,r=b-l;return Math.sqrt(k*k+r*r)},this._bh=function(i,g,h,f){var b=this._bi(i,g,h,f),e=1,d=i-(h-i);d<0?(e=i/(i-d),d=0):d>=qrcode.width&&(e=(qrcode.width-1-i)/(d-i),d=qrcode.width-1);var c=Math.floor(g-(f-g)*e);return e=1,c<0?(e=g/(g-c),c=0):c>=qrcode.height&&(e=(qrcode.height-1-g)/(c-g),c=qrcode.height-1),d=Math.floor(i+(d-i)*e),b+=this._bi(i,g,d,c),b-1},this._bj=function(c,d){var b=this._bh(Math.floor(c.X),Math.floor(c.Y),Math.floor(d.X),Math.floor(d.Y)),e=this._bh(Math.floor(d.X),Math.floor(d.Y),Math.floor(c.X),Math.floor(c.Y));return isNaN(b)?e/7:isNaN(e)?b/7:(b+e)/14},this._bk=function(d,c,b){return(this._bj(d,c)+this._bj(d,b))/2},this.distance=function(c,b){return xDiff=c.X-b.X,yDiff=c.Y-b.Y,Math.sqrt(xDiff*xDiff+yDiff*yDiff)},this._bx=function(g,f,d,e){var b=Math.round(this.distance(g,f)/e),c=Math.round(this.distance(g,d)/e),h=(b+c>>1)+7;switch(3&h){case 0:h++;break;case 2:h--;break;case 3:throw"Error"}return h},this._bl=function(g,f,d,j){var k=Math.floor(j*g),h=Math.max(0,f-k),i=Math.min(qrcode.width-1,f+k);if(i-h<3*g)throw"Error";var b=Math.max(0,d-k),c=Math.min(qrcode.height-1,d+k),e=new _ak(this.image,h,b,i-h,c-b,g,this._am);return e.find()},this.createTransform=function(l,h,k,b,g){var i,f,e,c,j=g-3.5;null!=b?(i=b.X,f=b.Y,e=c=j-3):(i=h.X-l.X+k.X,f=h.Y-l.Y+k.Y,e=c=j);var d=_ae._ag(3.5,3.5,j,3.5,e,c,3.5,j,l.X,l.Y,h.X,h.Y,i,f,k.X,k.Y);return d},this._bz=function(e,b,d){var c=_aa;return c._af(e,d,b)},this._cd=function(r){var j=r._gq,h=r._gs,n=r._gp,d=this._bk(j,h,n);if(d<1)throw"Error";var s=this._bx(j,h,n,d),b=_a3._at(s),k=b._cr-7,l=null;if(b._as.length>0)for(var f=h.X-j.X+n.X,e=h.Y-j.Y+n.Y,c=1-3/k,u=Math.floor(j.X+c*(f-j.X)),t=Math.floor(j.Y+c*(e-j.Y)),q=4;q<=16;q<<=1){l=this._bl(d,u,t,q);break}var o,g=this.createTransform(j,h,n,l,s),m=this._bz(this.image,g,s);return o=null==l?new Array(n,j,h):new Array(n,j,h,l),new _bg(m,o)},this.detect=function(){var b=(new _cc)._ce(this.image);return this._cd(b)}}function _ax(a){this._cf=_cg.forBits(a>>3&3),this._fe=7&a,this.__defineGetter__("_cg",function(){return this._cf}),this.__defineGetter__("_dx",function(){return this._fe}),this.GetHashCode=function(){return this._cf.ordinal()<<3|_fe},this.Equals=function(c){var b=c;return this._cf==b._cf&&this._fe==b._fe}}function _cg(a,c,b){this._ff=a,this.bits=c,this.name=b,this.__defineGetter__("Bits",function(){return this.bits}),this.__defineGetter__("Name",function(){return this.name}),this.ordinal=function(){return this._ff}}function _ac(d,a){if(a||(a=d),d<1||a<1)throw"Both dimensions must be greater than 0";this.width=d,this.height=a;var c=d>>5;0!=(31&d)&&c++,this.rowSize=c,this.bits=new Array(c*a);for(var b=0;b<this.bits.length;b++)this.bits[b]=0;this.__defineGetter__("Width",function(){return this.width}),this.__defineGetter__("Height",function(){return this.height}),this.__defineGetter__("Dimension",function(){if(this.width!=this.height)throw"Can't call getDimension() on a non-square matrix";return this.width}),this._ds=function(e,g){var f=g*this.rowSize+(e>>5);return 0!=(1&_ew(this.bits[f],31&e))},this._dq=function(e,g){var f=g*this.rowSize+(e>>5);this.bits[f]|=1<<(31&e)},this.flip=function(e,g){var f=g*this.rowSize+(e>>5);this.bits[f]^=1<<(31&e)},this.clear=function(){for(var e=this.bits.length,f=0;f<e;f++)this.bits[f]=0},this._bq=function(g,j,f,m){if(j<0||g<0)throw"Left and top must be nonnegative";if(m<1||f<1)throw"Height and width must be at least 1";var l=g+f,e=j+m;if(e>this.height||l>this.width)throw"The region must fit inside the matrix";for(var i=j;i<e;i++)for(var h=i*this.rowSize,k=g;k<l;k++)this.bits[h+(k>>5)]|=1<<(31&k)}}function _dl(a,b){this._dv=a,this._dw=b,this.__defineGetter__("_du",function(){return this._dv}),this.__defineGetter__("Codewords",function(){return this._dw})}function _cl(a){var b=a.Dimension;if(b<21||1!=(3&b))throw"Error _cl";this._au=a,this._cp=null,this._co=null,this._dk=function(d,c,e){return this._au._ds(d,c)?e<<1|1:e<<1},this._cm=function(){if(null!=this._co)return this._co;for(var g=0,e=0;e<6;e++)g=this._dk(e,8,g);g=this._dk(7,8,g),g=this._dk(8,8,g),g=this._dk(8,7,g);for(var c=5;c>=0;c--)g=this._dk(8,c,g);if(this._co=_ax._ci(g),null!=this._co)return this._co;var f=this._au.Dimension;g=0;for(var d=f-8,e=f-1;e>=d;e--)g=this._dk(e,8,g);for(var c=f-7;c<f;c++)g=this._dk(8,c,g);if(this._co=_ax._ci(g),null!=this._co)return this._co;throw"Error _cm"},this._cq=function(){if(null!=this._cp)return this._cp;var h=this._au.Dimension,f=h-17>>2;if(f<=6)return _a3._av(f);for(var g=0,e=h-11,c=5;c>=0;c--)for(var d=h-9;d>=e;d--)g=this._dk(d,c,g);if(this._cp=_a3._aw(g),null!=this._cp&&this._cp._cr==h)return this._cp;g=0;for(var d=5;d>=0;d--)for(var c=h-9;c>=e;c--)g=this._dk(d,c,g);if(this._cp=_a3._aw(g),null!=this._cp&&this._cp._cr==h)return this._cp;throw"Error _cq"},this._gk=function(){var r=this._cm(),o=this._cq(),c=_dx._gl(r._dx),f=this._au.Dimension;c._dj(this._au,f);for(var k=o._aq(),n=!0,s=new Array(o._dp),m=0,q=0,h=0,e=f-1;e>0;e-=2){6==e&&e--;for(var l=0;l<f;l++)for(var g=n?f-1-l:l,d=0;d<2;d++)k._ds(e-d,g)||(h++,q<<=1,this._au._ds(e-d,g)&&(q|=1),8==h&&(s[m++]=q,h=0,q=0));n^=!0}if(m!=o._dp)throw"Error _gk";return s}}function _fg(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(b+a&1)}}function _fh(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(1&b)}}function _fi(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return a%3==0}}function _fj(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return(b+a)%3==0}}function _fk(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(_ew(b,1)+a/3&1)}}function _fl(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(c,b){var a=c*b;return(1&a)+a%3==0}}function _fm(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(c,b){var a=c*b;return 0==((1&a)+a%3&1)}}function _fn(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==((b+a&1)+b*a%3&1)}}function _db(_fa){this._fa=_fa,this.decode=function(received,_fv){for(var poly=new _bp(this._fa,received),_dh=new Array(_fv),i=0;i<_dh.length;i++)_dh[i]=0;for(var _fq=!1,noError=!0,i=0;i<_fv;i++){var eval=poly.evaluateAt(this._fa.exp(_fq?i+1:i));_dh[_dh.length-1-i]=eval,0!=eval&&(noError=!1)}if(!noError)for(var _fu=new _bp(this._fa,_dh),_dg=this._eb(this._fa._ba(_fv,1),_fu,_fv),sigma=_dg[0],omega=_dg[1],_dz=this._ey(sigma),_ea=this._di(omega,_dz,_fq),i=0;i<_dz.length;i++){var position=received.length-1-this._fa.log(_dz[i]);if(position<0)throw"ReedSolomonException Bad error location";received[position]=_az._bd(received[position],_ea[i])}},this._eb=function(a,b,R){if(a._ec<b._ec){var temp=a;a=b,b=temp}for(var rLast=a,r=b,sLast=this._fa.One,s=this._fa.Zero,tLast=this._fa.Zero,t=this._fa.One;r._ec>=Math.floor(R/2);){var rLastLast=rLast,_ga=sLast,_gb=tLast;if(rLast=r,sLast=s,tLast=t,rLast.Zero)throw"r_{i-1} was zero";r=rLastLast;for(var q=this._fa.Zero,_df=rLast._ex(rLast._ec),_fy=this._fa.inverse(_df);r._ec>=rLast._ec&&!r.Zero;){var _fx=r._ec-rLast._ec,scale=this._fa.multiply(r._ex(r._ec),_fy);q=q._bd(this._fa._ba(_fx,scale)),r=r._bd(rLast._dc(_fx,scale))}s=q.multiply1(sLast)._bd(_ga),t=q.multiply1(tLast)._bd(_gb)}var _de=t._ex(0);if(0==_de)throw"ReedSolomonException sigmaTilde(0) was zero";var inverse=this._fa.inverse(_de),sigma=t.multiply2(inverse),omega=r.multiply2(inverse);return new Array(sigma,omega)},this._ey=function(_ez){var _fz=_ez._ec;if(1==_fz)return new Array(_ez._ex(1));for(var result=new Array(_fz),e=0,i=1;i<256&&e<_fz;i++)0==_ez.evaluateAt(i)&&(result[e]=this._fa.inverse(i),e++);if(e!=_fz)throw"Error locator degree does not match number of roots";return result},this._di=function(_fs,_dz,_fq){for(var s=_dz.length,result=new Array(s),i=0;i<s;i++){for(var _gc=this._fa.inverse(_dz[i]),_dr=1,j=0;j<s;j++)i!=j&&(_dr=this._fa.multiply(_dr,_az._bd(1,this._fa.multiply(_dz[j],_gc))));result[i]=this._fa.multiply(_fs.evaluateAt(_gc),this._fa.inverse(_dr)),_fq&&(result[i]=this._fa.multiply(result[i],_gc))}return result}}function _bp(f,e){if(null==e||0==e.length)throw"bad arguments";this._fa=f;var c=e.length;if(c>1&&0==e[0]){for(var d=1;d<c&&0==e[d];)d++;if(d==c)this._dd=f.Zero._dd;else{this._dd=new Array(c-d);for(var b=0;b<this._dd.length;b++)this._dd[b]=0;for(var a=0;a<this._dd.length;a++)this._dd[a]=e[d+a]}}else this._dd=e;this.__defineGetter__("Zero",function(){return 0==this._dd[0]}),this.__defineGetter__("_ec",function(){return this._dd.length-1}),this.__defineGetter__("Coefficients",function(){return this._dd}),this._ex=function(g){return this._dd[this._dd.length-1-g]},this.evaluateAt=function(h){if(0==h)return this._ex(0);var l=this._dd.length;if(1==h){for(var g=0,k=0;k<l;k++)g=_az._bd(g,this._dd[k]);return g}for(var j=this._dd[0],k=1;k<l;k++)j=_az._bd(this._fa.multiply(h,j),this._dd[k]);return j},this._bd=function(g){if(this._fa!=g._fa)throw"GF256Polys do not have same _az _fa";if(this.Zero)return g;if(g.Zero)return this;var o=this._dd,n=g._dd;if(o.length>n.length){var j=o;o=n,n=j}for(var h=new Array(n.length),k=n.length-o.length,m=0;m<k;m++)h[m]=n[m];for(var l=k;l<n.length;l++)h[l]=_az._bd(o[l-k],n[l]);return new _bp(f,h)},this.multiply1=function(o){if(this._fa!=o._fa)throw"GF256Polys do not have same _az _fa";if(this.Zero||o.Zero)return this._fa.Zero;for(var r=this._dd,g=r.length,l=o._dd,n=l.length,q=new Array(g+n-1),m=0;m<g;m++)for(var h=r[m],k=0;k<n;k++)q[m+k]=_az._bd(q[m+k],this._fa.multiply(h,l[k]));return new _bp(this._fa,q)},this.multiply2=function(g){if(0==g)return this._fa.Zero;if(1==g)return this;for(var j=this._dd.length,k=new Array(j),h=0;h<j;h++)k[h]=this._fa.multiply(this._dd[h],g);return new _bp(this._fa,k)},this._dc=function(l,g){if(l<0)throw"bad arguments";if(0==g)return this._fa.Zero;for(var j=this._dd.length,k=new Array(j+l),h=0;h<k.length;h++)k[h]=0;for(var h=0;h<j;h++)k[h]=this._fa.multiply(this._dd[h],g);return new _bp(this._fa,k)},this.divide=function(l){if(this._fa!=l._fa)throw"GF256Polys do not have same _az _fa";if(l.Zero)throw"Divide by 0";for(var j=this._fa.Zero,o=this,g=l._ex(l._ec),n=this._fa.inverse(g);o._ec>=l._ec&&!o.Zero;){var m=o._ec-l._ec,h=this._fa.multiply(o._ex(o._ec),n),i=l._dc(m,h),k=this._fa._ba(m,h);j=j._bd(k),o=o._bd(i)}return new Array(j,o)}}function _az(b){this._gh=new Array(256),this._gi=new Array(256);for(var a=1,e=0;e<256;e++)this._gh[e]=a,a<<=1,a>=256&&(a^=b);for(var e=0;e<255;e++)this._gi[this._gh[e]]=e;var d=new Array(1);d[0]=0,this.zero=new _bp(this,new Array(d));var c=new Array(1);c[0]=1,this.one=new _bp(this,new Array(c)),this.__defineGetter__("Zero",function(){return this.zero}),this.__defineGetter__("One",function(){return this.one}),this._ba=function(j,f){if(j<0)throw"bad arguments";if(0==f)return zero;for(var h=new Array(j+1),g=0;g<h.length;g++)h[g]=0;return h[0]=f,new _bp(this,h)},this.exp=function(f){return this._gh[f]},this.log=function(f){if(0==f)throw"bad arguments";return this._gi[f]},this.inverse=function(f){if(0==f)throw"System.ArithmeticException";return this._gh[255-this._gi[f]]},this.multiply=function(g,f){return 0==g||0==f?0:1==g?f:1==f?g:this._gh[(this._gi[g]+this._gi[f])%255]}}function _ew(a,b){return a>=0?a>>b:(a>>b)+(2<<~b)}function _cz(c,a,b){this.x=c,this.y=a,this.count=1,this._aj=b,this.__defineGetter__("_ei",function(){return this._aj}),this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("X",function(){return this.x}),this.__defineGetter__("Y",function(){return this.y}),this._ek=function(){this.count++},this._ev=function(f,e,d){if(Math.abs(e-this.y)<=f&&Math.abs(d-this.x)<=f){var g=Math.abs(f-this._aj);return g<=1||g/this._aj<=1}return!1}}function _es(a){this._go=a[0],this._gu=a[1],this._gr=a[2],this.__defineGetter__("_gp",function(){return this._go}),this.__defineGetter__("_gq",function(){return this._gu}),this.__defineGetter__("_gs",function(){return this._gr})}function _cc(){this.image=null,this._cv=[],this._ge=!1,this._al=new Array(0,0,0,0,0),this._am=null,this.__defineGetter__("_da",function(){return this._al[0]=0,this._al[1]=0,this._al[2]=0,this._al[3]=0,this._al[4]=0,this._al}),this._ao=function(f){for(var b=0,d=0;d<5;d++){var e=f[d];if(0==e)return!1;b+=e}if(b<7)return!1;var c=Math.floor((b<<_el)/7),a=Math.floor(c/2);return Math.abs(c-(f[0]<<_el))<a&&Math.abs(c-(f[1]<<_el))<a&&Math.abs(3*c-(f[2]<<_el))<3*a&&Math.abs(c-(f[3]<<_el))<a&&Math.abs(c-(f[4]<<_el))<a},this._an=function(b,a){return a-b[4]-b[3]-b[2]/2},this._ap=function(a,j,d,g){for(var c=this.image,h=qrcode.height,b=this._da,f=a;f>=0&&c[j+f*qrcode.width];)b[2]++,f--;if(f<0)return NaN;for(;f>=0&&!c[j+f*qrcode.width]&&b[1]<=d;)b[1]++,f--;if(f<0||b[1]>d)return NaN;for(;f>=0&&c[j+f*qrcode.width]&&b[0]<=d;)b[0]++,f--;if(b[0]>d)return NaN;for(f=a+1;f<h&&c[j+f*qrcode.width];)b[2]++,f++;if(f==h)return NaN;for(;f<h&&!c[j+f*qrcode.width]&&b[3]<d;)b[3]++,f++;if(f==h||b[3]>=d)return NaN;for(;f<h&&c[j+f*qrcode.width]&&b[4]<d;)b[4]++,f++;if(b[4]>=d)return NaN;var e=b[0]+b[1]+b[2]+b[3]+b[4];return 5*Math.abs(e-g)>=2*g?NaN:this._ao(b)?this._an(b,f):NaN},this._ej=function(b,a,e,h){for(var d=this.image,i=qrcode.width,c=this._da,g=b;g>=0&&d[g+a*qrcode.width];)c[2]++,g--;if(g<0)return NaN;for(;g>=0&&!d[g+a*qrcode.width]&&c[1]<=e;)c[1]++,g--;if(g<0||c[1]>e)return NaN;for(;g>=0&&d[g+a*qrcode.width]&&c[0]<=e;)c[0]++,g--;if(c[0]>e)return NaN;for(g=b+1;g<i&&d[g+a*qrcode.width];)c[2]++,g++;if(g==i)return NaN;for(;g<i&&!d[g+a*qrcode.width]&&c[3]<e;)c[3]++,g++;if(g==i||c[3]>=e)return NaN;for(;g<i&&d[g+a*qrcode.width]&&c[4]<e;)c[4]++,g++;if(c[4]>=e)return NaN;var f=c[0]+c[1]+c[2]+c[3]+c[4];return 5*Math.abs(f-h)>=h?NaN:this._ao(c)?this._an(c,g):NaN},this._cu=function(c,f,e){var d=c[0]+c[1]+c[2]+c[3]+c[4],n=this._an(c,e),b=this._ap(f,Math.floor(n),c[2],d);if(!isNaN(b)&&(n=this._ej(Math.floor(n),Math.floor(b),c[2],d),!isNaN(n))){for(var l=d/7,m=!1,h=this._cv.length,g=0;g<h;g++){var a=this._cv[g];if(a._ev(l,b,n)){a._ek(),m=!0;break}}if(!m){var k=new _cz(n,b,l);this._cv.push(k),null!=this._am&&this._am._ep(k)}return!0}return!1},this._ee=function(){var a=this._cv.length;if(a<3)throw"Couldn't find enough finder patterns";if(a>3){for(var b=0,c=0;c<a;c++)b+=this._cv[c]._ei;for(var d=b/a,c=0;c<this._cv.length&&this._cv.length>3;c++){var e=this._cv[c];Math.abs(e._ei-d)>.2*d&&(this._cv.remove(c),c--)}}return this._cv.length>3&&this._cv.sort(function(g,f){return g.count>f.count?-1:g.count<f.count?1:0}),new Array(this._cv[0],this._cv[1],this._cv[2])},this._eq=function(){var b=this._cv.length;if(b<=1)return 0;for(var c=null,d=0;d<b;d++){var a=this._cv[d];if(a.Count>=_eg){if(null!=c)return this._ge=!0,Math.floor((Math.abs(c.X-a.X)-Math.abs(c.Y-a.Y))/2);c=a}}return 0},this._cx=function(){for(var g=0,c=0,a=this._cv.length,d=0;d<a;d++){var f=this._cv[d];f.Count>=_eg&&(g++,c+=f._ei)}if(g<3)return!1;for(var e=c/a,b=0,d=0;d<a;d++)f=this._cv[d],b+=Math.abs(f._ei-e);return b<=.05*c},this._ce=function(e){var o=!1;this.image=e;var n=qrcode.height,k=qrcode.width,a=Math.floor(3*n/(4*_eh));(a<_gf||o)&&(a=_gf);for(var g=!1,d=new Array(5),h=a-1;h<n&&!g;h+=a){d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0;for(var b=0,f=0;f<k;f++)if(e[f+h*qrcode.width])1==(1&b)&&b++,d[b]++;else if(0==(1&b))if(4==b)if(this._ao(d)){var c=this._cu(d,h,f);if(c)if(a=2,this._ge)g=this._cx();else{var m=this._eq();m>d[2]&&(h+=m-d[2]-a,f=k-1)}else{do f++;while(f<k&&!e[f+h*qrcode.width]);f--}b=0,d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0}else d[0]=d[2],d[1]=d[3],d[2]=d[4],d[3]=1,d[4]=0,b=3;else d[++b]++;else d[b]++;if(this._ao(d)){var c=this._cu(d,h,k);c&&(a=d[0],this._ge&&(g=_cx()))}}var l=this._ee();return qrcode._er(l),new _es(l)}}function _ai(c,a,b){this.x=c,this.y=a,this.count=1,this._aj=b,this.__defineGetter__("_ei",function(){return this._aj}),this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("X",function(){return Math.floor(this.x)}),this.__defineGetter__("Y",function(){return Math.floor(this.y)}),this._ek=function(){this.count++},this._ev=function(f,e,d){if(Math.abs(e-this.y)<=f&&Math.abs(d-this.x)<=f){var g=Math.abs(f-this._aj);return g<=1||g/this._aj<=1}return!1}}function _ak(g,c,b,f,a,e,d){this.image=g,this._cv=new Array,this.startX=c,this.startY=b,this.width=f,this.height=a,this._ef=e,this._al=new Array(0,0,0),this._am=d,this._an=function(i,h){return h-i[2]-i[1]/2},this._ao=function(l){for(var k=this._ef,h=k/2,j=0;j<3;j++)if(Math.abs(k-l[j])>=h)return!1;return!0},this._ap=function(h,r,l,o){var k=this.image,q=qrcode.height,j=this._al;j[0]=0,j[1]=0,j[2]=0;for(var n=h;n>=0&&k[r+n*qrcode.width]&&j[1]<=l;)j[1]++,n--;if(n<0||j[1]>l)return NaN;for(;n>=0&&!k[r+n*qrcode.width]&&j[0]<=l;)j[0]++,n--;if(j[0]>l)return NaN;for(n=h+1;n<q&&k[r+n*qrcode.width]&&j[1]<=l;)j[1]++,n++;if(n==q||j[1]>l)return NaN;for(;n<q&&!k[r+n*qrcode.width]&&j[2]<=l;)j[2]++,n++;if(j[2]>l)return NaN;var m=j[0]+j[1]+j[2];return 5*Math.abs(m-o)>=2*o?NaN:this._ao(j)?this._an(j,n):NaN},this._cu=function(l,o,n){var m=l[0]+l[1]+l[2],u=this._an(l,n),k=this._ap(o,Math.floor(u),2*l[1],m);if(!isNaN(k)){for(var t=(l[0]+l[1]+l[2])/3,r=this._cv.length,q=0;q<r;q++){var h=this._cv[q];if(h._ev(t,k,u))return new _ai(u,k,t)}var s=new _ai(u,k,t);this._cv.push(s),null!=this._am&&this._am._ep(s)}return null},this.find=function(){for(var q=this.startX,t=this.height,r=q+f,s=b+(t>>1),m=new Array(0,0,0),k=0;k<t;k++){var o=s+(0==(1&k)?k+1>>1:-(k+1>>1));m[0]=0,m[1]=0,m[2]=0;for(var n=q;n<r&&!g[n+qrcode.width*o];)n++;for(var h=0;n<r;){if(g[n+o*qrcode.width])if(1==h)m[h]++;else if(2==h){if(this._ao(m)){var l=this._cu(m,o,n);if(null!=l)return l}m[0]=m[2],m[1]=1,m[2]=0,h=1}else m[++h]++;else 1==h&&h++,m[h]++;n++}if(this._ao(m)){var l=this._cu(m,o,r);if(null!=l)return l}}if(0!=this._cv.length)return this._cv[0];throw"Couldn't find enough alignment patterns"}}function QRCodeDataBlockReader(c,a,b){this._ed=0,this._cw=7,this.dataLength=0,this.blocks=c,this._en=b,a<=9?this.dataLengthMode=0:a>=10&&a<=26?this.dataLengthMode=1:a>=27&&a<=40&&(this.dataLengthMode=2),this._gd=function(f){var k=0;if(f<this._cw+1){for(var m=0,e=0;e<f;e++)m+=1<<e;return m<<=this._cw-f+1,k=(this.blocks[this._ed]&m)>>this._cw-f+1,this._cw-=f,k}if(f<this._cw+1+8){for(var j=0,e=0;e<this._cw+1;e++)j+=1<<e;return k=(this.blocks[this._ed]&j)<<f-(this._cw+1),this._ed++,k+=this.blocks[this._ed]>>8-(f-(this._cw+1)),this._cw=this._cw-f%8,this._cw<0&&(this._cw=8+this._cw),k}if(f<this._cw+1+16){for(var j=0,h=0,e=0;e<this._cw+1;e++)j+=1<<e;var g=(this.blocks[this._ed]&j)<<f-(this._cw+1);this._ed++;var d=this.blocks[this._ed]<<f-(this._cw+1+8);this._ed++;for(var e=0;e<f-(this._cw+1+8);e++)h+=1<<e;h<<=8-(f-(this._cw+1+8));var l=(this.blocks[this._ed]&h)>>8-(f-(this._cw+1+8));return k=g+d+l,this._cw=this._cw-(f-8)%8,this._cw<0&&(this._cw=8+this._cw),k}return 0},this.NextMode=function(){return this._ed>this.blocks.length-this._en-2?0:this._gd(4)},this.getDataLength=function(d){for(var e=0;;){if(d>>e==1)break;e++}return this._gd(qrcode._eo[this.dataLengthMode][e])},this.getRomanAndFigureString=function(h){var f=h,g=0,j="",d=new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":");do if(f>1){g=this._gd(11);var i=Math.floor(g/45),e=g%45;j+=d[i],j+=d[e],f-=2}else 1==f&&(g=this._gd(6),j+=d[g],f-=1);while(f>0);return j},this.getFigureString=function(f){var d=f,e=0,g="";do d>=3?(e=this._gd(10),e<100&&(g+="0"),e<10&&(g+="0"),d-=3):2==d?(e=this._gd(7),e<10&&(g+="0"),d-=2):1==d&&(e=this._gd(4),d-=1),g+=e;while(d>0);return g},this.get8bitByteArray=function(g){var e=g,f=0,d=new Array;do f=this._gd(8),d.push(f),e--;while(e>0);return d},this.getKanjiString=function(j){var g=j,i=0,h="";do{i=_gd(13);var e=i%192,f=i/192,k=(f<<8)+e,d=0;d=k+33088<=40956?k+33088:k+49472,h+=String.fromCharCode(d),g--}while(g>0);return h},this.__defineGetter__("DataByte",function(){for(var g=new Array,e=1,f=2,d=4,n=8;;){var k=this.NextMode();if(0==k){if(g.length>0)break;throw"Empty data block"}if(k!=e&&k!=f&&k!=d&&k!=n)throw"Invalid mode: "+k+" in (block:"+this._ed+" bit:"+this._cw+")";if(dataLength=this.getDataLength(k),dataLength<1)throw"Invalid data length: "+dataLength;switch(k){case e:for(var l=this.getFigureString(dataLength),i=new Array(l.length),h=0;h<l.length;h++)i[h]=l.charCodeAt(h);g.push(i);break;case f:for(var l=this.getRomanAndFigureString(dataLength),i=new Array(l.length),h=0;h<l.length;h++)i[h]=l.charCodeAt(h);g.push(i);break;case d:var m=this.get8bitByteArray(dataLength);g.push(m);break;case n:var l=this.getKanjiString(dataLength);g.push(l)}}return g})}function C_Promise(workload,context){this.parent=context,this.update=null,this.finally=null,this.error_function=null,this.then=function(callback){return this.finally=callback,this},this.progress=function(callback){return this.update=callback,this},this.error=function(callback){return this.error_function=callback,this},this.call_then=function(data){null!==this.finally&&this.finally(data);
},this.call_progress=function(data){null!==this.update&&this.update(data)},this.call_error=function(data){null!==this.error_function&&this.error_function(data)},setTimeout(workload.bind(this),100)}!function(C){function N(a){return function(){var d,b=arguments[0];for(d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.5.8/"+(a?a+"/":"")+b,b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var e,c=encodeURIComponent;e=arguments[b],e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e,d+=c(e)}return Error(d)}}function ta(a){if(null==a||Va(a))return!1;if(L(a)||G(a)||F&&a instanceof F)return!0;var b="length"in Object(a)&&a.length;return T(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"==typeof a.item)}function q(a,b,d){var c,e;if(a)if(z(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(L(a)||ta(a)){var f="object"!=typeof a;for(c=0,e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==q)a.forEach(b,d,a);else if(sc(a))for(c in a)b.call(d,a[c],c,a);else if("function"==typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)ua.call(a,c)&&b.call(d,a[c],c,a);return a}function tc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function uc(a){return function(b,d){a(d,b)}}function Yd(){return++pb}function Pb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(D(g)||z(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],n=g[m];d&&D(n)?da(n)?a[m]=new Date(n.valueOf()):Wa(n)?a[m]=new RegExp(n):n.nodeName?a[m]=n.cloneNode(!0):Qb(n)?a[m]=n.clone():(D(a[m])||(a[m]=L(n)?[]:{}),Pb(a[m],[n],!0)):a[m]=n}}return c?a.$$hashKey=c:delete a.$$hashKey,a}function S(a){return Pb(a,va.call(arguments,1),!1)}function Zd(a){return Pb(a,va.call(arguments,1),!0)}function Z(a){return parseInt(a,10)}function Rb(a,b){return S(Object.create(a),b)}function A(){}function Xa(a){return a}function ha(a){return function(){return a}}function vc(a){return z(a.toString)&&a.toString!==ma}function y(a){return"undefined"==typeof a}function w(a){return"undefined"!=typeof a}function D(a){return null!==a&&"object"==typeof a}function sc(a){return null!==a&&"object"==typeof a&&!wc(a)}function G(a){return"string"==typeof a}function T(a){return"number"==typeof a}function da(a){return"[object Date]"===ma.call(a)}function z(a){return"function"==typeof a}function Wa(a){return"[object RegExp]"===ma.call(a)}function Va(a){return a&&a.window===a}function Ya(a){return a&&a.$evalAsync&&a.$watch}function Ga(a){return"boolean"==typeof a}function $d(a){return a&&T(a.length)&&ae.test(ma.call(a))}function Qb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function be(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function wa(a){return Q(a.nodeName||a[0]&&a[0].nodeName)}function Za(a,b){var d=a.indexOf(b);return 0<=d&&a.splice(d,1),d}function pa(a,b){function d(a,b){var e,d=b.$$hashKey;if(L(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(sc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"==typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&(b[e]=c(a[e]));else for(e in a)ua.call(a,e)&&(b[e]=c(a[e]));return d?b.$$hashKey=d:delete b.$$hashKey,b}function c(a){if(!D(a))return a;var b=f.indexOf(a);if(-1!==b)return g[b];if(Va(a)||Ya(a))throw xa("cpws");var b=!1,c=e(a);return void 0===c&&(c=L(a)?[]:Object.create(wc(a)),b=!0),f.push(a),g.push(c),b?d(a,c):c}function e(a){switch(ma.call(a)){case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Float32Array]":case"[object Float64Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return new a.constructor(c(a.buffer),a.byteOffset,a.length);case"[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);return new Uint8Array(b).set(new Uint8Array(a)),b}return a.slice(0);case"[object Boolean]":case"[object Number]":case"[object String]":case"[object Date]":return new a.constructor(a.valueOf());case"[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),b.lastIndex=a.lastIndex,b;case"[object Blob]":return new a.constructor([a],{type:a.type})}if(z(a.cloneNode))return a.cloneNode(!0)}var f=[],g=[];if(b){if($d(b)||"[object ArrayBuffer]"===ma.call(b))throw xa("cpta");if(a===b)throw xa("cpi");return L(b)?b.length=0:q(b,function(a,d){"$$hashKey"!==d&&delete b[d]}),f.push(a),g.push(b),d(a,b)}return c(a)}function na(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var c,d=typeof a;if(d==typeof b&&"object"==d){if(!L(a)){if(da(a))return!!da(b)&&na(a.getTime(),b.getTime());if(Wa(a))return!!Wa(b)&&a.toString()==b.toString();if(Ya(a)||Ya(b)||Va(a)||Va(b)||L(b)||da(b)||Wa(b))return!1;d=U();for(c in a)if("$"!==c.charAt(0)&&!z(a[c])){if(!na(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&w(b[c])&&!z(b[c]))return!1;return!0}if(!L(b))return!1;if((d=a.length)==b.length){for(c=0;c<d;c++)if(!na(a[c],b[c]))return!1;return!0}}return!1}function $a(a,b,d){return a.concat(va.call(b,d))}function ab(a,b){var d=2<arguments.length?va.call(arguments,2):[];return!z(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,$a(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function ce(a,b){var d=b;return"string"==typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Va(b)?d="$WINDOW":b&&C.document===b?d="$DOCUMENT":Ya(b)&&(d="$SCOPE"),d}function bb(a,b){if(!y(a))return T(b)||(b=b?2:null),JSON.stringify(a,ce,b)}function xc(a){return G(a)?JSON.parse(a):a}function yc(a,b){a=a.replace(de,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6e4;return isNaN(d)?b:d}function Sb(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();return b=yc(b,c),d*=b-c,a=new Date(a.getTime()),a.setMinutes(a.getMinutes()+d),a}function ya(a){a=F(a).clone();try{a.empty()}catch(b){}var d=F("<div>").append(a).html();try{return a[0].nodeType===Ma?Q(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+Q(b)})}catch(c){return Q(d)}}function zc(a){try{return decodeURIComponent(a)}catch(b){}}function Ac(a){var b={};return q((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=zc(e),w(e)&&(f=!w(f)||zc(f),ua.call(b,e)?L(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))}),b}function Tb(a){var b=[];return q(a,function(a,c){L(a)?q(a,function(a){b.push(ea(c,!0)+(!0===a?"":"="+ea(a,!0)))}):b.push(ea(c,!0)+(!0===a?"":"="+ea(a,!0)))}),b.length?b.join("&"):""}function qb(a){return ea(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ea(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function ee(a,b){var d,c,e=Na.length;for(c=0;c<e;++c)if(d=Na[c]+b,G(d=a.getAttribute(d)))return d;return null}function fe(a,b){var d,c,e={};q(Na,function(b){b+="app",!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))}),q(Na,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))}),d&&(e.strictDi=null!==ee(d,"strict-di"),b(d,c?[c]:[],e))}function Bc(a,b,d){D(d)||(d={}),d=S({strictDi:!1},d);var c=function(){if(a=F(a),a.injector()){var c=a[0]===C.document?"document":ya(a);throw xa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"))}return b=b||[],b.unshift(["$provide",function(b){b.value("$rootElement",a)}]),d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]),b.unshift("ng"),c=cb(b,d.strictDi),c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d),c(b)(a)})}]),c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;return C&&e.test(C.name)&&(d.debugInfoEnabled=!0,C.name=C.name.replace(e,"")),C&&!f.test(C.name)?c():(C.name=C.name.replace(f,""),ca.resumeBootstrap=function(a){return q(a,function(a){b.push(a)}),c()},void(z(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()))}function ge(){C.name="NG_ENABLE_DEBUG_INFO!"+C.name,C.location.reload()}function he(a){if(a=ca.element(a).injector(),!a)throw xa("test");return a.get("$$testability")}function Cc(a,b){return b=b||"_",a.replace(ie,function(a,c){return(c?b:"")+a.toLowerCase()})}function je(){var a;if(!Dc){var b=rb();(qa=y(b)?C.jQuery:b?C[b]:void 0)&&qa.fn.on?(F=qa,S(qa.fn,{scope:Oa.scope,isolateScope:Oa.isolateScope,controller:Oa.controller,injector:Oa.injector,inheritedData:Oa.inheritedData}),a=qa.cleanData,qa.cleanData=function(b){for(var c,f,e=0;null!=(f=b[e]);e++)(c=qa._data(f,"events"))&&c.$destroy&&qa(f).triggerHandler("$destroy");a(b)}):F=O,ca.element=F,Dc=!0}}function sb(a,b,d){if(!a)throw xa("areq",b||"?",d||"required");return a}function Pa(a,b,d){return d&&L(a)&&(a=a[a.length-1]),sb(z(a),b,"not a function, got "+(a&&"object"==typeof a?a.constructor.name||"Object":typeof a)),a}function Qa(a,b){if("hasOwnProperty"===a)throw xa("badname",b)}function Ec(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&z(a)?ab(e,a):a}function tb(a){for(var c,b=a[0],d=a[a.length-1],e=1;b!==d&&(b=b.nextSibling);e++)(c||a[e]!==b)&&(c||(c=F(va.call(a,0,e))),c.push(b));return c||a}function U(){return Object.create(null)}function ke(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=N("$injector"),c=N("ng");return a=b(a,"angular",Object),a.$$minErr=a.$$minErr||N,b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");return g&&a.hasOwnProperty(f)&&(a[f]=null),b(a,f,function(){function a(b,d,e,f){return f||(f=c),function(){return f[e||"push"]([b,d,arguments]),R}}function b(a,d){return function(b,e){return e&&z(e)&&(e.$$moduleName=f),c.push([a,d,arguments]),R}}if(!g)throw d("nomod",f);var c=[],e=[],p=[],u=a("$injector","invoke","push",e),R={_invokeQueue:c,_configBlocks:e,_runBlocks:p,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:u,run:function(a){return p.push(a),this}};return h&&u(h),R})}})}function ia(a,b){if(L(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(D(a))for(d in b=b||{},a)"$"===d.charAt(0)&&"$"===d.charAt(1)||(b[d]=a[d]);return b||a}function le(a){S(a,{bootstrap:Bc,copy:pa,extend:S,merge:Zd,equals:na,element:F,forEach:q,injector:cb,noop:A,bind:ab,toJson:bb,fromJson:xc,identity:Xa,isUndefined:y,isDefined:w,isString:G,isFunction:z,isObject:D,isNumber:T,isElement:Qb,isArray:L,version:me,isDate:da,lowercase:Q,uppercase:ub,callbacks:{$$counter:0},getTestability:he,$$minErr:N,$$csp:Ba,reloadWithDebugInfo:ge}),(Ub=ke(C))("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:ne}),a.provider("$compile",Fc).directive({a:oe,input:Gc,textarea:Gc,form:pe,script:qe,select:re,style:se,option:te,ngBind:ue,ngBindHtml:ve,ngBindTemplate:we,ngClass:xe,ngClassEven:ye,ngClassOdd:ze,ngCloak:Ae,ngController:Be,ngForm:Ce,ngHide:De,ngIf:Ee,ngInclude:Fe,ngInit:Ge,ngNonBindable:He,ngPluralize:Ie,ngRepeat:Je,ngShow:Ke,ngStyle:Le,ngSwitch:Me,ngSwitchWhen:Ne,ngSwitchDefault:Oe,ngOptions:Pe,ngTransclude:Qe,ngModel:Re,ngList:Se,ngChange:Te,pattern:Hc,ngPattern:Hc,required:Ic,ngRequired:Ic,minlength:Jc,ngMinlength:Jc,maxlength:Kc,ngMaxlength:Kc,ngValue:Ue,ngModelOptions:Ve}).directive({ngInclude:We}).directive(vb).directive(Lc),a.provider({$anchorScroll:Xe,$animate:Ye,$animateCss:Ze,$$animateJs:$e,$$animateQueue:af,$$AnimateRunner:bf,$$animateAsyncRun:cf,$browser:df,$cacheFactory:ef,$controller:ff,$document:gf,$exceptionHandler:hf,$filter:Mc,$$forceReflow:jf,$interpolate:kf,$interval:lf,$http:mf,$httpParamSerializer:nf,$httpParamSerializerJQLike:of,$httpBackend:pf,$xhrFactory:qf,$jsonpCallbacks:rf,$location:sf,$log:tf,$parse:uf,$rootScope:vf,$q:wf,$$q:xf,$sce:yf,$sceDelegate:zf,$sniffer:Af,$templateCache:Bf,$templateRequest:Cf,$$testability:Df,$timeout:Ef,$window:Ff,$$rAF:Gf,$$jqLite:Hf,$$HashMap:If,$$cookieReader:Jf})}])}function db(a){return a.replace(Kf,function(a,d,c,e){return e?c.toUpperCase():c}).replace(Lf,"Moz$1")}function Nc(a){return a=a.nodeType,1===a||!a||9===a}function Oc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Vb.test(a)){for(d=e.appendChild(b.createElement("div")),c=(Mf.exec(a)||["",""])[1].toLowerCase(),c=ja[c]||ja._default,d.innerHTML=c[1]+a.replace(Nf,"<$1></$2>")+c[2],c=c[0];c--;)d=d.lastChild;f=$a(f,d.childNodes),d=e.firstChild,d.textContent=""}else f.push(b.createTextNode(a));return e.textContent="",e.innerHTML="",q(f,function(a){e.appendChild(a)}),e}function Pc(a,b){var d=a.parentNode;d&&d.replaceChild(b,a),b.appendChild(a)}function O(a){if(a instanceof O)return a;var b;if(G(a)&&(a=W(a),b=!0),!(this instanceof O)){if(b&&"<"!=a.charAt(0))throw Wb("nosel");return new O(a)}if(b){b=C.document;var d;a=(d=Of.exec(a))?[b.createElement(d[1])]:(d=Oc(a,b))?d.childNodes:[]}Qc(this,a)}function Xb(a){return a.cloneNode(!0)}function wb(a,b){if(b||eb(a),a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)eb(d[c])}function Rc(a,b,d,c){if(w(c))throw Wb("offargs");var e=(c=xb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];w(d)&&Za(c||[],d),w(d)&&c&&0<c.length||(a.removeEventListener(b,f,!1),delete e[b])};q(b.split(" "),function(a){g(a),yb[a]&&g(yb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function eb(a,b){var d=a.ng339,c=d&&fb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Rc(a)),delete fb[d],a.ng339=void 0))}function xb(a,b){var d=a.ng339,d=d&&fb[d];return b&&!d&&(a.ng339=d=++Pf,d=fb[d]={events:{},data:{},handle:void 0}),d}function Yb(a,b,d){if(Nc(a)){var c=w(d),e=!c&&b&&!D(b),f=!b;if(a=(a=xb(a,!e))&&a.data,c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];S(a,b)}}}function zb(a,b){return!!a.getAttribute&&-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" ")}function Ab(a,b){b&&a.setAttribute&&q(b.split(" "),function(b){a.setAttribute("class",W((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+W(b)+" "," ")))})}function Bb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(b.split(" "),function(a){a=W(a),-1===d.indexOf(" "+a+" ")&&(d+=a+" ")}),a.setAttribute("class",W(d))}}function Qc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"==typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Sc(a,b){return Cb(a,"$"+(b||"ngController")+"Controller")}function Cb(a,b,d){for(9==a.nodeType&&(a=a.documentElement),b=L(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(w(d=F.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function Tc(a){for(wb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Db(a,b){b||wb(a);var d=a.parentNode;d&&d.removeChild(a)}function Qf(a,b){b=b||C,"complete"===b.document.readyState?b.setTimeout(a):F(b).on("load",a)}function Uc(a,b){var d=Eb[b.toLowerCase()];return d&&Vc[wa(a)]&&d}function Rf(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(y(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0,c.stopPropagation&&c.stopPropagation(),h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||Sf;1<g&&(f=ia(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};return d.elem=a,d}function Sf(a,b,d){d.call(a,b)}function Tf(a,b,d){var c=b.relatedTarget;c&&(c===a||Uf.call(a,c))||d.call(a,b)}function Hf(){this.$get=function(){return S(O,{hasClass:function(a,b){return a.attr&&(a=a[0]),zb(a,b)},addClass:function(a,b){return a.attr&&(a=a[0]),Bb(a,b)},removeClass:function(a,b){return a.attr&&(a=a[0]),Ab(a,b)}})}}function Ca(a,b){var d=a&&a.$$hashKey;return d?("function"==typeof d&&(d=a.$$hashKey()),d):(d=typeof a,d="function"==d||"object"==d&&null!==a?a.$$hashKey=d+":"+(b||Yd)():d+":"+a)}function Ra(a,b){if(b){var d=0;this.nextUid=function(){return++d}}q(a,this.put,this)}function Wc(a){return a=(Function.prototype.toString.call(a)+" ").replace(Vf,""),a.match(Wf)||a.match(Xf)}function Yf(a){return(a=Wc(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function cb(a,b){function d(a){return function(b,c){return D(b)?void q(b,uc(a)):a(b,c)}}function c(a,b){if(Qa(a,"service"),(z(b)||L(b))&&(b=p.instantiate(b)),!b.$get)throw Ha("pget",a);return n[a+"Provider"]=b}function e(a,b){return function(){var c=B.invoke(b,this);if(y(c))throw Ha("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){sb(y(a)||L(a),"modulesToLoad","not an array");var c,b=[];return q(a,function(a){function d(a){var b,c;for(b=0,c=a.length;b<c;b++){var e=a[b],f=p.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{G(a)?(c=Ub(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):z(a)?b.push(p.invoke(a)):L(a)?b.push(p.invoke(a)):Pa(a,"module")}catch(e){throw L(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ha("modulerr",a,e.stack||e.message||e)}}}),b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Ha("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f}finally{l.shift()}}function e(a,c,f){var g=[];a=cb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!=typeof l)throw Ha("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){return"string"==typeof c&&(d=c,c=null),c=e(a,c,d),L(a)&&(a=a[a.length-1]),d=!(11>=Ea)&&("function"==typeof a&&/^(?:class\b|constructor\()/.test(Function.prototype.toString.call(a)+" ")),d?(c.unshift(null),new(Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=L(a)?a[a.length-1]:a;return a=e(a,b,c),a.unshift(null),new(Function.prototype.bind.apply(d,a))},get:d,annotate:cb.$$annotate,has:function(b){return n.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Ra([],!0),n={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,ha(b),!1)}),constant:d(function(a,b){Qa(a,"constant"),n[a]=b,u[a]=b}),decorator:function(a,b){var c=p.get(a+"Provider"),d=c.$get;c.$get=function(){var a=B.invoke(d,c);return B.invoke(b,null,{$delegate:a})}}}},p=n.$injector=h(n,function(a,b){throw ca.isString(b)&&l.push(b),Ha("unpr",l.join(" <- "))}),u={},R=h(u,function(a,b){var c=p.get(a+"Provider",b);return B.invoke(c.$get,c,void 0,a)}),B=R;n.$injectorProvider={$get:ha(R)};var r=g(a),B=R.get("$injector");return B.strictDi=b,q(r,function(a){a&&B.invoke(a)}),B}function Xe(){var a=!0;this.disableAutoScrolling=function(){a=!1},this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;return Array.prototype.some.call(a,function(a){if("a"===wa(a))return b=a,!0}),b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset,z(c)?c=c():Qb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):T(c)||(c=0),c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=G(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;return a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||Qf(function(){c.$evalAsync(g)})}),g}]}function gb(a,b){return a||b?a?b?(L(a)&&(a=a.join(" ")),L(b)&&(b=b.join(" ")),a+" "+b):a:b:""}function Zf(a){G(a)&&(a=a.split(" "));var b=U();return q(a,function(a){a.length&&(b[a]=!0)}),b}function Ia(a){return D(a)?a:{}}function $f(a,b,d,c){function e(a){try{a.apply(null,va.call(arguments,1))}finally{if(R--,0===R)for(;B.length;)try{B.pop()()}catch(b){d.error(b)}}}function f(){t=null,g(),h()}function g(){r=K(),r=y(r)?null:r,na(r,E)&&(r=E),E=r}function h(){v===k.url()&&J===r||(v=k.url(),J=r,q(M,function(a){a(k.url(),r)}))}var k=this,l=a.location,m=a.history,n=a.setTimeout,p=a.clearTimeout,u={};k.isMock=!1;var R=0,B=[];k.$$completeOutstandingRequest=e,k.$$incOutstandingRequestCount=function(){R++},k.notifyWhenNoOutstandingRequests=function(a){0===R?a():B.push(a)};var r,J,v=l.href,fa=b.find("base"),t=null,K=c.history?function(){try{return m.state}catch(a){}}:A;g(),J=r,k.url=function(b,d,e){if(y(e)&&(e=null),l!==a.location&&(l=a.location),m!==a.history&&(m=a.history),b){var f=J===e;if(v===b&&(!c.history||f))return k;var h=v&&Ja(v)===Ja(b);return v=b,J=e,!c.history||h&&f?(h||(t=b),d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(t=b)):(m[d?"replaceState":"pushState"](e,"",b),g(),J=r),t&&(t=b),k}return t||l.href.replace(/%27/g,"'")},k.state=function(){return r};var M=[],H=!1,E=null;k.onUrlChange=function(b){return H||(c.history&&F(a).on("popstate",f),F(a).on("hashchange",f),H=!0),M.push(b),b},k.$$applicationDestroyed=function(){F(a).off("hashchange popstate",f)},k.$$checkUrlChange=h,k.baseHref=function(){var a=fa.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""},k.defer=function(a,b){var c;return R++,c=n(function(){delete u[c],e(a)},b||0),u[c]=!0,c},k.defer.cancel=function(a){return!!u[a]&&(delete u[a],p(a),e(A),!0)}}function df(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new $f(a,c,b,d)}]}function ef(){this.$get=function(){function a(a,c){function e(a){a!=n&&(p?p==a&&(p=a.n):p=a,f(a.n,a.p),f(a,n),n=a,n.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw N("$cacheFactory")("iid",a);var g=0,h=S({},c,{id:a}),k=U(),l=c&&c.capacity||Number.MAX_VALUE,m=U(),n=null,p=null;return b[a]={put:function(a,b){if(!y(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}return a in k||g++,k[a]=b,g>l&&this.remove(p.key),b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==n&&(n=b.p),b==p&&(p=b.n),f(b.n,b.p),delete m[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=U(),g=0,m=U(),n=p=null},destroy:function(){m=h=k=null,delete b[a]},info:function(){return S({},h,{size:g})}}}var b={};return a.info=function(){var a={};return q(b,function(b,e){a[e]=b.info()}),a},a.get=function(a){return b[a]},a}}function Bf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Fc(a,b){function d(a,b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*(\w*)\s*$/,e=U();return q(a,function(a,f){if(a in n)e[f]=n[a];else{var g=a.match(d);if(!g)throw ga("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f},g[4]&&(n[a]=e[f])}}),e}function c(a){var b=a.charAt(0);if(!b||b!==Q(b))throw ga("baddir",a);if(a!==a.trim())throw ga("baddir",a)}function e(a){var b=a.require||a.controller&&a.name;return!L(b)&&D(b)&&q(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)}),b}var f={},g=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,h=/(([\w\-]+)(?:\:([^;]+))?;?)/,k=be("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,n=U();this.directive=function B(b,d){return Qa(b,"directive"),G(b)?(c(b),sb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];return q(f[b],function(f,g){try{var h=a.invoke(f);z(h)?h={compile:ha(h)}:!h.compile&&h.link&&(h.compile=ha(h.link)),h.priority=h.priority||0,h.index=g,h.name=h.name||b,h.require=e(h),h.restrict=h.restrict||"EA",h.$$moduleName=f.$$moduleName,d.push(h)}catch(k){c(k)}}),d}])),f[b].push(d)):q(b,uc(B)),this},this.component=function(a,b){function c(a){function e(b){return z(b)||L(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:Xc(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};return q(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)}),g}var d=b.controller||function(){};return q(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,z(d)&&(d[b]=a))}),c.$inject=["$injector"],this.directive(a,c)},this.aHrefSanitizationWhitelist=function(a){return w(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()},this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var p=!0;this.debugInfoEnabled=function(a){return w(a)?(p=a,this):p};var u=10;this.onChangesTtl=function(a){return arguments.length?(u=a,this):u},this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,e,n,t,K,M,H,E){function I(){try{if(!--qa)throw Y=void 0,ga("infchng",u);K.$apply(function(){for(var a=[],b=0,c=Y.length;b<c;++b)try{Y[b]()}catch(d){a.push(d)}if(Y=void 0,a.length)throw a})}finally{qa++}}function Da(a,b){if(b){var d,e,f,c=Object.keys(b);for(d=0,e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function P(a,b,c){pa.innerHTML="<span "+b+">",b=pa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name),d.value=c,a.attributes.setNamedItem(d)}function x(a,b){try{a.addClass(b)}catch(c){}}function aa(a,b,c,d,e){a instanceof F||(a=F(a));for(var f=/\S+/,g=0,h=a.length;g<h;g++){var k=a[g];k.nodeType===Ma&&k.nodeValue.match(f)&&Pc(k,a[g]=C.document.createElement("span"))}var l=s(a,b,a,c,d,e);aa.$$addScopeClass(a);var m=null;return function(b,c,d){sb(b,"scope"),e&&e.needsNewScope&&(b=b.$parent.$new()),d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;if(d=d.futureParentElement,f&&f.$$boundTransclude&&(f=f.$$boundTransclude),m||(m=(d=d&&d[0])&&"foreignobject"!==wa(d)&&ma.call(d).match(/SVG/)?"svg":"html"),d="html"!==m?F(da(m,F("<div>").append(a).html())):c?Oa.clone.call(a):a,g)for(var h in g)d.data("$"+h+"Controller",g[h].instance);return aa.$$addScopeInfo(d,b),c&&c(d,b),l&&l(b,d,d,f),d}}function s(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,p,r,v;if(n)for(v=Array(c.length),m=0;m<h.length;m+=3)f=h[m],v[f]=c[f];else v=c;for(m=0,p=h.length;m<p;)k=v[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),aa.$$addScopeInfo(F(k),l)):l=a,r=c.transcludeOnThisElement?za(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?za(a,b):null,c(f,l,k,d,r)):f&&f(a,k.childNodes,void 0,e)}for(var k,l,m,p,n,h=[],r=0;r<a.length;r++)k=new Da,l=$b(a[r],[],k,0===r?d:void 0,e),(f=l.length?oa(l,a[r],k,b,c,null,[],[],f):null)&&f.scope&&aa.$$addScopeClass(k.$$element),k=f&&f.terminal||!(m=a[r].childNodes)||!m.length?null:s(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b),(f||k)&&(h.push(r,f,k),p=!0,n=n||f),f=null;return p?g:null}function za(a,b,c){function d(e,f,g,h,k){return e||(e=a.$new(!1,k),e.$$transcluded=!0),b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var f,e=d.$$slots=U();for(f in b.$$slots)e[f]=b.$$slots[f]?za(a,b.$$slots[f],c):null;return d}function $b(a,b,c,d,e){var f=c.$attr;switch(a.nodeType){case 1:O(b,Aa(wa(a)),"E",d,e);for(var g,k,l,m,p=a.attributes,n=0,r=p&&p.length;n<r;n++){var v=!1,u=!1;g=p[n],k=g.name,l=W(g.value),g=Aa(k),(m=Ba.test(g))&&(k=k.replace(Yc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()})),(g=g.match(Ca))&&V(g[1])&&(v=k,u=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6)),g=Aa(k.toLowerCase()),f[g]=k,!m&&c.hasOwnProperty(g)||(c[g]=l,Uc(a,g)&&(c[g]=!0)),ia(a,b,l,g,m),O(b,g,"A",d,e,v,u)}if(f=a.className,D(f)&&(f=f.animVal),G(f)&&""!==f)for(;a=h.exec(f);)g=Aa(a[2]),O(b,g,"C",d,e)&&(c[g]=W(a[3])),f=f.substr(a.index+a[0].length);break;case Ma:if(11===Ea)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Ma;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);ca(b,a.nodeValue);break;case 8:hb(a,b,c,d,e)}return b.sort(Z),b}function hb(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=Aa(f[1]);O(b,h,"M",d,e)&&(c[h]=W(f[2]))}}catch(k){}}function N(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ga("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--),d.push(a),a=a.nextSibling}while(0<e)}else d.push(a);return F(d)}function Zc(a,b,c){return function(d,e,f,g,h){return e=N(e[0],b,c),a(d,e,f,g,h)}}function ac(a,b,c,d,e,f){var g;return a?aa(b,c,d,e,f):function(){return g||(g=aa(b,c,d,e,f),b=c=f=null),g.apply(this,arguments)}}function oa(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){a&&(c&&(a=Zc(a,c,d)),a.require=x.require,a.directiveName=I,(u===x||x.$$isolateScope)&&(a=ja(a,{isolateScope:!0})),h.push(a)),b&&(c&&(b=Zc(b,c,d)),b.require=x.require,b.directiveName=I,(u===x||x.$$isolateScope)&&(b=ja(b,{isolateScope:!0})),k.push(b))}function p(a,e,f,g,l){function m(a,b,c,d){var e;if(Ya(a)||(d=c,c=b,b=a,a=void 0),fa&&(e=t),c||(c=fa?I.parent():I),!d)return l(a,b,e,c,s);var f=l.$$slots[d];if(f)return f(a,b,e,c,s);if(y(f))throw ga("noslot",d,ya(I))}var n,E,x,M,B,t,P,I;b===f?(g=d,I=d.$$element):(I=F(f),g=new Da(I,d)),B=e,u?M=e.$new(!0):r&&(B=e.$parent),l&&(P=m,P.$$boundTransclude=l,P.isSlotFilled=function(a){return!!l.$$slots[a]}),v&&(t=ag(I,g,P,v,M,e,u)),u&&(aa.$$addScopeInfo(I,M,!0,!(H&&(H===u||H===u.$$originalDirective))),aa.$$addScopeClass(I,!0),M.$$isolateBindings=u.$$isolateBindings,E=ka(e,g,M,M.$$isolateBindings,u),E.removeWatches&&M.$on("$destroy",E.removeWatches));for(n in t){E=v[n],x=t[n];var Zb=E.$$bindings.bindToController;x.bindingInfo=x.identifier&&Zb?ka(B,g,x.instance,Zb,E):{};var K=x();K!==x.instance&&(x.instance=K,I.data("$"+E.name+"Controller",K),x.bindingInfo.removeWatches&&x.bindingInfo.removeWatches(),x.bindingInfo=ka(B,g,x.instance,Zb,E))}for(q(v,function(a,b){var c=a.require;a.bindToController&&!L(c)&&D(c)&&S(t[b].instance,ib(b,c,I,t))}),q(t,function(a){var b=a.instance;if(z(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(z(b.$onInit))try{b.$onInit()}catch(e){c(e)}z(b.$doCheck)&&(B.$watch(function(){b.$doCheck()}),b.$doCheck()),z(b.$onDestroy)&&B.$on("$destroy",function(){b.$onDestroy()})}),n=0,E=h.length;n<E;n++)x=h[n],la(x,x.isolateScope?M:e,I,g,x.require&&ib(x.directiveName,x.require,I,t),P);var s=e;for(u&&(u.template||null===u.templateUrl)&&(s=M),a&&a(s,f.childNodes,void 0,l),n=k.length-1;0<=n;n--)x=k[n],la(x,x.isolateScope?M:e,I,g,x.require&&ib(x.directiveName,x.require,I,t),P);q(t,function(a){a=a.instance,z(a.$postLink)&&a.$postLink()})}l=l||{};for(var x,I,P,s,w,n=-Number.MAX_VALUE,r=l.newScopeDirective,v=l.controllerDirectives,u=l.newIsolateScopeDirective,H=l.templateDirective,E=l.nonTlbTranscludeDirective,M=!1,B=!1,fa=l.hasElementTranscludeDirective,t=d.$$element=F(b),K=e,Fa=!1,za=!1,A=0,C=a.length;A<C;A++){x=a[A];var G=x.$$start,hb=x.$$end;if(G&&(t=N(b,G,hb)),P=void 0,n>x.priority)break;if((w=x.scope)&&(x.templateUrl||(D(w)?(X("new/isolated scope",u||r,x,t),u=x):X("new/isolated scope",u,x,t)),r=r||x),I=x.name,!Fa&&(x.replace&&(x.templateUrl||x.template)||x.transclude&&!x.$$tlb)){for(w=A+1;Fa=a[w++];)if(Fa.transclude&&!Fa.$$tlb||Fa.replace&&(Fa.templateUrl||Fa.template)){za=!0;break}Fa=!0}if(!x.templateUrl&&x.controller&&(w=x.controller,
v=v||U(),X("'"+I+"' controller",v[I],x,t),v[I]=x),w=x.transclude)if(M=!0,x.$$tlb||(X("transclusion",E,x,t),E=x),"element"==w)fa=!0,n=x.priority,P=t,t=d.$$element=F(aa.$$createComment(I,d[I])),b=t[0],ea(f,va.call(P,0),b),P[0].$$parentNode=P[0].parentNode,K=ac(za,P,e,n,g&&g.name,{nonTlbTranscludeDirective:E});else{var oa=U();if(P=F(Xb(b)).contents(),D(w)){P=[];var Q=U(),O=U();q(w,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a,Q[a]=b,oa[b]=null,O[b]=c}),q(t.contents(),function(a){var b=Q[Aa(wa(a))];b?(O[b]=!0,oa[b]=oa[b]||[],oa[b].push(a)):P.push(a)}),q(O,function(a,b){if(!a)throw ga("reqslot",b)});for(var V in oa)oa[V]&&(oa[V]=ac(za,oa[V],e))}t.empty(),K=ac(za,P,e,void 0,void 0,{needsNewScope:x.$$isolateScope||x.$$newScope}),K.$$slots=oa}if(x.template)if(B=!0,X("template",H,x,t),H=x,w=z(x.template)?x.template(t,d):x.template,w=xa(w),x.replace){if(g=x,P=Vb.test(w)?$c(da(x.templateNamespace,W(w))):[],b=P[0],1!=P.length||1!==b.nodeType)throw ga("tplrt",I,"");ea(f,t,b),C={$attr:{}},w=$b(b,[],C);var Z=a.splice(A+1,a.length-(A+1));(u||r)&&T(w,u,r),a=a.concat(w).concat(Z),$(d,C),C=a.length}else t.html(w);if(x.templateUrl)B=!0,X("template",H,x,t),H=x,x.replace&&(g=x),p=ba(a.splice(A,a.length-A),t,d,f,M&&K,h,k,{controllerDirectives:v,newScopeDirective:r!==x&&r,newIsolateScopeDirective:u,templateDirective:H,nonTlbTranscludeDirective:E}),C=a.length;else if(x.compile)try{s=x.compile(t,d,K);var Y=x.$$originalDirective||x;z(s)?m(null,ab(Y,s),G,hb):s&&m(ab(Y,s.pre),ab(Y,s.post),G,hb)}catch(ca){c(ca,ya(t))}x.terminal&&(p.terminal=!0,n=Math.max(n,x.priority))}return p.scope=r&&!0===r.scope,p.transcludeOnThisElement=M,p.templateOnThisElement=B,p.transclude=K,l.hasElementTranscludeDirective=fa,p}function ib(a,b,c,d){var e;if(G(b)){var f=b.match(l);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];if("^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance,!e){var h="$"+b+"Controller";e=g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw ga("ctreq",b,a)}else if(L(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=ib(a,b[g],c,d);else D(b)&&(e={},q(b,function(b,f){e[f]=ib(a,b,c,d)}));return e||null}function ag(a,b,c,d,e,f,g){var k,h=U();for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},p=l.controller;"@"==p&&(p=b[l.name]),m=t(p,m,!0,l.controllerAs),h[l.name]=m,a.data("$"+l.name+"Controller",m.instance)}return h}function T(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Rb(a[d],{$$isolateScope:b,$$newScope:c})}function O(b,e,g,h,k,l,m){if(e===k)return null;if(k=null,f.hasOwnProperty(e)){var p;e=a.get(e+"Directive");for(var n=0,r=e.length;n<r;n++)try{if(p=e[n],(y(h)||h>p.priority)&&-1!=p.restrict.indexOf(g)){if(l&&(p=Rb(p,{$$start:l,$$end:m})),!p.$$bindings){var u=p,v=p,x=p.name,H={isolateScope:null,bindToController:null};if(D(v.scope)&&(!0===v.bindToController?(H.bindToController=d(v.scope,x,!0),H.isolateScope={}):H.isolateScope=d(v.scope,x,!1)),D(v.bindToController)&&(H.bindToController=d(v.bindToController,x,!0)),D(H.bindToController)){var E=v.controller,M=v.controllerAs;if(!E)throw ga("noctrl",x);if(!Xc(E,M))throw ga("noident",x)}var t=u.$$bindings=H;D(t.isolateScope)&&(p.$$isolateBindings=t.isolateScope)}b.push(p),k=p}}catch(I){c(I)}}return k}function V(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d<e;d++)if(b=c[d],b.multiElement)return!0;return!1}function $(a,b){var c=b.$attr,d=a.$attr;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))}),q(b,function(b,e){a.hasOwnProperty(e)||"$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ba(a,b,c,d,f,g,h,k){var m,p,l=[],n=b[0],r=a.shift(),u=Rb(r,{templateUrl:null,transclude:null,replace:null,$$originalDirective:r}),H=z(r.templateUrl)?r.templateUrl(b,c):r.templateUrl,E=r.templateNamespace;return b.empty(),e(H).then(function(e){var v,M;if(e=xa(e),r.replace){if(e=Vb.test(e)?$c(da(E,W(e))):[],v=e[0],1!=e.length||1!==v.nodeType)throw ga("tplrt",r.name,H);e={$attr:{}},ea(d,b,v);var B=$b(v,[],e);D(r.scope)&&T(B,!0),a=B.concat(a),$(c,e)}else v=n,b.html(e);for(a.unshift(u),m=oa(a,v,c,f,b,r,g,h,k),q(d,function(a,c){a==v&&(d[c]=b[0])}),p=s(b[0].childNodes,f);l.length;){e=l.shift(),M=l.shift();var t=l.shift(),I=l.shift(),B=b[0];if(!e.$$destroyed){if(M!==n){var P=M.className;k.hasElementTranscludeDirective&&r.replace||(B=Xb(v)),ea(t,F(M),B),x(F(B),P)}M=m.transcludeOnThisElement?za(e,m.transclude,I):I,m(p,e,B,d,M)}}l=null}),function(a,b,c,d,e){a=e,b.$$destroyed||(l?l.push(b,c,d,a):(m.transcludeOnThisElement&&(a=za(b,m.transclude,e)),m(p,b,c,d,a)))}}function Z(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function X(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ga("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ya(d))}function ca(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;return b&&aa.$$addBindingClass(a),function(a,c){var e=c.parent();b||aa.$$addBindingClass(e),aa.$$addBindingInfo(e,d.expressions),a.$watch(d,function(a){c[0].nodeValue=a})}}})}function da(a,b){switch(a=Q(a||"html")){case"svg":case"math":var c=C.document.createElement("div");return c.innerHTML="<"+a+">"+b+"</"+a+">",c.childNodes[0].childNodes;default:return b}}function ha(a,b){if("srcdoc"==b)return M.HTML;var c=wa(a);return"xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b)?M.RESOURCE_URL:void 0}function ia(a,c,d,e,f){var g=ha(a,e);f=k[e]||f;var h=b(d,!0,g,f);if(h){if("multiple"===e&&"select"===wa(a))throw ga("selmulti",ya(a));c.push({priority:100,compile:function(){return{pre:function(a,c,k){if(c=k.$$observers||(k.$$observers=U()),m.test(e))throw ga("nodomevents");var l=k[e];l!==d&&(h=l&&b(l,!0,g,f),d=l),h&&(k[e]=h(a),(c[e]||(c[e]=[])).$$inter=!0,(k.$$observers&&k.$$observers[e].$$scope||a).$watch(h,function(a,b){"class"===e&&a!=b?k.$updateClass(a,b):k.$set(e,a)}))}}}})}}function ea(a,b,c){var g,h,d=b[0],e=b.length,f=d.parentNode;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c,h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1,a.context===d&&(a.context=c);break}for(f&&f.replaceChild(c,d),a=C.document.createDocumentFragment(),g=0;g<e;g++)a.appendChild(b[g]);for(F.hasData(d)&&(F.data(c,F.data(d)),F(d).off("$destroy")),F.cleanData(a.querySelectorAll("*")),g=1;g<e;g++)delete b[g];b[0]=c,b.length=1}function ja(a,b){return S(function(){return a.apply(null,arguments)},a,b)}function la(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ya(d))}}function ka(a,c,d,e,f){function g(b,c,e){z(d.$onChanges)&&c!==e&&(Y||(a.$$postDigest(I),Y=[]),m||(m={},Y.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Fb(e,c))}function h(){d.$onChanges(m),m=void 0}var m,k=[],l={};return q(e,function(e,h){var v,u,x,H,m=e.attrName,p=e.optional;switch(e.mode){case"@":p||ua.call(c,m)||(d[h]=c[m]=void 0),c.$observe(m,function(a){(G(a)||Ga(a))&&(g(h,a,d[h]),d[h]=a)}),c.$$observers[m].$$scope=a,v=c[m],G(v)?d[h]=b(v)(a):Ga(v)&&(d[h]=v),l[h]=new Fb(bc,d[h]);break;case"=":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;u=n(c[m]),H=u.literal?na:function(a,b){return a===b||a!==a&&b!==b},x=u.assign||function(){throw v=d[h]=u(a),ga("nonassign",c[m],m,f.name)},v=d[h]=u(a),p=function(b){return H(b,d[h])||(H(b,v)?x(a,b=d[h]):d[h]=b),v=b},p.$stateful=!0,p=e.collection?a.$watchCollection(c[m],p):a.$watch(n(c[m],p),null,u.literal),k.push(p);break;case"<":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;u=n(c[m]);var E=d[h]=u(a);l[h]=new Fb(bc,d[h]),p=a.$watch(u,function(a,b){if(b===a){if(b===E)return;b=E}g(h,a,b),d[h]=a},u.literal),k.push(p);break;case"&":if(u=c.hasOwnProperty(m)?n(c[m]):A,u===A&&p)break;d[h]=function(b){return u(a,b)}}}),{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Y,ta=/^\w/,pa=C.document.createElement("div"),qa=u;Da.prototype={$normalize:Aa,$addClass:function(a){a&&0<a.length&&H.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&H.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=ad(a,b);c&&c.length&&H.addClass(this.$$element,c),(c=ad(b,a))&&c.length&&H.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=Uc(this.$$element[0],a),g=bd[a],h=a;if(f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g),this[a]=b,e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Cc(a,"-")),f=wa(this.$$element),"a"===f&&("href"===a||"xlinkHref"===a)||"img"===f&&"src"===a)this[a]=b=E(b,"src"===a);else if("img"===f&&"srcset"===a&&w(b)){for(var f="",g=W(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<k;l++)var m=2*l,f=f+E(W(g[m]),!0),f=f+(" "+W(g[m+1]));g=W(g[2*l]).split(/\s/),f+=E(W(g[0]),!0),2===g.length&&(f+=" "+W(g[1])),this[a]=b=f}!1!==d&&(null===b||y(b)?this.$$element.removeAttr(e):ta.test(e)?this.$$element.attr(e,b):P(this.$$element[0],e,b)),(a=this.$$observers)&&q(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=U()),e=d[a]||(d[a]=[]);return e.push(b),K.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||y(c[a])||b(c[a])}),function(){Za(e,b)}}};var ra=b.startSymbol(),sa=b.endSymbol(),xa="{{"==ra&&"}}"==sa?Xa:function(a){return a.replace(/\{\{/g,ra).replace(/}}/g,sa)},Ba=/^ngAttr[A-Z]/,Ca=/^(.+)Start$/;return aa.$$addBindingInfo=p?function(a,b){var c=a.data("$binding")||[];L(b)?c=c.concat(b):c.push(b),a.data("$binding",c)}:A,aa.$$addBindingClass=p?function(a){x(a,"ng-binding")}:A,aa.$$addScopeInfo=p?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:A,aa.$$addScopeClass=p?function(a,b){x(a,b?"ng-isolate-scope":"ng-scope")}:A,aa.$$createComment=function(a,b){var c="";return p&&(c=" "+(a||"")+": ",b&&(c+=b+" ")),C.document.createComment(c)},aa}]}function Fb(a,b){this.previousValue=a,this.currentValue=b}function Aa(a){return db(a.replace(Yc,""))}function ad(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function $c(a){a=F(a);var b=a.length;if(1>=b)return a;for(;b--;)8===a[b].nodeType&&bg.call(a,b,1);return a}function Xc(a,b){if(b&&G(b))return b;if(G(a)){var d=cd.exec(a);if(d)return d[3]}}function ff(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)},this.register=function(b,c){Qa(b,"controller"),D(b)?S(a,b):a[b]=c},this.allowGlobals=function(){b=!0},this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!D(a.$scope))throw N("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var l,m,n;if(h=!0===h,k&&G(k)&&(n=k),G(f)){if(k=f.match(cd),!k)throw cg("ctrlfmt",f);m=k[1],n=n||k[3],f=a.hasOwnProperty(m)?a[m]:Ec(g.$scope,m,!0)||(b?Ec(c,m,!0):void 0),Pa(f,m,!0)}return h?(h=(L(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),n&&e(g,n,l,m||f.name),S(function(){var a=d.invoke(f,l,g,m);return a!==l&&(D(a)||z(a))&&(l=a,n&&e(g,n,l,m||f.name)),l},{instance:l,identifier:n})):(l=d.instantiate(f,g,m),n&&e(g,n,l,m||f.name),l)}}]}function gf(){this.$get=["$window",function(a){return F(a.document)}]}function hf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function cc(a){return D(a)?da(a)?a.toISOString():bb(a):a}function nf(){this.$get=function(){return function(a){if(!a)return"";var b=[];return tc(a,function(a,c){null===a||y(a)||(L(a)?q(a,function(a){b.push(ea(c)+"="+ea(cc(a)))}):b.push(ea(c)+"="+ea(cc(a))))}),b.join("&")}}}function of(){this.$get=function(){return function(a){function b(a,e,f){null===a||y(a)||(L(a)?q(a,function(a,c){b(a,e+"["+(D(a)?c:"")+"]")}):D(a)&&!da(a)?tc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ea(e)+"="+ea(cc(a))))}if(!a)return"";var d=[];return b(a,"",!0),d.join("&")}}}function dc(a,b){if(G(a)){var d=a.replace(dg,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(dd))||(c=(c=d.match(eg))&&fg[c[0]].test(d)),c&&(a=xc(d))}}return a}function ed(a){var d,b=U();return G(a)?q(a.split("\n"),function(a){d=a.indexOf(":");var e=Q(W(a.substr(0,d)));a=W(a.substr(d+1)),e&&(b[e]=b[e]?b[e]+", "+a:a)}):D(a)&&q(a,function(a,d){var f=Q(d),g=W(a);f&&(b[f]=b[f]?b[f]+", "+g:g)}),b}function fd(a){var b;return function(d){return b||(b=ed(a)),d?(d=b[Q(d)],void 0===d&&(d=null),d):b}}function gd(a,b,d,c){return z(c)?c(a,b,d):(q(c,function(c){a=c(a,b,d)}),a)}function mf(){var a=this.defaults={transformResponse:[dc],transformRequest:[function(a){return D(a)&&"[object File]"!==ma.call(a)&&"[object Blob]"!==ma.call(a)&&"[object FormData]"!==ma.call(a)?bb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ia(ec),put:ia(ec),patch:ia(ec)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return w(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return w(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,g,h,k,l){function m(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];a=a.then(f,g)}return b.length=0,a}function e(a,b){var c,d={};return q(a,function(a,e){z(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a}),d}function f(a){var b=S({},a);return b.data=gd(a.data,a.headers,a.status,g.transformResponse),a=a.status,200<=a&&300>a?b:k.reject(b)}if(!D(b))throw N("$http")("badreq",b);if(!G(b.url))throw N("$http")("badreq",b.url);var g=S({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);g.headers=function(b){var f,g,h,c=a.headers,d=S({},b.headers),c=S({},c.common,c[Q(b.method)]);a:for(f in c){g=Q(f);for(h in d)if(Q(h)===g)continue a;d[f]=c[f]}return e(d,ia(b))}(b),g.method=ub(g.method),g.paramSerializer=G(g.paramSerializer)?l.get(g.paramSerializer):g.paramSerializer;var h=[],m=[],p=k.when(g);return q(R,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError),(a.response||a.responseError)&&m.push(a.response,a.responseError)}),p=c(p,h),p=p.then(function(b){var c=b.headers,d=gd(b.data,fd(c),void 0,b.transformRequest);return y(d)&&q(c,function(a,b){"content-type"===Q(b)&&delete c[b]}),y(b.withCredentials)&&!y(a.withCredentials)&&(b.withCredentials=a.withCredentials),n(b,d).then(f,f)}),p=c(p,m),d?(p.success=function(a){return Pa(a,"fn"),p.then(function(b){a(b.data,b.status,b.headers,g)}),p},p.error=function(a){return Pa(a,"fn"),p.then(null,function(b){a(b.data,b.status,b.headers,g)}),p}):(p.success=hd("success"),p.error=hd("error")),p}function n(c,d){function g(a){if(a){var c={};return q(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}}),c}}function l(a,c,d,e){function f(){n(c,a,d,e)}E&&(200<=a&&300>a?E.put(P,[a,c,ed(d),e]):E.remove(P)),b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function n(a,b,d,e){b=-1<=b?b:0,(200<=b&&300>b?M.resolve:M.reject)({data:a,status:b,headers:fd(d),config:c,statusText:e})}function t(a){n(a.data,a.status,ia(a.headers()),a.statusText)}function R(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a,1)}var E,I,M=k.defer(),H=M.promise,Da=c.headers,P=p(c.url,c.paramSerializer(c.params));return m.pendingRequests.push(c),H.then(R,R),!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(E=D(c.cache)?c.cache:D(a.cache)?a.cache:u),E&&(I=E.get(P),w(I)?I&&z(I.then)?I.then(t,t):L(I)?n(I[1],I[0],ia(I[2]),I[3]):n(I,200,{},"OK"):E.put(P,H)),y(I)&&((I=id(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(Da[c.xsrfHeaderName||a.xsrfHeaderName]=I),e(c.method,P,d,l,Da,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),g(c.uploadEventHandlers))),H}function p(a,b){return 0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b),a}var u=g("$http");a.paramSerializer=G(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var R=[];return q(c,function(a){R.unshift(G(a)?l.get(a):l.invoke(a))}),m.pendingRequests=[],function(a){q(arguments,function(a){m[a]=function(b,c){return m(S({},c||{},{method:a,url:b}))}})}("get","delete","head","jsonp"),function(a){q(arguments,function(a){m[a]=function(b,c,d){return m(S({},d||{},{method:a,url:b,data:c}))}})}("post","put","patch"),m.defaults=a,m}]}function qf(){this.$get=function(){return function(){return new C.XMLHttpRequest}}}function pf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return gg(a,c,a.defer,b,d[0])}]}function gg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;return f.type="text/javascript",f.src=a,f.async=!0,m=function(a){f.removeEventListener("load",m,!1),f.removeEventListener("error",m,!1),e.body.removeChild(f),f=null;var g=-1,u="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),u=a.type,g="error"===a.type?404:200),d&&d(g,u)},f.addEventListener("load",m,!1),f.addEventListener("error",m,!1),e.body.appendChild(f),m}return function(e,h,k,l,m,n,p,u,R,B){function r(){fa&&fa(),t&&t.abort()}function J(b,c,e,f,g){w(M)&&d.cancel(M),fa=t=null,b(c,e,f,g),a.$$completeOutstandingRequest(A)}if(a.$$incOutstandingRequestCount(),h=h||a.url(),"jsonp"===Q(e))var v=c.createCallback(h),fa=f(h,v,function(a,b){var d=200===a&&c.getResponse(v);J(l,a,d,"",b),c.removeCallback(v)});else{var t=b(e,h);if(t.open(e,h,!0),q(m,function(a,b){w(a)&&t.setRequestHeader(b,a)}),t.onload=function(){var a=t.statusText||"",b="response"in t?t.response:t.responseText,c=1223===t.status?204:t.status;0===c&&(c=b?200:"file"==Y(h).protocol?404:0),J(l,c,b,t.getAllResponseHeaders(),a)},e=function(){J(l,-1,null,null,"")},t.onerror=e,t.onabort=e,q(R,function(a,b){t.addEventListener(b,a)}),q(B,function(a,b){t.upload.addEventListener(b,a)}),p&&(t.withCredentials=!0),u)try{t.responseType=u}catch(K){if("json"!==u)throw K}t.send(y(k)?null:k)}if(0<n)var M=d(r,n);else n&&z(n.then)&&n.then(r)}}function kf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a},this.endSymbol=function(a){return a?(b=a,this):b},this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(n,a).replace(p,b)}function h(a,b,c,d){var e;return e=a.$watch(function(a){return e(),d(a)},b,c)}function k(f,k,p,n){function J(a){try{var b=a;a=p?e.getTrusted(p,b):e.valueOf(b);var d;if(n&&!w(a))d=a;else if(null==a)d="";else{switch(typeof a){case"string":break;case"number":a=""+a;break;default:a=bb(a)}d=a}return d}catch(g){c(Ka.interr(f,g))}}if(!f.length||-1===f.indexOf(a)){var v;return k||(k=g(f),v=ha(k),v.exp=f,v.expressions=[],v.$$watchDelegate=h),v}n=!!n;var q,t,K=0,M=[],H=[];v=f.length;for(var E=[],I=[];K<v;){if(-1==(q=f.indexOf(a,K))||-1==(t=f.indexOf(b,q+l))){K!==v&&E.push(g(f.substring(K)));break}K!==q&&E.push(g(f.substring(K,q))),K=f.substring(q+l,t),M.push(K),H.push(d(K,J)),K=t+m,I.push(E.length),E.push("")}if(p&&1<E.length&&Ka.throwNoconcat(f),!k||M.length){var Da=function(a){for(var b=0,c=M.length;b<c;b++){if(n&&y(a[b]))return;E[I[b]]=a[b]}return E.join("")};return S(function(a){var b=0,d=M.length,e=Array(d);try{for(;b<d;b++)e[b]=H[b](a);return Da(e)}catch(g){c(Ka.interr(f,g))}},{exp:f,expressions:M,$$watchDelegate:function(a,b){var c;return a.$watchGroup(H,function(d,e){var f=Da(d);z(b)&&b.call(this,f,d!==e?c:f,a),c=f})}})}}var l=a.length,m=b.length,n=new RegExp(a.replace(/./g,f),"g"),p=new RegExp(b.replace(/./g,f),"g");return k.startSymbol=function(){return a},k.endSymbol=function(){return b},k}]}function lf(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,e){function f(f,k,l,m){function n(){p?f.apply(null,u):f(r)}var p=4<arguments.length,u=p?va.call(arguments,4):[],R=b.setInterval,q=b.clearInterval,r=0,J=w(m)&&!m,v=(J?c:d).defer(),fa=v.promise;return l=w(l)?l:0,fa.$$intervalId=R(function(){J?e.defer(n):a.$evalAsync(n),v.notify(r++),0<l&&r>=l&&(v.resolve(r),q(fa.$$intervalId),delete g[fa.$$intervalId]),J||a.$apply()},k),g[fa.$$intervalId]=v,fa}var g={};return f.cancel=function(a){return!!(a&&a.$$intervalId in g)&&(g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0)},f}]}function fc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=qb(a[b]);return a.join("/")}function jd(a,b){var d=Y(a);b.$$protocol=d.protocol,b.$$host=d.hostname,b.$$port=Z(d.port)||hg[d.protocol]||null}function kd(a,b){var d="/"!==a.charAt(0);d&&(a="/"+a);var c=Y(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname),b.$$search=Ac(c.search),b.$$hash=decodeURIComponent(c.hash),b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function ka(a,b){if(0===b.lastIndexOf(a,0))return b.substr(a.length)}function Ja(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function jb(a){return a.replace(/(#.+)|#$/,"$1")}function gc(a,b,d){this.$$html5=!0,d=d||"",jd(a,this),this.$$parse=function(a){var d=ka(b,a);if(!G(d))throw Gb("ipthprfx",a,b);kd(d,this),this.$$path||(this.$$path="/"),this.$$compose()},this.$$compose=function(){var a=Tb(this.$$search),d=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(a?"?"+a:"")+d,this.$$absUrl=b+this.$$url.substr(1)},this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;return w(f=ka(a,c))?(g=f,g=w(f=ka(d,f))?b+(ka("/",f)||f):a+g):w(f=ka(b,c))?g=b+f:b==c+"/"&&(g=b),g&&this.$$parse(g),!!g}}function hc(a,b,d){jd(a,this),this.$$parse=function(c){var f,e=ka(a,c)||ka(b,c);y(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",y(e)&&(a=c,this.replace())):(f=ka(d,e),y(f)&&(f=e)),kd(f,this),c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.lastIndexOf(e,0)&&(f=f.replace(e,"")),g.exec(f)||(c=(f=g.exec(c))?f[1]:c),this.$$path=c,this.$$compose()},this.$$compose=function(){var b=Tb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(b?"?"+b:"")+e,this.$$absUrl=a+(this.$$url?d+this.$$url:"")},this.$$parseLinkUrl=function(b,d){return Ja(a)==Ja(b)&&(this.$$parse(b),!0)}}function ld(a,b,d){this.$$html5=!0,hc.apply(this,arguments),this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;return a==Ja(c)?f=c:(g=ka(b,c))?f=a+d+g:b===c+"/"&&(f=b),f&&this.$$parse(f),!!f},this.$$compose=function(){var b=Tb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(b?"?"+b:"")+e,this.$$absUrl=a+d+this.$$url}}function Hb(a){return function(){return this[a]}}function md(a,b){return function(d){return y(d)?this[a]:(this[a]=b(d),this.$$compose(),this)}}function sf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return w(b)?(a=b,this):a},this.html5Mode=function(a){return Ga(a)?(b.enabled=a,this):D(a)?(Ga(a.enabled)&&(b.enabled=a.enabled),Ga(a.requireBase)&&(b.requireBase=a.requireBase),Ga(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b},this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var p,n=c.url();if(b.enabled){if(!m&&b.requireBase)throw Gb("nobase");p=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(m||"/"),m=e.history?gc:ld}else p=Ja(n),m=hc;var u=p.substr(0,Ja(p).lastIndexOf("/")+1);l=new m(p,u,"#"+a),l.$$parseLinkUrl(n,n),l.$$state=c.state();var R=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=F(a.target);"a"!==wa(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");D(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Y(h.animVal).href),R.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}}),jb(l.absUrl())!=jb(n)&&c.url(l.absUrl(),!0);var q=!0;return c.onUrlChange(function(a,b){y(ka(u,a))?g.location.href=a:(d.$evalAsync(function(){var f,c=l.absUrl(),e=l.$$state;a=jb(a),l.$$parse(a),l.$$state=b,f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented,l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(q=!1,k(c,e)))}),d.$$phase||d.$digest())}),d.$watch(function(){var a=jb(c.url()),b=jb(l.absUrl()),f=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&e.history&&f!==l.$$state;(q||m)&&(q=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(m&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))})),l.$$replace=!1}),l}]}function tf(){var a=!0,b=this;this.debugEnabled=function(b){return w(b)?(a=b,this):a},this.$get=["$window",function(d){function c(a){return a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line)),a}function e(a){var b=d.console||{},e=b[a]||b.log||A;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];return q(arguments,function(b){a.push(c(b))}),e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Sa(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===a||"__proto__"===a)throw X("isecfld",b);return a}function ig(a){return a+""}function ra(a,b){if(a){if(a.constructor===a)throw X("isecfn",b);if(a.window===a)throw X("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw X("isecdom",b);if(a===Object)throw X("isecobj",b)}return a}function nd(a,b){if(a){if(a.constructor===a)throw X("isecfn",b);if(a===jg||a===kg||a===lg)throw X("isecff",b)}}function Ib(a,b){if(a&&(a===(0).constructor||a===(!1).constructor||a==="".constructor||a==={}.constructor||a===[].constructor||a===Function.constructor))throw X("isecaf",b)}function mg(a,b){return"undefined"!=typeof a?a:b}function od(a,b){return"undefined"==typeof a?b:"undefined"==typeof b?a:a+b}function V(a,b){var d,c;switch(a.type){case s.Program:d=!0,q(a.body,function(a){V(a.expression,b),d=d&&a.expression.constant}),a.constant=d;break;case s.Literal:a.constant=!0,a.toWatch=[];break;case s.UnaryExpression:V(a.argument,b),a.constant=a.argument.constant,a.toWatch=a.argument.toWatch;break;case s.BinaryExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:V(a.test,b),V(a.alternate,b),V(a.consequent,b),a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant,a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant=!1,a.toWatch=[a];break;case s.MemberExpression:V(a.object,b),a.computed&&V(a.property,b),a.constant=a.object.constant&&(!a.computed||a.property.constant),a.toWatch=[a];break;case s.CallExpression:d=!!a.filter&&!b(a.callee.name).$stateful,c=[],q(a.arguments,function(a){V(a,b),d=d&&a.constant,a.constant||c.push.apply(c,a.toWatch)}),a.constant=d,a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case s.AssignmentExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=[a];break;case s.ArrayExpression:d=!0,c=[],q(a.elements,function(a){V(a,b),d=d&&a.constant,a.constant||c.push.apply(c,a.toWatch)}),a.constant=d,a.toWatch=c;break;case s.ObjectExpression:d=!0,c=[],q(a.properties,function(a){V(a.value,b),d=d&&a.value.constant&&!a.computed,a.value.constant||c.push.apply(c,a.value.toWatch)}),a.constant=d,a.toWatch=c;break;case s.ThisExpression:a.constant=!1,a.toWatch=[];break;case s.LocalsExpression:a.constant=!1,a.toWatch=[]}}function pd(a){if(1==a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function qd(a){return a.type===s.Identifier||a.type===s.MemberExpression}function rd(a){if(1===a.body.length&&qd(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function sd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function td(a,b){this.astBuilder=a,this.$filter=b}function ud(a,b){this.astBuilder=a,this.$filter=b}function Jb(a){return"constructor"==a}function ic(a){return z(a.valueOf)?a.valueOf():ng.call(a)}function uf(){var c,e,a=U(),b=U(),d={true:!0,false:!1,null:null,undefined:void 0};this.addLiteral=function(a,b){d[a]=b},this.setIdentifierFns=function(a,b){return c=a,e=b,this},this.$get=["$filter",function(f){function g(c,d,e){var g,k,H;switch(e=e||J,typeof c){case"string":H=c=c.trim();var E=e?b:a;if(g=E[H],!g){":"===c.charAt(0)&&":"===c.charAt(1)&&(k=!0,c=c.substring(2)),g=e?r:B;var q=new jc(g);g=new kc(q,f,g).parse(c),g.constant?g.$$watchDelegate=p:k?g.$$watchDelegate=g.literal?n:m:g.inputs&&(g.$$watchDelegate=l),e&&(g=h(g)),E[H]=g}return u(g,d);case"function":return u(c,d);default:return u(A,d)}}function h(a){function b(c,d,e,f){var g=J;J=!0;try{return a(c,d,e,f)}finally{J=g}}if(!a)return a;b.$$watchDelegate=a.$$watchDelegate,b.assign=h(a.assign),b.constant=a.constant,b.literal=a.literal;for(var c=0;a.inputs&&c<a.inputs.length;++c)a.inputs[c]=h(a.inputs[c]);return b.inputs=a.inputs,b}function k(a,b){return null==a||null==b?a===b:("object"!=typeof a||(a=ic(a),"object"!=typeof a))&&(a===b||a!==a&&b!==b)}function l(a,b,c,d,e){var g,f=d.inputs;if(1===f.length){var h=k,f=f[0];return a.$watch(function(a){var b=f(a);return k(b,h)||(g=d(a,void 0,void 0,[b]),h=b&&ic(b)),g},b,c,e)}for(var l=[],m=[],p=0,n=f.length;p<n;p++)l[p]=k,m[p]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var h=f[c](a);(b||(b=!k(h,l[c])))&&(m[c]=h,l[c]=h&&ic(h))}return b&&(g=d(a,void 0,void 0,m)),g},b,c,e)}function m(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a,z(b)&&b.apply(this,arguments),w(a)&&d.$$postDigest(function(){w(f)&&e()})},c)}function n(a,b,c,d){function e(a){var b=!0;return q(a,function(a){w(a)||(b=!1)}),b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a,z(b)&&b.call(this,a,c,d),e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function p(a,b,c,d){var e;return e=a.$watch(function(a){return e(),d(a)},b,c)}function u(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==n&&c!==m?function(c,e,f,g){return f=d&&g?g[0]:a(c,e,f,g),b(f,c,e)}:function(c,d,e,f){return e=a(c,d,e,f),c=b(e,c,d),w(e)?c:e};return a.$$watchDelegate&&a.$$watchDelegate!==l?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=l,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]),c}var R=Ba().noUnsafeEval,B={csp:R,expensiveChecks:!1,literals:pa(d),isIdentifierStart:z(c)&&c,isIdentifierContinue:z(e)&&e},r={csp:R,expensiveChecks:!0,literals:pa(d),isIdentifierStart:z(c)&&c,isIdentifierContinue:z(e)&&e},J=!1;return g.$$runningExpensiveChecks=function(){return J},g}]}function wf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return vd(function(b){a.$evalAsync(b)},b)}]}function xf(){this.$get=["$browser","$exceptionHandler",function(a,b){return vd(function(b){a.defer(b)},b)}]}function vd(a,b){function d(){this.$$state={status:0}}function c(a,b){return function(c){b.call(a,c)}}function e(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,d,e;e=c.pending,c.processScheduled=!1,c.pending=void 0;for(var f=0,g=e.length;f<g;++f){d=e[f][0],a=e[f][c.status];try{z(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),b(h)}}}))}function f(){this.promise=new d}var g=N("$q",TypeError),h=function(){var a=new f;return a.resolve=c(a,a.resolve),
@@ -26,8 +26,9 @@ placeholder:[String,"Add a tag"],tabindex:[Number,null],removeTagSymbol:[String,
a.cancel()}),this.$hide())},$setWaiting:function(a){this.$waiting=!!a,angular.forEach(this.$editables,function(b){b.setWaiting(!!a)})},$setError:function(a,b){angular.forEach(this.$editables,function(c){a&&c.name!==a||c.setError(b)})},$submit:function(){function a(a){var b=d();b.when(this.$onbeforesave()),b.then({onWait:angular.bind(this,this.$setWaiting),onTrue:a?angular.bind(this,this.$save):angular.bind(this,this.$hide),onFalse:angular.bind(this,this.$hide),onString:angular.bind(this,this.$activate)})}if(!this.$waiting){this.$setError(null,"");var b=d();angular.forEach(this.$editables,function(a){b.when(a.onbeforesave())}),b.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,a,!0),onFalse:angular.bind(this,a,!1),onString:angular.bind(this,this.$activate)})}},$save:function(){angular.forEach(this.$editables,function(a){a.save()});var a=d();a.when(this.$onaftersave()),angular.forEach(this.$editables,function(b){a.when(b.onaftersave())}),a.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,this.$hide),onFalse:angular.bind(this,this.$hide),onString:angular.bind(this,this.$activate)})},$onshow:angular.noop,$oncancel:angular.noop,$onhide:angular.noop,$onbeforesave:angular.noop,$onaftersave:angular.noop};return function(){return angular.extend({$editables:[],$visible:!1,$waiting:!1,$data:{},_clicked:!1,_blur:null},i)}}]),angular.module("xeditable").directive("editableForm",["$rootScope","$parse","editableFormController","editableOptions",function(a,b,c,d){return{restrict:"A",require:["form"],compile:function(){return{pre:function(b,d,e,f){var g,h=f[0];e.editableForm?b[e.editableForm]&&b[e.editableForm].$show?(g=b[e.editableForm],angular.extend(h,g)):(g=c(),b[e.editableForm]=g,angular.extend(g,h)):(g=c(),angular.extend(h,g));var i=a.$$editableBuffer,j=h.$name;j&&i&&i[j]&&(angular.forEach(i[j],function(a){g.$addEditable(a)}),delete i[j])},post:function(a,c,e,f){var g;g=e.editableForm&&a[e.editableForm]&&a[e.editableForm].$show?a[e.editableForm]:f[0],e.onshow&&(g.$onshow=angular.bind(g,b(e.onshow),a)),e.onhide&&(g.$onhide=angular.bind(g,b(e.onhide),a)),e.oncancel&&(g.$oncancel=angular.bind(g,b(e.oncancel),a)),e.shown&&b(e.shown)(a)&&g.$show(),g._blur=e.blur||d.blurForm,e.ngSubmit||e.submit||(e.onbeforesave&&(g.$onbeforesave=function(){return b(e.onbeforesave)(a,{$data:g.$data})}),e.onaftersave&&(g.$onaftersave=function(){return b(e.onaftersave)(a,{$data:g.$data})}),c.bind("submit",function(b){b.preventDefault(),a.$apply(function(){g.$submit()})})),c.bind("click",function(a){a.which&&1!==a.which||g.$visible&&(g._clicked=!0)})}}}}}]),angular.module("xeditable").factory("editablePromiseCollection",["$q",function(a){function b(){return{promises:[],hasFalse:!1,hasString:!1,when:function(b,c){if(b===!1)this.hasFalse=!0;else if(!c&&angular.isObject(b))this.promises.push(a.when(b));else{if(!angular.isString(b))return;this.hasString=!0}},then:function(b){function c(){h.hasString||h.hasFalse?!h.hasString&&h.hasFalse?e():f():d()}b=b||{};var d=b.onTrue||angular.noop,e=b.onFalse||angular.noop,f=b.onString||angular.noop,g=b.onWait||angular.noop,h=this;this.promises.length?(g(!0),a.all(this.promises).then(function(a){g(!1),angular.forEach(a,function(a){h.when(a,!0)}),c()},function(a){g(!1),f()})):c()}}}return b}]),angular.module("xeditable").factory("editableUtils",[function(){return{indexOf:function(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0;c<a.length;c++)if(b===a[c])return c;return-1},arrayRemove:function(a,b){var c=this.indexOf(a,b);return c>=0&&a.splice(c,1),b},camelToDash:function(a){var b=/[A-Z]/g;return a.replace(b,function(a,b){return(b?"-":"")+a.toLowerCase()})},dashToCamel:function(a){var b=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/;return a.replace(b,function(a,b,c,d){return d?c.toUpperCase():c}).replace(c,"Moz$1")},rename:function(a,b){var c=angular.element("<"+a+"/>");c.html(b.html());for(var d=b[0].attributes,e=0;e<d.length;++e)c.attr(d.item(e).nodeName,d.item(e).value);return c}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function a(a){var c;if(!(c=a.match(b)))throw"ng-options parse error";var d,e=c[2]||c[1],f=c[4]||c[6],g=c[5],h=(c[3]||"",c[2]?c[1]:f),i=c[7],j=c[8],k=j?c[8]:null;return void 0===g?(d=f+" in "+i,void 0!==j&&(d+=" track by "+k)):d="("+g+", "+f+") in "+i,{ngRepeat:d,locals:{valueName:f,keyName:g,valueFn:h,displayFn:e}}}var b=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return a}]),angular.module("xeditable").factory("editableCombodate",[function(){function a(a,b){if(this.$element=angular.element(a),"INPUT"!=this.$element[0].nodeName)throw"Combodate should be applied to INPUT element";var c=(new Date).getFullYear();this.defaults={format:"YYYY-MM-DD HH:mm",template:"D / MMM / YYYY H : mm",value:null,minYear:1970,maxYear:c,yearDescending:!0,minuteStep:5,secondStep:1,firstItem:"empty",errorClass:null,customClass:"",roundTime:!0,smartDays:!0},this.options=angular.extend({},this.defaults,b),this.init()}return a.prototype={constructor:a,init:function(){if(this.map={day:["D","date"],month:["M","month"],year:["Y","year"],hour:["[Hh]","hours"],minute:["m","minutes"],second:["s","seconds"],ampm:["[Aa]",""]},this.$widget=angular.element('<span class="combodate"></span>').html(this.getTemplate()),this.initCombos(),this.options.smartDays){var a=this;this.$widget.find("select").bind("change",function(b){(angular.element(b.target).hasClass("month")||angular.element(b.target).hasClass("year"))&&a.fillCombo("day")})}this.$widget.find("select").css("width","auto"),this.$element.css("display","none").after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var a=this.options.template,b=this.options.customClass;return angular.forEach(this.map,function(b,c){b=b[0];var d=new RegExp(b+"+"),e=b.length>1?b.substring(1,2):b;a=a.replace(d,"{"+e+"}")}),a=a.replace(/ /g,"&nbsp;"),angular.forEach(this.map,function(c,d){c=c[0];var e=c.length>1?c.substring(1,2):c;a=a.replace("{"+e+"}",'<select class="'+d+" "+b+'"></select>')}),a},initCombos:function(){for(var a in this.map){var b=this.$widget[0].querySelectorAll("."+a);this["$"+a]=b.length?angular.element(b):null,this.fillCombo(a)}},fillCombo:function(a){var b=this["$"+a];if(b){var c="fill"+a.charAt(0).toUpperCase()+a.slice(1),d=this[c](),e=b.val();b.html("");for(var f=0;f<d.length;f++)b.append('<option value="'+d[f][0]+'">'+d[f][1]+"</option>");b.val(e)}},fillCommon:function(a){var b,c=[];if("name"===this.options.firstItem){b=moment.relativeTime||moment.langData()._relativeTime;var d="function"==typeof b[a]?b[a](1,!0,a,!1):b[a];d=d.split(" ").reverse()[0],c.push(["",d])}else"empty"===this.options.firstItem&&c.push(["",""]);return c},fillDay:function(){var a,b,c=this.fillCommon("d"),d=-1!==this.options.template.indexOf("DD"),e=31;if(this.options.smartDays&&this.$month&&this.$year){var f=parseInt(this.$month.val(),10),g=parseInt(this.$year.val(),10);isNaN(f)||isNaN(g)||(e=moment([g,f]).daysInMonth())}for(b=1;e>=b;b++)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillMonth:function(){var a,b,c=this.fillCommon("M"),d=-1!==this.options.template.indexOf("MMMM"),e=-1!==this.options.template.indexOf("MMM"),f=-1!==this.options.template.indexOf("MM");for(b=0;11>=b;b++)a=d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b+1):b+1,c.push([b,a]);return c},fillYear:function(){var a,b,c=[],d=-1!==this.options.template.indexOf("YYYY");for(b=this.options.maxYear;b>=this.options.minYear;b--)a=d?b:(b+"").substring(2),c[this.options.yearDescending?"push":"unshift"]([b,a]);return c=this.fillCommon("y").concat(c)},fillHour:function(){var a,b,c=this.fillCommon("h"),d=-1!==this.options.template.indexOf("h"),e=(-1!==this.options.template.indexOf("H"),-1!==this.options.template.toLowerCase().indexOf("hh")),f=d?1:0,g=d?12:23;for(b=f;g>=b;b++)a=e?this.leadZero(b):b,c.push([b,a]);return c},fillMinute:function(){var a,b,c=this.fillCommon("m"),d=-1!==this.options.template.indexOf("mm");for(b=0;59>=b;b+=this.options.minuteStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillSecond:function(){var a,b,c=this.fillCommon("s"),d=-1!==this.options.template.indexOf("ss");for(b=0;59>=b;b+=this.options.secondStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillAmpm:function(){var a=-1!==this.options.template.indexOf("a"),b=(-1!==this.options.template.indexOf("A"),[["am",a?"am":"AM"],["pm",a?"pm":"PM"]]);return b},getValue:function(a){var b,c={},d=this,e=!1;return angular.forEach(this.map,function(a,b){if("ampm"!==b){var f="day"===b?1:0;return c[b]=d["$"+b]?parseInt(d["$"+b].val(),10):f,isNaN(c[b])?(e=!0,!1):void 0}}),e?"":(this.$ampm&&(12===c.hour?c.hour="am"===this.$ampm.val()?0:12:c.hour="am"===this.$ampm.val()?c.hour:c.hour+12),b=moment([c.year,c.month,c.day,c.hour,c.minute,c.second]),this.highlight(b),a=void 0===a?this.options.format:a,null===a?b.isValid()?b:null:b.isValid()?b.format(a):"")},setValue:function(a){function b(a,b){var c={};return angular.forEach(a.children("option"),function(a,d){var e=angular.element(a).attr("value");if(""!==e){var f=Math.abs(e-b);("undefined"==typeof c.distance||f<c.distance)&&(c={value:e,distance:f})}}),c.value}if(a){var c="string"==typeof a?moment(a,this.options.format,!0):moment(a),d=this,e={};c.isValid()&&(angular.forEach(this.map,function(a,b){"ampm"!==b&&(e[b]=c[a[1]]())}),this.$ampm&&(e.hour>=12?(e.ampm="pm",e.hour>12&&(e.hour-=12)):(e.ampm="am",0===e.hour&&(e.hour=12))),angular.forEach(e,function(a,c){d["$"+c]&&("minute"===c&&d.options.minuteStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),"second"===c&&d.options.secondStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),d["$"+c].val(a))}),this.options.smartDays&&this.fillCombo("day"),this.$element.val(c.format(this.options.format)).triggerHandler("change"))}},highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find("select").css("border-color")),this.$widget.find("select").css("border-color","red"))},leadZero:function(a){return 9>=a?"0"+a:a},destroy:function(){this.$widget.remove(),this.$element.removeData("combodate").show()}},{getInstance:function(b,c){return new a(b,c)}}}]),angular.module("xeditable").factory("editableIcons",function(){var a={default:{bs2:{ok:"icon-ok icon-white",cancel:"icon-remove"},bs3:{ok:"glyphicon glyphicon-ok",cancel:"glyphicon glyphicon-remove"}},external:{"font-awesome":{ok:"fa fa-check",cancel:"fa fa-times"}}};return a}),angular.module("xeditable").factory("editableThemes",function(){var a={default:{formTpl:'<form class="editable-wrap"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<span class="editable-controls"></span>',inputTpl:"",errorTpl:'<div class="editable-error" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit">save</button>',cancelTpl:'<button type="button" ng-click="$form.$cancel()">cancel</button>'},bs2:{formTpl:'<form class="form-inline editable-wrap" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls controls control-group" ng-class="{\'error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error help-block" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit" class="btn btn-primary"><span></span></button>',cancelTpl:'<button type="button" class="btn" ng-click="$form.$cancel()"><span></span></button>'},bs3:{formTpl:'<form class="form-inline editable-wrap" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls form-group" ng-class="{\'has-error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error help-block" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit" class="btn btn-primary"><span></span></button>',cancelTpl:'<button type="button" class="btn btn-default" ng-click="$form.$cancel()"><span></span></button>',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableBsdate":case"editableTime":case"editableMonth":case"editableWeek":case"editablePassword":case"editableDatetimeLocal":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}break;case"editableCheckbox":this.editorEl.addClass("checkbox")}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}},semantic:{formTpl:'<form class="editable-wrap ui form" ng-class="{\'error\': $error}" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls ui fluid input" ng-class="{\'error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error ui error message" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="mini ui buttons"></span>',submitTpl:'<button type="submit" class="ui primary button"><i class="ui check icon"></i></button>',cancelTpl:'<button type="button" class="ui button" ng-click="$form.$cancel()"><i class="ui cancel icon"></i></button>'}};return a}),function(T){function z(a,c,b){var g=0,f=[0],h="",l=null,h=b||"UTF8";if("UTF8"!==h&&"UTF16"!==h)throw"encoding must be UTF8 or UTF16";if("HEX"===c){if(0!==a.length%2)throw"srcString of HEX type must be in byte increments";l=B(a),g=l.binLen,f=l.value}else if("ASCII"===c||"TEXT"===c)l=J(a,h),g=l.binLen,f=l.value;else{if("B64"!==c)throw"inputFormat must be HEX, TEXT, ASCII, or B64";l=K(a),g=l.binLen,f=l.value}this.getHash=function(a,c,b,h){var p,l=null,d=f.slice(),n=g;if(3===arguments.length?"number"!=typeof b&&(h=b,b=1):2===arguments.length&&(b=1),b!==parseInt(b,10)||1>b)throw"numRounds must a integer >= 1";switch(c){case"HEX":l=L;break;case"B64":l=M;break;default:throw"format must be HEX or B64"}if("SHA-1"===a)for(p=0;p<b;p++)d=y(d,n),n=160;else if("SHA-224"===a)for(p=0;p<b;p++)d=v(d,n,a),n=224;else if("SHA-256"===a)for(p=0;p<b;p++)d=v(d,n,a),n=256;else if("SHA-384"===a)for(p=0;p<b;p++)d=v(d,n,a),n=384;else{if("SHA-512"!==a)throw"Chosen SHA variant is not supported";for(p=0;p<b;p++)d=v(d,n,a),n=512}return l(d,N(h))},this.getHMAC=function(a,b,c,l,s){var d,n,p,m,w=[],x=[];switch(d=null,l){case"HEX":l=L;break;case"B64":l=M;break;default:throw"outputFormat must be HEX or B64"}if("SHA-1"===c)n=64,m=160;else if("SHA-224"===c)n=64,m=224;else if("SHA-256"===c)n=64,m=256;else if("SHA-384"===c)n=128,m=384;else{if("SHA-512"!==c)throw"Chosen SHA variant is not supported";n=128,m=512}if("HEX"===b)d=B(a),p=d.binLen,d=d.value;else if("ASCII"===b||"TEXT"===b)d=J(a,h),p=d.binLen,d=d.value;else{if("B64"!==b)throw"inputFormat must be HEX, TEXT, ASCII, or B64";d=K(a),p=d.binLen,d=d.value}for(a=8*n,b=n/4-1,n<p/8?(d="SHA-1"===c?y(d,p):v(d,p,c),d[b]&=4294967040):n>p/8&&(d[b]&=4294967040),n=0;n<=b;n+=1)w[n]=909522486^d[n],x[n]=1549556828^d[n];return c="SHA-1"===c?y(x.concat(y(w.concat(f),a+g)),a+m):v(x.concat(v(w.concat(f),a+g,c)),a+m,c),l(c,N(s))}}function s(a,c){this.a=a,this.b=c}function J(a,c){var g,l,b=[],f=[],h=0;if("UTF8"===c)for(l=0;l<a.length;l+=1)for(g=a.charCodeAt(l),f=[],2048<g?(f[0]=224|(61440&g)>>>12,f[1]=128|(4032&g)>>>6,f[2]=128|63&g):128<g?(f[0]=192|(1984&g)>>>6,f[1]=128|63&g):f[0]=g,g=0;g<f.length;g+=1)b[h>>>2]|=f[g]<<24-h%4*8,h+=1;else if("UTF16"===c)for(l=0;l<a.length;l+=1)b[h>>>2]|=a.charCodeAt(l)<<16-h%4*8,h+=2;return{value:b,binLen:8*h}}function B(a){var g,f,c=[],b=a.length;if(0!==b%2)throw"String of HEX type must be in byte increments";for(g=0;g<b;g+=2){if(f=parseInt(a.substr(g,2),16),isNaN(f))throw"String of HEX type contains invalid characters";c[g>>>3]|=f<<24-g%8*4}return{value:c,binLen:4*b}}function K(a){var g,f,h,l,r,c=[],b=0;if(-1===a.search(/^[a-zA-Z0-9=+\/]+$/))throw"Invalid character in base-64 string";if(g=a.indexOf("="),a=a.replace(/\=/g,""),-1!==g&&g<a.length)throw"Invalid '=' found in base-64 string";for(f=0;f<a.length;f+=4){for(r=a.substr(f,4),h=l=0;h<r.length;h+=1)g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(r[h]),l|=g<<18-6*h;for(h=0;h<r.length-1;h+=1)c[b>>2]|=(l>>>16-8*h&255)<<24-b%4*8,b+=1}return{value:c,binLen:8*b}}function L(a,c){var f,h,b="",g=4*a.length;for(f=0;f<g;f+=1)h=a[f>>>2]>>>8*(3-f%4),b+="0123456789abcdef".charAt(h>>>4&15)+"0123456789abcdef".charAt(15&h);return c.outputUpper?b.toUpperCase():b}function M(a,c){var f,h,l,b="",g=4*a.length;for(f=0;f<g;f+=3)for(l=(a[f>>>2]>>>8*(3-f%4)&255)<<16|(a[f+1>>>2]>>>8*(3-(f+1)%4)&255)<<8|a[f+2>>>2]>>>8*(3-(f+2)%4)&255,h=0;4>h;h+=1)b=8*f+6*h<=32*a.length?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(l>>>6*(3-h)&63):b+c.b64Pad;return b}function N(a){var c={outputUpper:!1,b64Pad:"="};try{a.hasOwnProperty("outputUpper")&&(c.outputUpper=a.outputUpper),a.hasOwnProperty("b64Pad")&&(c.b64Pad=a.b64Pad)}catch(b){}if("boolean"!=typeof c.outputUpper)throw"Invalid outputUpper formatting option";if("string"!=typeof c.b64Pad)throw"Invalid b64Pad formatting option";return c}function U(a,c){return a<<c|a>>>32-c}function u(a,c){return a>>>c|a<<32-c}function t(a,c){var b=null,b=new s(a.a,a.b);return b=32>=c?new s(b.a>>>c|b.b<<32-c&4294967295,b.b>>>c|b.a<<32-c&4294967295):new s(b.b>>>c-32|b.a<<64-c&4294967295,b.a>>>c-32|b.b<<64-c&4294967295)}function O(a,c){var b=null;return b=32>=c?new s(a.a>>>c,a.b>>>c|a.a<<32-c&4294967295):new s(0,a.a>>>c-32)}function V(a,c,b){return a^c^b}function P(a,c,b){return a&c^~a&b}function W(a,c,b){return new s(a.a&c.a^~a.a&b.a,a.b&c.b^~a.b&b.b)}function Q(a,c,b){return a&c^a&b^c&b}function X(a,c,b){return new s(a.a&c.a^a.a&b.a^c.a&b.a,a.b&c.b^a.b&b.b^c.b&b.b)}function Y(a){return u(a,2)^u(a,13)^u(a,22)}function Z(a){var c=t(a,28),b=t(a,34);return a=t(a,39),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function $(a){return u(a,6)^u(a,11)^u(a,25)}function aa(a){var c=t(a,14),b=t(a,18);return a=t(a,41),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function ba(a){return u(a,7)^u(a,18)^a>>>3}function ca(a){var c=t(a,1),b=t(a,8);return a=O(a,7),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function da(a){return u(a,17)^u(a,19)^a>>>10}function ea(a){var c=t(a,19),b=t(a,61);return a=O(a,6),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function R(a,c){var b=(65535&a)+(65535&c);return((a>>>16)+(c>>>16)+(b>>>16)&65535)<<16|65535&b}function fa(a,c,b,g){var f=(65535&a)+(65535&c)+(65535&b)+(65535&g);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)&65535)<<16|65535&f}function S(a,c,b,g,f){var h=(65535&a)+(65535&c)+(65535&b)+(65535&g)+(65535&f);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)+(h>>>16)&65535)<<16|65535&h}function ga(a,c){var b,g,f;return b=(65535&a.b)+(65535&c.b),g=(a.b>>>16)+(c.b>>>16)+(b>>>16),f=(65535&g)<<16|65535&b,b=(65535&a.a)+(65535&c.a)+(g>>>16),g=(a.a>>>16)+(c.a>>>16)+(b>>>16),new s((65535&g)<<16|65535&b,f)}function ha(a,c,b,g){var f,h,l;return f=(65535&a.b)+(65535&c.b)+(65535&b.b)+(65535&g.b),h=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f>>>16),l=(65535&h)<<16|65535&f,f=(65535&a.a)+(65535&c.a)+(65535&b.a)+(65535&g.a)+(h>>>16),h=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f>>>16),new s((65535&h)<<16|65535&f,l)}function ia(a,c,b,g,f){var h,l,r;return h=(65535&a.b)+(65535&c.b)+(65535&b.b)+(65535&g.b)+(65535&f.b),l=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f.b>>>16)+(h>>>16),r=(65535&l)<<16|65535&h,h=(65535&a.a)+(65535&c.a)+(65535&b.a)+(65535&g.a)+(65535&f.a)+(l>>>16),l=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f.a>>>16)+(h>>>16),new s((65535&l)<<16|65535&h,r)}function y(a,c){var g,f,h,l,r,s,p,m,x,b=[],u=P,t=V,v=Q,d=U,n=R,w=S,q=[1732584193,4023233417,2562383102,271733878,3285377520];for(a[c>>>5]|=128<<24-c%32,a[(c+65>>>9<<4)+15]=c,x=a.length,p=0;p<x;p+=16){for(g=q[0],f=q[1],h=q[2],l=q[3],r=q[4],m=0;80>m;m+=1)b[m]=16>m?a[m+p]:d(b[m-3]^b[m-8]^b[m-14]^b[m-16],1),s=20>m?w(d(g,5),u(f,h,l),r,1518500249,b[m]):40>m?w(d(g,5),t(f,h,l),r,1859775393,b[m]):60>m?w(d(g,5),v(f,h,l),r,2400959708,b[m]):w(d(g,5),t(f,h,l),r,3395469782,b[m]),r=l,l=h,h=d(f,30),f=g,g=s;q[0]=n(g,q[0]),q[1]=n(f,q[1]),q[2]=n(h,q[2]),q[3]=n(l,q[3]),q[4]=n(r,q[4])}return q}function v(a,c,b){var g,f,h,l,r,t,u,v,z,d,n,p,m,w,x,q,y,C,D,E,F,G,H,I,e,B,A=[],k=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];if(d=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],f=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],"SHA-224"===b||"SHA-256"===b)n=64,g=(c+65>>>9<<4)+15,w=16,x=1,e=Number,q=R,y=fa,C=S,D=ba,E=da,F=Y,G=$,I=Q,H=P,d="SHA-224"===b?d:f;else{if("SHA-384"!==b&&"SHA-512"!==b)throw"Unexpected error in SHA-2 implementation";n=80,g=(c+128>>>10<<5)+31,w=32,x=2,e=s,q=ga,y=ha,C=ia,D=ca,E=ea,F=Z,G=aa,I=X,H=W,k=[new e(k[0],3609767458),new e(k[1],602891725),new e(k[2],3964484399),new e(k[3],2173295548),new e(k[4],4081628472),new e(k[5],3053834265),new e(k[6],2937671579),new e(k[7],3664609560),new e(k[8],2734883394),new e(k[9],1164996542),new e(k[10],1323610764),new e(k[11],3590304994),new e(k[12],4068182383),new e(k[13],991336113),new e(k[14],633803317),new e(k[15],3479774868),new e(k[16],2666613458),new e(k[17],944711139),new e(k[18],2341262773),new e(k[19],2007800933),new e(k[20],1495990901),new e(k[21],1856431235),new e(k[22],3175218132),new e(k[23],2198950837),new e(k[24],3999719339),new e(k[25],766784016),new e(k[26],2566594879),new e(k[27],3203337956),new e(k[28],1034457026),new e(k[29],2466948901),new e(k[30],3758326383),new e(k[31],168717936),new e(k[32],1188179964),new e(k[33],1546045734),new e(k[34],1522805485),new e(k[35],2643833823),new e(k[36],2343527390),new e(k[37],1014477480),new e(k[38],1206759142),new e(k[39],344077627),new e(k[40],1290863460),new e(k[41],3158454273),new e(k[42],3505952657),new e(k[43],106217008),new e(k[44],3606008344),new e(k[45],1432725776),new e(k[46],1467031594),new e(k[47],851169720),new e(k[48],3100823752),new e(k[49],1363258195),new e(k[50],3750685593),new e(k[51],3785050280),new e(k[52],3318307427),new e(k[53],3812723403),new e(k[54],2003034995),new e(k[55],3602036899),new e(k[56],1575990012),new e(k[57],1125592928),new e(k[58],2716904306),new e(k[59],442776044),new e(k[60],593698344),new e(k[61],3733110249),new e(k[62],2999351573),new e(k[63],3815920427),new e(3391569614,3928383900),new e(3515267271,566280711),new e(3940187606,3454069534),new e(4118630271,4000239992),new e(116418474,1914138554),new e(174292421,2731055270),new e(289380356,3203993006),new e(460393269,320620315),new e(685471733,587496836),new e(852142971,1086792851),new e(1017036298,365543100),new e(1126000580,2618297676),new e(1288033470,3409855158),new e(1501505948,4234509866),new e(1607167915,987167468),new e(1816402316,1246189591)],d="SHA-384"===b?[new e(3418070365,d[0]),new e(1654270250,d[1]),new e(2438529370,d[2]),new e(355462360,d[3]),new e(1731405415,d[4]),new e(41048885895,d[5]),new e(3675008525,d[6]),new e(1203062813,d[7])]:[new e(f[0],4089235720),new e(f[1],2227873595),new e(f[2],4271175723),new e(f[3],1595750129),new e(f[4],2917565137),new e(f[5],725511199),new e(f[6],4215389547),new e(f[7],327033209)]}for(a[c>>>5]|=128<<24-c%32,a[g]=c,B=a.length,p=0;p<B;p+=w){for(c=d[0],g=d[1],f=d[2],h=d[3],l=d[4],r=d[5],t=d[6],u=d[7],m=0;m<n;m+=1)A[m]=16>m?new e(a[m*x+p],a[m*x+p+1]):y(E(A[m-2]),A[m-7],D(A[m-15]),A[m-16]),v=C(u,G(l),H(l,r,t),k[m],A[m]),z=q(F(c),I(c,g,f)),u=t,t=r,r=l,l=q(h,v),h=f,f=g,g=c,c=q(v,z);d[0]=q(c,d[0]),d[1]=q(g,d[1]),d[2]=q(f,d[2]),d[3]=q(h,d[3]),d[4]=q(l,d[4]),d[5]=q(r,d[5]),d[6]=q(t,d[6]),d[7]=q(u,d[7])}if("SHA-224"===b)a=[d[0],d[1],d[2],d[3],d[4],d[5],d[6]];else if("SHA-256"===b)a=d;else if("SHA-384"===b)a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b];else{if("SHA-512"!==b)throw"Unexpected error in SHA-2 implementation";a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b,d[6].a,d[6].b,d[7].a,d[7].b]}return a}"function"!=typeof define||(define.amd,0)?"undefined"!=typeof exports?"undefined"!=typeof module&&module.exports?module.exports=exports=z:exports=z:T.jsSHA=z:define(function(){return z})}(this),_aa={},_aa._ab=function(f,e){for(var d=qrcode.width,b=qrcode.height,c=!0,g=0;g<e.Length&&c;g+=2){var a=Math.floor(e[g]),h=Math.floor(e[g+1]);if(a<-1||a>d||h<-1||h>b)throw"Error._ab ";c=!1,a==-1?(e[g]=0,c=!0):a==d&&(e[g]=d-1,c=!0),h==-1?(e[g+1]=0,c=!0):h==b&&(e[g+1]=b-1,c=!0)}c=!0;for(var g=e.Length-2;g>=0&&c;g-=2){var a=Math.floor(e[g]),h=Math.floor(e[g+1]);if(a<-1||a>d||h<-1||h>b)throw"Error._ab ";c=!1,a==-1?(e[g]=0,c=!0):a==d&&(e[g]=d-1,c=!0),h==-1?(e[g+1]=0,c=!0):h==b&&(e[g+1]=b-1,c=!0)}},_aa._af=function(b,d,a){for(var l=new _ac(d),k=new Array(d<<1),g=0;g<d;g++){for(var h=k.length,j=g+.5,i=0;i<h;i+=2)k[i]=(i>>1)+.5,k[i+1]=j;a._ad(k),_aa._ab(b,k);try{for(var i=0;i<h;i+=2){var e=4*Math.floor(k[i])+Math.floor(k[i+1])*qrcode.width*4,f=b[Math.floor(k[i])+qrcode.width*Math.floor(k[i+1])];qrcode.imagedata.data[e]=f?255:0,qrcode.imagedata.data[e+1]=f?255:0,qrcode.imagedata.data[e+2]=0,qrcode.imagedata.data[e+3]=255,f&&l._dq(i>>1,g)}}catch(c){throw"Error._ab"}}return l},_aa._ah=function(h,o,l,k,r,q,b,a,f,e,n,m,t,s,d,c,j,i){var g=_ae._ag(l,k,r,q,b,a,f,e,n,m,t,s,d,c,j,i);return _aa._af(h,o,g)},_a3._bv=new Array(31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017),_a3.VERSIONS=_ay(),_a3._av=function(a){if(a<1||a>40)throw"bad arguments";return _a3.VERSIONS[a-1]},_a3._at=function(b){if(b%4!=1)throw"Error _at";try{return _a3._av(b-17>>2)}catch(a){throw"Error _av"}},_a3._aw=function(d){for(var b=4294967295,f=0,c=0;c<_a3._bv.length;c++){var a=_a3._bv[c];if(a==d)return this._av(c+7);var e=_ax._gj(d,a);e<b&&(f=c+7,b=e)}return b<=3?this._av(f):null},_ae._ag=function(q,e,o,d,n,c,m,b,h,r,l,f,a,j,i,s){var g=this._be(q,e,o,d,n,c,m,b),k=this._bf(h,r,l,f,a,j,i,s);return k.times(g)},_ae._bf=function(f,h,d,g,b,e,a,c){return dy2=c-e,dy3=h-g+e-c,0==dy2&&0==dy3?new _ae(d-f,b-d,f,g-h,e-g,h,0,0,1):(dx1=d-b,dx2=a-b,dx3=f-d+b-a,dy1=g-e,_dr=dx1*dy2-dx2*dy1,a13=(dx3*dy2-dx2*dy3)/_dr,a23=(dx1*dy3-dx3*dy1)/_dr,new _ae(d-f+a13*d,a-f+a23*a,f,g-h+a13*g,c-h+a23*c,h,a13,a23,1))},_ae._be=function(f,h,d,g,b,e,a,c){return this._bf(f,h,d,g,b,e,a,c)._fr()};var _ca=21522,_cb=new Array(new Array(21522,0),new Array(20773,1),new Array(24188,2),new Array(23371,3),new Array(17913,4),new Array(16590,5),new Array(20375,6),new Array(19104,7),new Array(30660,8),new Array(29427,9),new Array(32170,10),new Array(30877,11),new Array(26159,12),new Array(25368,13),new Array(27713,14),new Array(26998,15),new Array(5769,16),new Array(5054,17),new Array(7399,18),new Array(6608,19),new Array(1890,20),new Array(597,21),new Array(3340,22),new Array(2107,23),new Array(13663,24),new Array(12392,25),new Array(16177,26),new Array(14854,27),new Array(9396,28),new Array(8579,29),new Array(11994,30),new Array(11245,31)),_ch=new Array(0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4);_ax._gj=function(d,c){return d^=c,_ch[15&d]+_ch[15&_ew(d,4)]+_ch[15&_ew(d,8)]+_ch[15&_ew(d,12)]+_ch[15&_ew(d,16)]+_ch[15&_ew(d,20)]+_ch[15&_ew(d,24)]+_ch[15&_ew(d,28)]},_ax._ci=function(a){var b=_ax._cj(a);return null!=b?b:_ax._cj(a^_ca)},_ax._cj=function(d){for(var b=4294967295,a=0,c=0;c<_cb.length;c++){var g=_cb[c],f=g[0];if(f==d)return new _ax(g[1]);var e=this._gj(d,f);e<b&&(a=g[1],b=e)}return b<=3?new _ax(a):null},_cg.forBits=function(a){if(a<0||a>=FOR_BITS.Length)throw"bad arguments";return FOR_BITS[a]};var L=new _cg(0,1,"L"),M=new _cg(1,0,"M"),Q=new _cg(2,3,"Q"),H=new _cg(3,2,"H"),FOR_BITS=new Array(M,L,H,Q);_dl._gn=function(c,h,s){if(c.length!=h._dp)throw"bad arguments";for(var k=h._bu(s),e=0,d=k._fb(),r=0;r<d.length;r++)e+=d[r].Count;for(var l=new Array(e),n=0,o=0;o<d.length;o++)for(var f=d[o],r=0;r<f.Count;r++){var m=f._dm,t=k._bo+m;l[n++]=new _dl(m,new Array(t))}for(var u=l[0]._dw.length,b=l.length-1;b>=0;){var w=l[b]._dw.length;if(w==u)break;b--}b++;for(var g=u-k._bo,a=0,r=0;r<g;r++)for(var o=0;o<n;o++)l[o]._dw[r]=c[a++];for(var o=b;o<n;o++)l[o]._dw[g]=c[a++];for(var q=l[0]._dw.length,r=g;r<q;r++)for(var o=0;o<n;o++){var v=o<b?r:r+1;l[o]._dw[v]=c[a++]}return l},_dx={},_dx._gl=function(a){if(a<0||a>7)throw"bad arguments";return _dx._dy[a]},_dx._dy=new Array(new _fg,new _fh,new _fi,new _fj,new _fk,new _fl,new _fm,new _fn),_az._bb=new _az(285),_az._bc=new _az(301),_az._bd=function(d,c){return d^c},Decoder={},Decoder.rsDecoder=new _db(_az._bb),Decoder.correctErrors=function(g,b){for(var d=g.length,f=new Array(d),e=0;e<d;e++)f[e]=255&g[e];var a=g.length-b;try{Decoder.rsDecoder.decode(f,a)}catch(c){throw c}for(var e=0;e<b;e++)g[e]=f[e]},Decoder.decode=function(r){for(var b=new _cl(r),o=b._cq(),c=b._cm()._cg,q=b._gk(),a=_dl._gn(q,o,c),f=0,k=0;k<a.Length;k++)f+=a[k]._du;for(var e=new Array(f),n=0,h=0;h<a.length;h++){var m=a[h],d=m.Codewords,g=m._du;Decoder.correctErrors(d,g);for(var k=0;k<g;k++)e[n++]=d[k]}var l=new QRCodeDataBlockReader(e,o._fd,c.Bits);return l},qrcode={},qrcode.imagedata=null,qrcode.width=0,qrcode.height=0,qrcode.qrCodeSymbol=null,qrcode.debug=!1,qrcode._eo=[[10,9,8,8],[12,11,16,10],[14,13,16,12]],qrcode.callback=null,qrcode.decode=function(d){if(0==arguments.length){var b=document.getElementById("qr-canvas"),a=b.getContext("2d");return qrcode.width=b.width,qrcode.height=b.height,qrcode.imagedata=a.getImageData(0,0,qrcode.width,qrcode.height),qrcode.result=qrcode.process(a),null!=qrcode.callback&&qrcode.callback(qrcode.result),qrcode.result}var c=new Image;c.onload=function(){var i=document.createElement("canvas"),h=i.getContext("2d"),f=document.getElementById("out-canvas");if(null!=f){var g=f.getContext("2d");g.clearRect(0,0,320,240),g.drawImage(c,0,0,320,240)}i.width=c.width,i.height=c.height,h.drawImage(c,0,0),qrcode.width=c.width,qrcode.height=c.height;try{qrcode.imagedata=h.getImageData(0,0,c.width,c.height)}catch(j){return qrcode.result="Cross domain image reading not supported in your browser! Save it to your computer then drag and drop the file!",void(null!=qrcode.callback&&qrcode.callback(qrcode.result))}try{qrcode.result=qrcode.process(h)}catch(j){console.log(j),qrcode.result="error decoding QR Code"}null!=qrcode.callback&&qrcode.callback(qrcode.result)},c.src=d},qrcode.decode_utf8=function(a){return decodeURIComponent(escape(a))},qrcode.process=function(r){var c=((new Date).getTime(),qrcode.grayScaleToBitmap(qrcode.grayscale()));if(qrcode.debug){for(var m=0;m<qrcode.height;m++)for(var n=0;n<qrcode.width;n++){var o=4*n+m*qrcode.width*4;qrcode.imagedata.data[o]=(c[n+m*qrcode.width],0),qrcode.imagedata.data[o+1]=(c[n+m*qrcode.width],0),qrcode.imagedata.data[o+2]=c[n+m*qrcode.width]?255:0}r.putImageData(qrcode.imagedata,0,0)}var h=new Detector(c),q=h.detect();
qrcode.debug&&r.putImageData(qrcode.imagedata,0,0);for(var k=Decoder.decode(q.bits),g=k.DataByte,l="",f=0;f<g.length;f++)for(var e=0;e<g[f].length;e++)l+=String.fromCharCode(g[f][e]);(new Date).getTime();return qrcode.decode_utf8(l)},qrcode.getPixel=function(a,b){if(qrcode.width<a)throw"point error";if(qrcode.height<b)throw"point error";return point=4*a+b*qrcode.width*4,p=(33*qrcode.imagedata.data[point]+34*qrcode.imagedata.data[point+1]+33*qrcode.imagedata.data[point+2])/100,p},qrcode.binarize=function(d){for(var c=new Array(qrcode.width*qrcode.height),e=0;e<qrcode.height;e++)for(var b=0;b<qrcode.width;b++){var a=qrcode.getPixel(b,e);c[b+e*qrcode.width]=a<=d}return c},qrcode._em=function(d){for(var c=4,k=Math.floor(qrcode.width/c),j=Math.floor(qrcode.height/c),f=new Array(c),g=0;g<c;g++){f[g]=new Array(c);for(var e=0;e<c;e++)f[g][e]=new Array(0,0)}for(var o=0;o<c;o++)for(var a=0;a<c;a++){f[a][o][0]=255;for(var l=0;l<j;l++)for(var n=0;n<k;n++){var h=d[k*a+n+(j*o+l)*qrcode.width];h<f[a][o][0]&&(f[a][o][0]=h),h>f[a][o][1]&&(f[a][o][1]=h)}}for(var m=new Array(c),b=0;b<c;b++)m[b]=new Array(c);for(var o=0;o<c;o++)for(var a=0;a<c;a++)m[a][o]=Math.floor((f[a][o][0]+f[a][o][1])/2);return m},qrcode.grayScaleToBitmap=function(f){for(var j=qrcode._em(f),b=j.length,e=Math.floor(qrcode.width/b),d=Math.floor(qrcode.height/b),c=new Array(qrcode.height*qrcode.width),i=0;i<b;i++)for(var a=0;a<b;a++)for(var g=0;g<d;g++)for(var h=0;h<e;h++)c[e*a+h+(d*i+g)*qrcode.width]=f[e*a+h+(d*i+g)*qrcode.width]<j[a][i];return c},qrcode.grayscale=function(){for(var c=new Array(qrcode.width*qrcode.height),d=0;d<qrcode.height;d++)for(var b=0;b<qrcode.width;b++){var a=qrcode.getPixel(b,d);c[b+d*qrcode.width]=a}return c},Array.prototype.remove=function(c,b){var a=this.slice((b||c)+1||this.length);return this.length=c<0?this.length+c:c,this.push.apply(this,a)};var _gf=3,_eh=57,_el=8,_eg=2;qrcode._er=function(c){function b(l,k){return xDiff=l.X-k.X,yDiff=l.Y-k.Y,Math.sqrt(xDiff*xDiff+yDiff*yDiff)}function d(k,o,n){var m=o.x,l=o.y;return(n.x-m)*(k.y-l)-(n.y-l)*(k.x-m)}var a,j,h,i=b(c[0],c[1]),f=b(c[1],c[2]),e=b(c[0],c[2]);if(f>=i&&f>=e?(j=c[0],a=c[1],h=c[2]):e>=f&&e>=i?(j=c[1],a=c[0],h=c[2]):(j=c[2],a=c[0],h=c[1]),d(a,j,h)<0){var g=a;a=h,h=g}c[0]=a,c[1]=j,c[2]=h},angular.module("ui.sortable",[]).value("uiSortableConfig",{items:"> [ng-repeat],> [data-ng-repeat],> [x-ng-repeat]"}).directive("uiSortable",["uiSortableConfig","$timeout","$log",function(uiSortableConfig,$timeout,$log){return{require:"?ngModel",scope:{ngModel:"=",uiSortable:"="},link:function(scope,element,attrs,ngModel){function combineCallbacks(first,second){var firstIsFunc="function"==typeof first,secondIsFunc="function"==typeof second;return firstIsFunc&&secondIsFunc?function(){first.apply(this,arguments),second.apply(this,arguments)}:secondIsFunc?second:first}function getSortableWidgetInstance(element){var data=element.data("ui-sortable");return data&&"object"==typeof data&&"ui-sortable"===data.widgetFullName?data:null}function patchSortableOption(key,value){return callbacks[key]?("stop"===key&&(value=combineCallbacks(value,function(){scope.$apply()}),value=combineCallbacks(value,afterStop)),value=combineCallbacks(callbacks[key],value)):wrappers[key]&&(value=wrappers[key](value)),value||"items"!==key&&"ui-model-items"!==key||(value=uiSortableConfig.items),value}function patchUISortableOptions(newVal,oldVal,sortableWidgetInstance){function addDummyOptionKey(value,key){key in opts||(opts[key]=null)}angular.forEach(callbacks,addDummyOptionKey);var optsDiff=null;if(oldVal){var defaultOptions;angular.forEach(oldVal,function(oldValue,key){if(!(newVal&&key in newVal)){if(key in directiveOpts)return void("ui-floating"===key?opts[key]="auto":opts[key]=patchSortableOption(key,void 0));defaultOptions||(defaultOptions=angular.element.ui.sortable().options);var defaultValue=defaultOptions[key];defaultValue=patchSortableOption(key,defaultValue),optsDiff||(optsDiff={}),optsDiff[key]=defaultValue,opts[key]=defaultValue}})}return angular.forEach(newVal,function(value,key){return key in directiveOpts?("ui-floating"!==key||value!==!1&&value!==!0||!sortableWidgetInstance||(sortableWidgetInstance.floating=value),void(opts[key]=patchSortableOption(key,value))):(value=patchSortableOption(key,value),optsDiff||(optsDiff={}),optsDiff[key]=value,void(opts[key]=value))}),optsDiff}function getPlaceholderElement(element){var placeholder=element.sortable("option","placeholder");if(placeholder&&placeholder.element&&"function"==typeof placeholder.element){var result=placeholder.element();return result=angular.element(result)}return null}function getPlaceholderExcludesludes(element,placeholder){var notCssSelector=opts["ui-model-items"].replace(/[^,]*>/g,""),excludes=element.find('[class="'+placeholder.attr("class")+'"]:not('+notCssSelector+")");return excludes}function hasSortingHelper(element,ui){var helperOption=element.sortable("option","helper");return"clone"===helperOption||"function"==typeof helperOption&&ui.item.sortable.isCustomHelperUsed()}function getSortingHelper(element,ui,savedNodes){var result=null;return hasSortingHelper(element,ui)&&"parent"===element.sortable("option","appendTo")&&(result=savedNodes.last()),result}function isFloating(item){return/left|right/.test(item.css("float"))||/inline|table-cell/.test(item.css("display"))}function getElementScope(elementScopes,element){for(var result=null,i=0;i<elementScopes.length;i++){var x=elementScopes[i];if(x.element[0]===element[0]){result=x.scope;break}}return result}function afterStop(e,ui){ui.item.sortable._destroy()}function getItemIndex(item){return item.parent().find(opts["ui-model-items"]).index(item)}function wireUp(){scope.$watchCollection("ngModel",function(){$timeout(function(){getSortableWidgetInstance(element)&&element.sortable("refresh")},0,!1)}),callbacks.start=function(e,ui){if("auto"===opts["ui-floating"]){var siblings=ui.item.siblings(),sortableWidgetInstance=getSortableWidgetInstance(angular.element(e.target));sortableWidgetInstance.floating=isFloating(siblings)}var index=getItemIndex(ui.item);ui.item.sortable={model:ngModel.$modelValue[index],index:index,source:ui.item.parent(),sourceModel:ngModel.$modelValue,cancel:function(){ui.item.sortable._isCanceled=!0},isCanceled:function(){return ui.item.sortable._isCanceled},isCustomHelperUsed:function(){return!!ui.item.sortable._isCustomHelperUsed},_isCanceled:!1,_isCustomHelperUsed:ui.item.sortable._isCustomHelperUsed,_destroy:function(){angular.forEach(ui.item.sortable,function(value,key){ui.item.sortable[key]=void 0})}}},callbacks.activate=function(e,ui){savedNodes=element.contents();var placeholder=getPlaceholderElement(element);if(placeholder&&placeholder.length){var excludes=getPlaceholderExcludesludes(element,placeholder);savedNodes=savedNodes.not(excludes)}var connectedSortables=ui.item.sortable._connectedSortables||[];connectedSortables.push({element:element,scope:scope}),ui.item.sortable._connectedSortables=connectedSortables},callbacks.update=function(e,ui){if(!ui.item.sortable.received){ui.item.sortable.dropindex=getItemIndex(ui.item);var droptarget=ui.item.parent();ui.item.sortable.droptarget=droptarget;var droptargetScope=getElementScope(ui.item.sortable._connectedSortables,droptarget);ui.item.sortable.droptargetModel=droptargetScope.ngModel,element.sortable("cancel")}var sortingHelper=!ui.item.sortable.received&&getSortingHelper(element,ui,savedNodes);sortingHelper&&sortingHelper.length&&(savedNodes=savedNodes.not(sortingHelper)),savedNodes.appendTo(element),ui.item.sortable.received&&(savedNodes=null),ui.item.sortable.received&&!ui.item.sortable.isCanceled()&&scope.$apply(function(){ngModel.$modelValue.splice(ui.item.sortable.dropindex,0,ui.item.sortable.moved)})},callbacks.stop=function(e,ui){if(!ui.item.sortable.received&&"dropindex"in ui.item.sortable&&!ui.item.sortable.isCanceled())scope.$apply(function(){ngModel.$modelValue.splice(ui.item.sortable.dropindex,0,ngModel.$modelValue.splice(ui.item.sortable.index,1)[0])});else if((!("dropindex"in ui.item.sortable)||ui.item.sortable.isCanceled())&&!angular.equals(element.contents(),savedNodes)){var sortingHelper=getSortingHelper(element,ui,savedNodes);sortingHelper&&sortingHelper.length&&(savedNodes=savedNodes.not(sortingHelper)),savedNodes.appendTo(element)}savedNodes=null},callbacks.receive=function(e,ui){ui.item.sortable.received=!0},callbacks.remove=function(e,ui){"dropindex"in ui.item.sortable||(element.sortable("cancel"),ui.item.sortable.cancel()),ui.item.sortable.isCanceled()||scope.$apply(function(){ui.item.sortable.moved=ngModel.$modelValue.splice(ui.item.sortable.index,1)[0]})},wrappers.helper=function(inner){return inner&&"function"==typeof inner?function(e,item){var oldItemSortable=item.sortable,index=getItemIndex(item);item.sortable={model:ngModel.$modelValue[index],index:index,source:item.parent(),sourceModel:ngModel.$modelValue,_restore:function(){angular.forEach(item.sortable,function(value,key){item.sortable[key]=void 0}),item.sortable=oldItemSortable}};var innerResult=inner.apply(this,arguments);return item.sortable._restore(),item.sortable._isCustomHelperUsed=item!==innerResult,innerResult}:inner},scope.$watchCollection("uiSortable",function(newVal,oldVal){var sortableWidgetInstance=getSortableWidgetInstance(element);if(sortableWidgetInstance){var optsDiff=patchUISortableOptions(newVal,oldVal,sortableWidgetInstance);optsDiff&&element.sortable("option",optsDiff)}},!0),patchUISortableOptions(opts)}function init(){ngModel?wireUp():$log.info("ui.sortable: ngModel not provided!",element),element.sortable(opts)}function initIfEnabled(){return(!scope.uiSortable||!scope.uiSortable.disabled)&&(init(),initIfEnabled.cancelWatcher(),initIfEnabled.cancelWatcher=angular.noop,!0)}var savedNodes,opts={},directiveOpts={"ui-floating":void 0,"ui-model-items":uiSortableConfig.items},callbacks={receive:null,remove:null,start:null,stop:null,update:null},wrappers={helper:null};return angular.extend(opts,directiveOpts,uiSortableConfig,scope.uiSortable),angular.element.fn&&angular.element.fn.jquery?(initIfEnabled.cancelWatcher=angular.noop,void(initIfEnabled()||(initIfEnabled.cancelWatcher=scope.$watch("uiSortable.disabled",initIfEnabled)))):void $log.error("ui.sortable: jQuery should be included before AngularJS!")}}}]),!function(e){function t(t,r){if(r=r||{},r.worker&&S.WORKERS_SUPPORTED){var n=f();return n.userStep=r.step,n.userChunk=r.chunk,n.userComplete=r.complete,n.userError=r.error,r.step=m(r.step),r.chunk=m(r.chunk),r.complete=m(r.complete),r.error=m(r.error),delete r.worker,void n.postMessage({input:t,config:r,workerId:n.id})}var o=null;return"string"==typeof t?o=r.download?new i(r):new a(r):(e.File&&t instanceof File||t instanceof Object)&&(o=new s(r)),o.stream(t)}function r(e,t){function r(){"object"==typeof t&&("string"==typeof t.delimiter&&1==t.delimiter.length&&-1==S.BAD_DELIMITERS.indexOf(t.delimiter)&&(u=t.delimiter),("boolean"==typeof t.quotes||t.quotes instanceof Array)&&(o=t.quotes),"string"==typeof t.newline&&(h=t.newline))}function n(e){if("object"!=typeof e)return[];var t=[];for(var r in e)t.push(r);return t}function i(e,t){var r="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=e instanceof Array&&e.length>0,i=!(t[0]instanceof Array);if(n){for(var a=0;a<e.length;a++)a>0&&(r+=u),r+=s(e[a],a);t.length>0&&(r+=h)}for(var o=0;o<t.length;o++){for(var f=n?e.length:t[o].length,c=0;f>c;c++){c>0&&(r+=u);var d=n&&i?e[c]:c;r+=s(t[o][d],c)}o<t.length-1&&(r+=h)}return r}function s(e,t){if("undefined"==typeof e||null===e)return"";e=e.toString().replace(/"/g,'""');var r="boolean"==typeof o&&o||o instanceof Array&&o[t]||a(e,S.BAD_DELIMITERS)||e.indexOf(u)>-1||" "==e.charAt(0)||" "==e.charAt(e.length-1);return r?'"'+e+'"':e}function a(e,t){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>-1)return!0;return!1}var o=!1,u=",",h="\r\n";if(r(),"string"==typeof e&&(e=JSON.parse(e)),e instanceof Array){if(!e.length||e[0]instanceof Array)return i(null,e);if("object"==typeof e[0])return i(n(e[0]),e)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),e.data instanceof Array&&(e.fields||(e.fields=e.data[0]instanceof Array?e.fields:n(e.data[0])),e.data[0]instanceof Array||"object"==typeof e.data[0]||(e.data=[e.data])),i(e.fields||[],e.data||[]);throw"exception: Unable to serialize unrecognized input"}function n(t){function r(e){var t=_(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null),this._handle=new o(t),this._handle.streamer=this,this._config=t}this._handle=null,this._paused=!1,this._finished=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},r.call(this,t),this.parseChunk=function(t){if(this.isFirstChunk&&m(this._config.beforeFirstChunk)){var r=this._config.beforeFirstChunk(t);void 0!==r&&(t=r)}this.isFirstChunk=!1;var n=this._partialLine+t;this._partialLine="";var i=this._handle.parse(n,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=i.meta.cursor;this._finished||(this._partialLine=n.substring(s-this._baseIndex),this._baseIndex=s),i&&i.data&&(this._rowCount+=i.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(y)e.postMessage({results:i,workerId:S.WORKER_ID,finished:a});else if(m(this._config.chunk)){if(this._config.chunk(i,this._handle),this._paused)return;i=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(i.data),this._completeResults.errors=this._completeResults.errors.concat(i.errors),this._completeResults.meta=i.meta),!a||!m(this._config.complete)||i&&i.meta.aborted||this._config.complete(this._completeResults),a||i&&i.meta.paused||this._nextChunk(),i}},this._sendError=function(t){m(this._config.error)?this._config.error(t):y&&this._config.error&&e.postMessage({workerId:S.WORKER_ID,error:t,finished:!1})}}function i(e){function t(e){var t=e.getResponseHeader("Content-Range");return parseInt(t.substr(t.lastIndexOf("/")+1))}e=e||{},e.chunkSize||(e.chunkSize=S.RemoteChunkSize),n.call(this,e);var r;this._nextChunk=k?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)return void this._chunkLoaded();if(r=new XMLHttpRequest,k||(r.onload=g(this._chunkLoaded,this),r.onerror=g(this._chunkError,this)),r.open("GET",this._input,!k),this._config.chunkSize){var e=this._start+this._config.chunkSize-1;r.setRequestHeader("Range","bytes="+this._start+"-"+e),r.setRequestHeader("If-None-Match","webkit-no-cache")}try{r.send()}catch(t){this._chunkError(t.message)}k&&0==r.status?this._chunkError():this._start+=this._config.chunkSize},this._chunkLoaded=function(){if(4==r.readyState){if(r.status<200||r.status>=400)return void this._chunkError();this._finished=!this._config.chunkSize||this._start>t(r),this.parseChunk(r.responseText)}},this._chunkError=function(e){var t=r.statusText||e;this._sendError(t)}}function s(e){e=e||{},e.chunkSize||(e.chunkSize=S.LocalChunkSize),n.call(this,e);var t,r,i="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,i?(t=new FileReader,t.onload=g(this._chunkLoaded,this),t.onerror=g(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var n=Math.min(this._start+this._config.chunkSize,this._input.size);e=r.call(e,this._start,n)}var s=t.readAsText(e,this._config.encoding);i||this._chunkLoaded({target:{result:s}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function a(e){e=e||{},n.call(this,e);var t,r;this.stream=function(e){return t=e,r=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e=this._config.chunkSize,t=e?r.substr(0,e):r;return r=e?r.substr(e):"",this._finished=!r,this.parseChunk(t)}}}function o(e){function t(){if(b&&d&&(h("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+S.DefaultDelimiter+"'"),d=!1),e.skipEmptyLines)for(var t=0;t<b.data.length;t++)1==b.data[t].length&&""==b.data[t][0]&&b.data.splice(t--,1);return r()&&n(),i()}function r(){return e.header&&0==y.length}function n(){if(b){for(var e=0;r()&&e<b.data.length;e++)for(var t=0;t<b.data[e].length;t++)y.push(b.data[e][t]);b.data.splice(0,1)}}function i(){if(!b||!e.header&&!e.dynamicTyping)return b;for(var t=0;t<b.data.length;t++){for(var r={},n=0;n<b.data[t].length;n++){if(e.dynamicTyping){var i=b.data[t][n];b.data[t][n]="true"==i||"TRUE"==i||"false"!=i&&"FALSE"!=i&&o(i)}e.header&&(n>=y.length?(r.__parsed_extra||(r.__parsed_extra=[]),r.__parsed_extra.push(b.data[t][n])):r[y[n]]=b.data[t][n])}e.header&&(b.data[t]=r,n>y.length?h("FieldMismatch","TooManyFields","Too many fields: expected "+y.length+" fields but parsed "+n,t):n<y.length&&h("FieldMismatch","TooFewFields","Too few fields: expected "+y.length+" fields but parsed "+n,t))}return e.header&&b.meta&&(b.meta.fields=y),b}function s(t){for(var r,n,i,s=[",","\t","|",";",S.RECORD_SEP,S.UNIT_SEP],a=0;a<s.length;a++){var o=s[a],h=0,f=0;i=void 0;for(var c=new u({delimiter:o,preview:10}).parse(t),d=0;d<c.data.length;d++){var l=c.data[d].length;f+=l,"undefined"!=typeof i?l>1&&(h+=Math.abs(l-i),i=l):i=l}c.data.length>0&&(f/=c.data.length),("undefined"==typeof n||n>h)&&f>1.99&&(n=h,r=o)}return e.delimiter=r,{successful:!!r,bestDelimiter:r}}function a(e){e=e.substr(0,1048576);var t=e.split("\r");if(1==t.length)return"\n";for(var r=0,n=0;n<t.length;n++)"\n"==t[n][0]&&r++;return r>=t.length/2?"\r\n":"\r"}function o(e){var t=l.test(e);return t?parseFloat(e):e}function h(e,t,r,n){b.errors.push({type:e,code:t,message:r,row:n})}var f,c,d,l=/^\s*-?(\d*\.?\d+|\d+\.?\d*)(e[-+]?\d+)?\s*$/i,p=this,g=0,v=!1,k=!1,y=[],b={data:[],errors:[],meta:{}};if(m(e.step)){var R=e.step;e.step=function(n){if(b=n,r())t();else{if(t(),0==b.data.length)return;g+=n.data.length,e.preview&&g>e.preview?c.abort():R(b,p)}}}this.parse=function(r,n,i){if(e.newline||(e.newline=a(r)),d=!1,!e.delimiter){var o=s(r);o.successful?e.delimiter=o.bestDelimiter:(d=!0,e.delimiter=S.DefaultDelimiter),b.meta.delimiter=e.delimiter}var h=_(e);return e.preview&&e.header&&h.preview++,f=r,c=new u(h),b=c.parse(f,n,i),t(),v?{meta:{paused:!0}}:b||{meta:{paused:!1}}},this.paused=function(){return v},this.pause=function(){v=!0,c.abort(),f=f.substr(c.getCharIndex())},this.resume=function(){v=!1,p.streamer.parseChunk(f)},this.aborted=function(){return k},this.abort=function(){k=!0,c.abort(),b.meta.aborted=!0,m(e.complete)&&e.complete(b),f=""}}function u(e){e=e||{};var t=e.delimiter,r=e.newline,n=e.comments,i=e.step,s=e.preview,a=e.fastMode;if(("string"!=typeof t||S.BAD_DELIMITERS.indexOf(t)>-1)&&(t=","),n===t)throw"Comment character same as delimiter";n===!0?n="#":("string"!=typeof n||S.BAD_DELIMITERS.indexOf(n)>-1)&&(n=!1),"\n"!=r&&"\r"!=r&&"\r\n"!=r&&(r="\n");var o=0,u=!1;this.parse=function(e,h,f){function c(e){b.push(e),S=o}function d(t){return f?p():("undefined"==typeof t&&(t=e.substr(o)),w.push(t),o=g,c(w),y&&_(),p())}function l(t){o=t,c(w),w=[],O=e.indexOf(r,o)}function p(e){return{data:b,errors:R,meta:{delimiter:t,linebreak:r,aborted:u,truncated:!!e,cursor:S+(h||0)}}}function _(){i(p()),b=[],R=[]}if("string"!=typeof e)throw"Input must be a string";var g=e.length,m=t.length,v=r.length,k=n.length,y="function"==typeof i;o=0;var b=[],R=[],w=[],S=0;if(!e)return p();if(a||a!==!1&&-1===e.indexOf('"')){for(var C=e.split(r),E=0;E<C.length;E++){var w=C[E];if(o+=w.length,E!==C.length-1)o+=r.length;else if(f)return p();if(!n||w.substr(0,k)!=n){if(y){if(b=[],c(w.split(t)),_(),u)return p()}else c(w.split(t));if(s&&E>=s)return b=b.slice(0,s),p(!0)}}return p()}for(var x=e.indexOf(t,o),O=e.indexOf(r,o);;)if('"'!=e[o])if(n&&0===w.length&&e.substr(o,k)===n){if(-1==O)return p();o=O+v,O=e.indexOf(r,o),x=e.indexOf(t,o)}else if(-1!==x&&(O>x||-1===O))w.push(e.substring(o,x)),o=x+m,x=e.indexOf(t,o);else{if(-1===O)break;if(w.push(e.substring(o,O)),l(O+v),y&&(_(),u))return p();if(s&&b.length>=s)return p(!0)}else{var I=o;for(o++;;){var I=e.indexOf('"',I+1);if(-1===I)return f||R.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:b.length,index:o}),d();if(I===g-1){var D=e.substring(o,I).replace(/""/g,'"');return d(D)}if('"'!=e[I+1]){if(e[I+1]==t){w.push(e.substring(o,I).replace(/""/g,'"')),o=I+1+m,x=e.indexOf(t,o),O=e.indexOf(r,o);break}if(e.substr(I+1,v)===r){if(w.push(e.substring(o,I).replace(/""/g,'"')),l(I+1+v),x=e.indexOf(t,o),y&&(_(),u))return p();if(s&&b.length>=s)return p(!0);break}}else I++}}return d()},this.abort=function(){u=!0},this.getCharIndex=function(){return o}}function h(){var e=document.getElementsByTagName("script");return e.length?e[e.length-1].src:""}function f(){if(!S.WORKERS_SUPPORTED)return!1;if(!b&&null===S.SCRIPT_PATH)throw new Error("Script path cannot be determined automatically when Papa Parse is loaded asynchronously. You need to set Papa.SCRIPT_PATH manually.");var t=S.SCRIPT_PATH||v;t+=(-1!==t.indexOf("?")?"&":"?")+"papaworker";var r=new e.Worker(t);return r.onmessage=c,r.id=w++,R[r.id]=r,r}function c(e){var t=e.data,r=R[t.workerId],n=!1;if(t.error)r.userError(t.error,t.file);else if(t.results&&t.results.data){var i=function(){n=!0,d(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},s={abort:i,pause:l,resume:l};if(m(r.userStep)){for(var a=0;a<t.results.data.length&&(r.userStep({data:[t.results.data[a]],errors:t.results.errors,meta:t.results.meta},s),!n);a++);delete t.results}else m(r.userChunk)&&(r.userChunk(t.results,s,t.file),delete t.results)}t.finished&&!n&&d(t.workerId,t.results)}function d(e,t){var r=R[e];m(r.userComplete)&&r.userComplete(t),r.terminate(),delete R[e]}function l(){throw"Not implemented."}function p(t){var r=t.data;if("undefined"==typeof S.WORKER_ID&&r&&(S.WORKER_ID=r.workerId),"string"==typeof r.input)e.postMessage({workerId:S.WORKER_ID,results:S.parse(r.input,r.config),finished:!0});else if(e.File&&r.input instanceof File||r.input instanceof Object){var n=S.parse(r.input,r.config);n&&e.postMessage({workerId:S.WORKER_ID,results:n,finished:!0})}}function _(e){if("object"!=typeof e)return e;var t=e instanceof Array?[]:{};for(var r in e)t[r]=_(e[r]);return t}function g(e,t){return function(){e.apply(t,arguments)}}function m(e){return"function"==typeof e}var v,k=!e.document&&!!e.postMessage,y=k&&/(\?|&)papaworker(=|&|$)/.test(e.location.search),b=!1,R={},w=0,S={};if(S.parse=t,S.unparse=r,S.RECORD_SEP=String.fromCharCode(30),S.UNIT_SEP=String.fromCharCode(31),S.BYTE_ORDER_MARK="\ufeff",S.BAD_DELIMITERS=["\r","\n",'"',S.BYTE_ORDER_MARK],S.WORKERS_SUPPORTED=!k&&!!e.Worker,S.SCRIPT_PATH=null,S.LocalChunkSize=10485760,S.RemoteChunkSize=5242880,S.DefaultDelimiter=",",S.Parser=u,S.ParserHandle=o,S.NetworkStreamer=i,S.FileStreamer=s,S.StringStreamer=a,"undefined"!=typeof module&&module.exports?module.exports=S:m(e.define)&&e.define.amd?define(function(){return S}):e.Papa=S,e.jQuery){var C=e.jQuery;C.fn.parse=function(t){function r(){if(0==a.length)return void(m(t.complete)&&t.complete());var e=a[0];if(m(t.before)){var r=t.before(e.file,e.inputElem);if("object"==typeof r){if("abort"==r.action)return void n("AbortError",e.file,e.inputElem,r.reason);if("skip"==r.action)return void i();"object"==typeof r.config&&(e.instanceConfig=C.extend(e.instanceConfig,r.config))}else if("skip"==r)return void i()}var s=e.instanceConfig.complete;e.instanceConfig.complete=function(t){m(s)&&s(t,e.file,e.inputElem),i()},S.parse(e.file,e.instanceConfig)}function n(e,r,n,i){m(t.error)&&t.error({name:e},r,n,i)}function i(){a.splice(0,1),r()}var s=t.config||{},a=[];return this.each(function(){var t="INPUT"==C(this).prop("tagName").toUpperCase()&&"file"==C(this).attr("type").toLowerCase()&&e.FileReader;if(!t||!this.files||0==this.files.length)return!0;for(var r=0;r<this.files.length;r++)a.push({file:this.files[r],inputElem:this,instanceConfig:C.extend({},s)})}),r(),this}}y?e.onmessage=p:S.WORKERS_SUPPORTED&&(v=h(),document.body?document.addEventListener("DOMContentLoaded",function(){b=!0},!0):b=!0),i.prototype=Object.create(n.prototype),i.prototype.constructor=i,s.prototype=Object.create(n.prototype),s.prototype.constructor=s,a.prototype=Object.create(a.prototype),a.prototype.constructor=a}("undefined"!=typeof window?window:this);var CRYPTO={paranoia_level:null,PASSWORD:{generate:function(length,callback,progress,start_string){return sjcl.random.isReady(paranoia_level)?(null==start_string&&(start_string=""),start_string.length<length?(start_string+=CRYPTO.RANDOM.getRandomASCII(),null!=progress&&progress(start_string.length/length*100),void setTimeout(this.generate(length,callback,progress,start_string),100)):(callback(start_string),void(null!=progress&&progress(100)))):void setTimeout(this.generate(length,callback,progress,start_string),500)},logRepeatedCharCount:function(str){var chars=[];for(i=0;i<str.length;i++)chars[str.charAt(i)]=null==chars[str.charAt(i)]?0:chars[str.charAt(i)]+1;return chars}},RANDOM:{getRandomASCII:function(){for(var ret="";ret.length<4;){var int=sjcl.random.randomWords(1,paranoia_level);int=int[0];var tmp=this._isASCII((4278190080&int)>>24);tmp&&(ret+=tmp),tmp=this._isASCII((16711680&int)>>16),tmp&&(ret+=tmp),tmp=this._isASCII((65280&int)>>8),tmp&&(ret+=tmp),tmp=this._isASCII(255&int),tmp&&(ret+=tmp)}return ret},_isASCII:function(data){return data>31&&data<127&&String.fromCharCode(data)}},initEngines:function(default_paranoia){paranoia_level=default_paranoia||10,sjcl.random.setDefaultParanoia(this.paranoia_level),sjcl.random.startCollectors(),console.warn("Crypto stuff initialized")}};CRYPTO.initEngines(),function(){angular.module("passmanApp",["ngAnimate","ngCookies","ngResource","ngRoute","ngSanitize","ngTouch","templates-main","LocalStorageModule","offClick","ngPasswordMeter","ngclipboard","xeditable","ngTagsInput","angularjs-datetime-picker","ui.sortable","pascalprecht.translate"]).config(function($routeProvider){$routeProvider.when("/",{templateUrl:"views/vaults.html",controller:"VaultCtrl"}).when("/vault/:vault_id",{templateUrl:"views/show_vault.html",controller:"CredentialCtrl"}).when("/vault/:vault_id/new",{templateUrl:"views/edit_credential.html",controller:"CredentialEditCtrl"}).when("/vault/:vault_id/edit/:credential_id",{templateUrl:"views/edit_credential.html",controller:"CredentialEditCtrl"}).when("/vault/:vault_id/:credential_id/share",{templateUrl:"views/share_credential.html",controller:"ShareCtrl"}).when("/vault/:vault_id/:credential_id/revisions",{templateUrl:"views/credential_revisions.html",controller:"RevisionCtrl"}).when("/vault/:vault_id/request-deletion",{templateUrl:"views/vault_req_deletion.html",controller:"RequestDeleteCtrl"}).when("/vault/:vault_id/settings",{templateUrl:"views/settings.html",controller:"SettingsCtrl"}).otherwise({redirectTo:"/"})}).config(["$httpProvider",function($httpProvider){$httpProvider.defaults.headers.common.requesttoken=oc_requesttoken}]).config(function(localStorageServiceProvider){localStorageServiceProvider.setNotify(!0,!0)}).config(function($translateProvider){$translateProvider.useSanitizeValueStrategy("sanitizeParameters"),$translateProvider.useUrlLoader(OC.generateUrl("/apps/passman/api/v2/language")),$translateProvider.preferredLanguage("en")}),jQuery(document).ready(function(){var findItemByID=function(id){var credentials,foundItem=!1;return credentials=angular.element("#app-content-wrapper").scope().credentials,angular.forEach(credentials,function(credential){credential.credential_id===id&&(foundItem=credential)}),foundItem};jQuery(document).on("click",".undoDelete",function(){var credential=findItemByID($(this).attr("data-item-id"));angular.element("#app-content-wrapper").scope().recoverCredential(credential),angular.element("#app-content-wrapper").scope().$apply()}),jQuery(document).on("click",".undoRestore",function(){var credential=findItemByID($(this).attr("data-item-id"));angular.element("#app-content-wrapper").scope().deleteCredential(credential),angular.element("#app-content-wrapper").scope().$apply()})})}(),function(){angular.module("passmanApp").filter("as",function($parse){return function(value,context,path){return $parse(path).assign(context,value)}})}(),function(){angular.module("passmanApp").filter("bytes",function(){return function(bytes,precision){if(isNaN(parseFloat(bytes))||!isFinite(bytes))return"-";"undefined"==typeof precision&&(precision=1);var units=["bytes","kB","MB","GB","TB","PB"],number=Math.floor(Math.log(bytes)/Math.log(1024));return(bytes/Math.pow(1024,Math.floor(number))).toFixed(precision)+" "+units[number]}})}(),function(){angular.module("passmanApp").filter("credentialSearch",function(){return function(credentials,filter){var _credentials=[];if(credentials){if(!filter)return credentials;if(""===filter.filterText.trim())return credentials;for(var matchedWithFilter=function(c){for(var f=0;f<filter.fields.length;f++){var field=filter.fields[f],fieldValue="string"==typeof c[field]?c[field]:JSON.stringify(c[field]);if(filter.hasOwnProperty("useRegex")&&filter.useRegex===!0)try{var patt=new RegExp(filter.filterText);if(patt.test(fieldValue))return!0}catch(e){}if(fieldValue.toLowerCase().indexOf(filter.filterText.toLowerCase())>=0)return!0}return!1},ci=0;ci<credentials.length;ci++){var c=credentials[ci];matchedWithFilter(c)&&_credentials.push(c)}return _credentials}return[]}})}(),function(){angular.module("passmanApp").filter("propsFilter",function(){return function(items,props){var out=[];if(angular.isArray(items)){var keys=Object.keys(props);items.forEach(function(item){for(var itemMatches=!1,i=0;i<keys.length;i++){var prop=keys[i],text=props[prop].toLowerCase();if(item[prop].toString().toLowerCase().indexOf(text)!==-1){itemMatches=!0;break}}itemMatches&&out.push(item)})}else out=items;return out}})}(),function(){angular.module("passmanApp").filter("range",function(){return function(val,range){range=parseInt(range);for(var i=0;i<range;i++)val.push(i);return val}})}(),function(){angular.module("passmanApp").filter("tagFilter",function(){return function(credentials,tags){var _credentials=[];if(tags.length>0)for(var ci=0;ci<credentials.length;ci++){for(var c=credentials[ci],matches=0,ct=0;ct<c.tags_raw.length;ct++){var t=c.tags_raw[ct];tags.indexOf(t.text)!==-1&&matches++}matches===tags.length&&_credentials.push(c)}return 0===tags.length&&(_credentials=credentials),_credentials}})}(),function(){angular.module("passmanApp").filter("toHHMMSS",function(){return function(_seconds){var sec_num=parseInt(_seconds,10),hours=Math.floor(sec_num/3600),minutes=Math.floor((sec_num-3600*hours)/60),seconds=sec_num-3600*hours-60*minutes;return hours<10&&(hours="0"+hours),minutes<10&&(minutes="0"+minutes),seconds<10&&(seconds="0"+seconds),hours+":"+minutes+":"+seconds}})}(),function(){angular.module("passmanApp").service("CacheService",["localStorageService","EncryptService",function(localStorageService,EncryptService){return{get:function(name){return EncryptService.decryptString(localStorageService.get(name))},set:function(key,value){value=EncryptService.encryptString(value),localStorageService.set(key,value)}}}])}(),function(){angular.module("passmanApp").service("CredentialService",["$http","EncryptService","VaultService","FileService",function($http,EncryptService,VaultService,FileService){var credential={credential_id:null,guid:null,vault_id:null,label:null,description:null,created:null,changed:null,tags:[],email:null,username:null,password:null,url:null,favicon:null,renew_interval:null,expire_time:0,
delete_time:0,files:[],custom_fields:[],otp:{},hidden:!1},_encryptedFields=["description","username","password","files","custom_fields","otp","email","tags","url"];return{newCredential:function(){return angular.copy(credential)},createCredential:function(credential){for(var _credential=angular.copy(credential),i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue))}_credential.expire_time=new Date(angular.copy(credential.expire_time)).getTime()/1e3;var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials");return $http.post(queryUrl,_credential).then(function(response){return response.data?response.data:response})},getEncryptedFields:function(){return _encryptedFields},updateCredential:function(credential,skipEncryption,key){var _credential=angular.copy(credential);if(!skipEncryption)for(var i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue),key)}_credential.expire_time=new Date(angular.copy(credential.expire_time)).getTime()/1e3;var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+credential.guid);return $http.patch(queryUrl,_credential).then(function(response){return response.data?response.data:response})},getCredential:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid);return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},destroyCredential:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})},encryptCredential:function(credential,key){for(var i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue),key)}return credential},decryptCredential:function(credential,key){for(var i=0;i<_encryptedFields.length;i++){var field_decrypted_value,field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);try{field_decrypted_value=EncryptService.decryptString(fieldValue,key)}catch(e){throw e}try{credential[field]=JSON.parse(field_decrypted_value)}catch(e){console.warn("Field"+field+" in "+credential.label+" could not be parsed! Value:"+fieldValue)}}return credential},getSharedKeyFromCredential:function(credential){var key=null;return!credential.hasOwnProperty("acl")&&credential.hasOwnProperty("shared_key")&&credential.shared_key&&(key=EncryptService.decryptString(angular.copy(credential.shared_key))),credential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy(credential.acl.shared_key))),key},getRevisions:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid+"/revision");return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},updateRevision:function(revision){var _revision=angular.copy(revision);_revision.credential_data=window.btoa(JSON.stringify(_revision.credential_data));var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+revision.credential_data.guid+"/revision/"+revision.revision_id);return $http.patch(queryUrl,_revision).then(function(response){return response.data?response.data:response})},deleteRevision:function(credential_guid,revision_id){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+credential_guid+"/revision/"+revision_id);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})},reencryptCredential:function(credential_guid,old_password,new_password,skipSharingKey){var service=this,progress_datatype=function(current,total,process){this.process=process,this.current=current,this.total=total,this.calculated=current/total*100},promise_credential_update=function(){service.getCredential(credential_guid).then(function(credential){this.parent.plain_credential=service.decryptCredential(credential,this.parent.old_password);var tmp=angular.copy(this.parent.plain_credential);if(tmp.hasOwnProperty("shared_key")&&null!==tmp.shared_key&&!skipSharingKey){var shared_key=EncryptService.decryptString(angular.copy(tmp.shared_key)).trim();tmp.shared_key=EncryptService.encryptString(angular.copy(shared_key),this.parent.new_password),tmp.set_share_key=!0,tmp.skip_revision=!0,this.parent.new_password=shared_key}this.parent.new_credential_cryptogram=service.encryptCredential(tmp,this.parent.new_password),this.call_progress(new progress_datatype(1,2,"credential")),this.parent.new_credential_cryptogram.skip_revision=!0,service.updateCredential(this.parent.new_credential_cryptogram,!0).then(function(){this.call_progress(new progress_datatype(2,2,"credential")),this.call_then({plain_text:this.parent.plain_credential,cryptogram:this.parent.new_credential_cryptogram})}.bind(this))}.bind(this))},promise_files_update=function(){this.total=2*this.parent.plain_credential.files.length,this.current=0;for(var i=0;i<this.parent.plain_credential.files.length;i++){var _file=this.parent.plain_credential.files[i];FileService.getFile(_file).then(function(fileData){fileData.filename=EncryptService.decryptString(fileData.filename,this.parent.old_password),fileData.file_data=EncryptService.decryptString(fileData.file_data,this.parent.old_password),this.current++,this.call_progress(new progress_datatype(this.current,this.total,"files")),FileService.updateFile(fileData,this.parent.new_password).then(function(){this.current++,this.call_progress(new progress_datatype(this.current,this.total,"files")),this.current===this.total&&this.call_then("All files has been updated")}.bind(this))}.bind(this))}0===this.parent.plain_credential.files.length&&(this.call_progress(new progress_datatype(0,0,"files")),this.call_then("No files to update"))},promise_revisions_update=function(){service.getRevisions(this.parent.plain_credential.guid).then(function(revisions){this.total=2*revisions.length,this.upload=0,this.current=0,this.revisions=revisions;var revision_workload=function(){if(0===this.revisions.length)return this.call_progress(new progress_datatype(0,0,"revisions")),void this.call_then("No history to update");var _revision=revisions[this.current];_revision.credential_data=service.decryptCredential(_revision.credential_data,this.parent.old_password),_revision.credential_data=service.encryptCredential(_revision.credential_data,this.parent.new_password),this.current++,this.call_progress(new progress_datatype(this.current+this.upload,this.total,"revisions")),service.updateRevision(_revision).then(function(){this.upload++,this.call_progress(new progress_datatype(this.upload+this.current,this.total,"revisions")),this.current+this.upload===this.total&&this.call_then("History updated")}.bind(this)),this.current!==this.total/2&&setTimeout(revision_workload.bind(this),1)};setTimeout(revision_workload.bind(this),1)}.bind(this))},promise_workload=function(){this.old_password=angular.copy(old_password),this.new_password=angular.copy(new_password),this.promises=0;var master_promise=this,password_data=function(){this.old_password=master_promise.old_password,this.new_password=master_promise.new_password,this.plain_credential=master_promise.plain_credential};this.credential_data={},new C_Promise(promise_credential_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(data){console.warn("End credential update"),master_promise.plain_credential=data.plain_text,master_promise.promises++,master_promise.credential_data=data,new C_Promise(promise_files_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(){console.warn("End files update"),master_promise.promises--,0===master_promise.promises&&master_promise.call_then(master_promise.credential_data)}),master_promise.promises++,new C_Promise(promise_revisions_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(){console.warn("End revisions update"),master_promise.promises--,0===master_promise.promises&&master_promise.call_then(master_promise.credential_data)})})};return new C_Promise(promise_workload)}}}])}(),function(){angular.module("passmanApp").service("EncryptService",["VaultService",function(VaultService){var encryption_config={adata:"",iter:1e3,ks:256,mode:"ccm",ts:64};return{encryptString:function(string,_key){_key||(_key=VaultService.getActiveVault().vaultKey);var rp={},ct=sjcl.encrypt(_key,string,encryption_config,rp);return window.btoa(ct)},decryptString:function(ciphertext,_key){_key||(_key=VaultService.getActiveVault().vaultKey),ciphertext=window.atob(ciphertext);var rp={};try{return sjcl.decrypt(_key,ciphertext,encryption_config,rp)}catch(e){throw e}}}}])}(),function(){angular.module("passmanApp").service("FileService",["$http","EncryptService",function($http,EncryptService){return{uploadFile:function(file,key){var queryUrl=OC.generateUrl("apps/passman/api/v2/file"),_file=angular.copy(file);_file.filename=EncryptService.encryptString(_file.filename,key);var data=EncryptService.encryptString(angular.copy(file.data),key);return _file.data=data,$http.post(queryUrl,_file).then(function(response){return response.data?response.data:response})},deleteFile:function(file){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);return $http.delete(queryUrl,_file).then(function(response){return response.data?response.data:response})},getFile:function(file){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);return $http.get(queryUrl,_file).then(function(response){return response.data?"[object Array]"===Object.prototype.toString.call(response.data)?response.data.pop():response.data:response})},updateFile:function(file,key){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);_file.filename=EncryptService.encryptString(_file.filename,key);var data=EncryptService.encryptString(angular.copy(file.file_data),key);return _file.file_data=data,$http.patch(queryUrl,_file).then(function(response){return response.data?response.data:response})},dataURItoBlob:function(dataURI,ftype){var byteString,ab,ia,bb,i;for(byteString=atob(dataURI.split(",")[1]),ab=new ArrayBuffer(byteString.length),ia=new Uint8Array(ab),i=0;i<byteString.length;i++)ia[i]=byteString.charCodeAt(i);return bb=new Blob([ab],{type:ftype}),URL.createObjectURL(bb)}}}])}(),function(){angular.module("passmanApp").service("NotificationService",["$timeout",function($timeout){var to;return{showNotification:function(text,time,closeCallback){var notification=OC.Notification.showHtml(text);return to=$timeout(function(){OC.Notification.hide(notification,closeCallback)},time),notification},hideNotification:function(notification){$timeout.cancel(to),OC.Notification.hide(notification)},hideAll:function(){OC.Notification.hide()}}}])}(),function(){angular.module("passmanApp").service("SettingsService",["localStorageService","$http","$rootScope",function(localStorageService,$http,$rootScope){var settings={defaultVault:null,defaultVaultPass:null};$http.get(OC.generateUrl("apps/passman/api/v2/settings")).then(function(response){response.data&&(settings=angular.merge(settings,response.data),$rootScope.$broadcast("settings_loaded"))});var cookie=localStorageService.get("settings");return settings=angular.merge(settings,cookie),{getSettings:function(){return settings},getSetting:function(name){return settings[name]},setSetting:function(name,value){settings[name]=value,localStorageService.set("settings",settings)},isEnabled:function(name){return 1===settings[name]||"1"===settings[name]}}}])}(),function(){angular.module("passmanApp").service("ShareService",["$http","VaultService","EncryptService","CredentialService",function($http,VaultService,EncryptService,CredentialService){var paranoia_level=10;return sjcl.random.setDefaultParanoia(paranoia_level),sjcl.random.startCollectors(),{search:function(string){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/search");return $http.post(queryUrl,{search:string}).then(function(response){return response.data?response.data:response})},shareWithUser:function(credential,target_user_data){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/share");return $http.post(queryUrl,{item_id:credential.credential_id,item_guid:credential.guid,permissions:target_user_data.accessLevel,vaults:target_user_data.vaults})},getVaultsByUser:function(userId){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/vaults/"+userId);return $http.get(queryUrl,{search:userId}).then(function(response){if(response.data){for(var i=0;i<response.data.length;i++)response.data[i].public_sharing_key=forge.pki.publicKeyFromPem(response.data[i].public_sharing_key);return response.data}return response})},getPendingRequests:function(){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/pending");return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},saveSharingRequest:function(request,crypted_shared_key){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/save");return $http.post(queryUrl,{item_guid:request.item_guid,target_vault_guid:request.target_vault_guid,final_shared_key:crypted_shared_key}).then(function(response){return response.data})},declineSharingRequest:function(request){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/decline/"+request.req_id);return $http.delete(queryUrl).then(function(response){return response.data})},unshareCredential:function(credential){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid);return $http.delete(queryUrl).then(function(response){return response.data})},unshareCredentialFromUser:function(credential,user_id){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/"+user_id);return $http.delete(queryUrl).then(function(response){return response.data})},createPublicSharedCredential:function(shareObj){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/public");return $http.post(queryUrl,shareObj).then(function(response){return response.data})},getPublicSharedCredential:function(credential_guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential_guid+"/public");return $http.get(queryUrl).then(function(response){return response.data?response:response},function(result){return result})},getSharedCredentialACL:function(credential){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/acl");return $http.get(queryUrl).then(function(response){return response.data?response.data:response},function(result){return result})},updateCredentialAcl:function(credential,acl){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/acl");return $http.patch(queryUrl,acl).then(function(response){return response.data})},getCredendialsSharedWithUs:function(vault_guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/vault/"+vault_guid+"/get");return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},downloadSharedFile:function(credential,file){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/file/"+file.guid);return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},encryptSharedCredential:function(credential,sharedKey){var _credential=angular.copy(credential);_credential.shared_key=EncryptService.encryptString(sharedKey);for(var encrypted_fields=CredentialService.getEncryptedFields(),i=0;i<encrypted_fields.length;i++){var field=encrypted_fields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue),sharedKey)}return _credential},decryptSharedCredential:function(credential,sharedKey){for(var _credential=angular.copy(credential),encrypted_fields=CredentialService.getEncryptedFields(),i=0;i<encrypted_fields.length;i++){var field_decrypted_value,field=encrypted_fields[i],fieldValue=angular.copy(_credential[field]);if(_credential.hasOwnProperty(field)){try{field_decrypted_value=EncryptService.decryptString(fieldValue,sharedKey)}catch(e){throw e}try{_credential[field]=JSON.parse(field_decrypted_value)}catch(e){throw console.warn("Field"+field+" in "+_credential.label+" could not be parsed! Value:"+fieldValue),e}}}return _credential},generateRSAKeys:function(key_length){var p=new C_Promise(function(){var state=forge.pki.rsa.createKeyPairGenerationState(key_length,65537),step=function(){forge.pki.rsa.stepKeyPairGenerationState(state,100)?this.call_then(state.keys):(null!==state.p?this.call_progress(50):this.call_progress(0),setTimeout(step.bind(this),1))};setTimeout(step.bind(this),100)});return p},generateSharedKey:function(size){return size=size||20,new C_Promise(function(){var t=this;CRYPTO.PASSWORD.generate(size,function(pass){t.call_then(pass)},function(progress){t.call_progress(progress)})})},rsaKeyPairToPEM:function(keypair){return{publicKey:forge.pki.publicKeyToPem(keypair.publicKey),privateKey:forge.pki.privateKeyToPem(keypair.privateKey)}},getSharingKeys:function(){var vault=VaultService.getActiveVault();return{private_sharing_key:EncryptService.decryptString(angular.copy(vault.private_sharing_key)),public_sharing_key:vault.public_sharing_key}},rsaPrivateKeyFromPEM:function(private_pem){return forge.pki.privateKeyFromPem(private_pem)},rsaPublicKeyFromPEM:function(public_pem){return forge.pki.publicKeyFromPem(public_pem)},cypherRSAStringWithPublicKeyBulkAsync:function(vaults,string){var workload=function(){if(this.current_index<this.vaults.length>0&&this.vaults.length>0){var _vault=angular.copy(this.vaults[this.current_index]);_vault.key=forge.util.encode64(_vault.public_sharing_key.encrypt(this.string)),this.data.push(_vault),this.current_index++,this.call_progress(this.current_index),setTimeout(workload.bind(this),1)}else this.call_then(this.data)};return new C_Promise(function(){this.data=[],this.vaults=vaults,this.string=string,this.current_index=0,setTimeout(workload.bind(this),0)})}}}])}(),function(){angular.module("passmanApp").service("TagService",["$filter",function($filter){var _tags=[];return{getTags:function(){return _tags},searchTag:function(string){return $filter("filter")(_tags,{text:string})},addTags:function(tags){for(var i=0;i<tags.length;i++)tags[i].text&&0===$filter("filter")(_tags,{text:tags[i].text}).length&&_tags.push(tags[i])},resetTags:function(){_tags=[]}}}])}(),function(){angular.module("passmanApp").service("VaultService",["$http",function($http){var _activeVault,_this=this,service={getVaults:function(){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults");return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},setActiveVault:function(vault){_activeVault=angular.copy(vault)},getActiveVault:function(){return _activeVault},getVaultSetting:function(key,default_value){return _activeVault.vault_settings&&void 0!==_activeVault.vault_settings[key]?_activeVault.vault_settings[key]:default_value},setVaultSetting:function(key,value){return!!_activeVault.vault_settings&&(_activeVault.vault_settings[key]=value,void _this.updateVault(_activeVault))},createVault:function(vaultName){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults");return $http.post(queryUrl,{vault_name:vaultName}).then(function(response){return response.data?response.data:response})},getVault:function(vault){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+vault.guid);return $http.get(queryUrl).then(function(response){return response.data?(response.data.vault_settings?response.data.vault_settings=JSON.parse(window.atob(response.data.vault_settings)):response.data.vault_settings={},response.data):response})},updateVault:function(vault){var _vault=angular.copy(vault);delete _vault.defaultVaultPass,delete _vault.defaultVault,delete _vault.vaultKey,_vault.vault_settings=window.btoa(JSON.stringify(_vault.vault_settings));var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+_vault.guid);return $http.patch(queryUrl,_vault).then(function(response){return response.data?response.data:response})},updateSharingKeys:function(vault){var _vault=angular.copy(vault);delete _vault.vaultKey;var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+_vault.guid+"/sharing-keys");return $http.post(queryUrl,_vault).then(function(response){return response.data?response.data:response})},deleteVault:function(vault){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+vault.guid);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})}};return service}])}(),function(){angular.module("passmanApp").factory("SharingACL",function(){function ACL(acl_permission){this.permission=acl_permission}return ACL.prototype.permissions={READ:1,WRITE:2,FILES:4,HISTORY:8,OWNER:128},ACL.prototype.hasPermission=function(permission){return permission===(this.permission&permission)},ACL.prototype.addPermission=function(permission){this.permission=this.permission|permission},ACL.prototype.removePermission=function(permission){this.permission=this.permission&~permission},ACL.prototype.togglePermission=function(permission){this.permission^=permission},ACL.prototype.getAccessLevel=function(){return this.permission},ACL})}(),function(){angular.module("passmanApp").directive("autoScroll",function(){return{restrict:"A",scope:{autoScroll:"="},link:function(scope,el){scope.$watch("autoScroll",function(){$(el).scrollTop($(el)[0].scrollHeight)},!0)}}})}(),function(){angular.module("passmanApp").directive("clearBtn",["$parse",function($parse){return{link:function(scope,elm,attr){elm.wrap("<div style='position: relative'></div>");var btn="<span id="+Math.round(1e9*Math.random())+' class="searchclear ng-hide fa fa-times-circle-o"></span>',angularBtn=angular.element(btn);elm.after(angularBtn),angularBtn.on("click",function(){elm.val("").trigger("change"),$parse(attr.ngModel).assign(scope,""),scope.$apply()}),elm.bind("focus keyup change paste propertychange",function(){elm.val()&&elm.val().length>0?angularBtn.removeClass("ng-hide"):angularBtn.addClass("ng-hide")})}}}])}(),function(){angular.module("passmanApp").directive("clickDisable",function(){return function(scope,element){element.bind("click",function(){element.prepend('<i class="fa fa-spin fa-spinner"></i>&nbsp;'),element.attr("disabled","disabled")})}})}(),function(){angular.module("passmanApp").directive("selectOnClick",["$window",function($window){return{restrict:"A",link:function(scope,element){element.on("click",function(){$window.getSelection().toString()||this.setSelectionRange(0,this.value.length)})}}}])}(),function(){angular.module("passmanApp").directive("colorFromString",[function(){return{restrict:"A",scope:{string:"=colorFromString"},link:function(scope,el){function genColor(str){for(var hash=0,i=0;i<str.length;i++)hash=str.charCodeAt(i)+((hash<<5)-hash);var c=(16777215&hash).toString(16).toUpperCase();return"#"+"00000".substring(0,6-c.length)+c}scope.$watch("string",function(){jQuery(el).css("border-color",genColor(scope.string))})}}}])}(),function(){angular.module("passmanApp").directive("credentialCounter",[function(){return{template:'<div ng-show="counter" translate="number.filtered" translate-values="{number_filtered: counter, credential_number: total}"></div>',replace:!1,restrict:"A",scope:{filteredCredentials:"=credentialCounter",deleteTime:"=",vault:"=",filters:"="},link:function(scope){function countCredentials(){var countedCredentials=0,total=0;scope.vault&&scope.vault.hasOwnProperty("credentials")&&(angular.forEach(scope.vault.credentials,function(credential){var pos=scope.filteredCredentials.map(function(c){return c.guid}).indexOf(credential.guid);0===scope.deleteTime&&0===credential.hidden&&0===credential.delete_time&&(total+=1,countedCredentials=pos!==-1?countedCredentials+1:countedCredentials),scope.deleteTime>0&&0===credential.hidden&&credential.delete_time>0&&(total+=1,countedCredentials=pos!==-1?countedCredentials+1:countedCredentials)}),scope.counter=countedCredentials,scope.total=total)}scope.$watch("[filteredCredentials, deleteTime, filters]",function(){countCredentials()},!0)}}}])}(),function(){angular.module("passmanApp").directive("credentialField",["$timeout","$translate",function($timeout,$translate){return{scope:{value:"=value",secret:"=secret",inputField:"=useInput",inputFieldplaceholder:"=inputPlaceholder"},restrict:"A",replace:"true",template:'<span class="credential_field"><div class="value" ng-class="{\'ellipsis\': isLink}"><span ng-if="secret"><span ng-repeat="n in [] | range:value.length" ng-if="!valueVisible">*</span></span><span ng-if="valueVisible && !inputField" ng-bind-html="value"></span><span ng-if="valueVisible && inputField"><input type="text" ng-model="value" select-on-click placeholder="{{ inputFieldplaceholder }}!"</span></div><div class="tools"><div class="cell" ng-if="toggle" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': !valueVisible, \'fa-eye-slash\': valueVisible }"></i></div><div class="cell" ng-if="isLink"><a ng-href="{{value}}" target="_blank" rel="nofollow noopener noreferrer"><i tooltip="\'Open in new window\'" class="link fa fa-external-link"></i></a></div><div class="cell" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{value}}"><i tooltip="copy_msg" class="fa fa-clipboard"></i></div></div></span>',link:function(scope){var expression=/(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/gi,regex=new RegExp(expression);$translate(["toggle.visibility","copy","copied"]).then(function(translations){scope.tggltxt=translations["toggle.visibility"],scope.copy_msg=translations["copy.field"]}),scope.$watch("value",function(){scope.value&&(scope.secret&&(scope.valueVisible=!1),regex.test(scope.value)&&(scope.isLink=!0,"http"!==scope.value.substr(0,4)&&(scope.value="http://"+scope.value)))}),scope.toggle||scope.secret&&(scope.toggle=!0);var timer;scope.onSuccess=function(){scope.copy_msg=$translate.instant("copied"),$timeout.cancel(timer),timer=$timeout(function(){scope.copy_msg=$translate.instant("copy")},5e3)},scope.valueVisible=!0,scope.toggleVisibility=function(){scope.valueVisible=!scope.valueVisible}}}}])}(),function(){angular.module("passmanApp").directive("credentialTemplate",["EncryptService","$translate","FileService","ShareService","NotificationService","CredentialService",function(EncryptService,$translate,FileService,ShareService,NotificationService,CredentialService){return{templateUrl:"views/partials/credential_template.html",replace:!0,restrict:"A",scope:{credential:"=credentialTemplate"},link:function(scope,element,attrs){scope.downloadFile=function(credential,file){var callback=function(result){var key=CredentialService.getSharedKeyFromCredential(credential);if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);var file_data=EncryptService.decryptString(result.file_data,key);download(file_data,escapeHTML(file.filename),file.mimetype)};credential.hasOwnProperty("acl")?ShareService.downloadSharedFile(credential,file).then(callback):FileService.getFile(file).then(callback)},scope.showLabel=attrs.hasOwnProperty("showLabel")}}}])}(),function(){angular.module("passmanApp").directive("fileSelect",["$window",function($window){return{restrict:"A",scope:{success:"&success",error:"&error",progress:"&progress"},link:function(scope,el){scope.success=scope.success(),scope.error=scope.error(),scope.progress=scope.progress();var _currentFile,fileReader=new $window.FileReader;fileReader.onload=function(){_currentFile.data=fileReader.result,scope.success(_currentFile)},fileReader.onprogress=function(event){var percent=event.loaded/event.total*100;scope.progress&&scope.$apply(scope.progress({file_total:event.total,file_loaded:event.loaded,file_percent:percent}))},fileReader.onerror=function(){scope.error()},el.bind("change",function(e){var i,_queueTotalFileSize=0;for(i=0;i<e.target.files.length;i++)_queueTotalFileSize+=e.target.files[i].size;for(i=0;i<e.target.files.length;i++){_currentFile=e.target.files[i];var mb_limit=5;_currentFile.size>1024*mb_limit*1024&&scope.error("TO_BIG",_currentFile),fileReader.readAsDataURL(_currentFile)}})}}}])}(),function(){angular.module("passmanApp").directive("ngEnter",function(){return function(scope,element,attrs){element.bind("keydown keypress",function(event){13===event.which&&(scope.$apply(function(){scope.$eval(attrs.ngEnter)}),event.preventDefault())})}})}(),function(){angular.module("passmanApp").directive("otpGenerator",["$compile","$timeout",function($compile,$timeout){function dec2hex(s){return(s<15.5?"0":"")+Math.round(s).toString(16)}function hex2dec(s){return parseInt(s,16)}function base32tohex(base32){if(base32){var i,base32chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bits="",hex="";for(i=0;i<base32.length;i++){var val=base32chars.indexOf(base32.charAt(i).toUpperCase());bits+=leftpad(val.toString(2),5,"0")}for(i=0;i+4<=bits.length;i+=4){var chunk=bits.substr(i,4);hex+=parseInt(chunk,2).toString(16)}return hex}}function leftpad(str,len,pad){return len+1>=str.length&&(str=Array(len+1-str.length).join(pad)+str),str}return{restrict:"A",template:'<span class="otp_generator"><span credential-field value="otp" secret="\'true\'"></span> <span ng-bind="timeleft"></span></span>',transclude:!1,scope:{secret:"="},replace:!0,link:function(scope){scope.otp=null,scope.timeleft=null,scope.timer=null;var updateOtp=function(){if(scope.secret){var key=base32tohex(scope.secret),epoch=Math.round((new Date).getTime()/1e3),time=leftpad(dec2hex(Math.floor(epoch/30)),16,"0"),hmacObj=new jsSHA(time,"HEX"),hmac=hmacObj.getHMAC(key,"HEX","SHA-1","HEX"),offset=hex2dec(hmac.substring(hmac.length-1)),otp=(hex2dec(hmac.substr(2*offset,8))&hex2dec("7fffffff"))+"";otp=otp.substr(otp.length-6,6),scope.otp=otp}},timer=function(){var epoch=Math.round((new Date).getTime()/1e3),countDown=30-epoch%30;epoch%30===0&&updateOtp(),scope.timeleft=countDown,scope.timer=$timeout(timer,1e3)};scope.$watch("secret",function(n){n?($timeout.cancel(scope.timer),updateOtp(),timer()):$timeout.cancel(scope.timer)},!0),scope.$on("$destroy",function(){$timeout.cancel(scope.timer)})}}}])}(),function(){angular.module("passmanApp").directive("passwordGen",function($timeout,$translate){function Arcfour(){this.j=this.i=0,this.S=[]}function ARC4init(r){var t,n,e;for(t=0;256>t;++t)this.S[t]=t;for(t=n=0;256>t;++t)n=n+this.S[t]+r[t%r.length]&255,e=this.S[t],this.S[t]=this.S[n],this.S[n]=e;this.j=this.i=0}function ARC4next(){var r;return this.i=this.i+1&255,this.j=this.j+this.S[this.i]&255,r=this.S[this.i],this.S[this.i]=this.S[this.j],this.S[this.j]=r,this.S[r+this.S[this.i]&255]}function prng_newstate(){return new Arcfour}function generatePassword(r,t,n,e,o,i,p,g){var _,a,s,f,d,h,u,l,c,v,w,y,m;if(void 0===r&&(r=8+get_random(0,1)),r>256&&(r=256,document.getElementById("length").value=256),i>256&&(i=256),void 0===t&&(t=!0),void 0===n&&(n=!0),void 0===e&&(e=!0),void 0===o&&(o=!1),void 0===i&&(i=0),void 0===p&&(p=!1),void 0===g&&(g=!0),_=0,a=0,s=0,g&&(_=a=s=1),f=[],n&&_>0)for(d=0;_>d;d++)f[f.length]="L";if(t&&a>0)for(d=0;a>d;d++)f[f.length]="U";if(e&&i>0)for(d=0;i>d;d++)f[f.length]="D";if(o&&s>0)for(d=0;s>d;d++)f[f.length]="S";for(;f.length<r;)f[f.length]="A";for(f.sort(function(){return 2*get_random(0,1)-1}),h="",u="abcdefghjkmnpqrstuvwxyz",p||(u+="ilo"),n&&(h+=u),l="ABCDEFGHJKMNPQRSTUVWXYZ",p||(l+="ILO"),t&&(h+=l),c="23456789",p||(c+="10"),e&&(h+=c),v="!@#$%^&*",o&&(h+=v),w="",y=0;r>y;y++){switch(f[y]){case"L":m=u;break;case"U":m=l;break;case"D":m=c;break;case"S":m=v;break;case"A":m=h}d=get_random(0,m.length-1),
-w+=m.charAt(d)}return w}function rng_seed_int(r){rng_pool[rng_pptr++]^=255&r,rng_pool[rng_pptr++]^=r>>8&255,rng_pool[rng_pptr++]^=r>>16&255,rng_pool[rng_pptr++]^=r>>24&255,rng_pptr>=rng_psize&&(rng_pptr-=rng_psize)}function rng_seed_time(){rng_seed_int((new Date).getTime())}function rng_get_byte(){if(null==rng_state){for(rng_seed_time(),rng_state=prng_newstate(),rng_state.init(rng_pool),rng_pptr=0;rng_pptr<rng_pool.length;++rng_pptr)rng_pool[rng_pptr]=0;rng_pptr=0}return rng_state.next()}function rng_get_bytes(r){var t;for(t=0;t<r.length;++t)r[t]=rng_get_byte()}function SecureRandom(){}function get_random(r,t){var n,e,o,i=t-r+1;for(rng_seed_time(),n=[],e=0;4>e;e++)n[e]=0;for(rng_get_bytes(n),o=0,e=0;4>e;e++)o*=256,o+=n[e];return o%=i,o+=r}var rng_psize,rng_state,rng_pool,rng_pptr,t,z,crypt_obj,num,buf,i;if(Arcfour.prototype.init=ARC4init,Arcfour.prototype.next=ARC4next,rng_psize=256,null==rng_pool){if(rng_pool=[],rng_pptr=0,"undefined"!=typeof navigator&&"Netscape"==navigator.appName&&navigator.appVersion<"5"&&"undefined"!=typeof window&&window.crypto)for(z=window.crypto.random(32),t=0;t<z.length;++t)rng_pool[rng_pptr++]=255&z.charCodeAt(t);try{if(crypt_obj=null,"undefined"!=typeof window&&void 0!==window.crypto?crypt_obj=window.crypto:"undefined"!=typeof window&&void 0!==window.msCrypto&&(crypt_obj=window.msCrypto),void 0!==crypt_obj&&"function"==typeof crypt_obj.getRandomValues&&rng_psize>rng_pptr)for(num=Math.floor((rng_psize-rng_pptr)/2)+1,buf=new Uint16Array(num),crypt_obj.getRandomValues(buf),i=0;i<buf.length;i++)t=buf[i],rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t}catch(e){}for(;rng_psize>rng_pptr;)t=Math.floor(65536*sjcl.random.randomWords(1)),rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t;rng_pptr=0,rng_seed_time()}return SecureRandom.prototype.nextBytes=rng_get_bytes,{scope:{model:"=ngModel",length:"@",placeholder:"@",settings:"=settings",callback:"&callback"},restrict:"E",replace:"true",template:'<div class=" pw-gen "><div class="input-group "><input ng-show="!passwordVisible" type="password" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><input ng-show="passwordVisible" type="text" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><span class="generate_pw"><div class="cell" tooltip="gen_msg" ng-click="generatePasswordStart()"><i class="fa fa-refresh"></i></div><div class="cell" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': passwordVisible, \'fa-eye-slash\': !passwordVisible }"></i></div><div class="cell" tooltip="\'Copy password to clipboard\'"><i class="fa fa-clipboard" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{password}}"></i></div></button></div></div>',link:function(scope){scope.callback=scope.callback(),scope.$watch("model",function(){scope.password=scope.model}),scope.passwordVisible=!1,scope.toggleVisibility=function(){scope.passwordVisible=!scope.passwordVisible},scope.passwordNotNull=!1,scope.$watch("settings",function(){scope.settings&&!scope.password&&scope.settings.generateOnCreate&&scope.generatePasswordStart()}),$translate(["password.gen","password.copy","copied","toggle.visibility"]).then(function(translations){scope.tggltxt=translations["toggle.visibility"],scope.copy_msg=translations["password.copy"],scope.gen_msg=translations["password.gen"]}),scope.$watch("password",function(){scope.model=scope.password,scope.password_repeat=scope.model}),scope.onSuccess=function(e){OC.Notification.showTemporary($translate.instant("password.copied")),e.clearSelection()},scope.onError=function(){OC.Notification.showTemporary("Press Ctrl+C to copy!")},scope.progressDivShow=!1,scope.generatePasswordStart=function(){scope.progressDivShow=!0,scope.progressValue=0,scope.progressWidth={width:scope.progressValue+"%"},scope.generatePasswordProgress()},scope.generatePasswordProgress=function(){$timeout(function(){scope.progressValue<100?(scope.password=scope._generatePassword(scope.settings),scope.progressValue+=10,scope.progressWidth={width:scope.progressValue+"%"},scope.disabled=!0,scope.generatePasswordProgress()):(scope.disabled=!1,scope.callback&&scope.callback(scope.password))},10)},scope._generatePassword=function(settings){var _settings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0};settings=angular.merge(_settings,settings);var password=generatePassword(settings.length,settings.useUppercase,settings.useLowercase,settings.useDigits,settings.useSpecialChars,settings.minimumDigitCount,settings.avoidAmbiguousCharacters,settings.requireEveryCharType);return password}}}})}(),function(){angular.module("passmanApp").directive("progressBar",["$translate",function($translate){return{restrict:"A",template:'<div class="progress"><div class="progress-bar" role="progressbar" aria-valuenow="{{progress}}"aria-valuemin="0" aria-valuemax="100" style="width:{{progress}}%;" use-theme><span class="sr-only">{{progress}}% {{completed_text}}</span><span ng-if="index && total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{index}} / {{total}}</span><span ng-if="!index && !total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{progress}}%</span></div></div>',scope:{progress:"=progressBar",index:"=index",total:"=total"},link:function(scope){$translate(["complete"]).then(function(translations){scope.completed_text=translations.complete})}}}])}(),function(){angular.module("passmanApp").directive("qrread",["$parse",function($parse){return{scope:!0,link:function(scope,element,attributes){var invoker=$parse(attributes.onRead);scope.imageData=null,qrcode.callback=function(result){invoker(scope,{qrdata:{qrData:result,image:scope.imageData}})},element.bind("change",function(changeEvent){var reader=new FileReader,file=changeEvent.target.files[0];reader.readAsDataURL(file),reader.onload=function(){return function(e){scope.imageData=e.target.result,qrcode.decode(e.target.result)}}(file)})}}}])}(),function(){angular.module("passmanApp").directive("tooltip",[function(){return{restrict:"A",scope:{tooltip:"=tooltip"},link:function(scope,el){scope.$watch("tooltip",function(){scope.tooltip&&(jQuery(el).attr("title",scope.tooltip),jQuery(el).tooltip(),jQuery(el).attr("title",scope.tooltip).tooltip("fixTitle"),jQuery(".tooltip-inner").text(scope.tooltip),jQuery(el).is(":visible"))})}}}])}(),function(){angular.module("passmanApp").directive("useTheme",[function(){function invertColor(hexTripletColor){var color=hexTripletColor;return color=color.substring(1),color=parseInt(color,16),color^=16777215,color=color.toString(16),color=("000000"+color).slice(-6),color="#"+color}return{restrict:"A",scope:{type:"=type",color:"=",negative:"="},link:function(scope,el){var _color=jQuery("#header").css("background-color"),_bg=_color;scope.negative&&(_bg=invertColor(_bg)),scope.type?jQuery(el).css(scope.type,_bg):jQuery(el).css("background-color",_bg),scope.color&&jQuery(el).css("color",invertColor(_color))}}}])}();var PassmanImporter={};!function(window,$,PassmanImporter){PassmanImporter.parseRow_=function(row){row=row.trim();var isQuoted=!1;return'"'===row.charAt(0)&&(row=row.substring(1),isQuoted=!0),'"'===row.charAt(row.length-2)&&(row=row.substring(0,row.length-2),isQuoted=!0),row=isQuoted===!0?row.split('","'):row.split(",")},PassmanImporter.htmlDecode=function(input){var e=document.createElement("div");return e.innerHTML=input,e.childNodes[0].nodeValue},PassmanImporter.toObject_=function(headings,row){for(var result={},i=0,ii=row.length;i<ii;i++)headings[i]?(headings[i]=headings[i].replace(",","_").toLowerCase().replace(" ","_").replace("(","").replace(")","").replace('"',""),result[headings[i]]=row[i]):result[ii]=row[i];return result},PassmanImporter.join_=function(arr,sep){for(var parts=[],i=0,ii=arr.length;i<ii;i++)arr[i]&&parts.push(arr[i]);return parts.join(sep)},PassmanImporter.newCredential=function(){var credential={credential_id:null,guid:null,vault_id:null,label:null,description:null,created:null,changed:null,tags:[],email:null,username:null,password:null,url:null,favicon:null,renew_interval:null,expire_time:0,delete_time:0,files:[],custom_fields:[],otp:{},hidden:!1};return credential},PassmanImporter.readCsv=function(csv,hasHeadings){hasHeadings=void 0===hasHeadings||hasHeadings;var lines=[];return Papa.parse(csv,{complete:function(results){if(results.data)for(var headings=hasHeadings?results.data[0]:null,start=hasHeadings?1:0,i=start;i<results.data.length;i++){var _row=hasHeadings?PassmanImporter.toObject_(headings,results.data[i]):results.data[i];lines.push(_row)}}}),lines},PassmanImporter.readJson=function(string){return JSON.parse(string)}}(window,$,PassmanImporter),String.prototype.replaceAll=function(search,replacement){var target=this;return target.replace(new RegExp(search,"g"),replacement)},Array.prototype.clean=function(deleteValue){for(var i=0;i<this.length;i++)this[i]===deleteValue&&(this.splice(i,1),i--);return this};var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.clippers={info:{name:"Clipperz.is",id:"clippers",exportSteps:["Go to menu -> Export -> Download HTML + JSON. Fields will be imported as custom fields."]}},PassmanImporter.clippers.readFile=function(file_data){return new C_Promise(function(){var credential_list=[],re=/<textarea>(.*?)<\/textarea>/gi,matches=re.exec(file_data);if(matches){var raw_json=matches[0].substring(10);raw_json=PassmanImporter.htmlDecode(raw_json.slice(0,-11));for(var json_objects=PassmanImporter.readJson(raw_json),i=0;i<json_objects.length;i++){var card=json_objects[i];re=/(\w+)/gi;var tags=card.label.match(re);card.label=card.label.replace(tags.join(" "),"").trim(),tags=tags.map(function(item){return{text:item.replace("","")}});var _credential=PassmanImporter.newCredential();_credential.label=card.label,_credential.description=card.data.notes,_credential.tags=tags;for(var field in card.currentVersion.fields){var field_data=card.currentVersion.fields[field];_credential.custom_fields.push({label:field_data.label,value:field_data.value,secret:field_data.hidden===!0})}_credential.label&&credential_list.push(_credential);var progress={percent:i/json_objects.length*100,loaded:i,total:json_objects.length};this.call_progress(progress)}}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.dashLaneCsv={info:{name:"Dashlane 4 csv",id:"dashLaneCsv",exportSteps:["Create an csv export. Go to File -> export -> Unsecured archive (readable) in CSV format"]}},PassmanImporter.dashLaneCsv.readFile=function(file_data){return new C_Promise(function(){for(var rows=file_data.split("\n"),credential_list=[],i=0;i<rows.length;i++){var row=rows[i],row_data=row.split('","');'"'===row_data[0].charAt(0)&&(row_data[0]=row_data[0].substring(1)),'"'===row_data[row_data.length-1].toString().charAt(row_data[row_data.length-1].length-1)&&(row_data[row_data.length-1]=row_data[row_data.length-1].substring(0,row_data[row_data.length-1].length-1));var _credential=PassmanImporter.newCredential();_credential.label=row_data[0],_credential.username=row_data[2],_credential.password=row_data[row_data.length-2],_credential.url=row_data[0],_credential.description=row_data[row_data.length-1],_credential.label&&credential_list.push(_credential);var progress={percent:i/rows.length*100,loaded:i,total:rows.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){function parseEnpass(fileData){var lastProperty,matches,loginBlocks,property;loginBlocks=fileData.replaceAll("Title :","<~passman~>\nTitle :").split("<~passman~>\n").clean("");for(var regex=/(.*) : (.*)/,results=[],l=0;l<loginBlocks.length;l++){for(var loginBlock=loginBlocks[l],lrow=loginBlock.split("\n"),result={},r=0;r<lrow.length;r++){var row=lrow[r];matches=regex.exec(row),matches?(property=matches[1],result[property]=matches[2]):lastProperty&&(result[lastProperty]+="\n"+row),property&&(lastProperty=property)}results.push(result)}return results}PassmanImporter.EnPassTXT={info:{name:"EnPass text file",id:"EnPassTXT",exportSteps:['Access your Enpass Database. Select "File" > "Export" > "As Text"']}},PassmanImporter.EnPassTXT.readFile=function(file_data){var mapper={Title:"label",Username:"username",Password:"password",Email:"email",Url:"url",Note:"description"},secret_fields=["cvc","pin","security answer"];return new C_Promise(function(){for(var credential_list=[],credentials=parseEnpass(file_data),i=0;i<credentials.length;i++){var enpass_credential=credentials[i],new_credential=PassmanImporter.newCredential();for(var key in enpass_credential)if(enpass_credential.hasOwnProperty(key))if(mapper.hasOwnProperty(key)){var prop=mapper[key];new_credential[prop]=enpass_credential[key]}else if("TOTP"!==key){var isSecret=secret_fields.indexOf(key.toLowerCase())!==-1?1:0;new_credential.custom_fields.push({label:key,value:enpass_credential[key],secret:isSecret})}enpass_credential.hasOwnProperty("TOTP")&&(new_credential.otp.secret=enpass_credential.TOTP);var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};credential_list.push(new_credential),this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.keepassCsv={info:{name:"KeePass csv",id:"keepassCsv",exportSteps:["Create an csv export with the following options enabled: http://i.imgur.com/CaeTA4d.png"]}},PassmanImporter.keepassCsv.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.account,_credential.username=row.login_name,_credential.password=row.password,_credential.url=row.web_site,row.hasOwnProperty("expires")&&(row.expires=row.expires.replace('"',""),_credential.expire_time=new Date(row.expires).getTime()/1e3);var tags=row.group?[{text:row.group}]:[];if(row.hasOwnProperty("group_tree"))for(var exploded_tree=row.group_tree.split("\\\\"),t=0;t<exploded_tree.length;t++)exploded_tree[t].trim().length>0&&tags.push({text:exploded_tree[t].trim()});_credential.tags=tags,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.lastpassCsv={info:{name:"LastPass csv",id:"lastpassCsv",exportSteps:["Create an csv export. Go to More options -> Advanced -> Export -> Last Pass CSV File"]}},PassmanImporter.lastpassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=PassmanImporter.htmlDecode(row.name),_credential.username=row.username,_credential.password=row.password,_credential.url=row.url,_credential.tags=row.grouping?[{text:row.grouping}]:[],_credential.description=row.extra,_credential.label&&"undefined"!==_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){var steps=["Backups for the Passwords app need to be enabled on the Admin panel (they are disabled by default).","On the Passwords App, in the bottom left corner, press Settings",'Press "Download Backup"',"Confirm the export and save the file"];PassmanImporter.passwordsApp={info:{name:"Passwords App csv",id:"passwordsApp",exportSteps:steps}},PassmanImporter.passwordsApp.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.website+" - "+row.username,_credential.username=row.username,_credential.password=row.password,_credential.url=row.fulladdress,_credential.description=row.notes,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passmanJson={info:{name:"Passman JSON",id:"passmanJson",exportSteps:["Export the item in passman as passman json, with all fields enabled"]}},PassmanImporter.passmanJson.readFile=function(file_data){return new C_Promise(function(){for(var parsed_json=PassmanImporter.readJson(file_data),credential_list=[],i=0;i<parsed_json.length;i++){var item=parsed_json[i],_credential=PassmanImporter.newCredential();if(_credential.label=item.label,_credential.username=item.account,_credential.password=item.password,_credential.email=item.email,_credential.url=item.url,_credential.tags=item.tags,_credential.description=item.description,item.hasOwnProperty("customFields")&&item.customFields.length>0)for(var cf=0;cf<item.customFields.length;cf++)_credential.custom_fields.push({label:item.customFields[cf].label,value:item.customFields[cf].value,secret:"1"===item.customFields[cf].clicktoshow});item.hasOwnProperty("otpsecret")&&item.otpsecret&&(_credential.otp={issuer:item.otpsecret.issuer,label:item.otpsecret.label,qr_uri:{image:item.otpsecret.qrCode,qrData:""},secret:item.otpsecret.secret,type:item.otpsecret.type}),_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_json.length*100,loaded:i,total:parsed_json.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passpackCsv={info:{name:"Passpack csv",id:"passpackCsv",exportSteps:["Go to Tools -> Export. Select Comma Separated Values, All entries then continue."]}},PassmanImporter.passpackCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[0],_credential.username=row[1],_credential.password=row[2],_credential.url=row[3];var tags=row[4].split(" ");tags.length>0&&(_credential.tags=tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item})),_credential.description=row[5],_credential.email=row[6],_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.randomData={info:{name:"Random data",id:"randomData",exportSteps:["Create's 50 random credentials for testing purposes."]}},PassmanImporter.randomData.readFile=function(){return new C_Promise(function(){var label,tags=["Social media","Hosting","Forums","Webshops","FTP","SSH","Banking","Applications","Server stuff","mysql","Wifi","Games","Certificate","Serials"],credential_list=[],_this=this,generateCredential=function(max,i,callback){if(jQuery){var url=OC.generateUrl("apps/passman/api/internal/generate_person");$.ajax({url:url,dataType:"json",success:function(data){if(data){var _credential=PassmanImporter.newCredential();label=Math.random()>=.5?data.domain:data.email_d+" - "+data.email_u,_credential.label=label,_credential.username=data.username,_credential.password=data.password,_credential.url=data.url;for(var tag_amount=Math.floor(5*Math.random()),ta=0,_tags=[];ta<tag_amount;){var item=tags[Math.floor(Math.random()*tags.length)];_tags.indexOf(item)===-1&&(_tags.push(item),ta++)}if(_credential.tags=_tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item}),credential_list.push(_credential),i<max){var progress={percent:i/max*100,loaded:i,total:max};_this.call_progress(progress),generateCredential(max,i+1,callback)}else callback(credential_list)}else generateCredential(max,i,callback)}})}};generateCredential(50,1,function(credential_list){_this.call_then(credential_list)})})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.teamPassCsv={info:{name:"TeamPass csv",id:"teamPassCsv",exportSteps:["Go to Tools -> Export. Select Comma Separated Values, All entries then continue."]}},PassmanImporter.teamPassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[1],_credential.description=row[2],_credential.password=row[3],_credential.username=row[4];var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};credential_list.push(_credential),this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};if(function(window,$,PassmanImporter){PassmanImporter.zohoCsv={info:{name:"ZOHO csv",id:"zohoCsv",exportSteps:['Create an csv export. Go to Tools -> Export secrets -> Select "General CSV" and click "Export Secrets"']}},PassmanImporter.zohoCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();if(_credential.label=row.secret_name,_credential.url=row.secret_url,_credential.description=row.notes,row.hasOwnProperty("secretdata"))for(var rows=row.secretdata.split("\n"),r=0;r<rows.length;r++){var cells=rows[r].split(":"),key=cells[0],value=cells.slice(1).join(":");key&&value&&_credential.custom_fields.push({label:key,value:value,secret:!1})}""!==_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter),!window.PassmanExporter)var PassmanExporter={};PassmanExporter.csv={info:{name:"CSV",id:"csv",description:"Export credentials as csv."}},PassmanExporter.csv.export=function(credentials){return new C_Promise(function(){for(var _this=this,headers=["label","username","password","email","description","tags","url"],file_data='"'+headers.join('","')+'"\n',i=0;i<credentials.length;i++){for(var _credential=credentials[i],row_data=[],h=0;h<headers.length;h++){var field=headers[h];if("tags"===field){for(var _tags=[],t=0;t<_credential[field].length;t++)_tags.push(_credential[field][t].text);var data="["+_tags.join(",")+"]";row_data.push('"'+data+'"')}else row_data.push('"'+_credential[field]+'"')}var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};_this.call_progress(progress),file_data+=row_data.join(",")+"\n"}_this.call_then(),download(file_data,"passman-export.csv")})},function(){angular.module("passmanApp").controller("BookmarkletCtrl",["$scope","$rootScope","$location","VaultService","CredentialService","SettingsService","NotificationService","EncryptService","TagService","FileService","ShareService","$translate",function($scope,$rootScope,$location,VaultService,CredentialService,SettingsService,NotificationService,EncryptService,TagService,FileService,ShareService,$translate){if($scope.active_vault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&($scope.using_http=!0),$scope.logout=function(){$scope.active_vault=!1},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));VaultService.getVault(_vault).then(function(vault){vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})})}VaultService.getVaults().then(function(vaults){$scope.vaults=vaults}),$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.list_selected_vault=!1,$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials,$scope.active_vault=_vault};$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){$scope.error=$translate.instant("invalid.vault.key")}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})},$scope.storedCredential=CredentialService.newCredential();var QueryString=function(){for(var query_string={},query=window.location.search.substring(1),vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");if("undefined"==typeof query_string[pair[0]])query_string[pair[0]]=decodeURIComponent(pair[1]);else if("string"==typeof query_string[pair[0]]){var arr=[query_string[pair[0]],decodeURIComponent(pair[1])];query_string[pair[0]]=arr}else query_string[pair[0]].push(decodeURIComponent(pair[1]))}return query_string}(),query_string=QueryString;$scope.storedCredential.label=query_string.title,$scope.storedCredential.url=query_string.url,$scope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret=angular.copy("password"===$scope.selected_field_type),_field.field_type=angular.copy($scope.selected_field_type),"file"===_field.field_type){var _file=$scope.new_custom_field.value;FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){return error},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier);
-},$scope.parseQR=function(QRCode){var parsedQR,qrInfo,re=/otpauth:\/\/(totp|hotp)\/(.*)\?(secret|issuer)=(.*)&(issuer|secret)=(.*)/;qrInfo=[],parsedQR=QRCode.qrData.match(re),parsedQR&&(qrInfo={type:parsedQR[1],label:decodeURIComponent(parsedQR[2]),qr_uri:QRCode}),qrInfo[parsedQR[3]]=parsedQR[4],qrInfo[parsedQR[5]]=parsedQR[6],$scope.storedCredential.otp=qrInfo,$scope.$digest()},$scope.saveCredential=function(){delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id||($scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){NotificationService.showNotification($translate.instant("credential.created"),5e3)}))}}])}(),function(){angular.module("passmanApp").controller("CredentialCtrl",["$scope","VaultService","SettingsService","$location","CredentialService","$rootScope","FileService","EncryptService","TagService","$timeout","NotificationService","CacheService","ShareService","SharingACL","$interval","$filter","$routeParams","$sce","$translate",function($scope,VaultService,SettingsService,$location,CredentialService,$rootScope,FileService,EncryptService,TagService,$timeout,NotificationService,CacheService,ShareService,SharingACL,$interval,$filter,$routeParams,$sce,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");$scope.show_spinner=!0;var fetchCredentials=function(){VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){var vaultKey=angular.copy($scope.active_vault.vaultKey),_credentials=angular.copy(vault.credentials);vault.credentials=[],$scope.active_vault=vault,$scope.active_vault.vaultKey=vaultKey,VaultService.setActiveVault($scope.active_vault);for(var i=0;i<_credentials.length;i++){var _credential=_credentials[i];try{if(_credential.shared_key){var enc_key=EncryptService.decryptString(_credential.shared_key);_credential=ShareService.decryptSharedCredential(angular.copy(_credential),enc_key)}else _credential=CredentialService.decryptCredential(angular.copy(_credential));_credential.tags_raw=_credential.tags}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3)}_credentials[i]=_credential}ShareService.getCredendialsSharedWithUs(vault.guid).then(function(shared_credentials){for(var c=0;c<shared_credentials.length;c++){var _shared_credential_data,_shared_credential=shared_credentials[c],decrypted_key=EncryptService.decryptString(_shared_credential.shared_key);try{_shared_credential_data=ShareService.decryptSharedCredential(_shared_credential.credential_data,decrypted_key)}catch(e){}_shared_credential_data&&(delete _shared_credential.credential_data,_shared_credential_data.acl=_shared_credential,_shared_credential_data.acl.permissions=new SharingACL(_shared_credential_data.acl.permissions),_shared_credential_data.tags_raw=_shared_credential_data.tags,_credentials.push(_shared_credential_data))}if(angular.merge($scope.active_vault.credentials,_credentials),$scope.show_spinner=!1,$rootScope.$broadcast("credentials_loaded"),!vault.private_sharing_key){var key_size=1024;ShareService.generateRSAKeys(key_size).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.active_vault.private_sharing_key=pem.privateKey,$scope.active_vault.public_sharing_key=pem.publicKey,$scope.$digest(),VaultService.updateSharingKeys($scope.active_vault)})}})})},getPendingShareRequests=function(){ShareService.getPendingRequests().then(function(shareRequests){shareRequests.length>0&&($scope.incoming_share_requests=shareRequests,jQuery(".share_popup").dialog({width:600,position:["center",90]}))})},refresh_data_interval=null;$scope.active_vault&&($scope.$parent.selectedVault=!0,fetchCredentials(),getPendingShareRequests(),refresh_data_interval=$interval(function(){fetchCredentials(),getPendingShareRequests()},3e5)),$scope.$on("$destroy",function(){$interval.cancel(refresh_data_interval)}),$scope.permissions=new SharingACL(0),$scope.hasPermission=function(acl,permission){if(acl){var tmp=new SharingACL(acl.permission);return tmp.hasPermission(permission)}return!0},$scope.acceptShareRequest=function(share_request){var crypted_shared_key=share_request.shared_key,private_key=EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key);private_key=ShareService.rsaPrivateKeyFromPEM(private_key),crypted_shared_key=private_key.decrypt(forge.util.decode64(crypted_shared_key)),crypted_shared_key=EncryptService.encryptString(crypted_shared_key),ShareService.saveSharingRequest(share_request,crypted_shared_key).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})},$scope.declineShareRequest=function(share_request){ShareService.declineSharingRequest(share_request).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})};var settingsLoaded=function(){$scope.settings=SettingsService.getSettings()};SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.addCredential=function(){var new_credential=CredentialService.newCredential(),enc_c=CredentialService.encryptCredential(new_credential);SettingsService.setSetting("edit_credential",enc_c),$location.path("/vault/"+$scope.active_vault.guid+"/new")},$scope.editCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("edit_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/edit/"+_credential.guid)},$scope.getRevisions=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("revision_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/revisions")},$scope.shareCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("share_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/share")};var notification;$scope.deleteCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(_credential)}catch(e){}_credential.delete_time=(new Date).getTime()/1e3;for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=_credential.delete_time);$scope.closeSelected(),notification&&NotificationService.hideNotification(notification);var key=CredentialService.getSharedKeyFromCredential(_credential);CredentialService.updateCredential(_credential,!1,key).then(function(){notification=NotificationService.showNotification($translate.instant("credential.deleted"),5e3)})},$scope.recoverCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(_credential)}catch(e){}for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=0);_credential.delete_time=0,$scope.closeSelected(),notification&&NotificationService.hideNotification(notification);var key=CredentialService.getSharedKeyFromCredential(_credential);CredentialService.updateCredential(_credential,!1,key).then(function(){NotificationService.showNotification($translate.instant("credential.recovered"),5e3)})},$scope.destroyCredential=function(credential){var _credential=angular.copy(credential);CredentialService.destroyCredential(_credential.guid).then(function(){for(var i=0;i<$scope.active_vault.credentials.length;i++)if($scope.active_vault.credentials[i].credential_id===credential.credential_id){$scope.active_vault.credentials.splice(i,1),NotificationService.showNotification($translate.instant("credential.destroyed"),5e3);break}})},$scope.view_mode="list",$scope.switchViewMode=function(viewMode){$scope.view_mode=viewMode},$scope.filterOptions={filterText:"",fields:["label","username","email","custom_fields"]},$scope.filtered_credentials=[],$scope.$watch("[selectedtags, filterOptions, delete_time, active_vault.credentials]",function(){if($scope.active_vault&&$scope.active_vault.credentials){var credentials=angular.copy($scope.active_vault.credentials),filtered_credentials=$filter("credentialSearch")(credentials,$scope.filterOptions);filtered_credentials=$filter("tagFilter")(filtered_credentials,$scope.selectedtags),filtered_credentials=$filter("filter")(filtered_credentials,{hidden:0}),$scope.filtered_credentials=filtered_credentials,$scope.filterOptions.selectedtags=angular.copy($scope.selectedtags);for(var i=0;i<$scope.active_vault.credentials.length;i++){var _credential=$scope.active_vault.credentials[i];_credential.tags&&TagService.addTags(_credential.tags)}}},!0),$scope.selectedtags=[];var to;$rootScope.$on("selected_tags_updated",function(evt,_sTags){for(var _selectedTags=[],x=0;x<_sTags.length;x++)_selectedTags.push(_sTags[x].text);$scope.selectedtags=_selectedTags,$timeout.cancel(to),_selectedTags.length>0&&(to=$timeout(function(){if($scope.filtered_credentials){for(var _filtered_tags=[],i=0;i<$scope.filtered_credentials.length;i++)for(var tags=$scope.filtered_credentials[i].tags_raw,x=0;x<tags.length;x++){var tag=tags[x].text;_filtered_tags.indexOf(tag)===-1&&_filtered_tags.push(tag)}$rootScope.$emit("limit_tags_in_list",_filtered_tags)}},50))}),$scope.delete_time=0,$scope.showCredentialRow=function(credential){return 0===$scope.delete_time?0===credential.delete_time:credential.delete_time>$scope.delete_time},$rootScope.$on("set_delete_time",function(event,time){$scope.delete_time=time}),$scope.setDeleteTime=function(delete_time){$scope.delete_time=delete_time},$scope.selectedCredential=!1,$scope.selectCredential=function(credential){credential.description&&(credential.description_html=$sce.trustAsHtml(angular.copy(credential.description).replace("\n","<br />"))),$scope.selectedCredential=angular.copy(credential),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedCredential=!1},$rootScope.$on("logout",function(){$scope.active_vault=null,$scope.credentials=[]}),$scope.clearState=function(){$scope.delete_time=0}}])}(),function(){angular.module("passmanApp").controller("CredentialEditCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","FileService","EncryptService","TagService","NotificationService","ShareService","$translate",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,FileService,EncryptService,TagService,NotificationService,ShareService,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})}),$scope.currentTab={title:$translate.instant("general"),url:"views/partials/forms/edit_credential/basics.html",color:"blue"},$scope.otpType="qrcode",$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("edit_credential");storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),$scope.storedCredential.password_repeat=angular.copy($scope.storedCredential.password),$scope.storedCredential.expire_time=1e3*$scope.storedCredential.expire_time):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result))}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret="password"===_field.field_type,"file"===_field.field_type){var key=!1,_file=$scope.new_custom_field.value;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var key,_file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){console.log($translate.instant("error.loading.file"),error)},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){if(!QRCode)return void NotificationService.showNotification($translate.instant("invalid.qr"),5e3);var uri=new URL(QRCode.qrData),type=uri.href.indexOf("totp/")!==-1?"totp":"hotp",label=uri.pathname.replace("//"+type+"/","");$scope.storedCredential.otp={type:type,label:decodeURIComponent(label),qr_uri:QRCode,issuer:uri.searchParams.get("issuer"),secret:uri.searchParams.get("secret")},$scope.$digest()},$scope.saveCredential=function(){if($scope.new_custom_field.label&&$scope.new_custom_field.value&&$scope.storedCredential.custom_fields.push(angular.copy($scope.new_custom_field)),$scope.storedCredential.password!==$scope.storedCredential.password_repeat)return void NotificationService.showNotification($translate.instant("password.do.not.match"),5e3);if(delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id){var key,_credential;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),_credential=key?ShareService.encryptSharedCredential($scope.storedCredential,key):angular.copy($scope.storedCredential),delete _credential.shared_key;var _useKey=null!=key,regex=/(<([^>]+)>)/gi;_credential.description&&""!==_credential.description&&(_credential.description=_credential.description.replace(regex,"")),CredentialService.updateCredential(_credential,_useKey).then(function(){SettingsService.setSetting("edit_credential",null),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.updated"),5e3)})}else $scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.created"),5e3)})},$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ExportCtrl",["$scope","$window","CredentialService","VaultService","$translate",function($scope,$window,CredentialService,VaultService,$translate){$scope.available_exporters=[],$scope.active_vault=VaultService.getActiveVault(),$scope.confirm_key="",$scope.$watch(function(){return $window.PassmanExporter},function(exporters){exporters=Object.keys(angular.copy(exporters));for(var i=0;i<exporters.length;i++){var exporter=exporters[i];$window.PassmanExporter[exporter].hasOwnProperty("info")&&$scope.available_exporters.push($window.PassmanExporter[exporter].info)}},!0),$scope.log=[],$scope.setExporter=function(exporter){exporter=JSON.parse(exporter),$scope.selectedExporter=exporter};var _log=function(str){$scope.log.push(str)};$scope.startExport=function(){if($scope.error=!1,VaultService.getActiveVault().vaultKey!==$scope.confirm_key){var msg=$translate.instant("invalid.vault.key");return $scope.error=msg,void _log(msg)}_log($translate.instant("export.starting"));var _credentials=[];VaultService.getVault(VaultService.getActiveVault()).then(function(vault){if(_log($translate.instant("export.decrypt")),vault.hasOwnProperty("credentials")&&vault.credentials.length>0){for(var i=0;i<vault.credentials.length;i++){var _credential=angular.copy(vault.credentials[i]);if(0===_credential.hidden){var key=CredentialService.getSharedKeyFromCredential(_credential);_credential=CredentialService.decryptCredential(_credential,key),_credentials.push(_credential)}}$window.PassmanExporter[$scope.selectedExporter.id].export(_credentials).then(function(){_log($translate.instant("done"))})}})}}])}(),function(){angular.module("passmanApp").controller("GenericCsvImportCtrl",["$scope","CredentialService","$translate",function($scope,CredentialService,$translate){$scope.hello="world",$scope.credentialProperties=[{label:"Label",prop:"label",matching:["label","title","name"]},{label:"Username",prop:"username",matching:["username","user","login","login name"]},{label:"Password",prop:"password",matching:["password","pass","pw"]},{label:"TOTP Secret",prop:"otp",matching:["totp"]},{label:"Custom field",prop:"custom_field"},{label:"Notes",prop:"description",matching:["notes","description","comments"]},{label:"Email",prop:"email",matching:["email","mail"]},{label:"URL",prop:"url",matching:["website","url","fulladdress","site","web site"]},{label:"Tags",prop:"tags"},{label:"Ignored",prop:null}];var tagMapper=function(t){return{text:t}},rowToCredential=function(row){for(var _credential=PassmanImporter.newCredential(),k=0;k<$scope.import_fields.length;k++){var field=$scope.import_fields[k];if(field)if("otp"===field)_credential.otp.secret=row[k];else if("custom_field"===field){var key=$scope.matched?$scope.parsed_csv[0][k]:"Custom field "+k;_credential.custom_fields.push({label:key,value:row[k],secret:0})}else if("tags"===field){if(row[k]){var tags=row[k].split(",");_credential.tags=tags.map(tagMapper)}}else _credential[field]=row[k]}return _credential};$scope.inspectCredential=function(row){$scope.inspected_credential=rowToCredential(row)},$scope.csvLoaded=function(file){$scope.import_fields=[],$scope.inspected_credential=!1,$scope.matched=!1,$scope.skipFirstRow=!1;var file_data=file.data.split(",");file_data=decodeURIComponent(escape(window.atob(file_data[1]))),Papa.parse(file_data,{complete:function(results){if(results.data){for(var i=0;i<results.data[0].length;i++){var propName=results.data[0][i];$scope.import_fields[i]=null;for(var p=0;p<$scope.credentialProperties.length;p++){var credentialProperty=$scope.credentialProperties[p];credentialProperty.matching&&credentialProperty.matching.indexOf(propName.toLowerCase())!==-1&&($scope.import_fields[i]=credentialProperty.prop,$scope.matched=!0)}}$scope.matched&&$scope.inspectCredential(results.data[1]),$scope.parsed_csv=results.data,$scope.$apply()}}})};var addCredential=function(index){function handleState(index){$scope.parsed_csv[index+1]?($scope.import_progress={progress:index/$scope.parsed_csv.length*100,loaded:index,total:$scope.parsed_csv.length},addCredential(index+1)):($scope.import_progress={progress:100,loaded:$scope.parsed_csv.length,total:$scope.parsed_csv.length},$scope.log.push($translate.instant("done")),$scope.importing=!1)}var _credential=rowToCredential($scope.parsed_csv[index]);return _credential.vault_id=$scope.active_vault.vault_id,_credential.label?($scope.log.push($translate.instant("import.adding",{credential:_credential.label})),void CredentialService.createCredential(_credential).then(function(result){result.credential_id&&($scope.log.push($translate.instant("import.added",{credential:_credential.label})),handleState(index))})):($scope.log.push($translate.instant("import.skipping",{line:index})),void handleState(index))};$scope.importing=!1,$scope.startCSVImport=function(){$scope.importing=!0,$scope.log=[];var start=$scope.skipFirstRow?1:0;addCredential(start)},$scope.updateExample=function(){var start=$scope.skipFirstRow?1:0;$scope.inspectCredential($scope.parsed_csv[start])}}])}(),function(){angular.module("passmanApp").controller("ImportCtrl",["$scope","$window","CredentialService","VaultService","$translate",function($scope,$window,CredentialService,VaultService,$translate){$scope.available_importers=[],$scope.active_vault=VaultService.getActiveVault(),$scope.$watch(function(){return $window.PassmanImporter},function(importers){for(var key in importers){var importer=importers[key];importer.hasOwnProperty("info")&&$scope.available_importers.push(importer.info)}},!0),$scope.log=[],$scope.setImporter=function(importer){importer=JSON.parse(importer),$scope.selectedImporter=importer};var file_data,_log=function(str){$scope.log.push(str)};$scope.fileLoaded=function(file){file_data=file.data.split(","),file_data=decodeURIComponent(escape(window.atob(file_data[1]))),_log($translate.instant("import.file.read")),$scope.$digest()},$scope.fileLoadError=function(file){console.error($translate.instant("error.loading.file"),file)},$scope.fileSelectProgress=function(){};var parsed_data;$scope.import_progress={progress:0,loaded:0,total:0};var addCredential=function(parsed_data_index){if(parsed_data[parsed_data_index]){var _credential=parsed_data[parsed_data_index];if(!_credential.label)return void(parsed_data[parsed_data_index+1]&&(_log($translate.instant("import.no.label")),addCredential(parsed_data_index+1)));_log($translate.instant("import.adding",{credential:_credential.label})),_credential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential(_credential).then(function(result){result.credential_id&&(_log($translate.instant("import.added",{credential:_credential.label})),parsed_data[parsed_data_index+1]?($scope.import_progress={progress:parsed_data_index/parsed_data.length*100,loaded:parsed_data_index,total:parsed_data.length},addCredential(parsed_data_index+1)):($scope.import_progress={progress:100,loaded:parsed_data.length,total:parsed_data.length},_log($translate.instant("done"))))})}};$scope.file_read_progress={percent:0,loaded:0,total:0},$scope.startImport=function(){$scope.import_progress=0,$scope.file_read_percent=0,file_data&&$window.PassmanImporter[$scope.selectedImporter.id].readFile(file_data).then(function(parseddata){parsed_data=parseddata,$scope.file_read_progress={percent:100,loaded:parsed_data.length,total:parsed_data.length};var msg=$translate.instant("import.loaded").replace("{{num}}",parsed_data.length);_log(msg),parsed_data.length>0&&addCredential(0)}).progress(function(progress){$scope.file_read_progress=progress,$scope.$digest()})}}])}(),function(){angular.module("passmanApp").controller("MainCtrl",["$scope","$rootScope","$location","SettingsService","$window","$interval","$filter",function($scope,$rootScope,$location,SettingsService,$window,$interval,$filter){$scope.selectedVault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&"localhost"!==$location.$$host&&"127.0.0.1"!==$location.$host&&($scope.using_http=!0,$scope.http_warning_hidden=!1),$rootScope.$on("settings_loaded",function(){SettingsService.isEnabled("disable_contextmenu")&&document.addEventListener("contextmenu",function(event){event.preventDefault()}),SettingsService.isEnabled("https_check")&&($scope.http_warning_hidden=!0),SettingsService.isEnabled("disable_debugger")&&!function a(){try{!function b(i){1===(""+i/i).length&&i%20!==0||function(){}.constructor("debugger")(),b(++i)}(0)}catch(e){setTimeout(a,5e3)}}()}),$rootScope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$rootScope.$on("app_menu",function(evt,shown){$scope.app_sidebar=shown}),$rootScope.$on("logout",function(){$scope.selectedVault=!1});var tickSessionTimer=function(){if($scope.session_time_left){$scope.session_time_left--;var session_time_left_formatted=$filter("toHHMMSS")($scope.session_time_left);$scope.translationData={session_time:session_time_left_formatted},$rootScope.$broadcast("logout_timer_tick_tack",$scope.session_time_left),0===$scope.session_time_left&&$window.location.reload()}};$scope.session_time_left=!1,$scope.$on("logout_timer_set",function(evt,timer){$scope.session_time_left=timer,$scope.translationData={session_time:timer},$interval(tickSessionTimer,1e3)})}])}(),function(){angular.module("passmanApp").controller("MenuCtrl",["$scope","VaultService","$location","$rootScope","TagService","SettingsService",function($scope,VaultService,$location,$rootScope,TagService,SettingsService){$rootScope.logout=function(){SettingsService.setSetting("defaultVaultPass",!1),TagService.resetTags(),$rootScope.$broadcast("logout"),$location.path("/")},$scope.selectedTags=[],$scope.getTags=function($query){return TagService.searchTag($query)},$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){$scope.active_vault=vault}),$scope.filtered_tags=[],$rootScope.$on("limit_tags_in_list",function(evt,tags){$scope.filtered_tags=[];for(var i=0;i<tags.length;i++){for(var tag={text:tags[i]},found=!1,x=0;x<$scope.selectedTags.length;x++)$scope.selectedTags[x].text===tag.text&&(found=!0);found===!1&&$scope.filtered_tags.push(tag)}}),$scope.$watch("selectedTags",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags)},!0),$scope.tagClicked=function(tag){$scope.selectedTags.push(tag)},$rootScope.$on("credentials_loaded",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags)}),$scope.available_tags=TagService.getTags(),$scope.$watch(function(){return 0===$scope.selectedTags.length?TagService.getTags():$scope.filtered_tags},function(tags){$scope.available_tags=tags},!0),$scope.toggleDeleteTime=function(){$scope.delete_time>0?$scope.delete_time=0:$scope.delete_time=1,$rootScope.$broadcast("set_delete_time",$scope.delete_time)}}])}(),function(){angular.module("passmanApp").controller("PublicSharedCredential",["$scope","ShareService","$window","EncryptService","NotificationService","$translate",function($scope,ShareService,$window,EncryptService,NotificationService,$translate){var _key;$scope.loading=!1,$scope.loadSharedCredential=function(){$scope.loading=!0;var data=window.atob($window.location.hash.replace("#","")).split("<::>"),guid=data[0];_key=data[1],ShareService.getPublicSharedCredential(guid).then(function(sharedCredential){$scope.loading=!1,200===sharedCredential.status?$scope.shared_credential=ShareService.decryptSharedCredential(sharedCredential.data.credential_data,_key):$scope.expired=!0})},$scope.downloadFile=function(credential,file){ShareService.downloadSharedFile(credential,file).then(function(result){if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);var file_data=EncryptService.decryptString(result.file_data,_key);download(file_data,escapeHTML(file.filename),file.mimetype)})}}])}(),function(){angular.module("passmanApp").controller("RevisionCtrl",["$scope","SettingsService","VaultService","CredentialService","$location","$routeParams","$rootScope","NotificationService","$filter","ShareService","EncryptService","$translate",function($scope,SettingsService,VaultService,CredentialService,$location,$routeParams,$rootScope,NotificationService,$filter,ShareService,EncryptService,$translate){
-if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),VaultService.getVault(_vault).then(function(vault){vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.$parent.selectedVault=!0})}}else $scope.active_vault||$location.path("/");$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("revision_credential"),getRevisions=function(){CredentialService.getRevisions($scope.storedCredential.guid).then(function(revisions){$scope.revisions=revisions})};storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),getRevisions()):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result)),getRevisions()}),$scope.selectRevision=function(revision){var key;$scope.selectedRevision=angular.copy(revision),!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key?$scope.selectedRevision.credential_data=ShareService.decryptSharedCredential(angular.copy(revision.credential_data),key):$scope.selectedRevision.credential_data=CredentialService.decryptCredential(angular.copy(revision.credential_data)),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedRevision=!1},$scope.deleteRevision=function(revision){CredentialService.deleteRevision($scope.storedCredential.guid,revision.revision_id).then(function(){for(var i=0;i<$scope.revisions.length;i++)if($scope.revisions[i].revision_id===revision.revision_id){$scope.revisions.splice(i,1),NotificationService.showNotification($translate.instant("revision.deleted"),5e3);break}})},$scope.restoreRevision=function(revision){var key,_revision=angular.copy(revision),_credential=_revision.credential_data;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key&&(_credential=ShareService.encryptSharedCredential(_credential,key)),delete _credential.shared_key,_credential.revision_created=$filter("date")(1e3*_revision.created,"dd-MM-yyyy @ HH:mm:ss"),CredentialService.updateCredential(_credential,key).then(function(){SettingsService.setSetting("revision_credential",null),$rootScope.$emit("app_menu",!1),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("revision.restored"),5e3)})},$scope.cancelRevision=function(){$location.path("/vault/"+$routeParams.vault_id),$scope.storedCredential=null,SettingsService.setSetting("revision_credential",null)}}])}(),function(){angular.module("passmanApp").controller("SettingsCtrl",["$scope","$rootScope","SettingsService","VaultService","CredentialService","$location","$routeParams","$http","EncryptService","NotificationService","$sce","$translate",function($scope,$rootScope,SettingsService,VaultService,CredentialService,$location,$routeParams,$http,EncryptService,NotificationService,$sce,$translate){if($scope.vault_settings={},$scope.new_vault_name="",$scope.showGenericImport=!1,$scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.vault_settings=vault.vault_settings,$scope.vault_settings.hasOwnProperty("pwSettings")||($scope.vault_settings.pwSettings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})});var key_strengths=["password.poor","password.poor","password.weak","password.good","password.strong"];$scope.minimal_value_key_strength=SettingsService.getSetting("vault_key_strength"),$translate(key_strengths[SettingsService.getSetting("vault_key_strength")]).then(function(translation){$scope.required_score={strength:translation}});var btn_txt=$translate.instant("bookmarklet.text"),http=location.protocol,slashes=http.concat("//"),host=slashes.concat(window.location.hostname),complete=host+location.pathname;$scope.bookmarklet=$sce.trustAsHtml('<a class="button" href="javascript:(function(){var a=window,b=document,c=encodeURIComponent,e=c(document.title),d=a.open(\''+complete+"bookmarklet?url='+c(b.location)+'&title='+e,'bkmk_popup','left='+((a.screenX||a.screenLeft)+10)+',top='+((a.screenY||a.screenTop)+10)+',height=750px,width=475px,resizable=0,alwaysRaised=1');a.setTimeout(function(){d.focus()},300);})();\">"+btn_txt+"</a>"),$scope.saveVaultSettings=function(){var _vault=$scope.active_vault;_vault.name=$scope.new_vault_name,_vault.vault_settings=angular.copy($scope.vault_settings),VaultService.updateVault(_vault).then(function(){$scope.active_vault.name=angular.copy(_vault.name),NotificationService.showNotification($translate.instant("settings.saved"),5e3)})},$scope.tabs=[{title:$translate.instant("settings.general"),url:"views/partials/forms/settings/general_settings.html"},{title:$translate.instant("settings.audit"),url:"views/partials/forms/settings/tool.html"},{title:$translate.instant("settings.password"),url:"views/partials/forms/settings/password_settings.html"},{title:$translate.instant("settings.import"),url:"views/partials/forms/settings/import.html"},{title:$translate.instant("settings.export"),url:"views/partials/forms/settings/export.html"},{title:$translate.instant("settings.sharing"),url:"views/partials/forms/settings/sharing.html"}],$scope.currentTab=$scope.tabs[0],$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url};var getPassmanVersion=function(){var url=OC.generateUrl("apps/passman/api/internal/version");$http.get(url).then(function(result){$scope.passman_version=result.data.version})};getPassmanVersion(),$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){vault&&($scope.active_vault=vault)}),$rootScope.$on("logout",function(){$scope.selectedVault=!1});var getCurrentVaultCredentials=function(callback){VaultService.getVault($scope.active_vault).then(callback)};$scope.startScan=function(minStrength){getCurrentVaultCredentials(function(vault){for(var results=[],i=0;i<vault.credentials.length;i++){var c=angular.copy(vault.credentials[i]);if(c.password&&0===c.hidden)try{if(c=CredentialService.decryptCredential(c),c.password){var zxcvbn_result=zxcvbn(c.password);zxcvbn_result.score<=minStrength&&results.push({guid:c.guid,label:c.label,password:c.password,password_zxcvbn_result:zxcvbn_result})}}catch(e){console.warn(e)}}$scope.scan_result=results})},$scope.cur_state={},$scope.$on("$locationChangeStart",function(event){$scope.change_pw&&$scope.change_pw.total>0&&$scope.change_pw.done<$scope.change_pw.total&&(confirm($translate.instant("changepw.navigate.away.warning"))||event.preventDefault())}),$scope.changeVaultPassword=function(oldVaultPass,newVaultPass,newVaultPass2){return $scope.error="",oldVaultPass!==VaultService.getActiveVault().vaultKey?void($scope.error=$translate.instant("incorrect.password")):newVaultPass!==newVaultPass2?void($scope.error=$translate.instant("password.no.match")):(SettingsService.setSetting("defaultVault",null),SettingsService.setSetting("defaultVaultPass",null),void VaultService.getVault($scope.active_vault).then(function(vault){jQuery("input").attr("disabled",!0),jQuery("button").attr("disabled",!0);var _selected_credentials=angular.copy(vault.credentials);$scope.change_pw={percent:0,done:0,total:_selected_credentials.length};var changeCredential=function(index,oldVaultPass,newVaultPass){var usedKey=oldVaultPass;_selected_credentials[index].hasOwnProperty("shared_key")&&_selected_credentials[index].shared_key&&(usedKey=EncryptService.decryptString(angular.copy(_selected_credentials[index].shared_key),oldVaultPass)),CredentialService.reencryptCredential(_selected_credentials[index].guid,usedKey,newVaultPass).progress(function(data){$scope.cur_state=data}).then(function(){var percent=index/_selected_credentials.length*100;$scope.change_pw={percent:percent,done:index+1,total:_selected_credentials.length},index<_selected_credentials.length-1?changeCredential(index+1,oldVaultPass,newVaultPass):(vault.private_sharing_key=EncryptService.decryptString(angular.copy(vault.private_sharing_key),oldVaultPass),vault.private_sharing_key=EncryptService.encryptString(vault.private_sharing_key,newVaultPass),VaultService.updateSharingKeys(vault).then(function(){$rootScope.$broadcast("logout"),NotificationService.showNotification($translate.instant("login.new.pass"),5e3)}))})};changeCredential(0,VaultService.getActiveVault().vaultKey,newVaultPass)}))},$scope.confirm_vault_delete=!1,$scope.delete_vault_password="",$scope.delete_vault=function(){$scope.confirm_vault_delete&&$scope.delete_vault_password===VaultService.getActiveVault().vaultKey&&getCurrentVaultCredentials(function(vault){var credentials=vault.credentials;$scope.remove_pw={percent:0,done:0,total:vault.credentials.length};var deleteCredential=function(index){$scope.translationData={password:credentials[index].label},CredentialService.destroyCredential(credentials[index].guid).then(function(){var percent=index/vault.credentials.length*100;return $scope.remove_pw={percent:percent,done:index,total:vault.credentials.length},index===credentials.length-1?void VaultService.deleteVault(vault).then(function(){SettingsService.setSetting("defaultVaultPass",!1),SettingsService.setSetting("defaultVault",null),$rootScope.$broadcast("logout"),$location.path("/")}):void deleteCredential(index+1)})};deleteCredential(0)})},$rootScope.$on("logout",function(){$scope.active_vault=null,VaultService.setActiveVault(null),$location.path("/")}),$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ShareCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","NotificationService","SharingACL","EncryptService","$translate","$rootScope",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,NotificationService,SharingACL,EncryptService,$translate,$rootScope){$scope.active_vault=VaultService.getActiveVault(),$scope.tabs=[{title:$translate.instant("share.u.g"),url:"views/partials/forms/share_credential/basics.html"},{title:$translate.instant("share.link"),url:"views/partials/forms/share_credential/link_sharing.html",color:"green"}],$scope.currentTab=$scope.tabs[0];var settingsLoaded=function(){var settings=SettingsService.getSettings();0!==settings.user_sharing_enabled&&"0"!==settings.user_sharing_enabled||$scope.tabs.splice(0,1),0!==settings.link_sharing_enabled&&"0"!==settings.link_sharing_enabled||$scope.tabs.splice(1,1),$scope.tabs.length>0&&($scope.currentTab=$scope.tabs[0])};if(SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");var storedCredential=SettingsService.getSetting("share_credential");storedCredential?$scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)):$location.path("/vault/"+$routeParams.vault_id),$scope.active_vault&&($scope.$parent.selectedVault=!0),$scope.cancel=function(){SettingsService.setSetting("share_credential",null),$location.path("/vault/"+$routeParams.vault_id)},$scope.default_permissions=new SharingACL(0),$scope.default_permissions.addPermission($scope.default_permissions.permissions.READ|$scope.default_permissions.permissions.WRITE|$scope.default_permissions.permissions.FILES);var link_acl=angular.copy($scope.default_permissions);link_acl.removePermission($scope.default_permissions.permissions.WRITE);var oneMonthLater=new Date;oneMonthLater.setMonth(oneMonthLater.getMonth()+1),$scope.share_settings={linkSharing:{enabled:!1,settings:{expire_time:oneMonthLater,expire_views:5,acl:link_acl}},credentialSharedWithUserAndGroup:[],cypher_progress:{done:0,total:0},upload_progress:{done:0,total:0}};var getAcl=function(){ShareService.getSharedCredentialACL($scope.storedCredential).then(function(aclList){for(var _list=[],enc_key=!!$scope.storedCredential.shared_key&&EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key)),i=0;i<aclList.length;i++){var acl=aclList[i];if(null===acl.user_id){if($scope.share_settings.linkSharing={enabled:!0,settings:{expire_time:new Date(1e3*acl.expire),expire_views:acl.expire_views,acl:new SharingACL(acl.permissions)}},enc_key){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)}}else{var obj={userId:acl.user_id,displayName:acl.user_id,type:"user",acl:new SharingACL(acl.permissions),acl_id:acl.acl_id,pending:acl.pending,credential_guid:acl.item_guid,created:acl.created};_list.push(obj)}}$scope.share_settings.credentialSharedWithUserAndGroup=_list})};getAcl();new SharingACL(0);$scope.$watch("share_settings.upload_progress.done",function(){$scope.share_settings.upload_progress.done===$scope.share_settings.upload_progress.total&&$scope.share_settings.upload_progress.total>0&&getAcl()}),$scope.inputSharedWith=[],$scope.searchUsers=function($query){return ShareService.search($query)},$scope.hasPermission=function(acl,permission){return acl.hasPermission(permission)},$scope.setPermission=function(acl,permission){acl.togglePermission(permission)},$scope.shareWith=function(shareWith){if($scope.inputSharedWith=[],shareWith.length>0)for(var i=0;i<shareWith.length;i++){for(var obj={userId:shareWith[i].uid,displayName:shareWith[i].text,type:shareWith[i].type,acl:angular.copy($scope.default_permissions),pending:!0,credential_guid:$scope.storedCredential.guid},found=!1,z=0;z<$scope.share_settings.credentialSharedWithUserAndGroup.length;z++)$scope.share_settings.credentialSharedWithUserAndGroup[z].userId===shareWith[z].uid&&(found=!0);found===!1&&$scope.share_settings.credentialSharedWithUserAndGroup.push(obj)}},$scope.unshareUser=function(user){ShareService.unshareCredentialFromUser($scope.storedCredential,user.userId).then(function(result){if(result.result===!0){var idx=$scope.share_settings.credentialSharedWithUserAndGroup.indexOf(user);$scope.share_settings.credentialSharedWithUserAndGroup.splice(idx,1)}})},$scope.unshareCredential=function(credential){var _credential=angular.copy(credential),old_key=EncryptService.decryptString(angular.copy(_credential.shared_key)),new_key=VaultService.getActiveVault().vaultKey;_credential.shared_key=null,_credential.unshare_action=!0,_credential.skip_revision=!0,CredentialService.reencryptCredential(_credential.guid,old_key,new_key,!0).then(function(data){getAcl();var c=data.cryptogram;c.shared_key=null,c.unshare_action=!0,c.skip_revision=!0,ShareService.unshareCredential(c),CredentialService.updateCredential(c,!0).then(function(){NotificationService.showNotification($translate.instant("credential.unshared"),4e3),$scope.sharing_complete=!0,$scope.storedCredential.shared_key=null,$scope.share_settings.credentialSharedWithUserAndGroup=[]})})},$scope.applyShareToUser=function(user,enc_key){ShareService.getVaultsByUser(user.userId).then(function(data){$scope.share_settings.cypher_progress.total+=data.length,user.vaults=data;var start=(new Date).getTime()/1e3;ShareService.cypherRSAStringWithPublicKeyBulkAsync(user.vaults,enc_key).progress(function(){$scope.share_settings.cypher_progress.done++,$scope.share_settings.cypher_progress.percent=$scope.share_settings.cypher_progress.done/$scope.share_settings.cypher_progress.total*100,$scope.$digest()}).then(function(result){$scope.share_settings.cypher_progress.times.push({time:(new Date).getTime()/1e3-start,user:data[0].user_id}),user.vaults=result,user.hasOwnProperty("acl_id")||$scope.uploadChanges(user),$scope.$digest()})})},$scope.$on("$locationChangeStart",function(event){$scope.sharing_complete||confirm($translate.instant("share.navigate.away.warning"))||event.preventDefault()});var getShareLink=function(hash){var port,defaultPort="http"===$location.$$protocol?80:443;return port=defaultPort!==$location.$$port?":"+$location.$$port:"",$location.$$protocol+"://"+$location.$$host+port+OC.generateUrl("apps/passman/share/public#")+hash};$scope.sharing_complete=!0,$scope.applyShare=function(){if($scope.sharing_complete=!1,$scope.share_settings.cypher_progress.percent=0,$scope.share_settings.cypher_progress.done=0,$scope.share_settings.cypher_progress.total=0,$scope.share_settings.cypher_progress.times=[],$scope.share_settings.cypher_progress.times_total=[],$scope.share_settings.upload_progress.done=0,$scope.share_settings.upload_progress.total=0,$scope.storedCredential.shared_key&&""!==$scope.storedCredential.shared_key&&null!==$scope.storedCredential.shared_key){var enc_key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key));if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)})}for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++){var iterator=i,target_user=list[i];if(target_user.hasOwnProperty("created")){var acl={user_id:target_user.userId,permission:target_user.acl.getAccessLevel()};ShareService.updateCredentialAcl($scope.storedCredential,acl)}else $scope.applyShareToUser(list[iterator],enc_key)}NotificationService.showNotification($translate.instant("saved"),4e3),$scope.sharing_complete=!0}else ShareService.generateSharedKey(20).then(function(key){var encryptedSharedCredential=angular.copy($scope.storedCredential),old_key=VaultService.getActiveVault().vaultKey;CredentialService.reencryptCredential(encryptedSharedCredential.guid,old_key,key).progress(function(){}).then(function(data){var _credential=data.cryptogram;_credential.set_share_key=!0,_credential.skip_revision=!0,_credential.shared_key=EncryptService.encryptString(key),CredentialService.updateCredential(_credential,!0).then(function(){$scope.storedCredential.shared_key=_credential.shared_key,NotificationService.showNotification($translate.instant("credential.shared"),4e3),$scope.sharing_complete=!0})});for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++)"user"===list[i].type&&$scope.applyShareToUser(list[i],key);if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+key);$scope.share_link=getShareLink(hash)})}})},$scope.uploadChanges=function(user){$scope.share_settings.upload_progress.total++,user.accessLevel=angular.copy(user.acl.getAccessLevel()),ShareService.shareWithUser(storedCredential,user).then(function(){$scope.share_settings.upload_progress.done++,$scope.share_settings.upload_progress.percent=$scope.share_settings.upload_progress.done/$scope.share_settings.upload_progress.total*100})},$scope.calculate_total_time=function(){$scope.share_settings.cypher_progress.times=$scope.share_settings.cypher_progress.times||[];for(var total=0,i=0;i<$scope.share_settings.cypher_progress.times.length;i++)total+=$scope.share_settings.cypher_progress.times[i].time;return total}}])}(),function(){angular.module("passmanApp").controller("SharingSettingsCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","EncryptService",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,EncryptService){$scope.active_vault=VaultService.getActiveVault(),$scope.sharing_keys=angular.copy(ShareService.getSharingKeys()),$scope.progress=1,$scope.generating=!1,$scope.available_sizes=[{size:1024,name:1024},{size:2048,name:2048},{size:4096,name:4096}],$scope.setKeySize=function(size){for(var i=0;i<$scope.available_sizes.length;i++)if($scope.available_sizes[i].size===size)return void($scope.key_size=$scope.available_sizes[i])},$scope.setKeySize(2048),$scope.generateKeys=function(length){$scope.progress=1,$scope.generating=!0,ShareService.generateRSAKeys(length).progress(function(progress){$scope.progress=progress>0?2:1,$scope.$digest()}).then(function(kp){$scope.generating=!1;var pem=ShareService.rsaKeyPairToPEM(kp);$scope.active_vault.private_sharing_key=EncryptService.encryptString(pem.privateKey),$scope.active_vault.public_sharing_key=pem.publicKey,VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})})},$scope.updateSharingKeys=function(){$scope.active_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),$scope.active_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})}}])}(),function(){angular.module("passmanApp").controller("VaultCtrl",["$scope","VaultService","SettingsService","CredentialService","$location","ShareService","EncryptService","$translate","$rootScope","$interval",function($scope,VaultService,SettingsService,CredentialService,$location,ShareService,EncryptService,$translate,$rootScope,$interval){VaultService.getVaults().then(function(vaults){if($scope.vaults=vaults,null!=SettingsService.getSetting("defaultVault"))for(var default_vault=SettingsService.getSetting("defaultVault"),i=0;i<vaults.length;i++){var vault=vaults[i];if(vault.guid===default_vault.guid){$scope.default_vault=!0,$scope.list_selected_vault=vault,SettingsService.setSetting("defaultVault",vault),SettingsService.getSetting("defaultVaultPass")&&$location.path("/vault/"+vault.guid),$scope.vault_tries[vault.guid]={tries:0,timeout:0};break}}});var key_strengths=["password.poor","password.poor","password.weak","password.good","password.strong"];$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.auto_logout_timer=!1,$scope.logout_timer="0",$scope.list_selected_vault=!1,$scope.minimal_value_key_strength=3;var settingsLoaded=function(){$scope.minimal_value_key_strength=SettingsService.getSetting("vault_key_strength"),$translate(key_strengths[SettingsService.getSetting("vault_key_strength")]).then(function(translation){$scope.required_score={strength:translation}})};SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.toggleAutoLogout=function(){$scope.auto_logout_timer=!$scope.auto_logout_timer},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault,$scope.vault_tries[vault.guid]||($scope.vault_tries[vault.guid]={tries:0,timeout:0})},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})},$scope.requestDeletion=function(vault){$location.path("/vault/"+vault.guid+"/request-deletion")};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials;var timer=parseInt($scope.logout_timer);$scope.auto_logout_timer&&timer>0&&$rootScope.$broadcast("logout_timer_set",60*timer),VaultService.setActiveVault(_vault),$location.path("/vault/"+vault.guid)};$scope.selectLogoutTimer=function(time){$scope.auto_logout_timer=!0,$scope.logout_timer=time};var tickLockTimer=function(guid){$scope.vault_tries[guid].timeout=$scope.vault_tries[guid].timeout-1,$scope.vault_tries[guid].timeout<=0&&($interval.cancel($scope.vault_tries[guid].timer),$scope.vault_tries[guid].timeout=0)};$scope.vault_tries={},$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){if($scope.error=$translate.instant("invalid.vault.key"),$scope.vault_tries[vault.guid].tries=$scope.vault_tries[vault.guid].tries+1,$scope.vault_tries[vault.guid].tries>=3){var duration=Math.pow(2,1/7)*Math.pow(15,4/7)*Math.pow(Math.pow(2,2/7)*Math.pow(15,1/7),$scope.vault_tries[vault.guid].tries);$scope.vault_tries[vault.guid].timeout=duration,$scope.vault_tries[vault.guid].hasOwnProperty("timer")&&$interval.cancel($scope.vault_tries[vault.guid].timer),$scope.vault_tries[vault.guid].timer=$interval(function(){tickLockTimer(vault.guid)},1e3)}}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault),SettingsService.setSetting("defaultVaultPass",null),SettingsService.setSetting("defaultVault",null);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})}}])}(),function(){angular.module("passmanApp").controller("RequestDeleteCtrl",["$scope","$location","$http","$routeParams","VaultService","NotificationService","$translate",function($scope,$location,$http,$routeParams,VaultService,NotificationService,$translate){$scope.reason="",VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){$scope.pending_deletion=vault.delete_request_pending}),$scope.requestDeletion=function(){var queryUrl=OC.generateUrl("apps/passman/admin/request-deletion/"+$routeParams.vault_id),params={reason:$scope.reason};$http.post(queryUrl,params).then(function(){NotificationService.showNotification($translate.instant("deletion.requested"),5e3),$location.path("#/")})},$scope.removeRequestDeletion=function(){var queryUrl=OC.generateUrl("apps/passman/admin/request-deletion/"+$routeParams.vault_id);$http.delete(queryUrl).then(function(){NotificationService.showNotification($translate.instant("deletion.removed"),5e3),$location.path("#/")})}}])}(),angular.module("templates-main",["views/credential_revisions.html","views/edit_credential.html","views/partials/credential_template.html","views/partials/forms/edit_credential/basics.html","views/partials/forms/edit_credential/custom_fields.html","views/partials/forms/edit_credential/files.html","views/partials/forms/edit_credential/otp.html","views/partials/forms/edit_credential/password.html","views/partials/forms/settings/export.html","views/partials/forms/settings/general_settings.html","views/partials/forms/settings/generic_csv_import.html","views/partials/forms/settings/import.html","views/partials/forms/settings/password_settings.html","views/partials/forms/settings/sharing.html","views/partials/forms/settings/tool.html","views/partials/forms/share_credential/basics.html","views/partials/forms/share_credential/link_sharing.html","views/partials/password-meter.html","views/settings.html","views/share_credential.html","views/show_vault.html","views/vault_req_deletion.html","views/vaults.html"]),angular.module("views/credential_revisions.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/credential_revisions.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancelRevision()">{{active_vault.name}}</a></div><div class="crumb svg last"><a ng-if="storedCredential.credential_id">{{ \'showing.revisions\' | translate}} "{{revision.credential_data.label}}"</a></div></div></div></div><div off-click="closeSelected()"><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="revision in revisions | orderBy:\'-created\'" ng-click="selectRevision(revision)" ng-class="{\'selected\': selectedRevision.revision_id == revision.revision_id}"><td><span class="icon"><i class="fa fa-lock"></i></span> <span class="label">{{ \'revision.of\' | translate}} {{revision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} ({{revision.credential_data.label}}) <span ng-if="revision.edited_by">{{ \'revision.edited.by\' | translate}} {{revision.edited_by}}</span></span></td></tr><tr ng-show="revisions.length == 0"><td>{{ \'no.revisions\' | translate}}</td></tr></table><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedRevision"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span> <b ng-show="selectedRevision">{{ \'revision.of\' | translate}} {{selectedRevision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</b><div class="credential-data"><div class="row" ng-show="selectedRevision.credential_data.label"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.label"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.username"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.password" secret="\'true\'"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="selectedRevision.credential_data.otp.secret"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.email"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.url"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.description_html"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedRevision.credential_data.files" class="link" ng-click="downloadFile(selectedRevision.credential_data, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in selectedRevision.credential_data.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="selectedRevision.credential_data.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in selectedRevision.credential_data.tags">{{tag.text}}</span></div></div></div></div><div ng-show="selectedRevision"><button class="button" ng-click="restoreRevision(selectedRevision)"><span class="fa fa-edit"></span> {{ \'restore.revision\' | translate}}</button> <button class="button" ng-click="deleteRevision(selectedRevision)"><span class="fa fa-trash"></span> {{ \'delete.revision\' | translate}}</button></div></div></div>');
-}]),angular.module("views/edit_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/edit_credential.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'edit.credential\' | translate}} "{{storedCredential.label}}"</a> <a ng-if="!storedCredential.credential_id">{{ \'create.credential\' | translate}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div><button ng-click="saveCredential()" click-disable>{{ \'save\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button></div>')}]),angular.module("views/partials/credential_template.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/credential_template.html",'<div class="credential-data"><div class="row" ng-show="credential.label && showLabel"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.label"></span></div></div><div class="row" ng-show="credential.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.username"></span></div></div><div class="row" ng-show="credential.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.password" secret="\'true\'"></span></div></div><div class="row" ng-show="credential.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="credential.otp.secret"></span></div></div><div class="row" ng-show="credential.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.email"></span></div></div><div class="row" ng-show="credential.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.url"></span></div></div><div class="row" ng-show="credential.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.description_html"></span></div></div><div class="row" ng-show="credential.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in credential.files" class="link" ng-click="downloadFile(credential, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in credential.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(credential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="credential.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="credential.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="credential.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in credential.tags track by $index">{{tag.text}}</span></div></div></div></div>')}]),angular.module("views/partials/forms/edit_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><label>{{ \'label\' | translate}}</label><div><input type="text" ng-model="storedCredential.label"></div><label>{{ \'username\' | translate}}</label><div><input type="text" ng-model="storedCredential.username"></div><label>{{ \'email\' | translate}}</label><div><input type="text" ng-model="storedCredential.email"></div><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><div><label>{{ \'password.r\' | translate}}</label><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'url\' | translate}}</label><div><input type="text" ng-model="storedCredential.url"></div></div><div class="col-xs-12 col-md-6"><label>{{ \'notes\' | translate}}</label><div><textarea class="credential_textarea" ng-model="storedCredential.description"></textarea></div><label>{{ \'add.tag\' | translate}}</label><div class="tags_input"><tags-input ng-model="storedCredential.tags" replace-spaces-with-dashes="false"><auto-complete source="getTags($query)" min-length="0"></auto-complete></tags-input></div></div></div>')}]),angular.module("views/partials/forms/edit_credential/custom_fields.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/custom_fields.html",'<div class="row"><div class="col-xs-12 col-md-4"><label>{{ \'field.label\' | translate}}</label><input type="text" ng-model="new_custom_field.label"></div><div class="col-xs-10 col-md-6 field-value"><div class="row"><div class="col-xs-12"><label>{{ \'field.value\' | translate}}</label></div></div><div class="row"><div class="col-xs-8 valueInput"><input type="text" ng-model="new_custom_field.value" ng-show="new_custom_field.field_type === \'text\'"><password-gen ng-model="new_custom_field.value" ng-show="new_custom_field.field_type ===\'password\'" settings="{generateOnCreate: false }"></password-gen><span ng-show="new_custom_field.field_type ===\'file\'"><input id="custom_field_file" class="inputfile" type="file" file-select success="addFileToCustomField" error="fileLoadError" progress="fileSelectProgress"><label for="custom_field_file"><i class="fa fa-upload" aria-hidden="true"></i> {{ new_custom_field.value.filename || \'select.file\' | translate}}</label></span></div><div class="col-xs-4 selectType"><select class="form-control" ng-model="new_custom_field.field_type"><option value="text">{{ \'text\' | translate}}</option><option value="password">{{ \'password\' | translate}}</option><option value="file">{{ \'file\' | translate}}</option></select></div></div><div class="row"><div class="col-xs-12"><ng-password-meter ng-if="new_custom_field.field_type ===\'password\'" password="new_custom_field.value"></ng-password-meter></div></div></div><div class="col-xs-2 col-md-2"><label class="invisible">{{\'add\' | translate}}</label><button ng-click="addCustomField()">+</button></div></div><div class="row custom_fields" ng-if="storedCredential.custom_fields.length > 0"><div class="col-xs-12 table"><table><thead><tr use-theme><td class="dragger"></td><th class="field_label">{{ \'label\' | translate}}</th><th class="field_value">{{ \'value\' | translate}}</th><th class="field_secret">{{ \'type\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tbody ui-sortable ng-model="storedCredential.custom_fields"><tr ng-repeat="field in storedCredential.custom_fields"><td class="dragger"><i class="fa fa-arrows-v"></i></td><td><a href="#" editable-text="field.label">{{ field.label || "empty" }}</a></td><td><span ng-if="field.field_type === \'text\'"><a href="#" editable-text="field.value">{{ field.value || \'empty\' | translate }}</a></span> <span ng-if="field.field_type === \'password\'"><a href="#" editable-password="field.value"><span ng-repeat="n in [] | range:field.value.length">*</span></a></span> <span ng-if="field.field_type === \'file\'">{{field.value.filename}} ({{field.value.size | bytes}})</span></td><td>{{ field.field_type }}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteCustomField(field)"></i></td></tr></tbody></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/files.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/files.html",'<div class="row file_tab"><div class="col-xs-12 col-md-6"><input class="inputfile" id="file" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"><label for="file"><i class="fa fa-upload" aria-hidden="true"></i> {{\'select.file\' | translate}}</label><span ng-if="fileprogress.file_percent > 0"><div progress-bar="fileprogress.file_percent"></div></span></div></div><div class="row files" ng-if="storedCredential.files.length > 0"><div class="col-xs-12 table"><table><thead use-theme><tr><th class="field_label">{{ \'file.name\' | translate }}</th><th class="field_value">{{ \'upload.date\' | translate}}</th><th class="field_secret">{{ \'size\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tr ng-repeat="file in storedCredential.files"><td><a href="#" editable-text="file.filename">{{ file.filename || "empty" }}</a></td><td>{{file.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td>{{file.size | bytes}}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteFile(file)"></i></td></tr></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/otp.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/otp.html",'<div class="row"><div class="col-xs-12"><div class="col-xs-4 nopadding"><span class="otpText">{{ \'upload.qr\' | translate}}</span><select ng-model="otpType"><option value="qrcode">Upload QR code</option><option value="secret">Enter secret</option></select></div><div class="col-xs-6 nopadding"><input type="file" qrread on-read="parseQR(qrdata)" class="input_secret" on-read="parseQR(qrdata)" ng-show="otpType === \'qrcode\'"> <input type="text" ng-model="storedCredential.otp.secret" ng-show="otpType === \'secret\'"></div></div></div><div class="row"><div class="col-xs-12" ng-if="storedCredential.otp"><b>{{ \'current.qr\' | translate}}</b></div></div><div class="row"><div class="col-xs-5 col-sm-4 col-md-2" ng-if="storedCredential.otp.qr_uri"><img ng-src="{{storedCredential.otp.qr_uri.image}}"></div><div class="col-sm-4 col-sm-5 col-md-5"><table ng-show="storedCredential.otp"><tr ng-show="storedCredential.otp.type"><td>{{ \'type\' | translate}}:</td><td>{{storedCredential.otp.type}}</td></tr><tr ng-show="storedCredential.otp.label"><td>{{ \'label\' | translate}}:</td><td>{{storedCredential.otp.label}}</td></tr><tr ng-show="storedCredential.otp.issuer"><td>{{ \'issuer\' | translate}}:</td><td>{{storedCredential.otp.issuer}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>{{ \'secret\' | translate}}:</td><td>{{storedCredential.otp.secret}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>{{ \'otp\' | translate}}:</td><td><span otp-generator secret="storedCredential.otp.secret"></span></td></tr></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/password.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/password.html",'<div class="row"><div class="col-xs-12 col-md-5 col-lg-5"><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><label>{{ \'password.r\' | translate}}</label><div><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'expire.date\' | translate}}</label><div><span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time == 0" close-on-select="false">{{\'no.expire.date\' | translate}}</span> <span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time != 0" close-on-select="false">{{ storedCredential.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></div><label>{{ \'renew.interval\' | translate}}</label><div><input type="number" ng-model="renewIntervalValue" min="0" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><select ng-model="renewIntervalModifier" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><option value="0">{{ \'disabled\' | translate}}</option><option value="86400">{{ \'days\' | translate }}</option><option value="604800">{{ \'weeks\' | translate}}</option><option value="2592000">{{ \'months\' | translate}}</option><option value="31622400">{{ \'years\' | translate}}</option></select></div></div><div class="col-xs-12 col-md-7 col-lg-7"><b>{{ \'generation.settings\' | translate}}</b><div class="row"><div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="pwSettings.length" min="1"></label><label><span class="label">{{\'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="pwSettings.minimumDigitCount" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label><label><input ng-model="pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label><label><input ng-model="pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label><label><input type="checkbox" id="special" ng-model="pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label><label><input type="checkbox" id="ambig" ng-model="pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label><label><input type="checkbox" ng-model="pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div></div></div></div>')}]),angular.module("views/partials/forms/settings/export.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/export.html",'<div ng-controller="ExportCtrl"><div class="row"><div class="col-xs-6"><label>{{ \'export.type\' | translate}}<select ng-init="raw" ng-model="raw" ng-change="setExporter(raw)"><option ng-repeat="exporter in available_exporters" value="{{exporter}}">{{exporter.name}}</option></select></label><div><b>{{selectedExporter.description}}</b></div><div ng-show="selectedExporter" class="col-xs-3 nopadding"><label>{{ \'export.confirm.text\' | translate }}</label><input type="password" ng-model="confirm_key"><br><div class="alert alert-warning" ng-show="error">{{error}}</div></div><div class="clearfix"><button class="button" ng-click="startExport()" ng-if="selectedExporter">{{ \'export\' | translate}}</button></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div>')}]),angular.module("views/partials/forms/settings/general_settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/general_settings.html",'<div class="row"><div class="col-xs-12 col-md-6"><h3>{{ \'rename.vault\' | translate}}</h3><label>{{ \'rename.vault.name\' | translate}}</label><input type="text" ng-model="$parent.new_vault_name"> <button ng-click="saveVaultSettings()">{{ \'change\' | translate}}</button><h3>{{ \'change.vault.key\' | translate}}</h3><label>{{ \'old.vault.password\' | translate}}</label><input type="password" ng-model="oldVaultPass"><label>{{ \'new.vault.password\' | translate}}</label><password-gen ng-model="newVaultPass"></password-gen><ng-password-meter password="newVaultPass" score="vault_key_score"></ng-password-meter><label>{{ \'new.vault.pw.r\' | translate}}</label><input type="password" ng-model="newVaultPass2"><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li>{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><button ng-click="changeVaultPassword(oldVaultPass,newVaultPass,newVaultPass2)" ng-disabled="vault_key_score.score < minimal_value_key_strength">{{ \'change\' | translate}}</button><div ng-show="change_pw.total > 0">{{\'warning.leave\' | translate}}<br>{{ \'processing\' | translate}} {{cur_state.process}}<div progress-bar="cur_state.calculated" index="cur_state.current" total="cur_state.total"></div>{{ \'total.progress\' | translate}}<div progress-bar="change_pw.percent" index="change_pw.done" total="change_pw.total"></div></div><h3>{{\'delete.vault\' | translate}}</h3><b>{{ \'vault.remove.notice\' | translate }}</b><label>{{\'vault.password\' | translate}}</label><input type="password" ng-model="$parent.delete_vault_password"> <input type="checkbox" ng-model="$parent.confirm_vault_delete"> {{\'delete.vault.checkbox\' | translate}}<br><button class="btn btn-danger" ng-click="delete_vault()">{{\'delete.vault.confirm\' | translate}}</button><div ng-show="remove_pw">{{\'deleting.pw\' | translate:translationData}}<div progress-bar="remove_pw.percent" index="remove_pw.done" total="remove_pw.total"></div></div></div><div class="col-xs-12 col-md-6"><h3>{{ \'about.passman\' | translate}}</h3><p>{{ \'version\' | translate}}: <b>{{passman_version}}</b><br><br><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6YS8F97PETVU2" target="_blank" class="link">{{ \'donate.support\' | translate}}</a><br></p><h3>{{ \'bookmarklet\' | translate}}</h3><div><p>{{ \'bookmarklet.info1\' | translate}}<br>{{ \'bookmarklet.info2\' | translate}}<br></p></div><div><p ng-bind-html="bookmarklet" style="margin-top: 5px"></p></div></div></div>')}]),angular.module("views/partials/forms/settings/generic_csv_import.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/generic_csv_import.html",'<div ng-controller="GenericCsvImportCtrl"><div class="row"><div class="col-xs-12 col-md-3"><div>{{ \'select.csv\' | translate}} <input type="file" file-select accept=".csv" success="csvLoaded"></div><div ng-show="parsed_csv"><span translate="parsed.csv.rows" translate-value-rows="{{ parsed_csv.length }}"></span></div><div ng-show="parsed_csv"><input type="checkbox" ng-model="skipFirstRow" ng-checked="matched"> {{ \'skip.first.row\' | translate}}</div><div ng-show="import_fields.indexOf(\'label\') === -1 && parsed_csv"><b>{{ \'import.csv.label.req\' | translate}}</b></div><div ng-show="import_fields.indexOf(\'label\') !== -1 && parsed_csv"><button class="btn btn-success" ng-disabled="importing" ng-click="startCSVImport()"><i class="fa fa-spinner fa-spin" ng-show="importing"></i> {{ (importing) ? (\'import.importing\' | translate) : (\'import.start\' | translate) }}</button></div><div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div><div class="col-xs-12 col-md-9" ng-show="parsed_csv"><b>{{ \'first.five.lines\' | translate }}</b><br>{{ \'assign.column\' | translate }}<div class="import-table-outter"><table class="import-table"><tr ng-repeat="line in parsed_csv | limitTo:5"><td class="inspect"><i class="fa fa-search" ng-click="inspectCredential(line)" ng-if="($index > 0 && matched && import_fields.length > 0) || ($index >= 0 && !matched && import_fields.length > 0)"></i></td><td ng-repeat="prop in line track by $index">{{line[$index]}}</td></tr><tr ng-repeat="line in parsed_csv | limitTo:1"><td></td><td ng-repeat="prop in line track by $index"><select ng-model="import_fields[$index]" ng-change="updateExample()" ng-options="property.prop as property.label for property in credentialProperties"></select></td></tr></table></div><div ng-show="inspected_credential && import_fields.length > 0"><b>{{ \'example.credential\' | translate}}</b><div credential-template="inspected_credential" show-label></div></div></div></div></div>')}]),angular.module("views/partials/forms/settings/import.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/import.html",'<div><div ng-click="showGenericImport = !showGenericImport;" class="link"><span ng-show="!showGenericImport">{{\'missing.importer\' | translate}}</span> <span ng-show="showGenericImport">{{\'missing.importer.back\' | translate}}</span></div></div><div ng-controller="ImportCtrl" ng-show="!showGenericImport"><div class="row"><div class="col-xs-6"><label>{{ \'import.type\' | translate}}<select ng-init="importerType" ng-model="importerType" ng-change="setImporter(importerType)"><option ng-repeat="importer in available_importers" value="{{importer}}">{{importer.name}}</option></select></label><div ng-show="selectedImporter"><b>{{ \'import.steps\' | translate }}</b><ul class="import-steps"><li ng-repeat="step in selectedImporter.exportSteps">{{step}}</li></ul></div><input ng-if="selectedImporter" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"><br><button class="button" ng-click="startImport()" ng-if="selectedImporter">{{ \'import\' | translate}}</button><div ng-if="file_read_progress.percent > 0">{{ \'read.progress\' | translate}}<div progress-bar="file_read_progress.percent" index="file_read_progress.loaded" total="file_read_progress.total"></div></div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div><div ng-include="\'views/partials/forms/settings/generic_csv_import.html\'" ng-show="showGenericImport"></div>')}]),angular.module("views/partials/forms/settings/password_settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/password_settings.html",'<div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.length" min="1"></label><label><span class="label">{{ \'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.minimumDigitCount" min="0"></label><label><span class="label">Generate password on creation</span><br><input type="checkbox" ng-model="vault_settings.pwSettings.generateOnCreate" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="vault_settings.pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label><label><input ng-model="vault_settings.pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label><label><input ng-model="vault_settings.pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label><label><input type="checkbox" id="special" ng-model="vault_settings.pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label><label><input type="checkbox" id="ambig" ng-model="vault_settings.pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label><label><input type="checkbox" ng-model="vault_settings.pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div><div class="row"><div class="col-xs-12"><button class="button" ng-click="saveVaultSettings()">{{ \'save\' | translate}}</button></div></div>')}]),angular.module("views/partials/forms/settings/sharing.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/sharing.html",'<div ng-controller="SharingSettingsCtrl"><div class="row"><div class="col-md-6"><label>{{ \'priv.key\' | translate}}</label><textarea class="col-md-12">{{sharing_keys.private_sharing_key}}</textarea></div><div class="col-md-6"><label>{{ \'pub.key\' | translate}}</label><textarea class="col-md-12">{{sharing_keys.public_sharing_key}}</textarea></div></div><div class="row"><div class="col-md-12"><label>{{ \'key.size\' | translate}}<select ng-model="key_size" ng-options="size.name for size in available_sizes"></select><button ng-click="updateSharingKeys()"><i class="fa fa-fa-floppy-o"></i> {{ \'save.keys\' | translate}}</button> <button ng-if="!generating" ng-click="generateKeys(key_size.size)">{{ \'gen.keys\' | translate}}</button> <button ng-if="generating"><i class="fa fa-spinner fa-spin"></i> {{ \'generating.keys\' | translate}} ({{progress}}/2)</button></label></div></div></div>')}]),angular.module("views/partials/forms/settings/tool.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/tool.html",'<div class="row"><div class="col-xs-12"><p>{{ \'tool.intro\' | translate}}</p></div><div class="col-xs-12" ng-init="minStrength = 3;">{{ \'min.strength\' | translate}} <input type="number" min="1" max="4" value="3" ng-model="minStrength"> <button ng-click="startScan(minStrength)">{{ \'scan.start\' | translate}}</button></div></div><div class="row" ng-show="scan_result"><div class="col-xs-12"><p>{{ \'scan.result.msg\' | translate}}<br><span translate="scan.result" translate-values="{ scan_result: scan_result.length}"></span><br></p><table class="table scan-result-table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'score\' | translate}}</td><td>{{ \'password\' | translate}}</td><td>{{ \'action\' | translate}}</td></tr></thead><tbody><tr ng-repeat="result in scan_result | orderBy:\'password_zxcvbn_result.score\'"><td>{{result.label}}</td><td class="score"><ng-password-meter password="result.password"></ng-password-meter></td><td><span credential-field value="result.password" secret="\'true\'"></span></td><td><a class="link" ng-href="#/vault/{{active_vault.guid}}/edit/{{result.guid}}" tooltip="{{ \'edit.credential\' | translate}}"><i class="fa fa-edit"></i></a></td></tr></tbody></table></div></div>')}]),angular.module("views/partials/forms/share_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/share_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><div><table class="table sharing_table"><thead><tr><td><tags-input ng-model="inputSharedWith" replace-spaces-with-dashes="false" add-from-autocomplete-only="true" placeholder="{{ \'search.u.g\' | translate}}"><auto-complete source="searchUsers($query)" min-length="0" template="autocomplete-template"></auto-complete></tags-input></td><td><button class="button" ng-click="shareWith(inputSharedWith, selectedAccessLevel)">+</button></td></tr><tr><td colspan="2"><small>{{ \'search.result.missing\' | translate}}</small></td></tr></thead></table><div ng-if="share_settings.cypher_progress.done > 0">{{\'cyphering\' | translate}}...<div progress-bar="share_settings.cypher_progress.percent" index="share_settings.cypher_progress.done" total="share_settings.cypher_progress.total"></div></div><div ng-if="share_settings.upload_progress.done > 0">{{ \'uploading\' | translate}}...<div progress-bar="share_settings.upload_progress.percent" index="share_settings.upload_progress.done" total="share_settings.upload_progress.total"></div></div></div></div><div class="col-xs-12 col-md-6" ng-show="share_settings.cypher_progress.times.length > 0"><table class="table"><thead><tr><td>{{ \'user\' | translate}}</td><td>{{ \'crypto.time\' | translate}}</td></tr></thead><tr ng-repeat="user in share_settings.cypher_progress.times"><td><i class="fa fa-cogs"></i> {{user.user}}</td><td>{{user.time}} s</td></tr></table>{{ \'crypto.total.time\' | translate}}: {{ calculate_total_time() }}</div></div><div class="row"><div class="col-xs-12 col-md-6"><table class="table shared_table" ng-show="share_settings.credentialSharedWithUserAndGroup.length > 0"><thead><tr><td>{{\'user\' | translate}}</td><td>{{ \'perm.read\' | translate}}</td><td>{{ \'perm.write\' | translate}}</td><td>{{ \'perm.files\' | translate}}</td><td>{{ \'perm.revisions\' | translate}}</td><td></td></tr></thead><tr ng-repeat="user in share_settings.credentialSharedWithUserAndGroup"><td><i class="fa fa-user" ng-if="user.pending === false"></i> <i class="fa fa-user-times" ng-if="user.pending === true"></i> {{user.userId}} <small ng-if="user.pending === true" class="pull-right col-xs-4">{{ \'pending\' | translate}}</small></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.READ)" ng-checked="hasPermission(user.acl, default_permissions.permissions.READ)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.WRITE)" ng-checked="hasPermission(user.acl, default_permissions.permissions.WRITE)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(user.acl, default_permissions.permissions.FILES)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.HISTORY)" ng-checked="hasPermission(user.acl, default_permissions.permissions.HISTORY)"></td><td><i class="fa fa-trash" ng-click="unshareUser(user)"></i></td></tr></table></div></div><script type="text/ng-template" id="autocomplete-template"><i class="fa fa-user" ng-if="data.type === \'user\'"></i>\n\t<i class="fa fa-group" ng-if="data.type === \'group\'"></i>\n\t{{data.text}}</script>')}]),angular.module("views/partials/forms/share_credential/link_sharing.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/share_credential/link_sharing.html",'<div class="row"><div class="col-xs-12 col-md-6"><label><input type="checkbox" ng-model="share_settings.linkSharing.enabled"> {{ \'enable.link.sharing\' | translate}}.</label><br><div class="pull-left col-xs-6 nopadding"><span credential-field value="share_link" secret="false" use-input="true" input-placeholder="\'click.share\' | translate"></span></div><div ng-show="share_settings.linkSharing.enabled" class="clearfix">{{ \'share.until.date\' | translate}} <span datetime-picker ng-model="share_settings.linkSharing.settings.expire_time" class="link" future-only close-on-select="false" timestamp="true">{{ share_settings.linkSharing.settings.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\' }}</span></div><div ng-show="share_settings.linkSharing.enabled">{{ \'expire.views\' | translate}}<br><input type="number" ng-model="share_settings.linkSharing.settings.expire_views"></div><div ng-if="share_settings.linkSharing.enabled"><table><tr><td><input type="checkbox" ng-click="setPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)"></td><td>{{ \'show.files\' | translate}}</td></tr></table></div></div></div>');
-}]),angular.module("views/partials/password-meter.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/password-meter.html",'<div class="pass-meter {{masterClass}}" off-click="matchBreakdown = false;"><div class="{{colClass}} pass-meter-col {{first}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{second}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{third}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{fourth}}"><div class="indicator"></div></div><div class="details" ng-click="toggleScore()"><span ng-show="!scoreShown">{{ \'details\' | translate }}</span> <span ng-show="scoreShown">{{ \'hide.details\' | translate}}</span></div><div class="pass-meter-message">{{message}}</div><div class="detail_box" ng-show="scoreShown"><div class="row"><div class="col-xs-6">{{ \'password.score\' | translate}}:</div><div class="col-xs-6">{{score.score}}</div></div><div><b>{{ \'cracking.times\' | translate}}</b></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.100h\' | translate}}<br><small>{{ \'cracking.time.100h.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.online_throttling_100_per_hour}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10s\' | translate}}<br><small>{{ \'cracking.time.10s.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.online_no_throttling_10_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10ks\' | translate}}<br><small>{{ \'cracking.time.10ks.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.offline_slow_hashing_1e4_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10Bs\' | translate}}<br><small>{{ \'cracking.time.10Bs.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.offline_fast_hashing_1e10_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'match.sequence\' | translate}}:</div><div class="col-xs-6"><span class="link" ng-click="toggleMatchBreakdown()">{{ \'match.sequence.link\' | translate}}</span></div></div></div></div><div class="match-sequence"><div class="sequence_container" ng-style="{\'width\': score.sequence.length * 210 }"><div class="sequence" ng-repeat="sequence in score.sequence"><table><tr><td colspan="2" class="token"><code>{{sequence.token}}</code></td></tr><tr ng-if="sequence.pattern"><td>{{ \'pattern\' | translate}}</td><td>{{sequence.pattern}}</td></tr><tr ng-if="sequence.matched_word"><td>{{ \'matched.word\' | translate}}</td><td>{{sequence.matched_word}}</td></tr><tr ng-if="sequence.dictionary_name"><td>{{ \'dictionary.name\' | translate}}</td><td>{{sequence.dictionary_name}}</td></tr><tr ng-if="sequence.rank"><td>{{ \'rank\' | translate}}</td><td>{{sequence.rank}}</td></tr><tr ng-if="sequence.reversed"><td>{{ \'reversed\' | translate}}</td><td>{{sequence.reversed}}</td></tr><tr ng-if="sequence.guesses"><td>{{ \'guesses\' | translate}}</td><td>{{sequence.guesses}}</td></tr><tr ng-if="sequence.base_guesses"><td>{{ \'base.guesses\' | translate}}</td><td>{{sequence.base_guesses}}</td></tr><tr ng-if="sequence.uppercase_variations"><td>{{ \'uppercase.variations\' | translate}}</td><td>{{sequence.uppercase_variations}}</td></tr><tr ng-if="sequence.l33t_variations"><td>{{ \'leet.variations\' | translate}}</td><td>{{sequence.l33t_variations}}</td></tr></table></div></div></div>')}]),angular.module("views/settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/settings.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last"><a>{{ \'settings\' | translate}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container settings edit_credential"><div ng-include="currentTab.url"></div></div>')}]),angular.module("views/share_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/share_credential.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'share.credential\' | translate}} {{storedCredential.label}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container share_credential" ng-show="currentTab"><div ng-include="currentTab.url"></div><button ng-click="applyShare()" ng-disabled="share_settings.linkSharing.enabled === false && share_settings.credentialSharedWithUserAndGroup.length === 0">{{ \'share\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button> <button class="btn btn-danger" ng-disabled="!storedCredential.shared_key" ng-click="unshareCredential(storedCredential)">{{ \'unshare\' | translate}}</button></div>')}]),angular.module("views/show_vault.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/show_vault.html",'<div off-click="closeSelected()" off-click-filter="\'.download-js-link, .sidebar-shown\'"><div id="passman-controls" ng-class="{ \'sidebar-shown\': selectedCredential }"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a><i class="fa fa-home"></i></a></div><div class="crumb svg last" ng-click="clearState()"><span>{{active_vault.name}}</span></div></div></div><div class="actions creatable"><span ng-click="addCredential()" class="button new"><span>+</span></span></div><div class="title" credential-counter="filtered_credentials" vault="active_vault" delete-time="delete_time" filters="filterOptions"></div><div class="searchboxContainer" ng-init="filterOptionShown = false;" off-click="filterOptionShown = false;"><input type="text" ng-model="filterOptions.filterText" class="searchbox" id="searchBox" placeholder="{{\'search.credential\' | translate}}" select-on-click clear-btn ng-click="filterOptionShown = true;"><div class="searchOptions" ng-show="filterOptionShown"><input type="checkbox" ng-model="filterOptions.useRegex"> {{ \'use.regex\' | translate }}</div></div><div class="viewModes"><div class="view-mode" ng-class="{\'active\': view_mode === \'list\' }" ng-click="switchViewMode(\'list\')"><i class="fa fa-list"></i></div><div class="view-mode" ng-class="{\'active\': view_mode === \'grid\' }" ng-click="switchViewMode(\'grid\')"><i class="fa fa-th-large"></i></div></div></div><div class="loaderContainer" ng-if="show_spinner"><div class="loader" use-theme type="\'border-bottom-color\'"></div></div><div ng-init="menuOpen = false;"><table class="credential-table" ng-if="view_mode === \'list\'"><tr ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td><span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span></span> <span class="icon"><i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i></span> <span class="label">{{ ::credential.label}}</span></td></tr></table><ul class="grid-view" ng-if="view_mode === \'grid\'"><li class="credential" ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" use-theme type="\'border-color\'"><div class="credential_content"><div class="label">{{ ::credential.label}}</div><div class="tags"><div class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</div></div></div></li></ul></div><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedCredential"><h2>{{selectedCredential.label}}</h2><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span><div credential-template="selectedCredential"></div><div ng-show="selectedCredential"><div><button class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-edit"></span> {{ \'edit\' | translate}}</button> <button class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-trash"></span> {{ \'delete\' | translate}}</button> <button class="button" ng-click="shareCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&\n\t\t\t\t\t\t(settings.user_sharing_enabled === 1 || settings.user_sharing_enabled === \'1\' || settings.link_sharing_enabled === 1 || settings.link_sharing_enabled === \'1\')"><span class="fa fa-share"></span> {{ \'share\' | translate}}</button> <button class="button" ng-click="getRevisions(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"><span class="fa fa-undo"></span> {{ \'revisions\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-recycle"></span> {{\'recover\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="destroyCredential(selectedCredential)"><span class="fa fa-bomb"></span> {{\'destroy\' | translate}}</button></div></div></div></div><div class="share_popup" style="display: none">{{ \'sharereq.title\' | translate}}<br><p>{{ \'sharereq.line1\' | translate}}</p>{{active_vault.vault_id}}<table class="table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'permissions\' | translate}}</td><td>{{ \'received.from\' | translate}}</td><td>{{ \'date\' | translate}}</td></tr></thead><tr ng-repeat="share_request in incoming_share_requests" ng-if="share_request.target_vault_id == active_vault.vault_id"><td>{{share_request.credential_label}}</td><td>{{share_request.permissions}}</td><td>{{share_request.from_user_id}}</td><td>{{share_request.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td><span class="link" ng-click="acceptShareRequest(share_request)">{{ \'accept\' | translate}}</span> | <span class="link" ng-click="declineShareRequest(share_request)">{{ \'decline\' | translate}}</span></td></tr></table></div>')}]),angular.module("views/vault_req_deletion.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vault_req_deletion.html",'<div class="vault_wrapper"><div class="reset_form" ng-show="!pending_deletion">{{ \'req.intro1\' | translate }}<br>{{ \'req.intro2\' | translate }}<br>{{ \'req.intro3\' | translate }}<br><br><b>{{ \'request.deletion.warning\' | translate}}</b><label>{{ \'request.deletion.reason\' | translate }}</label><input type="text" ng-model="reason" class="form-control"> <button class="button button-red" ng-click="requestDeletion()">{{ \'request.deletion.accept\' | translate }}</button> <a class="pull-right button button-geen" ng-href="#/">{{ \'cancel\' | translate}}</a></div><div class="reset_form" ng-show="pending_deletion"><button class="button button-red" ng-click="removeRequestDeletion()">Cancel destruction request</button> <a class="pull-right button button-geen" ng-href="#/">Cancel</a></div></div>')}]),angular.module("views/vaults.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vaults.html",'<div class="vault_wrapper"><div class="vaults" ng-if="!list_selected_vault && !creating_vault"><div class="ui-select-container ui-select-bootstrap vaultlist"><ul><li ng-click="newVault()">+ Create a new vault</li><li ng-repeat="vault in vaults" ng-class="{\'selected\': vault == list_selected_vault }" ng-click="selectVault(vault)"><div><span class="ui-select-choices-row-inner"><div class="ng-binding ng-scope">{{vault.name}} <span class="pull-right" style="color: #ce3702" ng-show="vault.delete_request_pending">{{ \'delete.request.pending\' | translate}}</span></div><small class="ng-binding ng-scope">{{ \'created\' | translate}}: {{vault.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} | {{ \'last.access\' | translate}}: <span ng-if="vault.last_access > 0">{{vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="vault.last_access === 0">{{\'never\' | translate}}</span></small></span></div></li><li ng-if="vaults.length === 0">{{ \'no.vaults\' | translate}}</li></ul></div></div><div ng-if="creating_vault"><div class="login_form" ng-init="vault_name = \'\'; vault_key=\'\'; ">{{\'new.vault.name\' | translate}}<div><input type="text" ng-model="vault_name" required></div><div>{{ \'new.vault.pass\' | translate}} <input type="password" ng-model="vault_key" required><ng-password-meter password="vault_key" score="vault_key_score"></ng-password-meter></div><div>{{ \'new.vault.passr\' | translate}} <input type="password" ng-model="vault_key2" required></div><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li ng-show="error">{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><div><small>{{\'new.vault.sharing_key_notice\' | translate}}</small></div><div class="button_wrapper"><button class="button button-geen" ng-if="!creating_keys" click-disable ng-click="createVault(vault_name, vault_key, vault_key2)" ng-disabled="vault_key_score.score < minimal_value_key_strength || vault_key !== vault_key2 || vault_key === \'\'">{{ \'new.vault.create\' | translate }}</button><div class="button" ng-if="creating_keys"><span><i class="fa fa-spinner fa-spin"></i> {{creating_keys}}</span></div><div class="button button-red" ng-click="clearState()">{{ \'cancel\' | translate}}</div><div class="hidden">{{sharing_keys}}</div></div></div></div><div ng-if="list_selected_vault != false"><div class="vaultlist"><ul><li ng-click="clearState()">{{ \'go.back.vaults\' | translate }}</li></ul></div><div class="login_form"><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div>{{ \'input.vault.password\' | translate}} {{list_selected_vault.name}}<div class="pw-input"><input type="password" ng-model="vault_key" ng-enter="loginToVault(list_selected_vault, vault_key)"> <small class="last_access">{{\'last.access\' | translate}}: <span ng-if="list_selected_vault.last_access > 0">{{list_selected_vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="list_selected_vault.last_access === 0">Never</span></small></div><div class="login_opts"><div><label><input type="checkbox" ng-checked="default_vault" ng-click="toggleDefaultVault()"> {{ \'vault.default\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="remember_vault_password" ng-click="toggleRememberPassword()"> {{ \'vault.auto.login\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="auto_logout_timer" ng-click="toggleAutoLogout()"> {{ \'auto.logout\' | translate}}</label><select ng-model="logout_timer" ng-change="selectLogoutTimer(logout_timer)"><option value="0">Never</option><option value="30">30 minutes</option><option value="60">60 minutes</option><option value="90">90 minutes</option><option value="180">3 hour</option><option value="480">8 hour</option></select></div></div><div class="alert alert-danger" ng-show="vault_tries[list_selected_vault.guid].timeout !== 0" translate="vault.locked" translate-value-tries="{{ vault_tries[list_selected_vault.guid].tries }}" translate-value-time="{{ vault_tries[list_selected_vault.guid].timeout | toHHMMSS }}"></div><button class="button button-geen" ng-click="loginToVault(list_selected_vault, vault_key)" ng-disabled="vault_tries[list_selected_vault.guid].timeout !== 0">{{ \'vault.decrypt\' | translate}}</button> <span ng-click="forgottenPassword = true;" style="margin-top: 10px; padding: 6px 12px" class="link pull-right" ng-show="!forgottenPassword">Forgot password?</span> <button ng-show="forgottenPassword" class="pull-right button button-red" ng-click="requestDeletion(list_selected_vault)"><span ng-show="list_selected_vault.delete_request_pending">{{ \'cancel.request.deletion\' | translate }}</span> <span ng-show="!list_selected_vault.delete_request_pending">{{ \'request.deletion\' | translate }}</span></button></div></div></div>')}]),$(document).ready(function(){function format_date(date){date=new Date(date);var month=date.getMonth(),year=date.getFullYear(),day=date.getDate(),hour=date.getHours(),minutes=date.getMinutes(),seconds=date.getSeconds();return month+=1,month<10&&(month="0"+month),hour<10&&(hour="0"+hour),minutes<10&&(minutes="0"+minutes),seconds<10&&(seconds="0"+seconds),day+"-"+month+"-"+year+" "+hour+":"+minutes+":"+seconds}function acceptDeleteRequest(el,req){confirm(OC.L10N.translate("passman","Are you really sure?\nThis will delete the vault and all credentials in it!"))&&$.post(OC.generateUrl("apps/passman/admin/accept-delete-request"),req,function(){$(el).parent().parent().remove()})}function ignoreDeleteRequest(el,req){$.ajax({url:OC.generateUrl("apps/passman/admin/request-deletion/"+req.vault_guid),type:"DELETE",success:function(){$(el).parent().parent().remove()}})}var Settings=function(baseUrl){this._baseUrl=baseUrl,this._settings=[]};Settings.prototype={load:function(){var deferred=$.Deferred(),self=this;return $.ajax({url:this._baseUrl,method:"GET",async:!1}).done(function(settings){self._settings=settings}).fail(function(){deferred.reject()}),deferred.promise()},setUserKey:function(key,value){var request=$.ajax({url:this._baseUrl+"/"+key+"/"+value,method:"POST"});request.done(function(){$(".msg-passwords").removeClass("msg_error"),$(".msg-passwords").text("")}),request.fail(function(){$(".msg-passwords").addClass("msg_error"),$(".msg-passwords").text(t("passwords","Error while saving field")+" "+key+"!")})},setAdminKey:function(key,value){var request=$.ajax({url:this._baseUrl+"/"+key+"/"+value+"/admin1/admin2",method:"POST"});request.done(function(){$(".msg-passwords").removeClass("msg_error"),$(".msg-passwords").text("")}),request.fail(function(){$(".msg-passwords").addClass("msg_error"),$(".msg-passwords").text(t("passwords","Error while saving field")+" "+key+"!")})},getKey:function(key){return!!this._settings.hasOwnProperty(key)&&this._settings[key]},getAll:function(){return this._settings}};var settings=new Settings(OC.generateUrl("apps/passman/api/v2/settings"));settings.load(),$("#passman_link_sharing_enabled").prop("checked","1"===settings.getKey("link_sharing_enabled").toString().toLowerCase()),$("#passman_sharing_enabled").prop("checked","1"===settings.getKey("user_sharing_enabled").toString().toLowerCase()),$("#passman_check_version").prop("checked","1"===settings.getKey("check_version").toString().toLowerCase()),$("#passman_https_check").prop("checked","1"===settings.getKey("https_check").toString().toLowerCase()),$("#passman_disable_contextmenu").prop("checked","1"===settings.getKey("disable_contextmenu").toString().toLowerCase()),$("#passman_disable_debugger").prop("checked","1"===settings.getKey("disable_debugger").toString().toLowerCase()),$("#vault_key_strength").val(settings.getKey("vault_key_strength")),$("#passman_check_version").change(function(){settings.setAdminKey("check_version",$(this).is(":checked")?1:0)}),$("#passman_https_check").change(function(){settings.setAdminKey("https_check",$(this).is(":checked")?1:0)}),$("#passman_disable_contextmenu").change(function(){settings.setAdminKey("disable_contextmenu",$(this).is(":checked")?1:0)}),$("#passman_disable_debugger").change(function(){settings.setAdminKey("disable_debugger",$(this).is(":checked")?1:0)}),$("#passman_sharing_enabled").change(function(){settings.setAdminKey("user_sharing_enabled",$(this).is(":checked")?1:0)}),$("#passman_link_sharing_enabled").change(function(){settings.setAdminKey("link_sharing_enabled",$(this).is(":checked")?1:0)}),$("#vault_key_strength").change(function(){settings.setAdminKey("vault_key_strength",$(this).val())}),2===$('form[name="passman_settings"]').length&&$('form[name="passman_settings"]')[1].remove();var accountMover={source_account:"",destination_account:""};$(".username-autocomplete").autocomplete({source:OC.generateUrl("apps/passman/admin/search"),minLength:1,select:function(event,ui){accountMover[$(this).attr("id")]=ui.item.value}}),$("#move_credentials").click(function(){var self=this;$("#moveStatus").hide(),$(self).attr("disabled","disabled"),$(self).html('<i class="fa fa-spinner fa-spin"></i> '+OC.L10N.translate("passman","Moving")+"..."),accountMover.source_account&&accountMover.destination_account&&$.post(OC.generateUrl("apps/passman/admin/move"),accountMover,function(data){data.success&&($(self).removeAttr("disabled"),$(self).html("Move"),$("#moveStatus").fadeIn(),setTimeout(function(){$("#moveStatus").fadeOut()},3500))})}),$.get(OC.generateUrl("apps/passman/admin/delete-requests"),function(requests){var table=$("#requests-table tbody");$.each(requests,function(k,request){var accept=$('<span class="link">[Accept]&nbsp;</span>');accept.click(function(){var _self=this;acceptDeleteRequest(_self,request)});var ignore=$('<span class="link">[Ignore]</span>');ignore.click(function(){var _self=this;ignoreDeleteRequest(_self,request)});var cols=$("<td>"+request.id+"</td><td>"+request.displayName+"</td><td>"+request.reason+"</td><td>"+format_date(1e3*request.created)+"</td>"),actions=$("<td></td>").append(accept).append(ignore);table.append($("<tr></tr>").append(cols).append(actions))})}),$("#passman-tabs").tabs()}); \ No newline at end of file
+w+=m.charAt(d)}return w}function rng_seed_int(r){rng_pool[rng_pptr++]^=255&r,rng_pool[rng_pptr++]^=r>>8&255,rng_pool[rng_pptr++]^=r>>16&255,rng_pool[rng_pptr++]^=r>>24&255,rng_pptr>=rng_psize&&(rng_pptr-=rng_psize)}function rng_seed_time(){rng_seed_int((new Date).getTime())}function rng_get_byte(){if(null==rng_state){for(rng_seed_time(),rng_state=prng_newstate(),rng_state.init(rng_pool),rng_pptr=0;rng_pptr<rng_pool.length;++rng_pptr)rng_pool[rng_pptr]=0;rng_pptr=0}return rng_state.next()}function rng_get_bytes(r){var t;for(t=0;t<r.length;++t)r[t]=rng_get_byte()}function SecureRandom(){}function get_random(r,t){var n,e,o,i=t-r+1;for(rng_seed_time(),n=[],e=0;4>e;e++)n[e]=0;for(rng_get_bytes(n),o=0,e=0;4>e;e++)o*=256,o+=n[e];return o%=i,o+=r}var rng_psize,rng_state,rng_pool,rng_pptr,t,z,crypt_obj,num,buf,i;if(Arcfour.prototype.init=ARC4init,Arcfour.prototype.next=ARC4next,rng_psize=256,null==rng_pool){if(rng_pool=[],rng_pptr=0,"undefined"!=typeof navigator&&"Netscape"==navigator.appName&&navigator.appVersion<"5"&&"undefined"!=typeof window&&window.crypto)for(z=window.crypto.random(32),t=0;t<z.length;++t)rng_pool[rng_pptr++]=255&z.charCodeAt(t);try{if(crypt_obj=null,"undefined"!=typeof window&&void 0!==window.crypto?crypt_obj=window.crypto:"undefined"!=typeof window&&void 0!==window.msCrypto&&(crypt_obj=window.msCrypto),void 0!==crypt_obj&&"function"==typeof crypt_obj.getRandomValues&&rng_psize>rng_pptr)for(num=Math.floor((rng_psize-rng_pptr)/2)+1,buf=new Uint16Array(num),crypt_obj.getRandomValues(buf),i=0;i<buf.length;i++)t=buf[i],rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t}catch(e){}for(;rng_psize>rng_pptr;)t=Math.floor(65536*sjcl.random.randomWords(1)),rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t;rng_pptr=0,rng_seed_time()}return SecureRandom.prototype.nextBytes=rng_get_bytes,{scope:{model:"=ngModel",length:"@",placeholder:"@",settings:"=settings",callback:"&callback"},restrict:"E",replace:"true",template:'<div class=" pw-gen "><div class="input-group "><input ng-show="!passwordVisible" type="password" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><input ng-show="passwordVisible" type="text" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><span class="generate_pw"><div class="cell" tooltip="gen_msg" ng-click="generatePasswordStart()"><i class="fa fa-refresh"></i></div><div class="cell" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': passwordVisible, \'fa-eye-slash\': !passwordVisible }"></i></div><div class="cell" tooltip="\'Copy password to clipboard\'"><i class="fa fa-clipboard" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{password}}"></i></div></button></div></div>',link:function(scope){scope.callback=scope.callback(),scope.$watch("model",function(){scope.password=scope.model}),scope.passwordVisible=!1,scope.toggleVisibility=function(){scope.passwordVisible=!scope.passwordVisible},scope.passwordNotNull=!1,scope.$watch("settings",function(){scope.settings&&!scope.password&&scope.settings.generateOnCreate&&scope.generatePasswordStart()}),$translate(["password.gen","password.copy","copied","toggle.visibility"]).then(function(translations){scope.tggltxt=translations["toggle.visibility"],scope.copy_msg=translations["password.copy"],scope.gen_msg=translations["password.gen"]}),scope.$watch("password",function(){scope.model=scope.password,scope.password_repeat=scope.model}),scope.onSuccess=function(e){OC.Notification.showTemporary($translate.instant("password.copied")),e.clearSelection()},scope.onError=function(){OC.Notification.showTemporary("Press Ctrl+C to copy!")},scope.progressDivShow=!1,scope.generatePasswordStart=function(){scope.progressDivShow=!0,scope.progressValue=0,scope.progressWidth={width:scope.progressValue+"%"},scope.generatePasswordProgress()},scope.generatePasswordProgress=function(){$timeout(function(){scope.progressValue<100?(scope.password=scope._generatePassword(scope.settings),scope.progressValue+=10,scope.progressWidth={width:scope.progressValue+"%"},scope.disabled=!0,scope.generatePasswordProgress()):(scope.disabled=!1,scope.callback&&scope.callback(scope.password))},10)},scope._generatePassword=function(settings){var _settings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0};settings=angular.merge(_settings,settings);var password=generatePassword(settings.length,settings.useUppercase,settings.useLowercase,settings.useDigits,settings.useSpecialChars,settings.minimumDigitCount,settings.avoidAmbiguousCharacters,settings.requireEveryCharType);return password}}}})}(),function(){angular.module("passmanApp").directive("progressBar",["$translate",function($translate){return{restrict:"A",template:'<div class="progress"><div class="progress-bar" role="progressbar" aria-valuenow="{{progress}}"aria-valuemin="0" aria-valuemax="100" style="width:{{progress}}%;" use-theme><span class="sr-only">{{progress}}% {{completed_text}}</span><span ng-if="index && total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{index}} / {{total}}</span><span ng-if="!index && !total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{progress}}%</span></div></div>',scope:{progress:"=progressBar",index:"=index",total:"=total"},link:function(scope){$translate(["complete"]).then(function(translations){scope.completed_text=translations.complete})}}}])}(),function(){angular.module("passmanApp").directive("qrread",["$parse",function($parse){return{scope:!0,link:function(scope,element,attributes){var invoker=$parse(attributes.onRead);scope.imageData=null,qrcode.callback=function(result){invoker(scope,{qrdata:{qrData:result,image:scope.imageData}})},element.bind("change",function(changeEvent){var reader=new FileReader,file=changeEvent.target.files[0];reader.readAsDataURL(file),reader.onload=function(){return function(e){scope.imageData=e.target.result,qrcode.decode(e.target.result)}}(file)})}}}])}(),function(){angular.module("passmanApp").directive("tooltip",[function(){return{restrict:"A",scope:{tooltip:"=tooltip"},link:function(scope,el){scope.$watch("tooltip",function(){scope.tooltip&&(jQuery(el).attr("title",scope.tooltip),jQuery(el).tooltip(),jQuery(el).attr("title",scope.tooltip).tooltip("fixTitle"),jQuery(".tooltip-inner").text(scope.tooltip),jQuery(el).is(":visible"))})}}}])}(),function(){angular.module("passmanApp").directive("useTheme",[function(){function invertColor(hexTripletColor){var color=hexTripletColor;return color=color.substring(1),color=parseInt(color,16),color^=16777215,color=color.toString(16),color=("000000"+color).slice(-6),color="#"+color}return{restrict:"A",scope:{type:"=type",color:"=",negative:"="},link:function(scope,el){var _color=jQuery("#header").css("background-color"),_bg=_color;scope.negative&&(_bg=invertColor(_bg)),scope.type?jQuery(el).css(scope.type,_bg):jQuery(el).css("background-color",_bg),scope.color&&jQuery(el).css("color",invertColor(_color))}}}])}();var PassmanImporter={};!function(window,$,PassmanImporter){PassmanImporter.parseRow_=function(row){row=row.trim();var isQuoted=!1;return'"'===row.charAt(0)&&(row=row.substring(1),isQuoted=!0),'"'===row.charAt(row.length-2)&&(row=row.substring(0,row.length-2),isQuoted=!0),row=isQuoted===!0?row.split('","'):row.split(",")},PassmanImporter.htmlDecode=function(input){var e=document.createElement("div");return e.innerHTML=input,e.childNodes[0].nodeValue},PassmanImporter.toObject_=function(headings,row){for(var result={},i=0,ii=row.length;i<ii;i++)headings[i]?(headings[i]=headings[i].replace(",","_").toLowerCase().replace(" ","_").replace("(","").replace(")","").replace('"',""),result[headings[i]]=row[i]):result[ii]=row[i];return result},PassmanImporter.join_=function(arr,sep){for(var parts=[],i=0,ii=arr.length;i<ii;i++)arr[i]&&parts.push(arr[i]);return parts.join(sep)},PassmanImporter.newCredential=function(){var credential={credential_id:null,guid:null,vault_id:null,label:null,description:null,created:null,changed:null,tags:[],email:null,username:null,password:null,url:null,favicon:null,renew_interval:null,expire_time:0,delete_time:0,files:[],custom_fields:[],otp:{},hidden:!1};return credential},PassmanImporter.readCsv=function(csv,hasHeadings){hasHeadings=void 0===hasHeadings||hasHeadings;var lines=[];return Papa.parse(csv,{complete:function(results){if(results.data)for(var headings=hasHeadings?results.data[0]:null,start=hasHeadings?1:0,i=start;i<results.data.length;i++){var _row=hasHeadings?PassmanImporter.toObject_(headings,results.data[i]):results.data[i];lines.push(_row)}}}),lines},PassmanImporter.readJson=function(string){return JSON.parse(string)}}(window,$,PassmanImporter),String.prototype.replaceAll=function(search,replacement){var target=this;return target.replace(new RegExp(search,"g"),replacement)},Array.prototype.clean=function(deleteValue){for(var i=0;i<this.length;i++)this[i]===deleteValue&&(this.splice(i,1),i--);return this};var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.clippers={info:{name:"Clipperz.is",id:"clippers",exportSteps:["Go to menu -> Export -> Download HTML + JSON. Fields will be imported as custom fields."]}},PassmanImporter.clippers.readFile=function(file_data){return new C_Promise(function(){var credential_list=[],re=/<textarea>(.*?)<\/textarea>/gi,matches=re.exec(file_data);if(matches){var raw_json=matches[0].substring(10);raw_json=PassmanImporter.htmlDecode(raw_json.slice(0,-11));for(var json_objects=PassmanImporter.readJson(raw_json),i=0;i<json_objects.length;i++){var card=json_objects[i];re=/(\w+)/gi;var tags=card.label.match(re);card.label=card.label.replace(tags.join(" "),"").trim(),tags=tags.map(function(item){return{text:item.replace("","")}});var _credential=PassmanImporter.newCredential();_credential.label=card.label,_credential.description=card.data.notes,_credential.tags=tags;for(var field in card.currentVersion.fields){var field_data=card.currentVersion.fields[field];_credential.custom_fields.push({label:field_data.label,value:field_data.value,secret:field_data.hidden===!0})}_credential.label&&credential_list.push(_credential);var progress={percent:i/json_objects.length*100,loaded:i,total:json_objects.length};this.call_progress(progress)}}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.dashLaneCsv={info:{name:"Dashlane 4 csv",id:"dashLaneCsv",exportSteps:["Create an csv export. Go to File -> export -> Unsecured archive (readable) in CSV format"]}},PassmanImporter.dashLaneCsv.readFile=function(file_data){return new C_Promise(function(){for(var rows=file_data.split("\n"),credential_list=[],i=0;i<rows.length;i++){var row=rows[i],row_data=row.split('","');'"'===row_data[0].charAt(0)&&(row_data[0]=row_data[0].substring(1)),'"'===row_data[row_data.length-1].toString().charAt(row_data[row_data.length-1].length-1)&&(row_data[row_data.length-1]=row_data[row_data.length-1].substring(0,row_data[row_data.length-1].length-1));var _credential=PassmanImporter.newCredential();_credential.label=row_data[0],_credential.username=row_data[2],_credential.password=row_data[row_data.length-2],_credential.url=row_data[0],_credential.description=row_data[row_data.length-1],_credential.label&&credential_list.push(_credential);var progress={percent:i/rows.length*100,loaded:i,total:rows.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){function parseEnpass(fileData){var lastProperty,matches,loginBlocks,property;loginBlocks=fileData.replaceAll("Title :","<~passman~>\nTitle :").split("<~passman~>\n").clean("");for(var regex=/(.*) : (.*)/,results=[],l=0;l<loginBlocks.length;l++){for(var loginBlock=loginBlocks[l],lrow=loginBlock.split("\n"),result={},r=0;r<lrow.length;r++){var row=lrow[r];matches=regex.exec(row),matches?(property=matches[1],result[property]=matches[2]):lastProperty&&(result[lastProperty]+="\n"+row),property&&(lastProperty=property)}results.push(result)}return results}PassmanImporter.EnPassTXT={info:{name:"EnPass text file",id:"EnPassTXT",exportSteps:['Access your Enpass Database. Select "File" > "Export" > "As Text"']}},PassmanImporter.EnPassTXT.readFile=function(file_data){var mapper={Title:"label",Username:"username",Password:"password",Email:"email",Url:"url",Note:"description"},secret_fields=["cvc","pin","security answer"];return new C_Promise(function(){for(var credential_list=[],credentials=parseEnpass(file_data),i=0;i<credentials.length;i++){var enpass_credential=credentials[i],new_credential=PassmanImporter.newCredential();for(var key in enpass_credential)if(enpass_credential.hasOwnProperty(key))if(mapper.hasOwnProperty(key)){var prop=mapper[key];new_credential[prop]=enpass_credential[key]}else if("TOTP"!==key){var isSecret=secret_fields.indexOf(key.toLowerCase())!==-1?1:0;new_credential.custom_fields.push({label:key,value:enpass_credential[key],secret:isSecret})}enpass_credential.hasOwnProperty("TOTP")&&(new_credential.otp.secret=enpass_credential.TOTP);var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};credential_list.push(new_credential),this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.keepassCsv={info:{name:"KeePass csv",id:"keepassCsv",exportSteps:["Create an csv export with the following options enabled: http://i.imgur.com/CaeTA4d.png"]}},PassmanImporter.keepassCsv.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.account,_credential.username=row.login_name,_credential.password=row.password,_credential.url=row.web_site,row.hasOwnProperty("expires")&&(row.expires=row.expires.replace('"',""),_credential.expire_time=new Date(row.expires).getTime()/1e3);var tags=row.group?[{text:row.group}]:[];if(row.hasOwnProperty("group_tree"))for(var exploded_tree=row.group_tree.split("\\\\"),t=0;t<exploded_tree.length;t++)exploded_tree[t].trim().length>0&&tags.push({text:exploded_tree[t].trim()});_credential.tags=tags,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.lastpassCsv={info:{name:"LastPass csv",id:"lastpassCsv",exportSteps:["Create an csv export. Go to More options -> Advanced -> Export -> Last Pass CSV File"]}},PassmanImporter.lastpassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=PassmanImporter.htmlDecode(row.name),_credential.username=row.username,_credential.password=row.password,_credential.url=row.url,_credential.tags=row.grouping?[{text:row.grouping}]:[],_credential.description=row.extra,_credential.label&&"undefined"!==_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){var steps=["Backups for the Passwords app need to be enabled on the Admin panel (they are disabled by default).","On the Passwords App, in the bottom left corner, press Settings",'Press "Download Backup"',"Confirm the export and save the file"];PassmanImporter.passwordsApp={info:{name:"Passwords App csv",id:"passwordsApp",exportSteps:steps}},PassmanImporter.passwordsApp.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.website+" - "+row.username,_credential.username=row.username,_credential.password=row.password,_credential.url=row.fulladdress,_credential.description=row.notes,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.padlock={info:{name:"Padlock",id:"padlock",exportSteps:["Create a csv export. Go to Menu -> Settings -> Export Data and copy text into a .csv file"]}},PassmanImporter.padlock.readFile=function(file_data){return new C_Promise(function(){for(var rows=PassmanImporter.readCsv(file_data,!0),credential_list=[],i=0;i<rows.length;i++){var row=rows[i],_credential=PassmanImporter.newCredential(),j=0;for(var k in row)row[k]&&("name"!=k?"username"!=k?"password"!=k?"url"!=k.toLowerCase()?"e-mail"!=k.toLowerCase()&&"email"!=k.toLowerCase()?"description"!=k.toLowerCase()?(_credential.custom_fields[j]={label:k,value:row[k],secret:!0,field_type:"text"},j++):_credential.description=row[k]:_credential.email=row[k]:_credential.url=row[k]:_credential.password=row.password:_credential.username=row.username:_credential.label=row.name);_credential.label&&credential_list.push(_credential);var progress={percent:i/rows.length*100,loaded:i,total:rows.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passmanJson={info:{name:"Passman JSON",id:"passmanJson",exportSteps:["Export the item in passman as passman json, with all fields enabled"]}},PassmanImporter.passmanJson.readFile=function(file_data){return new C_Promise(function(){for(var parsed_json=PassmanImporter.readJson(file_data),credential_list=[],i=0;i<parsed_json.length;i++){var item=parsed_json[i],_credential=PassmanImporter.newCredential();if(_credential.label=item.label,_credential.username=item.account,_credential.password=item.password,_credential.email=item.email,_credential.url=item.url,_credential.tags=item.tags,_credential.description=item.description,item.hasOwnProperty("customFields")&&item.customFields.length>0)for(var cf=0;cf<item.customFields.length;cf++)_credential.custom_fields.push({label:item.customFields[cf].label,value:item.customFields[cf].value,secret:"1"===item.customFields[cf].clicktoshow});item.hasOwnProperty("otpsecret")&&item.otpsecret&&(_credential.otp={issuer:item.otpsecret.issuer,label:item.otpsecret.label,qr_uri:{image:item.otpsecret.qrCode,qrData:""},secret:item.otpsecret.secret,type:item.otpsecret.type}),_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_json.length*100,loaded:i,total:parsed_json.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passpackCsv={info:{name:"Passpack csv",id:"passpackCsv",exportSteps:["Go to Tools -> Export. Select Comma Separated Values, All entries then continue."]}},PassmanImporter.passpackCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[0],_credential.username=row[1],_credential.password=row[2],_credential.url=row[3];var tags=row[4].split(" ");tags.length>0&&(_credential.tags=tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item})),_credential.description=row[5],_credential.email=row[6],_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.randomData={info:{name:"Random data",id:"randomData",exportSteps:["Create's 50 random credentials for testing purposes."]}},PassmanImporter.randomData.readFile=function(){return new C_Promise(function(){var label,tags=["Social media","Hosting","Forums","Webshops","FTP","SSH","Banking","Applications","Server stuff","mysql","Wifi","Games","Certificate","Serials"],credential_list=[],_this=this,generateCredential=function(max,i,callback){if(jQuery){var url=OC.generateUrl("apps/passman/api/internal/generate_person");$.ajax({url:url,dataType:"json",success:function(data){if(data){var _credential=PassmanImporter.newCredential();label=Math.random()>=.5?data.domain:data.email_d+" - "+data.email_u,_credential.label=label,_credential.username=data.username,_credential.password=data.password,_credential.url=data.url;for(var tag_amount=Math.floor(5*Math.random()),ta=0,_tags=[];ta<tag_amount;){var item=tags[Math.floor(Math.random()*tags.length)];_tags.indexOf(item)===-1&&(_tags.push(item),ta++)}if(_credential.tags=_tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item}),credential_list.push(_credential),i<max){var progress={percent:i/max*100,loaded:i,total:max};_this.call_progress(progress),generateCredential(max,i+1,callback)}else callback(credential_list)}else generateCredential(max,i,callback)}})}};generateCredential(50,1,function(credential_list){_this.call_then(credential_list)})})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.teamPassCsv={info:{name:"TeamPass csv",id:"teamPassCsv",exportSteps:["Go to Tools -> Export. Select Comma Separated Values, All entries then continue."]}},PassmanImporter.teamPassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[1],_credential.description=row[2],_credential.password=row[3],_credential.username=row[4];var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};credential_list.push(_credential),this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};if(function(window,$,PassmanImporter){PassmanImporter.zohoCsv={info:{name:"ZOHO csv",id:"zohoCsv",exportSteps:['Create an csv export. Go to Tools -> Export secrets -> Select "General CSV" and click "Export Secrets"']}},PassmanImporter.zohoCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();if(_credential.label=row.secret_name,_credential.url=row.secret_url,_credential.description=row.notes,row.hasOwnProperty("secretdata"))for(var rows=row.secretdata.split("\n"),r=0;r<rows.length;r++){var cells=rows[r].split(":"),key=cells[0],value=cells.slice(1).join(":");key&&value&&_credential.custom_fields.push({label:key,value:value,secret:!1})}""!==_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter),!window.PassmanExporter)var PassmanExporter={getCredentialsWithFiles:function(credentials,FileService,EncryptService){var t={cred:credentials,FS:FileService,ES:EncryptService};return new C_Promise(function(){var _this=this.parent,credentials=_this.cred;this.parent.total=0,this.parent.finished=0,this.parent.fileGUID_cred=[],this.parent.files=[],this.parent.step=function(file){this.parent.finished++,this.call_progress({total:this.parent.total,finished:this.parent.finished});var dta=this.parent.fileGUID_cred[file.guid];file.filename=this.parent.ES.decryptString(file.filename,this.parent.cred[dta.cred_pos].vault_key),file.file_data=this.parent.ES.decryptString(file.file_data,this.parent.cred[dta.cred_pos].vault_key),"files"===dta.on?this.parent.cred[dta.cred_pos][dta.on][dta.at]=file:this.parent.cred[dta.cred_pos][dta.on][dta.at].value=file,this.parent.total===this.parent.finished&&this.call_then(this.parent.cred)}.bind(this);for(var i=0;i<credentials.length;i++){var item=credentials[i];for(c=0;c<item.custom_fields.length;c++){var cf=item.custom_fields[c];"file"===cf.field_type&&(this.parent.total++,this.parent.fileGUID_cred[cf.value.guid]={cred_pos:i,on:"custom_fields",at:c},this.parent.FS.getFile(cf.value).then(function(data){this.parent.step(data)}.bind(this)))}for(var c=0;c<item.files.length;c++)this.parent.total++,this.parent.fileGUID_cred[item.files[c].guid]={cred_pos:i,on:"files",at:c},this.parent.FS.getFile(item.files[c]).then(function(data){this.parent.step(data)}.bind(this))}},t)}};PassmanExporter.csv={info:{name:"CSV",id:"csv",description:"Export credentials as a csv file."}},PassmanExporter.csv.export=function(credentials,FileService,EncryptService){return new C_Promise(function(){PassmanExporter.getCredentialsWithFiles(credentials,FileService,EncryptService).then(function(){for(var headers=["label","username","password","email","description","tags","url","custom_fields","files"],file_data='"'+headers.join('","')+'"\n',i=0;i<credentials.length;i++){for(var _credential=credentials[i],row_data=[],h=0;h<headers.length;h++){var field=headers[h];if("tags"===field){for(var _tags=[],t=0;t<_credential[field].length;t++)_tags.push(_credential[field][t].text);var tag_data="["+_tags.join(",")+"]";row_data.push('"'+tag_data+'"')}else if("custom_fields"==field||"files"==field){var _fields=JSON.stringify(_credential[field]);_fields=_fields.replaceAll('"','""'),row_data.push('"'+_fields+'"')}else row_data.push('"'+_credential[field]+'"')}var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};this.call_progress(progress),file_data+=row_data.join(",")+"\n"}this.call_then(),download(file_data,"passman-export.csv")}.bind(this)).progress(function(){})})},PassmanExporter.json={info:{name:"JSON",id:"json",description:"Export credentials as a JSON file."}},PassmanExporter.json.export=function(credentials,FileService,EncryptService){return new C_Promise(function(){PassmanExporter.getCredentialsWithFiles(credentials,FileService,EncryptService).then(function(){for(var _output=[],i=0;i<credentials.length;i++){var _credential=angular.copy(credentials[i]);delete _credential.vault_key,delete _credential.vault_id,delete _credential.shared_key,_output.push(_credential);var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};this.call_progress(progress)}var file_data=JSON.stringify(_output);this.call_then(),download(file_data,"passman-export.json")}.bind(this)).progress(function(){})})},function(){angular.module("passmanApp").controller("BookmarkletCtrl",["$scope","$rootScope","$location","VaultService","CredentialService","SettingsService","NotificationService","EncryptService","TagService","FileService","ShareService","$translate",function($scope,$rootScope,$location,VaultService,CredentialService,SettingsService,NotificationService,EncryptService,TagService,FileService,ShareService,$translate){if($scope.active_vault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&($scope.using_http=!0),$scope.logout=function(){$scope.active_vault=!1},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));VaultService.getVault(_vault).then(function(vault){vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})})}VaultService.getVaults().then(function(vaults){$scope.vaults=vaults}),$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.list_selected_vault=!1,$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials,$scope.active_vault=_vault};$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){$scope.error=$translate.instant("invalid.vault.key")}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})},$scope.storedCredential=CredentialService.newCredential();var QueryString=function(){for(var query_string={},query=window.location.search.substring(1),vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");if("undefined"==typeof query_string[pair[0]])query_string[pair[0]]=decodeURIComponent(pair[1]);else if("string"==typeof query_string[pair[0]]){var arr=[query_string[pair[0]],decodeURIComponent(pair[1])];
+query_string[pair[0]]=arr}else query_string[pair[0]].push(decodeURIComponent(pair[1]))}return query_string}(),query_string=QueryString;$scope.storedCredential.label=query_string.title,$scope.storedCredential.url=query_string.url,$scope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret=angular.copy("password"===$scope.selected_field_type),_field.field_type=angular.copy($scope.selected_field_type),"file"===_field.field_type){var _file=$scope.new_custom_field.value;FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){return error},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){var parsedQR,qrInfo,re=/otpauth:\/\/(totp|hotp)\/(.*)\?(secret|issuer)=(.*)&(issuer|secret)=(.*)/;qrInfo=[],parsedQR=QRCode.qrData.match(re),parsedQR&&(qrInfo={type:parsedQR[1],label:decodeURIComponent(parsedQR[2]),qr_uri:QRCode}),qrInfo[parsedQR[3]]=parsedQR[4],qrInfo[parsedQR[5]]=parsedQR[6],$scope.storedCredential.otp=qrInfo,$scope.$digest()},$scope.saveCredential=function(){delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id||($scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){NotificationService.showNotification($translate.instant("credential.created"),5e3)}))}}])}(),function(){angular.module("passmanApp").controller("CredentialCtrl",["$scope","VaultService","SettingsService","$location","CredentialService","$rootScope","FileService","EncryptService","TagService","$timeout","NotificationService","CacheService","ShareService","SharingACL","$interval","$filter","$routeParams","$sce","$translate",function($scope,VaultService,SettingsService,$location,CredentialService,$rootScope,FileService,EncryptService,TagService,$timeout,NotificationService,CacheService,ShareService,SharingACL,$interval,$filter,$routeParams,$sce,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");$scope.show_spinner=!0;var fetchCredentials=function(){VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){var vaultKey=angular.copy($scope.active_vault.vaultKey),_credentials=angular.copy(vault.credentials);vault.credentials=[],$scope.active_vault=vault,$scope.active_vault.vaultKey=vaultKey,VaultService.setActiveVault($scope.active_vault);for(var i=0;i<_credentials.length;i++){var _credential=_credentials[i];try{if(_credential.shared_key){var enc_key=EncryptService.decryptString(_credential.shared_key);_credential=ShareService.decryptSharedCredential(angular.copy(_credential),enc_key)}else _credential=CredentialService.decryptCredential(angular.copy(_credential));_credential.tags_raw=_credential.tags}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3)}_credentials[i]=_credential}ShareService.getCredendialsSharedWithUs(vault.guid).then(function(shared_credentials){for(var c=0;c<shared_credentials.length;c++){var _shared_credential_data,_shared_credential=shared_credentials[c],decrypted_key=EncryptService.decryptString(_shared_credential.shared_key);try{_shared_credential_data=ShareService.decryptSharedCredential(_shared_credential.credential_data,decrypted_key)}catch(e){}_shared_credential_data&&(delete _shared_credential.credential_data,_shared_credential_data.acl=_shared_credential,_shared_credential_data.acl.permissions=new SharingACL(_shared_credential_data.acl.permissions),_shared_credential_data.tags_raw=_shared_credential_data.tags,_credentials.push(_shared_credential_data))}if(angular.merge($scope.active_vault.credentials,_credentials),$scope.show_spinner=!1,$rootScope.$broadcast("credentials_loaded"),!vault.private_sharing_key){var key_size=1024;ShareService.generateRSAKeys(key_size).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.active_vault.private_sharing_key=pem.privateKey,$scope.active_vault.public_sharing_key=pem.publicKey,$scope.$digest(),VaultService.updateSharingKeys($scope.active_vault)})}})})},getPendingShareRequests=function(){ShareService.getPendingRequests().then(function(shareRequests){shareRequests.length>0&&($scope.incoming_share_requests=shareRequests,jQuery(".share_popup").dialog({width:600,position:["center",90]}))})},refresh_data_interval=null;$scope.active_vault&&($scope.$parent.selectedVault=!0,fetchCredentials(),getPendingShareRequests(),refresh_data_interval=$interval(function(){fetchCredentials(),getPendingShareRequests()},3e5)),$scope.$on("$destroy",function(){$interval.cancel(refresh_data_interval)}),$scope.permissions=new SharingACL(0),$scope.hasPermission=function(acl,permission){if(acl){var tmp=new SharingACL(acl.permission);return tmp.hasPermission(permission)}return!0},$scope.acceptShareRequest=function(share_request){var crypted_shared_key=share_request.shared_key,private_key=EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key);private_key=ShareService.rsaPrivateKeyFromPEM(private_key),crypted_shared_key=private_key.decrypt(forge.util.decode64(crypted_shared_key)),crypted_shared_key=EncryptService.encryptString(crypted_shared_key),ShareService.saveSharingRequest(share_request,crypted_shared_key).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})},$scope.declineShareRequest=function(share_request){ShareService.declineSharingRequest(share_request).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})};var settingsLoaded=function(){$scope.settings=SettingsService.getSettings()};SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.addCredential=function(){var new_credential=CredentialService.newCredential(),enc_c=CredentialService.encryptCredential(new_credential);SettingsService.setSetting("edit_credential",enc_c),$location.path("/vault/"+$scope.active_vault.guid+"/new")},$scope.editCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("edit_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/edit/"+_credential.guid)},$scope.getRevisions=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("revision_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/revisions")},$scope.shareCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("share_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/share")};var notification;$scope.deleteCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(_credential)}catch(e){}_credential.delete_time=(new Date).getTime()/1e3;for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=_credential.delete_time);$scope.closeSelected(),notification&&NotificationService.hideNotification(notification);var key=CredentialService.getSharedKeyFromCredential(_credential);CredentialService.updateCredential(_credential,!1,key).then(function(){notification=NotificationService.showNotification($translate.instant("credential.deleted"),5e3)})},$scope.recoverCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(_credential)}catch(e){}for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=0);_credential.delete_time=0,$scope.closeSelected(),notification&&NotificationService.hideNotification(notification);var key=CredentialService.getSharedKeyFromCredential(_credential);CredentialService.updateCredential(_credential,!1,key).then(function(){NotificationService.showNotification($translate.instant("credential.recovered"),5e3)})},$scope.destroyCredential=function(credential){var _credential=angular.copy(credential);CredentialService.destroyCredential(_credential.guid).then(function(){for(var i=0;i<$scope.active_vault.credentials.length;i++)if($scope.active_vault.credentials[i].credential_id===credential.credential_id){$scope.active_vault.credentials.splice(i,1),NotificationService.showNotification($translate.instant("credential.destroyed"),5e3);break}})},$scope.view_mode="list",$scope.switchViewMode=function(viewMode){$scope.view_mode=viewMode},$scope.filterOptions={filterText:"",fields:["label","username","email","custom_fields"]},$scope.filtered_credentials=[],$scope.$watch("[selectedtags, filterOptions, delete_time, active_vault.credentials]",function(){if($scope.active_vault&&$scope.active_vault.credentials){var credentials=angular.copy($scope.active_vault.credentials),filtered_credentials=$filter("credentialSearch")(credentials,$scope.filterOptions);filtered_credentials=$filter("tagFilter")(filtered_credentials,$scope.selectedtags),filtered_credentials=$filter("filter")(filtered_credentials,{hidden:0}),$scope.filtered_credentials=filtered_credentials,$scope.filterOptions.selectedtags=angular.copy($scope.selectedtags);for(var i=0;i<$scope.active_vault.credentials.length;i++){var _credential=$scope.active_vault.credentials[i];_credential.tags&&TagService.addTags(_credential.tags)}}},!0),$scope.selectedtags=[];var to;$rootScope.$on("selected_tags_updated",function(evt,_sTags){for(var _selectedTags=[],x=0;x<_sTags.length;x++)_selectedTags.push(_sTags[x].text);$scope.selectedtags=_selectedTags,$timeout.cancel(to),_selectedTags.length>0&&(to=$timeout(function(){if($scope.filtered_credentials){for(var _filtered_tags=[],i=0;i<$scope.filtered_credentials.length;i++)for(var tags=$scope.filtered_credentials[i].tags_raw,x=0;x<tags.length;x++){var tag=tags[x].text;_filtered_tags.indexOf(tag)===-1&&_filtered_tags.push(tag)}$rootScope.$emit("limit_tags_in_list",_filtered_tags)}},50))}),$scope.delete_time=0,$scope.showCredentialRow=function(credential){return 0===$scope.delete_time?0===credential.delete_time:credential.delete_time>$scope.delete_time},$rootScope.$on("set_delete_time",function(event,time){$scope.delete_time=time}),$scope.setDeleteTime=function(delete_time){$scope.delete_time=delete_time},$scope.selectedCredential=!1,$scope.selectCredential=function(credential){credential.description&&(credential.description_html=$sce.trustAsHtml(angular.copy(credential.description).replace("\n","<br />"))),$scope.selectedCredential=angular.copy(credential),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedCredential=!1},$rootScope.$on("logout",function(){$scope.active_vault=null,$scope.credentials=[]}),$scope.clearState=function(){$scope.delete_time=0}}])}(),function(){angular.module("passmanApp").controller("CredentialEditCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","FileService","EncryptService","TagService","NotificationService","ShareService","$translate",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,FileService,EncryptService,TagService,NotificationService,ShareService,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})}),$scope.currentTab={title:$translate.instant("general"),url:"views/partials/forms/edit_credential/basics.html",color:"blue"},$scope.otpType="qrcode",$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("edit_credential");storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),$scope.storedCredential.password_repeat=angular.copy($scope.storedCredential.password),$scope.storedCredential.expire_time=1e3*$scope.storedCredential.expire_time):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result))}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret="password"===_field.field_type,"file"===_field.field_type){var key=!1,_file=$scope.new_custom_field.value;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var key,_file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){console.log($translate.instant("error.loading.file"),error)},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){if(!QRCode)return void NotificationService.showNotification($translate.instant("invalid.qr"),5e3);var uri=new URL(QRCode.qrData),type=uri.href.indexOf("totp/")!==-1?"totp":"hotp",label=uri.pathname.replace("//"+type+"/","");$scope.storedCredential.otp={type:type,label:decodeURIComponent(label),qr_uri:QRCode,issuer:uri.searchParams.get("issuer"),secret:uri.searchParams.get("secret")},$scope.$digest()},$scope.saveCredential=function(){if($scope.new_custom_field.label&&$scope.new_custom_field.value&&$scope.storedCredential.custom_fields.push(angular.copy($scope.new_custom_field)),$scope.storedCredential.password!==$scope.storedCredential.password_repeat)return void NotificationService.showNotification($translate.instant("password.do.not.match"),5e3);if(delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id){var key,_credential;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),_credential=key?ShareService.encryptSharedCredential($scope.storedCredential,key):angular.copy($scope.storedCredential),delete _credential.shared_key;var _useKey=null!=key,regex=/(<([^>]+)>)/gi;_credential.description&&""!==_credential.description&&(_credential.description=_credential.description.replace(regex,"")),CredentialService.updateCredential(_credential,_useKey).then(function(){SettingsService.setSetting("edit_credential",null),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.updated"),5e3)})}else $scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.created"),5e3)})},$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ExportCtrl",["$scope","$window","CredentialService","VaultService","FileService","EncryptService","$translate",function($scope,$window,CredentialService,VaultService,FileService,EncryptService,$translate){$scope.available_exporters=[],$scope.active_vault=VaultService.getActiveVault(),$scope.confirm_key="",$scope.$watch(function(){return $window.PassmanExporter},function(exporters){exporters=Object.keys(angular.copy(exporters));for(var i=0;i<exporters.length;i++){var exporter=exporters[i];$window.PassmanExporter[exporter].hasOwnProperty("info")&&$scope.available_exporters.push($window.PassmanExporter[exporter].info)}},!0),$scope.log=[],$scope.setExporter=function(exporter){exporter=JSON.parse(exporter),$scope.selectedExporter=exporter};var _log=function(str){$scope.log.push(str)};$scope.startExport=function(){if($scope.error=!1,VaultService.getActiveVault().vaultKey!==$scope.confirm_key){var msg=$translate.instant("invalid.vault.key");return $scope.error=msg,void _log(msg)}_log($translate.instant("export.starting"));var _credentials=[];VaultService.getVault(VaultService.getActiveVault()).then(function(vault){if(_log($translate.instant("export.decrypt")),vault.hasOwnProperty("credentials")&&vault.credentials.length>0){for(var i=0;i<vault.credentials.length;i++){var _credential=angular.copy(vault.credentials[i]);if(0===_credential.hidden){var key=CredentialService.getSharedKeyFromCredential(_credential);_credential=CredentialService.decryptCredential(_credential,key),_credential.vault_key=key,_credentials.push(_credential)}}$window.PassmanExporter[$scope.selectedExporter.id].export(_credentials,FileService,EncryptService).then(function(){_log($translate.instant("done"))})}})}}])}(),function(){angular.module("passmanApp").controller("GenericCsvImportCtrl",["$scope","CredentialService","$translate",function($scope,CredentialService,$translate){$scope.hello="world",$scope.credentialProperties=[{label:"Label",prop:"label",matching:["label","title","name"]},{label:"Username",prop:"username",matching:["username","user","login","login name"]},{label:"Password",prop:"password",matching:["password","pass","pw"]},{label:"TOTP Secret",prop:"otp",matching:["totp"]},{label:"Custom field",prop:"custom_field"},{label:"Notes",prop:"description",matching:["notes","description","comments"]},{label:"Email",prop:"email",matching:["email","mail"]},{label:"URL",prop:"url",matching:["website","url","fulladdress","site","web site"]},{label:"Tags",prop:"tags"},{label:"Ignored",prop:null}];var tagMapper=function(t){return{text:t}},rowToCredential=function(row){for(var _credential=PassmanImporter.newCredential(),k=0;k<$scope.import_fields.length;k++){var field=$scope.import_fields[k];if(field)if("otp"===field)_credential.otp.secret=row[k];else if("custom_field"===field){var key=$scope.matched?$scope.parsed_csv[0][k]:"Custom field "+k;_credential.custom_fields.push({label:key,value:row[k],secret:0})}else if("tags"===field){if(row[k]){var tags=row[k].split(",");_credential.tags=tags.map(tagMapper)}}else _credential[field]=row[k]}return _credential};$scope.inspectCredential=function(row){$scope.inspected_credential=rowToCredential(row)},$scope.csvLoaded=function(file){$scope.import_fields=[],$scope.inspected_credential=!1,$scope.matched=!1,$scope.skipFirstRow=!1;var file_data=file.data.split(",");file_data=decodeURIComponent(escape(window.atob(file_data[1]))),Papa.parse(file_data,{complete:function(results){if(results.data){for(var i=0;i<results.data[0].length;i++){var propName=results.data[0][i];$scope.import_fields[i]=null;for(var p=0;p<$scope.credentialProperties.length;p++){var credentialProperty=$scope.credentialProperties[p];credentialProperty.matching&&credentialProperty.matching.indexOf(propName.toLowerCase())!==-1&&($scope.import_fields[i]=credentialProperty.prop,$scope.matched=!0)}}$scope.matched&&$scope.inspectCredential(results.data[1]),$scope.parsed_csv=results.data,$scope.$apply()}}})};var addCredential=function(index){function handleState(index){$scope.parsed_csv[index+1]?($scope.import_progress={progress:index/$scope.parsed_csv.length*100,loaded:index,total:$scope.parsed_csv.length},addCredential(index+1)):($scope.import_progress={progress:100,loaded:$scope.parsed_csv.length,total:$scope.parsed_csv.length},$scope.log.push($translate.instant("done")),$scope.importing=!1)}var _credential=rowToCredential($scope.parsed_csv[index]);return _credential.vault_id=$scope.active_vault.vault_id,_credential.label?($scope.log.push($translate.instant("import.adding",{credential:_credential.label})),void CredentialService.createCredential(_credential).then(function(result){result.credential_id&&($scope.log.push($translate.instant("import.added",{credential:_credential.label})),handleState(index))})):($scope.log.push($translate.instant("import.skipping",{line:index})),void handleState(index))};$scope.importing=!1,$scope.startCSVImport=function(){$scope.importing=!0,$scope.log=[];var start=$scope.skipFirstRow?1:0;addCredential(start)},$scope.updateExample=function(){var start=$scope.skipFirstRow?1:0;$scope.inspectCredential($scope.parsed_csv[start])}}])}(),function(){angular.module("passmanApp").controller("ImportCtrl",["$scope","$window","CredentialService","VaultService","$translate",function($scope,$window,CredentialService,VaultService,$translate){$scope.available_importers=[],$scope.active_vault=VaultService.getActiveVault(),$scope.$watch(function(){return $window.PassmanImporter},function(importers){for(var key in importers){var importer=importers[key];importer.hasOwnProperty("info")&&$scope.available_importers.push(importer.info)}},!0),$scope.log=[],$scope.setImporter=function(importer){importer=JSON.parse(importer),$scope.selectedImporter=importer};var file_data,_log=function(str){$scope.log.push(str)};$scope.fileLoaded=function(file){file_data=file.data.split(","),file_data=decodeURIComponent(escape(window.atob(file_data[1]))),_log($translate.instant("import.file.read")),$scope.$digest()},$scope.fileLoadError=function(file){console.error($translate.instant("error.loading.file"),file)},$scope.fileSelectProgress=function(){};var parsed_data;$scope.import_progress={progress:0,loaded:0,total:0};var addCredential=function(parsed_data_index){if(parsed_data[parsed_data_index]){var _credential=parsed_data[parsed_data_index];if(!_credential.label)return void(parsed_data[parsed_data_index+1]&&(_log($translate.instant("import.no.label")),addCredential(parsed_data_index+1)));_log($translate.instant("import.adding",{credential:_credential.label})),_credential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential(_credential).then(function(result){result.credential_id&&(_log($translate.instant("import.added",{credential:_credential.label})),parsed_data[parsed_data_index+1]?($scope.import_progress={progress:parsed_data_index/parsed_data.length*100,loaded:parsed_data_index,total:parsed_data.length},addCredential(parsed_data_index+1)):($scope.import_progress={progress:100,loaded:parsed_data.length,total:parsed_data.length},_log($translate.instant("done"))))})}};$scope.file_read_progress={percent:0,loaded:0,total:0},$scope.startImport=function(){$scope.import_progress=0,$scope.file_read_percent=0,file_data&&$window.PassmanImporter[$scope.selectedImporter.id].readFile(file_data).then(function(parseddata){parsed_data=parseddata,$scope.file_read_progress={percent:100,loaded:parsed_data.length,total:parsed_data.length};var msg=$translate.instant("import.loaded").replace("{{num}}",parsed_data.length);_log(msg),parsed_data.length>0&&addCredential(0)}).progress(function(progress){$scope.file_read_progress=progress,$scope.$digest()})}}])}(),function(){angular.module("passmanApp").controller("MainCtrl",["$scope","$rootScope","$location","SettingsService","$window","$interval","$filter",function($scope,$rootScope,$location,SettingsService,$window,$interval,$filter){$scope.selectedVault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&"localhost"!==$location.$$host&&"127.0.0.1"!==$location.$host&&($scope.using_http=!0,$scope.http_warning_hidden=!1),$rootScope.$on("settings_loaded",function(){SettingsService.isEnabled("disable_contextmenu")&&document.addEventListener("contextmenu",function(event){event.preventDefault()}),SettingsService.isEnabled("https_check")&&($scope.http_warning_hidden=!0),SettingsService.isEnabled("disable_debugger")&&!function a(){
+try{!function b(i){1===(""+i/i).length&&i%20!==0||function(){}.constructor("debugger")(),b(++i)}(0)}catch(e){setTimeout(a,5e3)}}()}),$rootScope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$rootScope.$on("app_menu",function(evt,shown){$scope.app_sidebar=shown}),$rootScope.$on("logout",function(){$scope.selectedVault=!1});var tickSessionTimer=function(){if($scope.session_time_left){$scope.session_time_left--;var session_time_left_formatted=$filter("toHHMMSS")($scope.session_time_left);$scope.translationData={session_time:session_time_left_formatted},$rootScope.$broadcast("logout_timer_tick_tack",$scope.session_time_left),0===$scope.session_time_left&&$window.location.reload()}};$scope.session_time_left=!1,$scope.$on("logout_timer_set",function(evt,timer){$scope.session_time_left=timer,$scope.translationData={session_time:timer},$interval(tickSessionTimer,1e3)})}])}(),function(){angular.module("passmanApp").controller("MenuCtrl",["$scope","VaultService","$location","$rootScope","TagService","SettingsService",function($scope,VaultService,$location,$rootScope,TagService,SettingsService){$rootScope.logout=function(){SettingsService.setSetting("defaultVaultPass",!1),TagService.resetTags(),$rootScope.$broadcast("logout"),$location.path("/")},$scope.selectedTags=[],$scope.getTags=function($query){return TagService.searchTag($query)},$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){$scope.active_vault=vault}),$scope.filtered_tags=[],$rootScope.$on("limit_tags_in_list",function(evt,tags){$scope.filtered_tags=[];for(var i=0;i<tags.length;i++){for(var tag={text:tags[i]},found=!1,x=0;x<$scope.selectedTags.length;x++)$scope.selectedTags[x].text===tag.text&&(found=!0);found===!1&&$scope.filtered_tags.push(tag)}}),$scope.$watch("selectedTags",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags)},!0),$scope.tagClicked=function(tag){$scope.selectedTags.push(tag)},$rootScope.$on("credentials_loaded",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags)}),$scope.available_tags=TagService.getTags(),$scope.$watch(function(){return 0===$scope.selectedTags.length?TagService.getTags():$scope.filtered_tags},function(tags){$scope.available_tags=tags},!0),$scope.toggleDeleteTime=function(){$scope.delete_time>0?$scope.delete_time=0:$scope.delete_time=1,$rootScope.$broadcast("set_delete_time",$scope.delete_time)}}])}(),function(){angular.module("passmanApp").controller("PublicSharedCredential",["$scope","ShareService","$window","EncryptService","NotificationService","$translate",function($scope,ShareService,$window,EncryptService,NotificationService,$translate){var _key;$scope.loading=!1,$scope.loadSharedCredential=function(){$scope.loading=!0;var data=window.atob($window.location.hash.replace("#","")).split("<::>"),guid=data[0];_key=data[1],ShareService.getPublicSharedCredential(guid).then(function(sharedCredential){$scope.loading=!1,200===sharedCredential.status?$scope.shared_credential=ShareService.decryptSharedCredential(sharedCredential.data.credential_data,_key):$scope.expired=!0})},$scope.downloadFile=function(credential,file){ShareService.downloadSharedFile(credential,file).then(function(result){if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);var file_data=EncryptService.decryptString(result.file_data,_key);download(file_data,escapeHTML(file.filename),file.mimetype)})}}])}(),function(){angular.module("passmanApp").controller("RevisionCtrl",["$scope","SettingsService","VaultService","CredentialService","$location","$routeParams","$rootScope","NotificationService","$filter","ShareService","EncryptService","$translate",function($scope,SettingsService,VaultService,CredentialService,$location,$routeParams,$rootScope,NotificationService,$filter,ShareService,EncryptService,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),VaultService.getVault(_vault).then(function(vault){vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.$parent.selectedVault=!0})}}else $scope.active_vault||$location.path("/");$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("revision_credential"),getRevisions=function(){CredentialService.getRevisions($scope.storedCredential.guid).then(function(revisions){$scope.revisions=revisions})};storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),getRevisions()):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result)),getRevisions()}),$scope.selectRevision=function(revision){var key;$scope.selectedRevision=angular.copy(revision),!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key?$scope.selectedRevision.credential_data=ShareService.decryptSharedCredential(angular.copy(revision.credential_data),key):$scope.selectedRevision.credential_data=CredentialService.decryptCredential(angular.copy(revision.credential_data)),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedRevision=!1},$scope.deleteRevision=function(revision){CredentialService.deleteRevision($scope.storedCredential.guid,revision.revision_id).then(function(){for(var i=0;i<$scope.revisions.length;i++)if($scope.revisions[i].revision_id===revision.revision_id){$scope.revisions.splice(i,1),NotificationService.showNotification($translate.instant("revision.deleted"),5e3);break}})},$scope.restoreRevision=function(revision){var key,_revision=angular.copy(revision),_credential=_revision.credential_data;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key&&(_credential=ShareService.encryptSharedCredential(_credential,key)),delete _credential.shared_key,_credential.revision_created=$filter("date")(1e3*_revision.created,"dd-MM-yyyy @ HH:mm:ss"),CredentialService.updateCredential(_credential,key).then(function(){SettingsService.setSetting("revision_credential",null),$rootScope.$emit("app_menu",!1),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("revision.restored"),5e3)})},$scope.cancelRevision=function(){$location.path("/vault/"+$routeParams.vault_id),$scope.storedCredential=null,SettingsService.setSetting("revision_credential",null)}}])}(),function(){angular.module("passmanApp").controller("SettingsCtrl",["$scope","$rootScope","SettingsService","VaultService","CredentialService","$location","$routeParams","$http","EncryptService","NotificationService","$sce","$translate",function($scope,$rootScope,SettingsService,VaultService,CredentialService,$location,$routeParams,$http,EncryptService,NotificationService,$sce,$translate){if($scope.vault_settings={},$scope.new_vault_name="",$scope.showGenericImport=!1,$scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.vault_settings=vault.vault_settings,$scope.vault_settings.hasOwnProperty("pwSettings")||($scope.vault_settings.pwSettings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})});var key_strengths=["password.poor","password.poor","password.weak","password.good","password.strong"];$scope.minimal_value_key_strength=SettingsService.getSetting("vault_key_strength"),$translate(key_strengths[SettingsService.getSetting("vault_key_strength")]).then(function(translation){$scope.required_score={strength:translation}});var btn_txt=$translate.instant("bookmarklet.text"),http=location.protocol,slashes=http.concat("//"),host=slashes.concat(window.location.hostname),complete=host+location.pathname;$scope.bookmarklet=$sce.trustAsHtml('<a class="button" href="javascript:(function(){var a=window,b=document,c=encodeURIComponent,e=c(document.title),d=a.open(\''+complete+"bookmarklet?url='+c(b.location)+'&title='+e,'bkmk_popup','left='+((a.screenX||a.screenLeft)+10)+',top='+((a.screenY||a.screenTop)+10)+',height=750px,width=475px,resizable=0,alwaysRaised=1');a.setTimeout(function(){d.focus()},300);})();\">"+btn_txt+"</a>"),$scope.saveVaultSettings=function(){var _vault=$scope.active_vault;_vault.name=$scope.new_vault_name,_vault.vault_settings=angular.copy($scope.vault_settings),VaultService.updateVault(_vault).then(function(){$scope.active_vault.name=angular.copy(_vault.name),NotificationService.showNotification($translate.instant("settings.saved"),5e3)})},$scope.tabs=[{title:$translate.instant("settings.general"),url:"views/partials/forms/settings/general_settings.html"},{title:$translate.instant("settings.audit"),url:"views/partials/forms/settings/tool.html"},{title:$translate.instant("settings.password"),url:"views/partials/forms/settings/password_settings.html"},{title:$translate.instant("settings.import"),url:"views/partials/forms/settings/import.html"},{title:$translate.instant("settings.export"),url:"views/partials/forms/settings/export.html"},{title:$translate.instant("settings.sharing"),url:"views/partials/forms/settings/sharing.html"}],$scope.currentTab=$scope.tabs[0],$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url};var getPassmanVersion=function(){var url=OC.generateUrl("apps/passman/api/internal/version");$http.get(url).then(function(result){$scope.passman_version=result.data.version})};getPassmanVersion(),$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){vault&&($scope.active_vault=vault)}),$rootScope.$on("logout",function(){$scope.selectedVault=!1});var getCurrentVaultCredentials=function(callback){VaultService.getVault($scope.active_vault).then(callback)};$scope.startScan=function(minStrength){getCurrentVaultCredentials(function(vault){for(var results=[],i=0;i<vault.credentials.length;i++){var c=angular.copy(vault.credentials[i]);if(c.password&&0===c.hidden)try{if(c=CredentialService.decryptCredential(c),c.password){var zxcvbn_result=zxcvbn(c.password);zxcvbn_result.score<=minStrength&&results.push({guid:c.guid,label:c.label,password:c.password,password_zxcvbn_result:zxcvbn_result})}}catch(e){console.warn(e)}}$scope.scan_result=results})},$scope.cur_state={},$scope.$on("$locationChangeStart",function(event){$scope.change_pw&&$scope.change_pw.total>0&&$scope.change_pw.done<$scope.change_pw.total&&(confirm($translate.instant("changepw.navigate.away.warning"))||event.preventDefault())}),$scope.changeVaultPassword=function(oldVaultPass,newVaultPass,newVaultPass2){return $scope.error="",oldVaultPass!==VaultService.getActiveVault().vaultKey?void($scope.error=$translate.instant("incorrect.password")):newVaultPass!==newVaultPass2?void($scope.error=$translate.instant("password.no.match")):(SettingsService.setSetting("defaultVault",null),SettingsService.setSetting("defaultVaultPass",null),void VaultService.getVault($scope.active_vault).then(function(vault){jQuery("input").attr("disabled",!0),jQuery("button").attr("disabled",!0);var _selected_credentials=angular.copy(vault.credentials);$scope.change_pw={percent:0,done:0,total:_selected_credentials.length};var changeCredential=function(index,oldVaultPass,newVaultPass){var usedKey=oldVaultPass;_selected_credentials[index].hasOwnProperty("shared_key")&&_selected_credentials[index].shared_key&&(usedKey=EncryptService.decryptString(angular.copy(_selected_credentials[index].shared_key),oldVaultPass)),CredentialService.reencryptCredential(_selected_credentials[index].guid,usedKey,newVaultPass).progress(function(data){$scope.cur_state=data}).then(function(){var percent=index/_selected_credentials.length*100;$scope.change_pw={percent:percent,done:index+1,total:_selected_credentials.length},index<_selected_credentials.length-1?changeCredential(index+1,oldVaultPass,newVaultPass):(vault.private_sharing_key=EncryptService.decryptString(angular.copy(vault.private_sharing_key),oldVaultPass),vault.private_sharing_key=EncryptService.encryptString(vault.private_sharing_key,newVaultPass),VaultService.updateSharingKeys(vault).then(function(){$rootScope.$broadcast("logout"),NotificationService.showNotification($translate.instant("login.new.pass"),5e3)}))})};changeCredential(0,VaultService.getActiveVault().vaultKey,newVaultPass)}))},$scope.confirm_vault_delete=!1,$scope.delete_vault_password="",$scope.delete_vault=function(){$scope.confirm_vault_delete&&$scope.delete_vault_password===VaultService.getActiveVault().vaultKey&&getCurrentVaultCredentials(function(vault){var credentials=vault.credentials;$scope.remove_pw={percent:0,done:0,total:vault.credentials.length};var deleteCredential=function(index){$scope.translationData={password:credentials[index].label},CredentialService.destroyCredential(credentials[index].guid).then(function(){var percent=index/vault.credentials.length*100;return $scope.remove_pw={percent:percent,done:index,total:vault.credentials.length},index===credentials.length-1?void VaultService.deleteVault(vault).then(function(){SettingsService.setSetting("defaultVaultPass",!1),SettingsService.setSetting("defaultVault",null),$rootScope.$broadcast("logout"),$location.path("/")}):void deleteCredential(index+1)})};deleteCredential(0)})},$rootScope.$on("logout",function(){$scope.active_vault=null,VaultService.setActiveVault(null),$location.path("/")}),$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ShareCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","NotificationService","SharingACL","EncryptService","$translate","$rootScope",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,NotificationService,SharingACL,EncryptService,$translate,$rootScope){$scope.active_vault=VaultService.getActiveVault(),$scope.tabs=[{title:$translate.instant("share.u.g"),url:"views/partials/forms/share_credential/basics.html"},{title:$translate.instant("share.link"),url:"views/partials/forms/share_credential/link_sharing.html",color:"green"}],$scope.currentTab=$scope.tabs[0];var settingsLoaded=function(){var settings=SettingsService.getSettings();0!==settings.user_sharing_enabled&&"0"!==settings.user_sharing_enabled||$scope.tabs.splice(0,1),0!==settings.link_sharing_enabled&&"0"!==settings.link_sharing_enabled||$scope.tabs.splice(1,1),$scope.tabs.length>0&&($scope.currentTab=$scope.tabs[0])};if(SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");var storedCredential=SettingsService.getSetting("share_credential");storedCredential?$scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)):$location.path("/vault/"+$routeParams.vault_id),$scope.active_vault&&($scope.$parent.selectedVault=!0),$scope.cancel=function(){SettingsService.setSetting("share_credential",null),$location.path("/vault/"+$routeParams.vault_id)},$scope.default_permissions=new SharingACL(0),$scope.default_permissions.addPermission($scope.default_permissions.permissions.READ|$scope.default_permissions.permissions.WRITE|$scope.default_permissions.permissions.FILES);var link_acl=angular.copy($scope.default_permissions);link_acl.removePermission($scope.default_permissions.permissions.WRITE);var oneMonthLater=new Date;oneMonthLater.setMonth(oneMonthLater.getMonth()+1),$scope.share_settings={linkSharing:{enabled:!1,settings:{expire_time:oneMonthLater,expire_views:5,acl:link_acl}},credentialSharedWithUserAndGroup:[],cypher_progress:{done:0,total:0},upload_progress:{done:0,total:0}};var getAcl=function(){ShareService.getSharedCredentialACL($scope.storedCredential).then(function(aclList){for(var _list=[],enc_key=!!$scope.storedCredential.shared_key&&EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key)),i=0;i<aclList.length;i++){var acl=aclList[i];if(null===acl.user_id){if($scope.share_settings.linkSharing={enabled:!0,settings:{expire_time:new Date(1e3*acl.expire),expire_views:acl.expire_views,acl:new SharingACL(acl.permissions)}},enc_key){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)}}else{var obj={userId:acl.user_id,displayName:acl.user_id,type:"user",acl:new SharingACL(acl.permissions),acl_id:acl.acl_id,pending:acl.pending,credential_guid:acl.item_guid,created:acl.created};_list.push(obj)}}$scope.share_settings.credentialSharedWithUserAndGroup=_list})};getAcl();new SharingACL(0);$scope.$watch("share_settings.upload_progress.done",function(){$scope.share_settings.upload_progress.done===$scope.share_settings.upload_progress.total&&$scope.share_settings.upload_progress.total>0&&getAcl()}),$scope.inputSharedWith=[],$scope.searchUsers=function($query){return ShareService.search($query)},$scope.hasPermission=function(acl,permission){return acl.hasPermission(permission)},$scope.setPermission=function(acl,permission){acl.togglePermission(permission)},$scope.shareWith=function(shareWith){if($scope.inputSharedWith=[],shareWith.length>0)for(var i=0;i<shareWith.length;i++){for(var obj={userId:shareWith[i].uid,displayName:shareWith[i].text,type:shareWith[i].type,acl:angular.copy($scope.default_permissions),pending:!0,credential_guid:$scope.storedCredential.guid},found=!1,z=0;z<$scope.share_settings.credentialSharedWithUserAndGroup.length;z++)shareWith[z]&&$scope.share_settings.credentialSharedWithUserAndGroup[z].userId===shareWith[z].uid&&(found=!0);found===!1&&$scope.share_settings.credentialSharedWithUserAndGroup.push(obj)}},$scope.unshareUser=function(user){ShareService.unshareCredentialFromUser($scope.storedCredential,user.userId).then(function(result){if(result.result===!0){var idx=$scope.share_settings.credentialSharedWithUserAndGroup.indexOf(user);$scope.share_settings.credentialSharedWithUserAndGroup.splice(idx,1)}})},$scope.unshareCredential=function(credential){var _credential=angular.copy(credential),old_key=EncryptService.decryptString(angular.copy(_credential.shared_key)),new_key=VaultService.getActiveVault().vaultKey;_credential.shared_key=null,_credential.unshare_action=!0,_credential.skip_revision=!0,CredentialService.reencryptCredential(_credential.guid,old_key,new_key,!0).then(function(data){getAcl();var c=data.cryptogram;c.shared_key=null,c.unshare_action=!0,c.skip_revision=!0,ShareService.unshareCredential(c),CredentialService.updateCredential(c,!0).then(function(){NotificationService.showNotification($translate.instant("credential.unshared"),4e3),$scope.sharing_complete=!0,$scope.storedCredential.shared_key=null,$scope.share_settings.credentialSharedWithUserAndGroup=[]})})},$scope.applyShareToUser=function(user,enc_key){ShareService.getVaultsByUser(user.userId).then(function(data){$scope.share_settings.cypher_progress.total+=data.length,user.vaults=data;var start=(new Date).getTime()/1e3;ShareService.cypherRSAStringWithPublicKeyBulkAsync(user.vaults,enc_key).progress(function(){$scope.share_settings.cypher_progress.done++,$scope.share_settings.cypher_progress.percent=$scope.share_settings.cypher_progress.done/$scope.share_settings.cypher_progress.total*100,$scope.$digest()}).then(function(result){$scope.share_settings.cypher_progress.times.push({time:(new Date).getTime()/1e3-start,user:data[0].user_id}),user.vaults=result,user.hasOwnProperty("acl_id")||$scope.uploadChanges(user),$scope.$digest()})})},$scope.$on("$locationChangeStart",function(event){$scope.sharing_complete||confirm($translate.instant("share.navigate.away.warning"))||event.preventDefault()});var getShareLink=function(hash){var port,defaultPort="http"===$location.$$protocol?80:443;return port=defaultPort!==$location.$$port?":"+$location.$$port:"",$location.$$protocol+"://"+$location.$$host+port+OC.generateUrl("apps/passman/share/public#")+hash};$scope.sharing_complete=!0,$scope.applyShare=function(){if($scope.sharing_complete=!1,$scope.share_settings.cypher_progress.percent=0,$scope.share_settings.cypher_progress.done=0,$scope.share_settings.cypher_progress.total=0,$scope.share_settings.cypher_progress.times=[],$scope.share_settings.cypher_progress.times_total=[],$scope.share_settings.upload_progress.done=0,$scope.share_settings.upload_progress.total=0,$scope.storedCredential.shared_key&&""!==$scope.storedCredential.shared_key&&null!==$scope.storedCredential.shared_key){var enc_key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key));if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)})}for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++){var iterator=i,target_user=list[i];if(target_user.hasOwnProperty("created")){var acl={user_id:target_user.userId,permission:target_user.acl.getAccessLevel()};ShareService.updateCredentialAcl($scope.storedCredential,acl)}else $scope.applyShareToUser(list[iterator],enc_key)}NotificationService.showNotification($translate.instant("saved"),4e3),$scope.sharing_complete=!0}else ShareService.generateSharedKey(20).then(function(key){var encryptedSharedCredential=angular.copy($scope.storedCredential),old_key=VaultService.getActiveVault().vaultKey;CredentialService.reencryptCredential(encryptedSharedCredential.guid,old_key,key).progress(function(){}).then(function(data){var _credential=data.cryptogram;_credential.set_share_key=!0,_credential.skip_revision=!0,_credential.shared_key=EncryptService.encryptString(key),CredentialService.updateCredential(_credential,!0).then(function(){$scope.storedCredential.shared_key=_credential.shared_key,NotificationService.showNotification($translate.instant("credential.shared"),4e3),$scope.sharing_complete=!0})});for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++)"user"===list[i].type&&$scope.applyShareToUser(list[i],key);if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+key);$scope.share_link=getShareLink(hash)})}})},$scope.uploadChanges=function(user){$scope.share_settings.upload_progress.total++,user.accessLevel=angular.copy(user.acl.getAccessLevel()),ShareService.shareWithUser(storedCredential,user).then(function(){$scope.share_settings.upload_progress.done++,$scope.share_settings.upload_progress.percent=$scope.share_settings.upload_progress.done/$scope.share_settings.upload_progress.total*100})},$scope.calculate_total_time=function(){$scope.share_settings.cypher_progress.times=$scope.share_settings.cypher_progress.times||[];for(var total=0,i=0;i<$scope.share_settings.cypher_progress.times.length;i++)total+=$scope.share_settings.cypher_progress.times[i].time;return total}}])}(),function(){angular.module("passmanApp").controller("SharingSettingsCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","EncryptService",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,EncryptService){$scope.active_vault=VaultService.getActiveVault(),$scope.sharing_keys=angular.copy(ShareService.getSharingKeys()),$scope.progress=1,$scope.generating=!1,$scope.available_sizes=[{size:1024,name:1024},{size:2048,name:2048},{size:4096,name:4096}],$scope.setKeySize=function(size){for(var i=0;i<$scope.available_sizes.length;i++)if($scope.available_sizes[i].size===size)return void($scope.key_size=$scope.available_sizes[i])},$scope.setKeySize(2048),$scope.generateKeys=function(length){$scope.progress=1,$scope.generating=!0,ShareService.generateRSAKeys(length).progress(function(progress){$scope.progress=progress>0?2:1,$scope.$digest()}).then(function(kp){$scope.generating=!1;var pem=ShareService.rsaKeyPairToPEM(kp);$scope.active_vault.private_sharing_key=EncryptService.encryptString(pem.privateKey),$scope.active_vault.public_sharing_key=pem.publicKey,VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})})},$scope.updateSharingKeys=function(){$scope.active_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),$scope.active_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})}}])}(),function(){angular.module("passmanApp").controller("VaultCtrl",["$scope","VaultService","SettingsService","CredentialService","$location","ShareService","EncryptService","$translate","$rootScope","$interval",function($scope,VaultService,SettingsService,CredentialService,$location,ShareService,EncryptService,$translate,$rootScope,$interval){VaultService.getVaults().then(function(vaults){if($scope.vaults=vaults,null!=SettingsService.getSetting("defaultVault"))for(var default_vault=SettingsService.getSetting("defaultVault"),i=0;i<vaults.length;i++){var vault=vaults[i];if(vault.guid===default_vault.guid){$scope.default_vault=!0,$scope.list_selected_vault=vault,SettingsService.setSetting("defaultVault",vault),SettingsService.getSetting("defaultVaultPass")&&$location.path("/vault/"+vault.guid),$scope.vault_tries[vault.guid]={tries:0,timeout:0};break}}});var key_strengths=["password.poor","password.poor","password.weak","password.good","password.strong"];$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.auto_logout_timer=!1,$scope.logout_timer="0",$scope.list_selected_vault=!1,$scope.minimal_value_key_strength=3;var settingsLoaded=function(){$scope.minimal_value_key_strength=SettingsService.getSetting("vault_key_strength"),$translate(key_strengths[SettingsService.getSetting("vault_key_strength")]).then(function(translation){$scope.required_score={strength:translation}})};SettingsService.getSetting("settings_loaded")?settingsLoaded():$rootScope.$on("settings_loaded",function(){settingsLoaded()}),$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.toggleAutoLogout=function(){$scope.auto_logout_timer=!$scope.auto_logout_timer},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault,$scope.vault_tries[vault.guid]||($scope.vault_tries[vault.guid]={tries:0,timeout:0})},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})},$scope.requestDeletion=function(vault){$location.path("/vault/"+vault.guid+"/request-deletion")};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials;var timer=parseInt($scope.logout_timer);$scope.auto_logout_timer&&timer>0&&$rootScope.$broadcast("logout_timer_set",60*timer),VaultService.setActiveVault(_vault),$location.path("/vault/"+vault.guid)};$scope.selectLogoutTimer=function(time){$scope.auto_logout_timer=!0,$scope.logout_timer=time};var tickLockTimer=function(guid){$scope.vault_tries[guid].timeout=$scope.vault_tries[guid].timeout-1,$scope.vault_tries[guid].timeout<=0&&($interval.cancel($scope.vault_tries[guid].timer),$scope.vault_tries[guid].timeout=0)};$scope.vault_tries={},$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){if($scope.error=$translate.instant("invalid.vault.key"),$scope.vault_tries[vault.guid].tries=$scope.vault_tries[vault.guid].tries+1,$scope.vault_tries[vault.guid].tries>=3){var duration=Math.pow(2,1/7)*Math.pow(15,4/7)*Math.pow(Math.pow(2,2/7)*Math.pow(15,1/7),$scope.vault_tries[vault.guid].tries);$scope.vault_tries[vault.guid].timeout=duration,
+$scope.vault_tries[vault.guid].hasOwnProperty("timer")&&$interval.cancel($scope.vault_tries[vault.guid].timer),$scope.vault_tries[vault.guid].timer=$interval(function(){tickLockTimer(vault.guid)},1e3)}}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault),SettingsService.setSetting("defaultVaultPass",null),SettingsService.setSetting("defaultVault",null);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})}}])}(),function(){angular.module("passmanApp").controller("RequestDeleteCtrl",["$scope","$location","$http","$routeParams","VaultService","NotificationService","$translate",function($scope,$location,$http,$routeParams,VaultService,NotificationService,$translate){$scope.reason="",VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){$scope.pending_deletion=vault.delete_request_pending}),$scope.requestDeletion=function(){var queryUrl=OC.generateUrl("apps/passman/admin/request-deletion/"+$routeParams.vault_id),params={reason:$scope.reason};$http.post(queryUrl,params).then(function(){NotificationService.showNotification($translate.instant("deletion.requested"),5e3),$location.path("#/")})},$scope.removeRequestDeletion=function(){var queryUrl=OC.generateUrl("apps/passman/admin/request-deletion/"+$routeParams.vault_id);$http.delete(queryUrl).then(function(){NotificationService.showNotification($translate.instant("deletion.removed"),5e3),$location.path("#/")})}}])}(),angular.module("templates-main",["views/credential_revisions.html","views/edit_credential.html","views/partials/credential_template.html","views/partials/forms/edit_credential/basics.html","views/partials/forms/edit_credential/custom_fields.html","views/partials/forms/edit_credential/files.html","views/partials/forms/edit_credential/otp.html","views/partials/forms/edit_credential/password.html","views/partials/forms/settings/export.html","views/partials/forms/settings/general_settings.html","views/partials/forms/settings/generic_csv_import.html","views/partials/forms/settings/import.html","views/partials/forms/settings/password_settings.html","views/partials/forms/settings/sharing.html","views/partials/forms/settings/tool.html","views/partials/forms/share_credential/basics.html","views/partials/forms/share_credential/link_sharing.html","views/partials/password-meter.html","views/settings.html","views/share_credential.html","views/show_vault.html","views/vault_req_deletion.html","views/vaults.html"]),angular.module("views/credential_revisions.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/credential_revisions.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancelRevision()">{{active_vault.name}}</a></div><div class="crumb svg last"><a ng-if="storedCredential.credential_id">{{ \'showing.revisions\' | translate}} "{{revision.credential_data.label}}"</a></div></div></div></div><div off-click="closeSelected()"><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="revision in revisions | orderBy:\'-created\'" ng-click="selectRevision(revision)" ng-class="{\'selected\': selectedRevision.revision_id == revision.revision_id}"><td><span class="icon"><i class="fa fa-lock"></i></span> <span class="label">{{ \'revision.of\' | translate}} {{revision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} ({{revision.credential_data.label}}) <span ng-if="revision.edited_by">{{ \'revision.edited.by\' | translate}} {{revision.edited_by}}</span></span></td></tr><tr ng-show="revisions.length == 0"><td>{{ \'no.revisions\' | translate}}</td></tr></table><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedRevision"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span> <b ng-show="selectedRevision">{{ \'revision.of\' | translate}} {{selectedRevision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</b><div class="credential-data"><div class="row" ng-show="selectedRevision.credential_data.label"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.label"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.username"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.password" secret="\'true\'"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="selectedRevision.credential_data.otp.secret"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.email"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.url"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedRevision.credential_data.description_html"></span></div></div><div class="row" ng-show="selectedRevision.credential_data.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedRevision.credential_data.files" class="link" ng-click="downloadFile(selectedRevision.credential_data, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in selectedRevision.credential_data.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="selectedRevision.credential_data.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedRevision.credential_data.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedRevision.credential_data.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in selectedRevision.credential_data.tags">{{tag.text}}</span></div></div></div></div><div ng-show="selectedRevision"><button class="button" ng-click="restoreRevision(selectedRevision)"><span class="fa fa-edit"></span> {{ \'restore.revision\' | translate}}</button> <button class="button" ng-click="deleteRevision(selectedRevision)"><span class="fa fa-trash"></span> {{ \'delete.revision\' | translate}}</button></div></div></div>')}]),angular.module("views/edit_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/edit_credential.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'edit.credential\' | translate}} "{{storedCredential.label}}"</a> <a ng-if="!storedCredential.credential_id">{{ \'create.credential\' | translate}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div><button ng-click="saveCredential()" click-disable>{{ \'save\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button></div>')}]),angular.module("views/partials/credential_template.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/credential_template.html",'<div class="credential-data"><div class="row" ng-show="credential.label && showLabel"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'label\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.label"></span></div></div><div class="row" ng-show="credential.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.username"></span></div></div><div class="row" ng-show="credential.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.password" secret="\'true\'"></span></div></div><div class="row" ng-show="credential.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="credential.otp.secret"></span></div></div><div class="row" ng-show="credential.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.email"></span></div></div><div class="row" ng-show="credential.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.url"></span></div></div><div class="row" ng-show="credential.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="credential.description_html"></span></div></div><div class="row" ng-show="credential.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in credential.files" class="link" ng-click="downloadFile(credential, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in credential.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(credential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="credential.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="credential.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="credential.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{credential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in credential.tags track by $index">{{tag.text}}</span></div></div></div></div>')}]),angular.module("views/partials/forms/edit_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><label>{{ \'label\' | translate}}</label><div><input type="text" ng-model="storedCredential.label"></div><label>{{ \'username\' | translate}}</label><div><input type="text" ng-model="storedCredential.username"></div><label>{{ \'email\' | translate}}</label><div><input type="text" ng-model="storedCredential.email"></div><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><div><label>{{ \'password.r\' | translate}}</label><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'url\' | translate}}</label><div><input type="text" ng-model="storedCredential.url"></div></div><div class="col-xs-12 col-md-6"><label>{{ \'notes\' | translate}}</label><div><textarea class="credential_textarea" ng-model="storedCredential.description"></textarea></div><label>{{ \'add.tag\' | translate}}</label><div class="tags_input"><tags-input ng-model="storedCredential.tags" replace-spaces-with-dashes="false"><auto-complete source="getTags($query)" min-length="0"></auto-complete></tags-input></div></div></div>')}]),angular.module("views/partials/forms/edit_credential/custom_fields.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/custom_fields.html",'<div class="row"><div class="col-xs-12 col-md-4"><label>{{ \'field.label\' | translate}}</label><input type="text" ng-model="new_custom_field.label"></div><div class="col-xs-10 col-md-6 field-value"><div class="row"><div class="col-xs-12"><label>{{ \'field.value\' | translate}}</label></div></div><div class="row"><div class="col-xs-8 valueInput"><input type="text" ng-model="new_custom_field.value" ng-show="new_custom_field.field_type === \'text\'"><password-gen ng-model="new_custom_field.value" ng-show="new_custom_field.field_type ===\'password\'" settings="{generateOnCreate: false }"></password-gen><span ng-show="new_custom_field.field_type ===\'file\'"><input id="custom_field_file" class="inputfile" type="file" file-select success="addFileToCustomField" error="fileLoadError" progress="fileSelectProgress"><label for="custom_field_file"><i class="fa fa-upload" aria-hidden="true"></i> {{ new_custom_field.value.filename || \'select.file\' | translate}}</label></span></div><div class="col-xs-4 selectType"><select class="form-control" ng-model="new_custom_field.field_type"><option value="text">{{ \'text\' | translate}}</option><option value="password">{{ \'password\' | translate}}</option><option value="file">{{ \'file\' | translate}}</option></select></div></div><div class="row"><div class="col-xs-12"><ng-password-meter ng-if="new_custom_field.field_type ===\'password\'" password="new_custom_field.value"></ng-password-meter></div></div></div><div class="col-xs-2 col-md-2"><label class="invisible">{{\'add\' | translate}}</label><button ng-click="addCustomField()">+</button></div></div><div class="row custom_fields" ng-if="storedCredential.custom_fields.length > 0"><div class="col-xs-12 table"><table><thead><tr use-theme><td class="dragger"></td><th class="field_label">{{ \'label\' | translate}}</th><th class="field_value">{{ \'value\' | translate}}</th><th class="field_secret">{{ \'type\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tbody ui-sortable ng-model="storedCredential.custom_fields"><tr ng-repeat="field in storedCredential.custom_fields"><td class="dragger"><i class="fa fa-arrows-v"></i></td><td><a href="#" editable-text="field.label">{{ field.label || "empty" }}</a></td><td><span ng-if="field.field_type === \'text\'"><a href="#" editable-text="field.value">{{ field.value || \'empty\' | translate }}</a></span> <span ng-if="field.field_type === \'password\'"><a href="#" editable-password="field.value"><span ng-repeat="n in [] | range:field.value.length">*</span></a></span> <span ng-if="field.field_type === \'file\'">{{field.value.filename}} ({{field.value.size | bytes}})</span></td><td>{{ field.field_type }}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteCustomField(field)"></i></td></tr></tbody></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/files.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/files.html",'<div class="row file_tab"><div class="col-xs-12 col-md-6"><input class="inputfile" id="file" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"><label for="file"><i class="fa fa-upload" aria-hidden="true"></i> {{\'select.file\' | translate}}</label><span ng-if="fileprogress.file_percent > 0"><div progress-bar="fileprogress.file_percent"></div></span></div></div><div class="row files" ng-if="storedCredential.files.length > 0"><div class="col-xs-12 table"><table><thead use-theme><tr><th class="field_label">{{ \'file.name\' | translate }}</th><th class="field_value">{{ \'upload.date\' | translate}}</th><th class="field_secret">{{ \'size\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tr ng-repeat="file in storedCredential.files"><td><a href="#" editable-text="file.filename">{{ file.filename || "empty" }}</a></td><td>{{file.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td>{{file.size | bytes}}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteFile(file)"></i></td></tr></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/otp.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/otp.html",'<div class="row"><div class="col-xs-12"><div class="col-xs-4 nopadding"><span class="otpText">{{ \'upload.qr\' | translate}}</span><select ng-model="otpType"><option value="qrcode">Upload QR code</option><option value="secret">Enter secret</option></select></div><div class="col-xs-6 nopadding"><input type="file" qrread on-read="parseQR(qrdata)" class="input_secret" on-read="parseQR(qrdata)" ng-show="otpType === \'qrcode\'"> <input type="text" ng-model="storedCredential.otp.secret" ng-show="otpType === \'secret\'"></div></div></div><div class="row"><div class="col-xs-12" ng-if="storedCredential.otp"><b>{{ \'current.qr\' | translate}}</b></div></div><div class="row"><div class="col-xs-5 col-sm-4 col-md-2" ng-if="storedCredential.otp.qr_uri"><img ng-src="{{storedCredential.otp.qr_uri.image}}"></div><div class="col-sm-4 col-sm-5 col-md-5"><table ng-show="storedCredential.otp"><tr ng-show="storedCredential.otp.type"><td>{{ \'type\' | translate}}:</td><td>{{storedCredential.otp.type}}</td></tr><tr ng-show="storedCredential.otp.label"><td>{{ \'label\' | translate}}:</td><td>{{storedCredential.otp.label}}</td></tr><tr ng-show="storedCredential.otp.issuer"><td>{{ \'issuer\' | translate}}:</td><td>{{storedCredential.otp.issuer}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>{{ \'secret\' | translate}}:</td><td>{{storedCredential.otp.secret}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>{{ \'otp\' | translate}}:</td><td><span otp-generator secret="storedCredential.otp.secret"></span></td></tr></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/password.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/password.html",'<div class="row"><div class="col-xs-12 col-md-5 col-lg-5"><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><label>{{ \'password.r\' | translate}}</label><div><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'expire.date\' | translate}}</label><div><span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time == 0" close-on-select="false">{{\'no.expire.date\' | translate}}</span> <span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time != 0" close-on-select="false">{{ storedCredential.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></div><label>{{ \'renew.interval\' | translate}}</label><div><input type="number" ng-model="renewIntervalValue" min="0" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><select ng-model="renewIntervalModifier" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><option value="0">{{ \'disabled\' | translate}}</option><option value="86400">{{ \'days\' | translate }}</option><option value="604800">{{ \'weeks\' | translate}}</option><option value="2592000">{{ \'months\' | translate}}</option><option value="31622400">{{ \'years\' | translate}}</option></select></div></div><div class="col-xs-12 col-md-7 col-lg-7"><b>{{ \'generation.settings\' | translate}}</b><div class="row"><div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="pwSettings.length" min="1"></label><label><span class="label">{{\'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="pwSettings.minimumDigitCount" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label><label><input ng-model="pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label><label><input ng-model="pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label><label><input type="checkbox" id="special" ng-model="pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label><label><input type="checkbox" id="ambig" ng-model="pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label><label><input type="checkbox" ng-model="pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div></div></div></div>')}]),angular.module("views/partials/forms/settings/export.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/export.html",'<div ng-controller="ExportCtrl"><div class="row"><div class="col-xs-6"><label>{{ \'export.type\' | translate}}<select ng-init="raw" ng-model="raw" ng-change="setExporter(raw)"><option ng-repeat="exporter in available_exporters" value="{{exporter}}">{{exporter.name}}</option></select></label><div><b>{{selectedExporter.description}}</b></div><div ng-show="selectedExporter" class="col-xs-3 nopadding"><label>{{ \'export.confirm.text\' | translate }}</label><input type="password" ng-model="confirm_key"><br><div class="alert alert-warning" ng-show="error">{{error}}</div></div><div class="clearfix"><button class="button" ng-click="startExport()" ng-if="selectedExporter">{{ \'export\' | translate}}</button></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div>')}]),angular.module("views/partials/forms/settings/general_settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/general_settings.html",'<div class="row"><div class="col-xs-12 col-md-6"><h3>{{ \'rename.vault\' | translate}}</h3><label>{{ \'rename.vault.name\' | translate}}</label><input type="text" ng-model="$parent.new_vault_name"> <button ng-click="saveVaultSettings()">{{ \'change\' | translate}}</button><h3>{{ \'change.vault.key\' | translate}}</h3><label>{{ \'old.vault.password\' | translate}}</label><input type="password" ng-model="oldVaultPass"><label>{{ \'new.vault.password\' | translate}}</label><input type="password" ng-model="newVaultPass"><ng-password-meter password="newVaultPass" score="vault_key_score"></ng-password-meter><label>{{ \'new.vault.pw.r\' | translate}}</label><input type="password" ng-model="newVaultPass2"><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li>{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><button ng-click="changeVaultPassword(oldVaultPass,newVaultPass,newVaultPass2)" ng-disabled="vault_key_score.score < minimal_value_key_strength">{{ \'change\' | translate}}</button><div ng-show="change_pw.total > 0">{{\'warning.leave\' | translate}}<br>{{ \'processing\' | translate}} {{cur_state.process}}<div progress-bar="cur_state.calculated" index="cur_state.current" total="cur_state.total"></div>{{ \'total.progress\' | translate}}<div progress-bar="change_pw.percent" index="change_pw.done" total="change_pw.total"></div></div><h3>{{\'delete.vault\' | translate}}</h3><b>{{ \'vault.remove.notice\' | translate }}</b><label>{{\'vault.password\' | translate}}</label><input type="password" ng-model="$parent.delete_vault_password"> <input type="checkbox" ng-model="$parent.confirm_vault_delete"> {{\'delete.vault.checkbox\' | translate}}<br><button class="btn btn-danger" ng-click="delete_vault()">{{\'delete.vault.confirm\' | translate}}</button><div ng-show="remove_pw">{{\'deleting.pw\' | translate:translationData}}<div progress-bar="remove_pw.percent" index="remove_pw.done" total="remove_pw.total"></div></div></div><div class="col-xs-12 col-md-6"><h3>{{ \'about.passman\' | translate}}</h3><p>{{ \'version\' | translate}}: <b>{{passman_version}}</b><br><br><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6YS8F97PETVU2" target="_blank" class="link">{{ \'donate.support\' | translate}}</a><br></p><h3>{{ \'bookmarklet\' | translate}}</h3><div><p>{{ \'bookmarklet.info1\' | translate}}<br>{{ \'bookmarklet.info2\' | translate}}<br></p></div><div><p ng-bind-html="bookmarklet" style="margin-top: 5px"></p></div></div></div>')}]),angular.module("views/partials/forms/settings/generic_csv_import.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/generic_csv_import.html",'<div ng-controller="GenericCsvImportCtrl"><div class="row"><div class="col-xs-12 col-md-3"><div>{{ \'select.csv\' | translate}} <input type="file" file-select accept=".csv" success="csvLoaded"></div><div ng-show="parsed_csv"><span translate="parsed.csv.rows" translate-value-rows="{{ parsed_csv.length }}"></span></div><div ng-show="parsed_csv"><input type="checkbox" ng-model="skipFirstRow" ng-checked="matched"> {{ \'skip.first.row\' | translate}}</div><div ng-show="import_fields.indexOf(\'label\') === -1 && parsed_csv"><b>{{ \'import.csv.label.req\' | translate}}</b></div><div ng-show="import_fields.indexOf(\'label\') !== -1 && parsed_csv"><button class="btn btn-success" ng-disabled="importing" ng-click="startCSVImport()"><i class="fa fa-spinner fa-spin" ng-show="importing"></i> {{ (importing) ? (\'import.importing\' | translate) : (\'import.start\' | translate) }}</button></div><div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div><div class="col-xs-12 col-md-9" ng-show="parsed_csv"><b>{{ \'first.five.lines\' | translate }}</b><br>{{ \'assign.column\' | translate }}<div class="import-table-outter"><table class="import-table"><tr ng-repeat="line in parsed_csv | limitTo:5"><td class="inspect"><i class="fa fa-search" ng-click="inspectCredential(line)" ng-if="($index > 0 && matched && import_fields.length > 0) || ($index >= 0 && !matched && import_fields.length > 0)"></i></td><td ng-repeat="prop in line track by $index">{{line[$index]}}</td></tr><tr ng-repeat="line in parsed_csv | limitTo:1"><td></td><td ng-repeat="prop in line track by $index"><select ng-model="import_fields[$index]" ng-change="updateExample()" ng-options="property.prop as property.label for property in credentialProperties"></select></td></tr></table></div><div ng-show="inspected_credential && import_fields.length > 0"><b>{{ \'example.credential\' | translate}}</b><div credential-template="inspected_credential" show-label></div></div></div></div></div>')}]),angular.module("views/partials/forms/settings/import.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/import.html",'<div><div ng-click="showGenericImport = !showGenericImport;" class="link"><span ng-show="!showGenericImport">{{\'missing.importer\' | translate}}</span> <span ng-show="showGenericImport">{{\'missing.importer.back\' | translate}}</span></div></div><div ng-controller="ImportCtrl" ng-show="!showGenericImport"><div class="row"><div class="col-xs-6"><label>{{ \'import.type\' | translate}}<select ng-init="importerType" ng-model="importerType" ng-change="setImporter(importerType)"><option ng-repeat="importer in available_importers" value="{{importer}}">{{importer.name}}</option></select></label><div ng-show="selectedImporter"><b>{{ \'import.steps\' | translate }}</b><ul class="import-steps"><li ng-repeat="step in selectedImporter.exportSteps">{{step}}</li></ul></div><input ng-if="selectedImporter" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"><br><button class="button" ng-click="startImport()" ng-if="selectedImporter">{{ \'import\' | translate}}</button><div ng-if="file_read_progress.percent > 0">{{ \'read.progress\' | translate}}<div progress-bar="file_read_progress.percent" index="file_read_progress.loaded" total="file_read_progress.total"></div></div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div><div ng-include="\'views/partials/forms/settings/generic_csv_import.html\'" ng-show="showGenericImport"></div>');
+}]),angular.module("views/partials/forms/settings/password_settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/password_settings.html",'<div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.length" min="1"></label><label><span class="label">{{ \'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.minimumDigitCount" min="0"></label><label><span class="label">Generate password on creation</span><br><input type="checkbox" ng-model="vault_settings.pwSettings.generateOnCreate" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="vault_settings.pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label><label><input ng-model="vault_settings.pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label><label><input ng-model="vault_settings.pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label><label><input type="checkbox" id="special" ng-model="vault_settings.pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label><label><input type="checkbox" id="ambig" ng-model="vault_settings.pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label><label><input type="checkbox" ng-model="vault_settings.pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div><div class="row"><div class="col-xs-12"><button class="button" ng-click="saveVaultSettings()">{{ \'save\' | translate}}</button></div></div>')}]),angular.module("views/partials/forms/settings/sharing.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/sharing.html",'<div ng-controller="SharingSettingsCtrl"><div class="row"><div class="col-md-6"><label>{{ \'priv.key\' | translate}}</label><textarea class="col-md-12">{{sharing_keys.private_sharing_key}}</textarea></div><div class="col-md-6"><label>{{ \'pub.key\' | translate}}</label><textarea class="col-md-12">{{sharing_keys.public_sharing_key}}</textarea></div></div><div class="row"><div class="col-md-12"><label>{{ \'key.size\' | translate}}<select ng-model="key_size" ng-options="size.name for size in available_sizes"></select><button ng-click="updateSharingKeys()"><i class="fa fa-fa-floppy-o"></i> {{ \'save.keys\' | translate}}</button> <button ng-if="!generating" ng-click="generateKeys(key_size.size)">{{ \'gen.keys\' | translate}}</button> <button ng-if="generating"><i class="fa fa-spinner fa-spin"></i> {{ \'generating.keys\' | translate}} ({{progress}}/2)</button></label></div></div></div>')}]),angular.module("views/partials/forms/settings/tool.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/tool.html",'<div class="row"><div class="col-xs-12"><p>{{ \'tool.intro\' | translate}}</p></div><div class="col-xs-12" ng-init="minStrength = 3;">{{ \'min.strength\' | translate}} <input type="number" min="1" max="4" value="3" ng-model="minStrength"> <button ng-click="startScan(minStrength)">{{ \'scan.start\' | translate}}</button></div></div><div class="row" ng-show="scan_result"><div class="col-xs-12"><p>{{ \'scan.result.msg\' | translate}}<br><span translate="scan.result" translate-values="{ scan_result: scan_result.length}"></span><br></p><table class="table scan-result-table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'score\' | translate}}</td><td>{{ \'password\' | translate}}</td><td>{{ \'action\' | translate}}</td></tr></thead><tbody><tr ng-repeat="result in scan_result | orderBy:\'password_zxcvbn_result.score\'"><td>{{result.label}}</td><td class="score"><ng-password-meter password="result.password"></ng-password-meter></td><td><span credential-field value="result.password" secret="\'true\'"></span></td><td><a class="link" ng-href="#/vault/{{active_vault.guid}}/edit/{{result.guid}}" tooltip="{{ \'edit.credential\' | translate}}"><i class="fa fa-edit"></i></a></td></tr></tbody></table></div></div>')}]),angular.module("views/partials/forms/share_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/share_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><div><table class="table sharing_table"><thead><tr><td><tags-input ng-model="inputSharedWith" replace-spaces-with-dashes="false" add-from-autocomplete-only="true" placeholder="{{ \'search.u.g\' | translate}}"><auto-complete source="searchUsers($query)" min-length="0" template="autocomplete-template"></auto-complete></tags-input></td><td><button class="button" ng-click="shareWith(inputSharedWith)">+</button></td></tr><tr><td colspan="2"><small>{{ \'search.result.missing\' | translate}}</small></td></tr></thead></table><div ng-if="share_settings.cypher_progress.done > 0">{{\'cyphering\' | translate}}...<div progress-bar="share_settings.cypher_progress.percent" index="share_settings.cypher_progress.done" total="share_settings.cypher_progress.total"></div></div><div ng-if="share_settings.upload_progress.done > 0">{{ \'uploading\' | translate}}...<div progress-bar="share_settings.upload_progress.percent" index="share_settings.upload_progress.done" total="share_settings.upload_progress.total"></div></div></div></div><div class="col-xs-12 col-md-6" ng-show="share_settings.cypher_progress.times.length > 0"><table class="table"><thead><tr><td>{{ \'user\' | translate}}</td><td>{{ \'crypto.time\' | translate}}</td></tr></thead><tr ng-repeat="user in share_settings.cypher_progress.times"><td><i class="fa fa-cogs"></i> {{user.user}}</td><td>{{user.time}} s</td></tr></table>{{ \'crypto.total.time\' | translate}}: {{ calculate_total_time() }}</div></div><div class="row"><div class="col-xs-12 col-md-6"><table class="table shared_table" ng-show="share_settings.credentialSharedWithUserAndGroup.length > 0"><thead><tr><td>{{\'user\' | translate}}</td><td>{{ \'perm.read\' | translate}}</td><td>{{ \'perm.write\' | translate}}</td><td>{{ \'perm.files\' | translate}}</td><td>{{ \'perm.revisions\' | translate}}</td><td></td></tr></thead><tr ng-repeat="user in share_settings.credentialSharedWithUserAndGroup"><td><i class="fa fa-user" ng-if="user.pending === false"></i> <i class="fa fa-user-times" ng-if="user.pending === true"></i> {{user.userId}} <small ng-if="user.pending === true" class="pull-right col-xs-4">{{ \'pending\' | translate}}</small></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.READ)" ng-checked="hasPermission(user.acl, default_permissions.permissions.READ)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.WRITE)" ng-checked="hasPermission(user.acl, default_permissions.permissions.WRITE)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(user.acl, default_permissions.permissions.FILES)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.HISTORY)" ng-checked="hasPermission(user.acl, default_permissions.permissions.HISTORY)"></td><td><i class="fa fa-trash" ng-click="unshareUser(user)"></i></td></tr></table></div></div><script type="text/ng-template" id="autocomplete-template"><i class="fa fa-user" ng-if="data.type === \'user\'"></i>\n\t<i class="fa fa-group" ng-if="data.type === \'group\'"></i>\n\t{{data.text}}</script>')}]),angular.module("views/partials/forms/share_credential/link_sharing.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/share_credential/link_sharing.html",'<div class="row"><div class="col-xs-12 col-md-6"><label><input type="checkbox" ng-model="share_settings.linkSharing.enabled"> {{ \'enable.link.sharing\' | translate}}.</label><br><div class="pull-left col-xs-6 nopadding"><span credential-field value="share_link" secret="false" use-input="true" input-placeholder="\'click.share\' | translate"></span></div><div ng-show="share_settings.linkSharing.enabled" class="clearfix">{{ \'share.until.date\' | translate}} <span datetime-picker ng-model="share_settings.linkSharing.settings.expire_time" class="link" future-only close-on-select="false" timestamp="true">{{ share_settings.linkSharing.settings.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\' }}</span></div><div ng-show="share_settings.linkSharing.enabled">{{ \'expire.views\' | translate}}<br><input type="number" ng-model="share_settings.linkSharing.settings.expire_views"></div><div ng-if="share_settings.linkSharing.enabled"><table><tr><td><input type="checkbox" ng-click="setPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)"></td><td>{{ \'show.files\' | translate}}</td></tr></table></div></div></div>')}]),angular.module("views/partials/password-meter.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/password-meter.html",'<div class="pass-meter {{masterClass}}" off-click="matchBreakdown = false;"><div class="{{colClass}} pass-meter-col {{first}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{second}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{third}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{fourth}}"><div class="indicator"></div></div><div class="details" ng-click="toggleScore()"><span ng-show="!scoreShown">{{ \'details\' | translate }}</span> <span ng-show="scoreShown">{{ \'hide.details\' | translate}}</span></div><div class="pass-meter-message">{{message}}</div><div class="detail_box" ng-show="scoreShown"><div class="row"><div class="col-xs-6">{{ \'password.score\' | translate}}:</div><div class="col-xs-6">{{score.score}}</div></div><div><b>{{ \'cracking.times\' | translate}}</b></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.100h\' | translate}}<br><small>{{ \'cracking.time.100h.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.online_throttling_100_per_hour}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10s\' | translate}}<br><small>{{ \'cracking.time.10s.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.online_no_throttling_10_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10ks\' | translate}}<br><small>{{ \'cracking.time.10ks.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.offline_slow_hashing_1e4_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10Bs\' | translate}}<br><small>{{ \'cracking.time.10Bs.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.offline_fast_hashing_1e10_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'match.sequence\' | translate}}:</div><div class="col-xs-6"><span class="link" ng-click="toggleMatchBreakdown()">{{ \'match.sequence.link\' | translate}}</span></div></div></div></div><div class="match-sequence"><div class="sequence_container" ng-style="{\'width\': score.sequence.length * 210 }"><div class="sequence" ng-repeat="sequence in score.sequence"><table><tr><td colspan="2" class="token"><code>{{sequence.token}}</code></td></tr><tr ng-if="sequence.pattern"><td>{{ \'pattern\' | translate}}</td><td>{{sequence.pattern}}</td></tr><tr ng-if="sequence.matched_word"><td>{{ \'matched.word\' | translate}}</td><td>{{sequence.matched_word}}</td></tr><tr ng-if="sequence.dictionary_name"><td>{{ \'dictionary.name\' | translate}}</td><td>{{sequence.dictionary_name}}</td></tr><tr ng-if="sequence.rank"><td>{{ \'rank\' | translate}}</td><td>{{sequence.rank}}</td></tr><tr ng-if="sequence.reversed"><td>{{ \'reversed\' | translate}}</td><td>{{sequence.reversed}}</td></tr><tr ng-if="sequence.guesses"><td>{{ \'guesses\' | translate}}</td><td>{{sequence.guesses}}</td></tr><tr ng-if="sequence.base_guesses"><td>{{ \'base.guesses\' | translate}}</td><td>{{sequence.base_guesses}}</td></tr><tr ng-if="sequence.uppercase_variations"><td>{{ \'uppercase.variations\' | translate}}</td><td>{{sequence.uppercase_variations}}</td></tr><tr ng-if="sequence.l33t_variations"><td>{{ \'leet.variations\' | translate}}</td><td>{{sequence.l33t_variations}}</td></tr></table></div></div></div>')}]),angular.module("views/settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/settings.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last"><a>{{ \'settings\' | translate}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container settings edit_credential"><div ng-include="currentTab.url"></div></div>')}]),angular.module("views/share_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/share_credential.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'share.credential\' | translate}} {{storedCredential.label}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container share_credential" ng-show="currentTab"><div ng-include="currentTab.url"></div><button ng-click="applyShare()" ng-disabled="share_settings.linkSharing.enabled === false && share_settings.credentialSharedWithUserAndGroup.length === 0">{{ \'share\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button> <button class="btn btn-danger" ng-disabled="!storedCredential.shared_key" ng-click="unshareCredential(storedCredential)">{{ \'unshare\' | translate}}</button></div>')}]),angular.module("views/show_vault.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/show_vault.html",'<div off-click="closeSelected()" off-click-filter="\'.download-js-link, .sidebar-shown\'"><div id="passman-controls" ng-class="{ \'sidebar-shown\': selectedCredential }"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a><i class="fa fa-home"></i></a></div><div class="crumb svg last" ng-click="clearState()"><span>{{active_vault.name}}</span></div></div></div><div class="actions creatable"><span ng-click="addCredential()" class="button new"><span>+</span></span></div><div class="title" credential-counter="filtered_credentials" vault="active_vault" delete-time="delete_time" filters="filterOptions"></div><div class="searchboxContainer" ng-init="filterOptionShown = false;" off-click="filterOptionShown = false;"><input type="text" ng-model="filterOptions.filterText" class="searchbox" id="searchBox" placeholder="{{\'search.credential\' | translate}}" select-on-click clear-btn ng-click="filterOptionShown = true;"><div class="searchOptions" ng-show="filterOptionShown"><input type="checkbox" ng-model="filterOptions.useRegex"> {{ \'use.regex\' | translate }}</div></div><div class="viewModes"><div class="view-mode" ng-class="{\'active\': view_mode === \'list\' }" ng-click="switchViewMode(\'list\')"><i class="fa fa-list"></i></div><div class="view-mode" ng-class="{\'active\': view_mode === \'grid\' }" ng-click="switchViewMode(\'grid\')"><i class="fa fa-th-large"></i></div></div></div><div class="loaderContainer" ng-if="show_spinner"><div class="loader" use-theme type="\'border-bottom-color\'"></div></div><div ng-init="menuOpen = false;"><table class="credential-table" ng-if="view_mode === \'list\'"><tr ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-dblclick="editCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td><span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span></span> <span class="icon"><i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i></span> <span class="label">{{ ::credential.label}}</span></td></tr></table><ul class="grid-view" ng-if="view_mode === \'grid\'"><li class="credential" ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" use-theme type="\'border-color\'"><div class="credential_content"><div class="label">{{ ::credential.label}}</div><div class="tags"><div class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</div></div></div></li></ul></div><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedCredential"><h2>{{selectedCredential.label}}</h2><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span><div credential-template="selectedCredential"></div><div ng-show="selectedCredential"><div><button class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-edit"></span> {{ \'edit\' | translate}}</button> <button class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-trash"></span> {{ \'delete\' | translate}}</button> <button class="button" ng-click="shareCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined &&\n\t\t\t\t\t\t(settings.user_sharing_enabled === 1 || settings.user_sharing_enabled === \'1\' || settings.link_sharing_enabled === 1 || settings.link_sharing_enabled === \'1\')"><span class="fa fa-share"></span> {{ \'share\' | translate}}</button> <button class="button" ng-click="getRevisions(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"><span class="fa fa-undo"></span> {{ \'revisions\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-recycle"></span> {{\'recover\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="destroyCredential(selectedCredential)"><span class="fa fa-bomb"></span> {{\'destroy\' | translate}}</button></div></div></div></div><div class="share_popup" style="display: none">{{ \'sharereq.title\' | translate}}<br><p>{{ \'sharereq.line1\' | translate}}</p>{{active_vault.vault_id}}<table class="table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'permissions\' | translate}}</td><td>{{ \'received.from\' | translate}}</td><td>{{ \'date\' | translate}}</td></tr></thead><tr ng-repeat="share_request in incoming_share_requests" ng-if="share_request.target_vault_id == active_vault.vault_id"><td>{{share_request.credential_label}}</td><td>{{share_request.permissions}}</td><td>{{share_request.from_user_id}}</td><td>{{share_request.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td><span class="link" ng-click="acceptShareRequest(share_request)">{{ \'accept\' | translate}}</span> | <span class="link" ng-click="declineShareRequest(share_request)">{{ \'decline\' | translate}}</span></td></tr></table></div>')}]),angular.module("views/vault_req_deletion.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vault_req_deletion.html",'<div class="vault_wrapper"><div class="reset_form" ng-show="!pending_deletion">{{ \'req.intro1\' | translate }}<br>{{ \'req.intro2\' | translate }}<br>{{ \'req.intro3\' | translate }}<br><br><b>{{ \'request.deletion.warning\' | translate}}</b><label>{{ \'request.deletion.reason\' | translate }}</label><input type="text" ng-model="reason" class="form-control"> <button class="button button-red" ng-click="requestDeletion()">{{ \'request.deletion.accept\' | translate }}</button> <a class="pull-right button button-geen" ng-href="#/">{{ \'cancel\' | translate}}</a></div><div class="reset_form" ng-show="pending_deletion"><button class="button button-red" ng-click="removeRequestDeletion()">Cancel destruction request</button> <a class="pull-right button button-geen" ng-href="#/">Cancel</a></div></div>')}]),angular.module("views/vaults.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vaults.html",'<div class="vault_wrapper"><div class="vaults" ng-if="!list_selected_vault && !creating_vault"><div class="ui-select-container ui-select-bootstrap vaultlist"><ul><li ng-click="newVault()">+ Create a new vault</li><li ng-repeat="vault in vaults" ng-class="{\'selected\': vault == list_selected_vault }" ng-click="selectVault(vault)"><div><span class="ui-select-choices-row-inner"><div class="ng-binding ng-scope">{{vault.name}} <span class="pull-right" style="color: #ce3702" ng-show="vault.delete_request_pending">{{ \'delete.request.pending\' | translate}}</span></div><small class="ng-binding ng-scope">{{ \'created\' | translate}}: {{vault.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} | {{ \'last.access\' | translate}}: <span ng-if="vault.last_access > 0">{{vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="vault.last_access === 0">{{\'never\' | translate}}</span></small></span></div></li><li ng-if="vaults.length === 0">{{ \'no.vaults\' | translate}}</li></ul></div></div><div ng-if="creating_vault"><div class="login_form" ng-init="vault_name = \'\'; vault_key=\'\'; ">{{\'new.vault.name\' | translate}}<div><input type="text" ng-model="vault_name" required></div><div>{{ \'new.vault.pass\' | translate}} <input type="password" ng-model="vault_key" required><ng-password-meter password="vault_key" score="vault_key_score"></ng-password-meter></div><div>{{ \'new.vault.passr\' | translate}} <input type="password" ng-model="vault_key2" required></div><div ng-show="error || vault_key_score.score < minimal_value_key_strength" class="error"><ul><li ng-show="error">{{error}}</li><li ng-show="vault_key_score.score < minimal_value_key_strength">{{\'min.vault.key.strength\' | translate:required_score}}</li></ul></div><div><small>{{\'new.vault.sharing_key_notice\' | translate}}</small></div><div class="button_wrapper"><button class="button button-geen" ng-if="!creating_keys" click-disable ng-click="createVault(vault_name, vault_key, vault_key2)" ng-disabled="vault_key_score.score < minimal_value_key_strength || vault_key !== vault_key2 || vault_key === \'\'">{{ \'new.vault.create\' | translate }}</button><div class="button" ng-if="creating_keys"><span><i class="fa fa-spinner fa-spin"></i> {{creating_keys}}</span></div><div class="button button-red" ng-click="clearState()">{{ \'cancel\' | translate}}</div><div class="hidden">{{sharing_keys}}</div></div></div></div><div ng-if="list_selected_vault != false"><div class="vaultlist"><ul><li ng-click="clearState()">{{ \'go.back.vaults\' | translate }}</li></ul></div><div class="login_form"><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div>{{ \'input.vault.password\' | translate}} {{list_selected_vault.name}}<div class="pw-input"><input type="password" ng-model="vault_key" ng-enter="loginToVault(list_selected_vault, vault_key)"> <small class="last_access">{{\'last.access\' | translate}}: <span ng-if="list_selected_vault.last_access > 0">{{list_selected_vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="list_selected_vault.last_access === 0">Never</span></small></div><div class="login_opts"><div><label><input type="checkbox" ng-checked="default_vault" ng-click="toggleDefaultVault()"> {{ \'vault.default\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="remember_vault_password" ng-click="toggleRememberPassword()"> {{ \'vault.auto.login\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="auto_logout_timer" ng-click="toggleAutoLogout()"> {{ \'auto.logout\' | translate}}</label><select ng-model="logout_timer" ng-change="selectLogoutTimer(logout_timer)"><option value="0">Never</option><option value="30">30 minutes</option><option value="60">60 minutes</option><option value="90">90 minutes</option><option value="180">3 hour</option><option value="480">8 hour</option></select></div></div><div class="alert alert-danger" ng-show="vault_tries[list_selected_vault.guid].timeout !== 0" translate="vault.locked" translate-value-tries="{{ vault_tries[list_selected_vault.guid].tries }}" translate-value-time="{{ vault_tries[list_selected_vault.guid].timeout | toHHMMSS }}"></div><button class="button button-geen" ng-click="loginToVault(list_selected_vault, vault_key)" ng-disabled="vault_tries[list_selected_vault.guid].timeout !== 0">{{ \'vault.decrypt\' | translate}}</button> <span ng-click="forgottenPassword = true;" style="margin-top: 10px; padding: 6px 12px" class="link pull-right" ng-show="!forgottenPassword">Forgot password?</span> <button ng-show="forgottenPassword" class="pull-right button button-red" ng-click="requestDeletion(list_selected_vault)"><span ng-show="list_selected_vault.delete_request_pending">{{ \'cancel.request.deletion\' | translate }}</span> <span ng-show="!list_selected_vault.delete_request_pending">{{ \'request.deletion\' | translate }}</span></button></div></div></div>')}]),$(document).ready(function(){function format_date(date){date=new Date(date);var month=date.getMonth(),year=date.getFullYear(),day=date.getDate(),hour=date.getHours(),minutes=date.getMinutes(),seconds=date.getSeconds();return month+=1,month<10&&(month="0"+month),hour<10&&(hour="0"+hour),minutes<10&&(minutes="0"+minutes),seconds<10&&(seconds="0"+seconds),day+"-"+month+"-"+year+" "+hour+":"+minutes+":"+seconds}function acceptDeleteRequest(el,req){confirm(OC.L10N.translate("passman","Are you really sure?\nThis will delete the vault and all credentials in it!"))&&$.post(OC.generateUrl("apps/passman/admin/accept-delete-request"),req,function(){$(el).parent().parent().remove()})}function ignoreDeleteRequest(el,req){$.ajax({url:OC.generateUrl("apps/passman/admin/request-deletion/"+req.vault_guid),type:"DELETE",success:function(){$(el).parent().parent().remove()}})}var Settings=function(baseUrl){this._baseUrl=baseUrl,this._settings=[]};Settings.prototype={load:function(){var deferred=$.Deferred(),self=this;return $.ajax({url:this._baseUrl,method:"GET",async:!1}).done(function(settings){self._settings=settings}).fail(function(){deferred.reject()}),deferred.promise()},setUserKey:function(key,value){var request=$.ajax({url:this._baseUrl+"/"+key+"/"+value,method:"POST"});request.done(function(){$(".msg-passwords").removeClass("msg_error"),$(".msg-passwords").text("")}),request.fail(function(){$(".msg-passwords").addClass("msg_error"),$(".msg-passwords").text(t("passwords","Error while saving field")+" "+key+"!")})},setAdminKey:function(key,value){var request=$.ajax({url:this._baseUrl+"/"+key+"/"+value+"/admin1/admin2",method:"POST"});request.done(function(){$(".msg-passwords").removeClass("msg_error"),$(".msg-passwords").text("")}),request.fail(function(){$(".msg-passwords").addClass("msg_error"),$(".msg-passwords").text(t("passwords","Error while saving field")+" "+key+"!")})},getKey:function(key){return!!this._settings.hasOwnProperty(key)&&this._settings[key]},getAll:function(){return this._settings}};var settings=new Settings(OC.generateUrl("apps/passman/api/v2/settings"));settings.load(),$("#passman_link_sharing_enabled").prop("checked","1"===settings.getKey("link_sharing_enabled").toString().toLowerCase()),$("#passman_sharing_enabled").prop("checked","1"===settings.getKey("user_sharing_enabled").toString().toLowerCase()),$("#passman_check_version").prop("checked","1"===settings.getKey("check_version").toString().toLowerCase()),$("#passman_https_check").prop("checked","1"===settings.getKey("https_check").toString().toLowerCase()),$("#passman_disable_contextmenu").prop("checked","1"===settings.getKey("disable_contextmenu").toString().toLowerCase()),$("#passman_disable_debugger").prop("checked","1"===settings.getKey("disable_debugger").toString().toLowerCase()),$("#vault_key_strength").val(settings.getKey("vault_key_strength")),$("#passman_check_version").change(function(){settings.setAdminKey("check_version",$(this).is(":checked")?1:0)}),$("#passman_https_check").change(function(){settings.setAdminKey("https_check",$(this).is(":checked")?1:0)}),$("#passman_disable_contextmenu").change(function(){settings.setAdminKey("disable_contextmenu",$(this).is(":checked")?1:0)}),$("#passman_disable_debugger").change(function(){settings.setAdminKey("disable_debugger",$(this).is(":checked")?1:0)}),$("#passman_sharing_enabled").change(function(){settings.setAdminKey("user_sharing_enabled",$(this).is(":checked")?1:0)}),$("#passman_link_sharing_enabled").change(function(){settings.setAdminKey("link_sharing_enabled",$(this).is(":checked")?1:0)}),$("#vault_key_strength").change(function(){settings.setAdminKey("vault_key_strength",$(this).val())}),2===$('form[name="passman_settings"]').length&&$('form[name="passman_settings"]')[1].remove();var accountMover={source_account:"",destination_account:""};$(".username-autocomplete").autocomplete({source:OC.generateUrl("apps/passman/admin/search"),minLength:1,select:function(event,ui){accountMover[$(this).attr("id")]=ui.item.value}}),$("#move_credentials").click(function(){var self=this;$("#moveStatus").hide(),$(self).attr("disabled","disabled"),$(self).html('<i class="fa fa-spinner fa-spin"></i> '+OC.L10N.translate("passman","Moving")+"..."),accountMover.source_account&&accountMover.destination_account&&$.post(OC.generateUrl("apps/passman/admin/move"),accountMover,function(data){data.success&&($(self).removeAttr("disabled"),$(self).html("Move"),$("#moveStatus").fadeIn(),setTimeout(function(){$("#moveStatus").fadeOut()},3500))})}),$.get(OC.generateUrl("apps/passman/admin/delete-requests"),function(requests){var table=$("#requests-table tbody");$.each(requests,function(k,request){var accept=$('<span class="link">[Accept]&nbsp;</span>');accept.click(function(){var _self=this;acceptDeleteRequest(_self,request)});var ignore=$('<span class="link">[Ignore]</span>');ignore.click(function(){var _self=this;ignoreDeleteRequest(_self,request)});var cols=$("<td>"+request.id+"</td><td>"+request.displayName+"</td><td>"+request.reason+"</td><td>"+format_date(1e3*request.created)+"</td>"),actions=$("<td></td>").append(accept).append(ignore);
+table.append($("<tr></tr>").append(cols).append(actions))})}),$("#passman-tabs").tabs()}); \ No newline at end of file
diff --git a/l10n/ast.js b/l10n/ast.js
new file mode 100644
index 00000000..ad17b614
--- /dev/null
+++ b/l10n/ast.js
@@ -0,0 +1,124 @@
+OC.L10N.register(
+ "passman",
+ {
+ "Passwords" : "Contraseñes",
+ "Passwords do not match" : "Les contraseñes nun concasen",
+ "General" : "Xeneral",
+ "Error loading file" : "Fallu cargando'l ficheru",
+ "Credential created!" : "¡Creose la credencial!",
+ "Invalid QR code" : "Códigu QR non válidu",
+ "Decrypting credentials" : "Descifrando credenciales",
+ "Done" : "Fecho",
+ "Credential has no label, skipping" : "La credencial nun tien etiquetes, saltando",
+ "Adding {{credential}}" : "Amestando {{credential}}",
+ "Added {{credential}}" : "Amestóse {{credential}}",
+ "Skip first row" : "Saltar primer filera",
+ "Saved!" : "¡Guardóse!",
+ "Toggle visibility" : "Alternar visibilidá",
+ "Copy to clipboard" : "Copiar al cartafueyu",
+ "Copied to clipboard!" : "¡Copióse al cartafueyu!",
+ "Generate password" : "Xenerar contraseña",
+ "Username" : "Nome d'usuariu",
+ "Repeat password" : "Repitir contraseña",
+ "Text" : "Testu",
+ "File" : "Ficheru",
+ "Add" : "Amestar",
+ "Day(s)" : "Día(es)",
+ "Month(s)" : "Mes(es)",
+ "Year(s)" : "Añu(os)",
+ "Password length" : "Llargor de contraseña",
+ "Minimum amount of digits" : "Cantidá mínima de díxitos",
+ "Use lowercase letters" : "Usar letres minúscules",
+ "Use special characters" : "Usar caráuteres especiales",
+ "Processing" : "Procesando",
+ "Total progress" : "Progresu total",
+ "About Passman" : "Tocante a Passman",
+ "Version" : "Versión",
+ "Donate to support development" : "Dona pa sofitar el desendolcu",
+ "Save your passwords with 1 click!" : "¡Guarda les tos contraseñes con 1 clic!",
+ "This process is irreversible" : "Esti procesu ye irreversible",
+ "Private Key" : "Clave privada",
+ "Public key" : "Clave pública",
+ "Key size" : "Tamañu de clave",
+ "Save keys" : "Guardar claves",
+ "Generate sharing keys" : "Xenerar claves de compartición",
+ "Generating sharing keys" : "Xenerando claves de comparticin",
+ "Minimum password stength" : "Fuercia mínimo de contraseña",
+ "Start scan" : "Aniciar escanéu",
+ "Result" : "Resultáu",
+ "A total of {{scan_result}} weak credentials were found." : "Alcontráronse un total de {{scan_result}} credenciales febles",
+ "Action" : "Aición",
+ "User" : "Usuariu",
+ "Files" : "Ficheros",
+ "Revisions" : "Revisiones",
+ "Pending" : "Pendiente",
+ "Show files" : "Amosar ficheros",
+ "Details" : "Detalles",
+ "Hide details" : "Anubrir detalles",
+ "Password score" : "Puntuación de contraseña",
+ "Pattern" : "Patrón",
+ "Showing revisions of" : "Amosando revisiones de ",
+ "Revision of" : "Revisión de",
+ "by" : "por",
+ "No revisions found." : "Nun s'alcontraron revisiones.",
+ "Label" : "Etiqueta",
+ "Restore revision" : "Restaurar revisión",
+ "Delete revision" : "Desaniciar revisión",
+ "Edit credential" : "Editar credencial",
+ "Save" : "Guardar",
+ "Cancel" : "Encaboxar",
+ "Settings" : "Axustes",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Amosando {{number_filtered}} credenciales de {{credential_number}}",
+ "Account" : "Cuenta",
+ "Password" : "Contraseña",
+ "OTP" : "OTP",
+ "E-mail" : "Corréu",
+ "URL" : "URL",
+ "Notes" : "Notes",
+ "Edit" : "Editar",
+ "Delete" : "Desaniciar",
+ "Share" : "Compartir",
+ "Destroy" : "Destruyir",
+ "You have incoming share requests." : "Tienes solicitúes de comparticiones entrantes.",
+ "Permissions" : "Permisos",
+ "Received from" : "Recibióse de",
+ "Date" : "Data",
+ "Accept" : "Aceutar",
+ "Decline" : "Refugar",
+ "Never" : "Enxamás",
+ "Logout" : "Zarrar sesión",
+ "Donate" : "Donar",
+ "Someone has shared a credential with you." : "Daquién compartió una credencial contigo.",
+ "Error while saving field" : "Fallu entrín se guardaba'l campu",
+ "A Passman item has expired" : "Caducó un elementu de Passman",
+ "A Passman item has been shared" : "Compartióse un elementu de Passman",
+ "A Passman item has been renamed" : "Renomóse un elementu de Passman",
+ "You created %1$s" : "Creesti %1$s",
+ "You updated %1$s" : "Anovesti %1$s",
+ "You renamed %1$s to %2$s" : "Renomesti %1$s a %2$s",
+ "You deleted %1$s" : "Desaniciesti %1$s",
+ "You recovered %1$s" : "Recuperesti %1$s",
+ "%s has been shared with a link" : "%s compartióse con un enllaz",
+ "Ignore" : "Inorar",
+ "%s shared \"%s\" with you. Click here to accept" : "%s compartió «%s» contigo. Primi equí p'aceutar",
+ "%s has declined your share request for \"%s\"." : "%s refugó la to solicitú de compartición pa «%s».",
+ "%s has accepted your share request for \"%s\"." : "%s aceutó la to solicitú de compartición pa «%s».",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Nun pue consiguise la información de versión",
+ "Passman Settings" : "Axustes de Passman",
+ "A newer version of Passman is available" : "Ta disponible una versión nueva de Passman",
+ "Credential mover" : "Movedor de credenciales",
+ "Check for new versions" : "Comprobar versiones nueves",
+ "Enable HTTPS check" : "Habilitar comprobación HTTPS",
+ "Disable context menu" : "Deshabilitar menú contestual",
+ "Disable JavaScript debugger" : "Deshabilitar depurador JavaScript",
+ "Source account" : "Cuenta fonte",
+ "Destination account" : "Cuenta destín",
+ "Credentials moved!" : "¡Moviéronse les credenciales!",
+ "Reason" : "Razón",
+ "Connection to server lost" : "Perdióse la conexón col sirvidor",
+ "Saving..." : "Guardando...",
+ "Dismiss" : "Escartar",
+ "seconds ago" : "hai segundos"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/l10n/ast.json b/l10n/ast.json
new file mode 100644
index 00000000..b8f454ba
--- /dev/null
+++ b/l10n/ast.json
@@ -0,0 +1,122 @@
+{ "translations": {
+ "Passwords" : "Contraseñes",
+ "Passwords do not match" : "Les contraseñes nun concasen",
+ "General" : "Xeneral",
+ "Error loading file" : "Fallu cargando'l ficheru",
+ "Credential created!" : "¡Creose la credencial!",
+ "Invalid QR code" : "Códigu QR non válidu",
+ "Decrypting credentials" : "Descifrando credenciales",
+ "Done" : "Fecho",
+ "Credential has no label, skipping" : "La credencial nun tien etiquetes, saltando",
+ "Adding {{credential}}" : "Amestando {{credential}}",
+ "Added {{credential}}" : "Amestóse {{credential}}",
+ "Skip first row" : "Saltar primer filera",
+ "Saved!" : "¡Guardóse!",
+ "Toggle visibility" : "Alternar visibilidá",
+ "Copy to clipboard" : "Copiar al cartafueyu",
+ "Copied to clipboard!" : "¡Copióse al cartafueyu!",
+ "Generate password" : "Xenerar contraseña",
+ "Username" : "Nome d'usuariu",
+ "Repeat password" : "Repitir contraseña",
+ "Text" : "Testu",
+ "File" : "Ficheru",
+ "Add" : "Amestar",
+ "Day(s)" : "Día(es)",
+ "Month(s)" : "Mes(es)",
+ "Year(s)" : "Añu(os)",
+ "Password length" : "Llargor de contraseña",
+ "Minimum amount of digits" : "Cantidá mínima de díxitos",
+ "Use lowercase letters" : "Usar letres minúscules",
+ "Use special characters" : "Usar caráuteres especiales",
+ "Processing" : "Procesando",
+ "Total progress" : "Progresu total",
+ "About Passman" : "Tocante a Passman",
+ "Version" : "Versión",
+ "Donate to support development" : "Dona pa sofitar el desendolcu",
+ "Save your passwords with 1 click!" : "¡Guarda les tos contraseñes con 1 clic!",
+ "This process is irreversible" : "Esti procesu ye irreversible",
+ "Private Key" : "Clave privada",
+ "Public key" : "Clave pública",
+ "Key size" : "Tamañu de clave",
+ "Save keys" : "Guardar claves",
+ "Generate sharing keys" : "Xenerar claves de compartición",
+ "Generating sharing keys" : "Xenerando claves de comparticin",
+ "Minimum password stength" : "Fuercia mínimo de contraseña",
+ "Start scan" : "Aniciar escanéu",
+ "Result" : "Resultáu",
+ "A total of {{scan_result}} weak credentials were found." : "Alcontráronse un total de {{scan_result}} credenciales febles",
+ "Action" : "Aición",
+ "User" : "Usuariu",
+ "Files" : "Ficheros",
+ "Revisions" : "Revisiones",
+ "Pending" : "Pendiente",
+ "Show files" : "Amosar ficheros",
+ "Details" : "Detalles",
+ "Hide details" : "Anubrir detalles",
+ "Password score" : "Puntuación de contraseña",
+ "Pattern" : "Patrón",
+ "Showing revisions of" : "Amosando revisiones de ",
+ "Revision of" : "Revisión de",
+ "by" : "por",
+ "No revisions found." : "Nun s'alcontraron revisiones.",
+ "Label" : "Etiqueta",
+ "Restore revision" : "Restaurar revisión",
+ "Delete revision" : "Desaniciar revisión",
+ "Edit credential" : "Editar credencial",
+ "Save" : "Guardar",
+ "Cancel" : "Encaboxar",
+ "Settings" : "Axustes",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Amosando {{number_filtered}} credenciales de {{credential_number}}",
+ "Account" : "Cuenta",
+ "Password" : "Contraseña",
+ "OTP" : "OTP",
+ "E-mail" : "Corréu",
+ "URL" : "URL",
+ "Notes" : "Notes",
+ "Edit" : "Editar",
+ "Delete" : "Desaniciar",
+ "Share" : "Compartir",
+ "Destroy" : "Destruyir",
+ "You have incoming share requests." : "Tienes solicitúes de comparticiones entrantes.",
+ "Permissions" : "Permisos",
+ "Received from" : "Recibióse de",
+ "Date" : "Data",
+ "Accept" : "Aceutar",
+ "Decline" : "Refugar",
+ "Never" : "Enxamás",
+ "Logout" : "Zarrar sesión",
+ "Donate" : "Donar",
+ "Someone has shared a credential with you." : "Daquién compartió una credencial contigo.",
+ "Error while saving field" : "Fallu entrín se guardaba'l campu",
+ "A Passman item has expired" : "Caducó un elementu de Passman",
+ "A Passman item has been shared" : "Compartióse un elementu de Passman",
+ "A Passman item has been renamed" : "Renomóse un elementu de Passman",
+ "You created %1$s" : "Creesti %1$s",
+ "You updated %1$s" : "Anovesti %1$s",
+ "You renamed %1$s to %2$s" : "Renomesti %1$s a %2$s",
+ "You deleted %1$s" : "Desaniciesti %1$s",
+ "You recovered %1$s" : "Recuperesti %1$s",
+ "%s has been shared with a link" : "%s compartióse con un enllaz",
+ "Ignore" : "Inorar",
+ "%s shared \"%s\" with you. Click here to accept" : "%s compartió «%s» contigo. Primi equí p'aceutar",
+ "%s has declined your share request for \"%s\"." : "%s refugó la to solicitú de compartición pa «%s».",
+ "%s has accepted your share request for \"%s\"." : "%s aceutó la to solicitú de compartición pa «%s».",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Nun pue consiguise la información de versión",
+ "Passman Settings" : "Axustes de Passman",
+ "A newer version of Passman is available" : "Ta disponible una versión nueva de Passman",
+ "Credential mover" : "Movedor de credenciales",
+ "Check for new versions" : "Comprobar versiones nueves",
+ "Enable HTTPS check" : "Habilitar comprobación HTTPS",
+ "Disable context menu" : "Deshabilitar menú contestual",
+ "Disable JavaScript debugger" : "Deshabilitar depurador JavaScript",
+ "Source account" : "Cuenta fonte",
+ "Destination account" : "Cuenta destín",
+ "Credentials moved!" : "¡Moviéronse les credenciales!",
+ "Reason" : "Razón",
+ "Connection to server lost" : "Perdióse la conexón col sirvidor",
+ "Saving..." : "Guardando...",
+ "Dismiss" : "Escartar",
+ "seconds ago" : "hai segundos"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/l10n/ca.js b/l10n/ca.js
index 2d7c7ae0..10ac3466 100644
--- a/l10n/ca.js
+++ b/l10n/ca.js
@@ -2,21 +2,35 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Contrasenyes",
+ "Generating sharing keys ( %step / 2)" : "Generant les claus compartides ( %spas / 2)",
+ "Incorrect vault password!" : "Contrasenya de la cripta incorrecta!",
+ "Passwords do not match" : "Password did not match",
"General" : "General",
"Custom Fields" : "Camps personalitzats",
"Error loading file" : "Error al carregar l'arxiu",
"Credential created!" : "Credencials creades!",
"Credential deleted" : "Credencial eliminada",
"Credential updated" : "Credencial actualitzada",
+ "Credential recovered" : "Credencial recuperada",
"Credential destroyed" : "Credencial destruïda",
- "Error downloading file, you probably don't have enough permissions" : "Error al descarregar l'arxiu, probablement no compta amb permisos suficients",
"Invalid QR code" : "Codi QR invàlid",
"Starting export" : "Començant la exportació",
+ "Decrypting credentials" : "Desencriptant les credencials",
"Done" : "Fet",
- "File read successfully!" : "Lectura de l'arxiu correcta",
+ "Credential has no label, skipping" : "La credencial no té etiqueta, ometent",
"Adding {{credential}}" : "Afegint {{credential}}",
"Added {{credential}}" : "Afegida {{credential}}",
+ "Skipping credential, missing label on line {{line}}" : "Ometent credencial, mana etiqueta a la línia {{line}}",
+ "Parsed {{num}} credentials, starting to import" : "Processades {{num}} credencials, començant a importar",
"Importing" : "Important",
+ "Start import" : "Inicia la importació",
+ "Select CSV file" : "Escull un fitxer CSV",
+ "Parsed {{rows}} lines from CSV file" : "Processades {{rows}} línies del fitxer CSV",
+ "Skip first row" : "Salta la primera fila",
+ "You need to assign the label field before you can start the import." : "Has d'assignar una etiqueta abans de començar la importació.",
+ "Assign the proper fields to each column." : "Assigna els camps que pertoquin a cada columna.",
+ "Missing an importer? Try it with the generic CSV importer." : "Trobes a faltar un importador? Prova-ho amb l'importador genèric de CSV.",
+ "Go back to importers." : "Torna als importadors.",
"Revision deleted" : "Revisió detectada",
"Revision restored" : "Revisió restaurada",
"Settings saved" : "Paràmetres desats",
@@ -28,9 +42,14 @@ OC.L10N.register(
"Your old password is incorrect!" : "La teva contrasenya antiga és incorrecta",
"Share with users and groups" : "Comparteix amb usuaris i grups",
"Share link" : "Comparteix link",
+ "Credential unshared" : "Credencial descompartida",
"Credential shared" : "Credencial compartida",
"Saved!" : "Desat!",
+ "Poor" : "Pobre",
+ "Weak" : "Dèbil",
"Good" : "Correcte",
+ "Strong" : "Forta",
+ "Toggle visibility" : "Commuta la visibilitat",
"Copy to clipboard" : "Copiar al porta-papers",
"Copied to clipboard!" : "Copiat al porta-papers!",
"Generate password" : "Genera contrasenya",
@@ -39,7 +58,8 @@ OC.L10N.register(
"Complete" : "Complet",
"Username" : "Nom d'usuari",
"Repeat password" : "Repeteix la contrasenya",
- "Add Tag" : "Afegeix etiqueta",
+ "Field label" : "Etiqueta del camp",
+ "Field value" : "Valor del camp",
"Choose a file" : "Escollir un arxiu",
"Text" : "Text",
"File" : "Arxiu",
@@ -51,27 +71,39 @@ OC.L10N.register(
"Filename" : "Nom de l'arxiu",
"Upload date" : "Data de pujada",
"Size" : "Mida",
+ "Upload or enter your OTP secret" : "Puja o entra el teu codi OTP",
"Current OTP settings" : "Paràmetres OTP actuals",
+ "Issuer" : "Emissor",
"Secret" : "Secret",
- "Expire date" : "Data d'expiració",
"Renew interval" : "Renovar interval",
"Disabled" : "Inhabilitat",
"Day(s)" : "Dia(es)",
"Week(s)" : "Semana(es)",
"Month(s)" : "Mes(os)",
"Year(s)" : "Any(s)",
+ "Password generation settings" : "Paràmetres de generació de contrasenya",
"Password length" : "Longitud de la contrasenya",
"Use uppercase letters" : "Utilitzeu majúscules",
"Use lowercase letters" : "Utilitzeu minúscules",
"Use numbers" : "Utilitza números",
"Use special characters" : "Utilitzeu caràcters especials",
+ "Avoid ambiguous characters" : "Evita caràcters ambigus",
"Export type" : "Tipus d'exportaci",
"Export" : "Exporta",
+ "Enter vault password to confirm export." : "Entra la contrasenya de la cripta per confirmar l'exportació",
+ "Rename vault" : "Reanomena la cripta",
+ "New vault name" : "Nom nou de la cripta",
"Change" : "Canvi",
+ "Change vault key" : "Canvia la clau de la cripta",
+ "Old vault password" : "Contrasenya vella de la cripta",
+ "New vault password" : "Contrasenya nova de la cripta",
+ "Please wait your vault is being updated, do not leave this page." : "Espera mentre s'actualitza la teva cripta, no deixis aquesta pàgina.",
"Processing" : "Processant",
"Total progress" : "Progrés total",
+ "About Passman" : "Sobre Passman",
"Version" : "Versió",
- "Deleting {{password}}..." : "Esborrant {{password}}",
+ "Delete vault" : "Esborra la cripta",
+ "Vault password" : "Contrasenya de la cripta",
"Import type" : "Tipus d'importació",
"Import" : "Importa",
"Read progress" : "Progrés de lectura",
@@ -84,6 +116,7 @@ OC.L10N.register(
"Generating sharing keys" : "Generant claus compartides",
"Score" : "Puntuació",
"Action" : "Acció",
+ "Missing users? Only users that have vaults are shown." : "Trobes a faltar usuaris? Només es mostren els usuaris que tenen criptes.",
"Uploading" : "Pujant",
"User" : "Usuari",
"Read" : "Llegir",
@@ -110,16 +143,13 @@ OC.L10N.register(
"Settings" : "Paràmetres",
"Share credential {{credential}}" : "Comparteix credencial {{credential}}",
"Unshare" : "No compartit",
- "All time" : "Tot el temps",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrant {{number_filtered}} de {{credential_number}} credencials",
- "Search credential..." : "Busca credencial...",
"Account" : "Compte",
"Password" : "Contrasenya",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Notes",
- "Expire time" : "Temps d'expiració",
"Changed" : "Canviat",
"Created" : "Creat",
"Edit" : "Edita",
@@ -131,19 +161,33 @@ OC.L10N.register(
"Date" : "Data",
"Accept" : "Accepta",
"Decline" : "Rebutja",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "La teva cripta estarà tancada {{time}} perquè hi ha hagut {{tries}} intents fallits d'accés!",
"Last accessed" : "Últim accés",
"Never" : "Mai",
+ "No vaults found, why not create one?" : "No s'han trobat criptes, perquè no crear-ne una?",
+ "Please give your new vault a name." : "Si us plau, dona un nom a la teva cripta nova.",
+ "Repeat vault password" : "Repeteix la contrasenya de la cripta",
+ "Create vault" : "Crea una cripta",
+ "Go back to vaults" : "Torna les criptes",
+ "Log into this vault automatically." : "Entra a aquesta cripta automàticament.",
+ "Decrypt vault" : "Desxifra la cripta",
+ "If you want this vault to be removed you can request that here." : "Si vols esborrar aquesta cripta pots sol·licitar-ho aquí.",
+ "Request vault destruction" : "Demana la destrucció de la cripta",
+ "Yes, request an admin to destroy this vault" : "Si, demana a un administrador que destrueixi aquesta cripta",
+ "Vault destruction requested" : "S'ha fet la petició per destruir la cripta",
+ "Logged in to {{vault_name}}" : "Oberta la {{vault_name}}",
+ "Change vault" : "Canvia la cripta",
"Deleted credentials" : "Credencials esborrades",
"Logout" : "Sortir",
"Donate" : "Donar",
- "Loading..." : "Carregant...",
"You created %1$s" : "Heu creat %1$s",
"You deleted %1$s" : "Has esborrat %1$s",
"You permanently deleted %1$s" : "Heu eliminat permanentment %1$s",
"Remind me later" : "Recorda'm-ho més tard",
"Ignore" : "Ignora",
"Unable to get version info" : "no s'ha pogut obtenir informació de la versió",
- "Github version:" : "versió de GitHub: ",
+ "Vault destruction requests" : "Peticions de destrucció de la cripta",
+ "Requests to destroy vault" : "Peticions per destruir la cripta",
"Saving..." : "Desant...",
"Dismiss" : "Rebutja",
"seconds ago" : "Segons enrere"
diff --git a/l10n/ca.json b/l10n/ca.json
index e41cd958..20ceac82 100644
--- a/l10n/ca.json
+++ b/l10n/ca.json
@@ -1,20 +1,34 @@
{ "translations": {
"Passwords" : "Contrasenyes",
+ "Generating sharing keys ( %step / 2)" : "Generant les claus compartides ( %spas / 2)",
+ "Incorrect vault password!" : "Contrasenya de la cripta incorrecta!",
+ "Passwords do not match" : "Password did not match",
"General" : "General",
"Custom Fields" : "Camps personalitzats",
"Error loading file" : "Error al carregar l'arxiu",
"Credential created!" : "Credencials creades!",
"Credential deleted" : "Credencial eliminada",
"Credential updated" : "Credencial actualitzada",
+ "Credential recovered" : "Credencial recuperada",
"Credential destroyed" : "Credencial destruïda",
- "Error downloading file, you probably don't have enough permissions" : "Error al descarregar l'arxiu, probablement no compta amb permisos suficients",
"Invalid QR code" : "Codi QR invàlid",
"Starting export" : "Començant la exportació",
+ "Decrypting credentials" : "Desencriptant les credencials",
"Done" : "Fet",
- "File read successfully!" : "Lectura de l'arxiu correcta",
+ "Credential has no label, skipping" : "La credencial no té etiqueta, ometent",
"Adding {{credential}}" : "Afegint {{credential}}",
"Added {{credential}}" : "Afegida {{credential}}",
+ "Skipping credential, missing label on line {{line}}" : "Ometent credencial, mana etiqueta a la línia {{line}}",
+ "Parsed {{num}} credentials, starting to import" : "Processades {{num}} credencials, començant a importar",
"Importing" : "Important",
+ "Start import" : "Inicia la importació",
+ "Select CSV file" : "Escull un fitxer CSV",
+ "Parsed {{rows}} lines from CSV file" : "Processades {{rows}} línies del fitxer CSV",
+ "Skip first row" : "Salta la primera fila",
+ "You need to assign the label field before you can start the import." : "Has d'assignar una etiqueta abans de començar la importació.",
+ "Assign the proper fields to each column." : "Assigna els camps que pertoquin a cada columna.",
+ "Missing an importer? Try it with the generic CSV importer." : "Trobes a faltar un importador? Prova-ho amb l'importador genèric de CSV.",
+ "Go back to importers." : "Torna als importadors.",
"Revision deleted" : "Revisió detectada",
"Revision restored" : "Revisió restaurada",
"Settings saved" : "Paràmetres desats",
@@ -26,9 +40,14 @@
"Your old password is incorrect!" : "La teva contrasenya antiga és incorrecta",
"Share with users and groups" : "Comparteix amb usuaris i grups",
"Share link" : "Comparteix link",
+ "Credential unshared" : "Credencial descompartida",
"Credential shared" : "Credencial compartida",
"Saved!" : "Desat!",
+ "Poor" : "Pobre",
+ "Weak" : "Dèbil",
"Good" : "Correcte",
+ "Strong" : "Forta",
+ "Toggle visibility" : "Commuta la visibilitat",
"Copy to clipboard" : "Copiar al porta-papers",
"Copied to clipboard!" : "Copiat al porta-papers!",
"Generate password" : "Genera contrasenya",
@@ -37,7 +56,8 @@
"Complete" : "Complet",
"Username" : "Nom d'usuari",
"Repeat password" : "Repeteix la contrasenya",
- "Add Tag" : "Afegeix etiqueta",
+ "Field label" : "Etiqueta del camp",
+ "Field value" : "Valor del camp",
"Choose a file" : "Escollir un arxiu",
"Text" : "Text",
"File" : "Arxiu",
@@ -49,27 +69,39 @@
"Filename" : "Nom de l'arxiu",
"Upload date" : "Data de pujada",
"Size" : "Mida",
+ "Upload or enter your OTP secret" : "Puja o entra el teu codi OTP",
"Current OTP settings" : "Paràmetres OTP actuals",
+ "Issuer" : "Emissor",
"Secret" : "Secret",
- "Expire date" : "Data d'expiració",
"Renew interval" : "Renovar interval",
"Disabled" : "Inhabilitat",
"Day(s)" : "Dia(es)",
"Week(s)" : "Semana(es)",
"Month(s)" : "Mes(os)",
"Year(s)" : "Any(s)",
+ "Password generation settings" : "Paràmetres de generació de contrasenya",
"Password length" : "Longitud de la contrasenya",
"Use uppercase letters" : "Utilitzeu majúscules",
"Use lowercase letters" : "Utilitzeu minúscules",
"Use numbers" : "Utilitza números",
"Use special characters" : "Utilitzeu caràcters especials",
+ "Avoid ambiguous characters" : "Evita caràcters ambigus",
"Export type" : "Tipus d'exportaci",
"Export" : "Exporta",
+ "Enter vault password to confirm export." : "Entra la contrasenya de la cripta per confirmar l'exportació",
+ "Rename vault" : "Reanomena la cripta",
+ "New vault name" : "Nom nou de la cripta",
"Change" : "Canvi",
+ "Change vault key" : "Canvia la clau de la cripta",
+ "Old vault password" : "Contrasenya vella de la cripta",
+ "New vault password" : "Contrasenya nova de la cripta",
+ "Please wait your vault is being updated, do not leave this page." : "Espera mentre s'actualitza la teva cripta, no deixis aquesta pàgina.",
"Processing" : "Processant",
"Total progress" : "Progrés total",
+ "About Passman" : "Sobre Passman",
"Version" : "Versió",
- "Deleting {{password}}..." : "Esborrant {{password}}",
+ "Delete vault" : "Esborra la cripta",
+ "Vault password" : "Contrasenya de la cripta",
"Import type" : "Tipus d'importació",
"Import" : "Importa",
"Read progress" : "Progrés de lectura",
@@ -82,6 +114,7 @@
"Generating sharing keys" : "Generant claus compartides",
"Score" : "Puntuació",
"Action" : "Acció",
+ "Missing users? Only users that have vaults are shown." : "Trobes a faltar usuaris? Només es mostren els usuaris que tenen criptes.",
"Uploading" : "Pujant",
"User" : "Usuari",
"Read" : "Llegir",
@@ -108,16 +141,13 @@
"Settings" : "Paràmetres",
"Share credential {{credential}}" : "Comparteix credencial {{credential}}",
"Unshare" : "No compartit",
- "All time" : "Tot el temps",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrant {{number_filtered}} de {{credential_number}} credencials",
- "Search credential..." : "Busca credencial...",
"Account" : "Compte",
"Password" : "Contrasenya",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Notes",
- "Expire time" : "Temps d'expiració",
"Changed" : "Canviat",
"Created" : "Creat",
"Edit" : "Edita",
@@ -129,19 +159,33 @@
"Date" : "Data",
"Accept" : "Accepta",
"Decline" : "Rebutja",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "La teva cripta estarà tancada {{time}} perquè hi ha hagut {{tries}} intents fallits d'accés!",
"Last accessed" : "Últim accés",
"Never" : "Mai",
+ "No vaults found, why not create one?" : "No s'han trobat criptes, perquè no crear-ne una?",
+ "Please give your new vault a name." : "Si us plau, dona un nom a la teva cripta nova.",
+ "Repeat vault password" : "Repeteix la contrasenya de la cripta",
+ "Create vault" : "Crea una cripta",
+ "Go back to vaults" : "Torna les criptes",
+ "Log into this vault automatically." : "Entra a aquesta cripta automàticament.",
+ "Decrypt vault" : "Desxifra la cripta",
+ "If you want this vault to be removed you can request that here." : "Si vols esborrar aquesta cripta pots sol·licitar-ho aquí.",
+ "Request vault destruction" : "Demana la destrucció de la cripta",
+ "Yes, request an admin to destroy this vault" : "Si, demana a un administrador que destrueixi aquesta cripta",
+ "Vault destruction requested" : "S'ha fet la petició per destruir la cripta",
+ "Logged in to {{vault_name}}" : "Oberta la {{vault_name}}",
+ "Change vault" : "Canvia la cripta",
"Deleted credentials" : "Credencials esborrades",
"Logout" : "Sortir",
"Donate" : "Donar",
- "Loading..." : "Carregant...",
"You created %1$s" : "Heu creat %1$s",
"You deleted %1$s" : "Has esborrat %1$s",
"You permanently deleted %1$s" : "Heu eliminat permanentment %1$s",
"Remind me later" : "Recorda'm-ho més tard",
"Ignore" : "Ignora",
"Unable to get version info" : "no s'ha pogut obtenir informació de la versió",
- "Github version:" : "versió de GitHub: ",
+ "Vault destruction requests" : "Peticions de destrucció de la cripta",
+ "Requests to destroy vault" : "Peticions per destruir la cripta",
"Saving..." : "Desant...",
"Dismiss" : "Rebutja",
"seconds ago" : "Segons enrere"
diff --git a/l10n/cs.js b/l10n/cs.js
index 68f9075c..0af034dd 100644
--- a/l10n/cs.js
+++ b/l10n/cs.js
@@ -7,22 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Hesla se neshodují",
"General" : "Obecné",
"Custom Fields" : "Vlastní pole",
- "Please fill in a label!" : "Prosím, vyplňte popisek",
- "Please fill in a value!" : "Prosím, vyplňte hodnotu!",
+ "Please fill in a label." : "Prosím, vyplňte popisek.",
+ "Please fill in a value." : "Prosím, vyplňte hodnotu.",
"Error loading file" : "Chyba načítání souboru",
- "An error happened during decryption" : "Při dešifrování došlo k chybě",
+ "An error occurred during decryption" : "Při dešifrování došlo k chybě",
"Credential created!" : "Pověření vytvořeno!",
"Credential deleted" : "Pověření smazáno",
"Credential updated" : "Pověření aktualizováno",
"Credential recovered" : "Pověření obnoveno",
"Credential destroyed" : "Pověření zničeno",
- "Error downloading file, you probably don't have enough permissions" : "Chyba stahování souboru, pravděpodobně nemáte dostatečná oprávnění",
+ "Error downloading file, you probably don't have sufficient permissions" : "Chyba stahování souboru, pravděpodobně nemáte dostatečná oprávnění",
"Invalid QR code" : "Neplatný QR kód",
"Starting export" : "Začíná export",
"Decrypting credentials" : "Dešifrování pověření",
"Done" : "Hotovo",
- "File read successfully!" : "Soubor úspěšně přečten!",
- "Follow the following steps to import your file" : "Pro import vašeho souboru se řiďte následujícími kroky",
+ "File read successfully." : "Soubor úspěšně přečten.",
+ "Proceed with the following steps to import your file" : "Pro import vašeho souboru se řiďte následujícími kroky",
"Credential has no label, skipping" : "Pověření nemá popisek, přeskakuji",
"Adding {{credential}}" : "Přidávání {{credential}}",
"Added {{credential}}" : "Přidáno {{credential}}",
@@ -30,29 +30,29 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Naparsováno {{num}} pověření, začíná import",
"Importing" : "Importování",
"Start import" : "Spustit import",
- "Select csv file" : "Vybrat soubor csv",
- "Parsed {{rows}} lines from csv file" : "Z csv souboru bylo parsováno {{rows}} řádků",
+ "Select CSV file" : "Vybrat soubor CSV",
+ "Parsed {{rows}} lines from CSV file" : "Z CSV souboru bylo parsováno {{rows}} řádků",
"Skip first row" : "Přeskočit první řádek",
"You need to assign the label field before you can start the import." : "Před začátkem importu musíte přiřadit pole popisku.",
- "First 5 lines of the csv are shown." : "Je zobrazeno prvních 5 řádků csv souboru",
+ "The first 5 lines of the CSV are shown." : "Je zobrazeno prvních 5 řádků CSV souboru",
"Assign the proper fields to each column." : "Přiřaďte každému sloupci správné hodnoty.",
- "Example imported credential" : "Příklad importovaného pověření",
- "Missing an importer? Try it with the generic csv importer." : "Chybí importovač? Zkuste obecný importovač csv.",
+ "Example of imported credential" : "Příklad importovaného pověření",
+ "Missing an importer? Try it with the generic CSV importer." : "Chybí importovač? Zkuste obecný importovač CSV.",
"Go back to importers." : "Přejít zpět k importovačům.",
"Revision deleted" : "Revize smazána",
"Revision restored" : "Revize obnovena",
- "Save in passman" : "Uložit v passmanu",
+ "Save in Passman" : "Uložit v passmanu",
"Settings saved" : "Nastavení uložena",
"General settings" : "Obecná nastavení",
- "Password Audit" : "Audit hesel",
+ "Password audit" : "Audit hesel",
"Password settings" : "Nastavení hesla",
"Import credentials" : "Importovat pověření",
"Export credentials" : "Exportovat pověření",
"Sharing" : "Sdílení",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Opravdu chcete odeít? Poškodí to všechna vaše pověření",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Opravdu chcete odeít? Všechna vaše pověření budou ztracena",
"Your old password is incorrect!" : "Vaše staré heslo není platné!",
- "New passwords do not match!" : "Nová hesla se neshodují!",
- "Please login with your new vault password" : "Prosím, přihlašte se vaším novým heslem trezoru",
+ "New password does not match!" : "Nová hesla se neshodují!",
+ "Please log in with your new vault password" : "Prosím, přihlašte se vaším novým heslem trezoru",
"Share with users and groups" : "Sdílet s uživateli a skupinami",
"Share link" : "Sdílet odkaz",
"Are you sure you want to leave? This will corrupt this credential" : "Opravdu si přejete odejít? Poškodí to toto pověření",
@@ -72,7 +72,7 @@ OC.L10N.register(
"Complete" : "Kompletní",
"Username" : "Uživatelské jméno",
"Repeat password" : "Zopakujte heslo",
- "Add Tag" : "Přidat štítek",
+ "Add tag" : "Přidat štítek",
"Field label" : "Popisek pole",
"Field value" : "Hodnota pole",
"Choose a file" : "Vyberte soubor",
@@ -90,8 +90,8 @@ OC.L10N.register(
"Current OTP settings" : "Aktuální nastavení OTP",
"Issuer" : "Vydavatel",
"Secret" : "Tajemství",
- "Expire date" : "Datum vypršení",
- "No expire date set" : "Datum vypršení není nastaveno",
+ "Expiration date" : "Datum vypršení platnosti",
+ "No expiration date set" : "Není nastaveno datum vypršení platnosti",
"Renew interval" : "Interval obnovy",
"Disabled" : "Zakázáno",
"Day(s)" : "Dnů",
@@ -116,7 +116,7 @@ OC.L10N.register(
"Change vault key" : "Změnit klíč trezoru",
"Old vault password" : "Staré heslo trezoru",
"New vault password" : "Nové heslo trezoru",
- "New vault password repeat" : "Zopakovat nové heslo trezoru",
+ "Repeat new vault password" : "Zopakujte nové heslo trezoru",
"Please wait your vault is being updated, do not leave this page." : "Prosím čekejte, váš trezor se aktualizuje, neopouštějte tuto stránku.",
"Processing" : "Zpracování",
"Total progress" : "Celkový průběh",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Vault password" : "Heslo trezoru",
"This process is irreversible" : "Tato operace je nevratná",
"Delete my precious passwords" : "Vymazat moje předešlá hesla",
- "Deleting {{password}}..." : "Mazání {{password}}...",
+ "Deleting {{password}}…" : "Mazání {{password}}...",
"Yes, delete my precious passwords" : "Ano, vymazat moje předešlá hesla",
"Import type" : "Typ importu",
"Import" : "Import",
@@ -142,13 +142,14 @@ OC.L10N.register(
"Save keys" : "Uložit klíče",
"Generate sharing keys" : "Generovat sdílecí klíče",
"Generating sharing keys" : "Generování sdílecích klíčů",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Nástro hesel projde vaše heslo, spočítá průměrný čas prolomení a pokud je pod hranicí, tak ho zobrazí",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Nástro hesel projde vaše heslo, spočítá průměrný čas prolomení a pokud je pod hranicí, tak ho zobrazí",
"Minimum password stength" : "Nemenší síla hesla",
- "Passman scanned your passwords, and here is the result." : "Pasman proskenoval vaše hesla a zde j\te výsledek.",
- "A total of {{scan_result}} weak credentials." : "Celkem {{scan_result}} slabých pověření.",
+ "Start scan" : "Zahájit sken",
+ "Result" : "Výsledek",
+ "A total of {{scan_result}} weak credentials were found." : "Bylo nalezeno celkem {{scan_result}} slabých pověření.",
"Score" : "Skóre",
"Action" : "Akce",
- "Search users or groups..." : "Hledat uživatele a skupiny...",
+ "Search users or groups…" : "Hledat uživatele a skupiny...",
"Missing users? Only users that have vaults are shown." : "Chybí uživatelé? Jsou zobrazeni pouze uživatelé, kteří mají trezor.",
"Cyphering" : "Šifrování",
"Uploading" : "Nahrávání",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Povolit sdílení odkazů",
"Share until date" : "Sdílet do data",
"Expire after views" : "Vyprší po zobrazeních",
- "Click share first" : "Nejprve klikněte na sdílet",
+ "Click Share first" : "Nejprve klikněte na sdílet",
"Show files" : "Zobrazit soubory",
"Details" : "Podrobnosti",
"Hide details" : "Skrýt podrobnosti",
@@ -203,16 +204,16 @@ OC.L10N.register(
"Share credential {{credential}}" : "Sdílet pověření {{credential}}",
"Unshare" : "Přestat sdílet",
"Showing deleted since" : "Zobrazuí se smazané od",
- "All time" : "Na vždy",
+ "Beginning" : "Začátek",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Zobrazuje se {{number_filtered}} z {{credential_number}} pověření",
- "Search credential..." : "Hledat pověření...",
+ "Search for credential…" : "Hledat pověření...",
"Account" : "Účet",
"Password" : "Heslo",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Poznámky",
- "Expire time" : "Čas vypršení",
+ "Expiry time" : "Čas vypršení",
"Changed" : "Změněno",
"Created" : "Vytvořena",
"Edit" : "Upravit",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Zničit",
"Use regex" : "Použít regulární výraz",
"You have incoming share requests." : "Máte příchozí požadavky na sdílení.",
- "If you want to put the credential in a other vault," : "Pokud chcete pověření umístit do jiného trezoru,",
- "logout of this vault and login to the vault you want the shared credential in." : "Odhlaste se z tohoto trezoru a přihlaste se do trezoru, kde chcete sdílené pověření.",
+ "If you want to put the credential in another vault," : "Pokud chcete pověření umístit do jiného trezoru,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Odhlaste se z tohoto trezoru a přihlaste se do trezoru, kde chcete sdílené pověření.",
"Permissions" : "Oprávnění",
"Received from" : "Obdrženo od",
"Date" : "Datum",
@@ -237,26 +238,26 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Síla hesla musí být aspoň: {{strength}}",
"Please give your new vault a name." : "Prosím pojmenujte váš nový trezor.",
"Repeat vault password" : "Zopakujte heslo trezoru",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Vaše sdílecí klíče budou mít sílu 1024 bitů, což pak můžete změnit v nastavení.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Vaše sdílecí klíče budou mít sílu 1024 bitů, což pak můžete změnit v nastavení.",
"Create vault" : "Vytvořit trezor",
"Go back to vaults" : "Jít zpět k trezorům",
"Please input the password for" : "Prosím, zadejte heslo pro",
- "Set this vault as default." : "Nastavit tento trezor jako výchozí.",
- "Login automatically to this vault." : "Přihlásit se automaticky do tohoto trezoru.",
- "Logout of this vault automatically after: " : "Automaticky se z tohoto trezoru odhlásit po: ",
+ "Set this vault as the default." : "Nastavit tento trezor jako výchozí.",
+ "Log into this vault automatically." : "Automaticky se přihlašovat k tomuto trezoru.",
+ "Log out of this vault automatically after: " : "Automaticky se z tohoto trezoru odhlásit po: ",
"Decrypt vault" : "Dešifrovat trezor",
- "Seems you lost the vault password and you're unable to login." : "Vypadá to, že jste ztratil(a) heslo k trezoru a nemůžete se přihlásit.",
- "If you want this vault removed you can request removal of the vault here." : "Pokud chcete, aby byl tento trezor odstraněn, můžete o jeho odstranění požádat zde.",
- "An admin then accept to the request (or not)" : "Administrátor pak přijme požadavek (nebo ne)",
- "After an admin destroy's this vault, all credentials will be lost" : "Poté,co administrátor potvrdí destrukci tohoto trezoru, všechna pověření budou ztracena",
- "Reason to request deletion (optional):" : "Důvod žádosti o smazání (volitelné):",
+ "Seems you lost the vault password and you're unable to log in." : "Vypadá to, že jste ztratili heslo k trezoru a nemůžete se přihlásit.",
+ "If you want this vault to be removed you can request that here." : "Pokud chcete, aby byl tento trezor odstraněn, můžete o jeho odstranění požádat zde.",
+ "An admin then accepts or declines the request" : "Administrátor pak přijme nebo odmítne požadavek",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Poté,co administrátor potvrdí destrukci tohoto trezoru, všechna pověření budou ztracena",
+ "Reason for requesting deletion (optional):" : "Důvod žádosti o smazání (volitelné):",
"Request vault destruction" : "Požádat o destrukci trezoru",
"Yes, request an admin to destroy this vault" : "Ano, požádat administrátora o zničení tohoto trezoru",
"Cancel destruction request" : "Zrušit požadavek na destrukci",
"Vault destruction requested" : "Vyžádání zničení trezoru",
"Request removed" : "Požadavek odebrán",
"Destruction request pending" : "Požadavek na destrukci čeká",
- "Warning! Adding credentials over http can be insecure!" : "Varování! Přidávání pověření přes http může být nebezpečné!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Varování! Přidávání pověření přes HTTP může být nebezpečné!",
"Logged in to {{vault_name}}" : "Přihlášeno do {{vault_name}}",
"Change vault" : "Změnit trezor",
"Deleted credentials" : "Smazaná pověření",
@@ -264,8 +265,8 @@ OC.L10N.register(
"Donate" : "Přispět",
"Someone has shared a credential with you." : "Někdo s vvám nasdílel pověření",
"Click here to request it" : "Klikněte zde pro vyžádání",
- "Loading..." : "Načítání...",
- "Awwhh.... credential not found. Maybe it expired" : "Hmmmm.... pověření nenalezeno. Možná vypršelo",
+ "Loading…" : "Načítání…",
+ "Awwhh… credential not found. Maybe it expired" : "Hmmmm.... pověření nenalezeno. Možná vypršelo",
"Error while saving field" : "Chyba při ukládání pole",
"A Passman item has been created, modified or deleted" : "Položka v Passmanu byla vytvořena, změněna, nebo odstraněna",
"A Passman item has expired" : "Položka v Passmanu vypršela",
@@ -295,17 +296,18 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s s tebou sdílí \"%s\". Kliknout pro přijetí",
"%s has declined your share request for \"%s\"." : "%s zamítl(a) tvůj požadavek na sdílení \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s přijal(a) tvůj požadavek na sdílení \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Nepodařilo se získat informace o verzi",
"Passman Settings" : "Nastavení passmanu",
- "Github version:" : "Github verze:",
- "A newer version of passman is available" : "Je dostupná nová verze passmanu",
+ "GitHub version:" : "GitHub verze:",
+ "A newer version of Passman is available" : "Je dostupná nová verze Passmanu",
"Password sharing" : "Sdílení hesla",
"Credential mover" : "Přesunovač pověření",
"Vault destruction requests" : "Požadavky na zničení trezoru",
"Check for new versions" : "Zkontrolovat nové verze",
"Enable HTTPS check" : "Povolit kontrolu HTTPS",
"Disable context menu" : "Zakázat kontextové menu",
- "Disable javascript debugger" : "Zakázat ladění javascriptu",
+ "Disable JavaScript debugger" : "Zakázat ladění JavaScriptu",
"Allow users on this server to share passwords with a link" : "Povolit na tomto serveru uživatelům sdílení hesel pomocí odkazu",
"Allow users on this server to share passwords with other users" : "Povolit na tomto serveru uživatelům sdílení hesel s ostatními uživateli",
"Move credentials from one account to another" : "Přesuňte pověření z jednoho účtu do druhého",
diff --git a/l10n/cs.json b/l10n/cs.json
index 1b961981..13686ce3 100644
--- a/l10n/cs.json
+++ b/l10n/cs.json
@@ -5,22 +5,22 @@
"Passwords do not match" : "Hesla se neshodují",
"General" : "Obecné",
"Custom Fields" : "Vlastní pole",
- "Please fill in a label!" : "Prosím, vyplňte popisek",
- "Please fill in a value!" : "Prosím, vyplňte hodnotu!",
+ "Please fill in a label." : "Prosím, vyplňte popisek.",
+ "Please fill in a value." : "Prosím, vyplňte hodnotu.",
"Error loading file" : "Chyba načítání souboru",
- "An error happened during decryption" : "Při dešifrování došlo k chybě",
+ "An error occurred during decryption" : "Při dešifrování došlo k chybě",
"Credential created!" : "Pověření vytvořeno!",
"Credential deleted" : "Pověření smazáno",
"Credential updated" : "Pověření aktualizováno",
"Credential recovered" : "Pověření obnoveno",
"Credential destroyed" : "Pověření zničeno",
- "Error downloading file, you probably don't have enough permissions" : "Chyba stahování souboru, pravděpodobně nemáte dostatečná oprávnění",
+ "Error downloading file, you probably don't have sufficient permissions" : "Chyba stahování souboru, pravděpodobně nemáte dostatečná oprávnění",
"Invalid QR code" : "Neplatný QR kód",
"Starting export" : "Začíná export",
"Decrypting credentials" : "Dešifrování pověření",
"Done" : "Hotovo",
- "File read successfully!" : "Soubor úspěšně přečten!",
- "Follow the following steps to import your file" : "Pro import vašeho souboru se řiďte následujícími kroky",
+ "File read successfully." : "Soubor úspěšně přečten.",
+ "Proceed with the following steps to import your file" : "Pro import vašeho souboru se řiďte následujícími kroky",
"Credential has no label, skipping" : "Pověření nemá popisek, přeskakuji",
"Adding {{credential}}" : "Přidávání {{credential}}",
"Added {{credential}}" : "Přidáno {{credential}}",
@@ -28,29 +28,29 @@
"Parsed {{num}} credentials, starting to import" : "Naparsováno {{num}} pověření, začíná import",
"Importing" : "Importování",
"Start import" : "Spustit import",
- "Select csv file" : "Vybrat soubor csv",
- "Parsed {{rows}} lines from csv file" : "Z csv souboru bylo parsováno {{rows}} řádků",
+ "Select CSV file" : "Vybrat soubor CSV",
+ "Parsed {{rows}} lines from CSV file" : "Z CSV souboru bylo parsováno {{rows}} řádků",
"Skip first row" : "Přeskočit první řádek",
"You need to assign the label field before you can start the import." : "Před začátkem importu musíte přiřadit pole popisku.",
- "First 5 lines of the csv are shown." : "Je zobrazeno prvních 5 řádků csv souboru",
+ "The first 5 lines of the CSV are shown." : "Je zobrazeno prvních 5 řádků CSV souboru",
"Assign the proper fields to each column." : "Přiřaďte každému sloupci správné hodnoty.",
- "Example imported credential" : "Příklad importovaného pověření",
- "Missing an importer? Try it with the generic csv importer." : "Chybí importovač? Zkuste obecný importovač csv.",
+ "Example of imported credential" : "Příklad importovaného pověření",
+ "Missing an importer? Try it with the generic CSV importer." : "Chybí importovač? Zkuste obecný importovač CSV.",
"Go back to importers." : "Přejít zpět k importovačům.",
"Revision deleted" : "Revize smazána",
"Revision restored" : "Revize obnovena",
- "Save in passman" : "Uložit v passmanu",
+ "Save in Passman" : "Uložit v passmanu",
"Settings saved" : "Nastavení uložena",
"General settings" : "Obecná nastavení",
- "Password Audit" : "Audit hesel",
+ "Password audit" : "Audit hesel",
"Password settings" : "Nastavení hesla",
"Import credentials" : "Importovat pověření",
"Export credentials" : "Exportovat pověření",
"Sharing" : "Sdílení",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Opravdu chcete odeít? Poškodí to všechna vaše pověření",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Opravdu chcete odeít? Všechna vaše pověření budou ztracena",
"Your old password is incorrect!" : "Vaše staré heslo není platné!",
- "New passwords do not match!" : "Nová hesla se neshodují!",
- "Please login with your new vault password" : "Prosím, přihlašte se vaším novým heslem trezoru",
+ "New password does not match!" : "Nová hesla se neshodují!",
+ "Please log in with your new vault password" : "Prosím, přihlašte se vaším novým heslem trezoru",
"Share with users and groups" : "Sdílet s uživateli a skupinami",
"Share link" : "Sdílet odkaz",
"Are you sure you want to leave? This will corrupt this credential" : "Opravdu si přejete odejít? Poškodí to toto pověření",
@@ -70,7 +70,7 @@
"Complete" : "Kompletní",
"Username" : "Uživatelské jméno",
"Repeat password" : "Zopakujte heslo",
- "Add Tag" : "Přidat štítek",
+ "Add tag" : "Přidat štítek",
"Field label" : "Popisek pole",
"Field value" : "Hodnota pole",
"Choose a file" : "Vyberte soubor",
@@ -88,8 +88,8 @@
"Current OTP settings" : "Aktuální nastavení OTP",
"Issuer" : "Vydavatel",
"Secret" : "Tajemství",
- "Expire date" : "Datum vypršení",
- "No expire date set" : "Datum vypršení není nastaveno",
+ "Expiration date" : "Datum vypršení platnosti",
+ "No expiration date set" : "Není nastaveno datum vypršení platnosti",
"Renew interval" : "Interval obnovy",
"Disabled" : "Zakázáno",
"Day(s)" : "Dnů",
@@ -114,7 +114,7 @@
"Change vault key" : "Změnit klíč trezoru",
"Old vault password" : "Staré heslo trezoru",
"New vault password" : "Nové heslo trezoru",
- "New vault password repeat" : "Zopakovat nové heslo trezoru",
+ "Repeat new vault password" : "Zopakujte nové heslo trezoru",
"Please wait your vault is being updated, do not leave this page." : "Prosím čekejte, váš trezor se aktualizuje, neopouštějte tuto stránku.",
"Processing" : "Zpracování",
"Total progress" : "Celkový průběh",
@@ -128,7 +128,7 @@
"Vault password" : "Heslo trezoru",
"This process is irreversible" : "Tato operace je nevratná",
"Delete my precious passwords" : "Vymazat moje předešlá hesla",
- "Deleting {{password}}..." : "Mazání {{password}}...",
+ "Deleting {{password}}…" : "Mazání {{password}}...",
"Yes, delete my precious passwords" : "Ano, vymazat moje předešlá hesla",
"Import type" : "Typ importu",
"Import" : "Import",
@@ -140,13 +140,14 @@
"Save keys" : "Uložit klíče",
"Generate sharing keys" : "Generovat sdílecí klíče",
"Generating sharing keys" : "Generování sdílecích klíčů",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Nástro hesel projde vaše heslo, spočítá průměrný čas prolomení a pokud je pod hranicí, tak ho zobrazí",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Nástro hesel projde vaše heslo, spočítá průměrný čas prolomení a pokud je pod hranicí, tak ho zobrazí",
"Minimum password stength" : "Nemenší síla hesla",
- "Passman scanned your passwords, and here is the result." : "Pasman proskenoval vaše hesla a zde j\te výsledek.",
- "A total of {{scan_result}} weak credentials." : "Celkem {{scan_result}} slabých pověření.",
+ "Start scan" : "Zahájit sken",
+ "Result" : "Výsledek",
+ "A total of {{scan_result}} weak credentials were found." : "Bylo nalezeno celkem {{scan_result}} slabých pověření.",
"Score" : "Skóre",
"Action" : "Akce",
- "Search users or groups..." : "Hledat uživatele a skupiny...",
+ "Search users or groups…" : "Hledat uživatele a skupiny...",
"Missing users? Only users that have vaults are shown." : "Chybí uživatelé? Jsou zobrazeni pouze uživatelé, kteří mají trezor.",
"Cyphering" : "Šifrování",
"Uploading" : "Nahrávání",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Povolit sdílení odkazů",
"Share until date" : "Sdílet do data",
"Expire after views" : "Vyprší po zobrazeních",
- "Click share first" : "Nejprve klikněte na sdílet",
+ "Click Share first" : "Nejprve klikněte na sdílet",
"Show files" : "Zobrazit soubory",
"Details" : "Podrobnosti",
"Hide details" : "Skrýt podrobnosti",
@@ -201,16 +202,16 @@
"Share credential {{credential}}" : "Sdílet pověření {{credential}}",
"Unshare" : "Přestat sdílet",
"Showing deleted since" : "Zobrazuí se smazané od",
- "All time" : "Na vždy",
+ "Beginning" : "Začátek",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Zobrazuje se {{number_filtered}} z {{credential_number}} pověření",
- "Search credential..." : "Hledat pověření...",
+ "Search for credential…" : "Hledat pověření...",
"Account" : "Účet",
"Password" : "Heslo",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Poznámky",
- "Expire time" : "Čas vypršení",
+ "Expiry time" : "Čas vypršení",
"Changed" : "Změněno",
"Created" : "Vytvořena",
"Edit" : "Upravit",
@@ -220,8 +221,8 @@
"Destroy" : "Zničit",
"Use regex" : "Použít regulární výraz",
"You have incoming share requests." : "Máte příchozí požadavky na sdílení.",
- "If you want to put the credential in a other vault," : "Pokud chcete pověření umístit do jiného trezoru,",
- "logout of this vault and login to the vault you want the shared credential in." : "Odhlaste se z tohoto trezoru a přihlaste se do trezoru, kde chcete sdílené pověření.",
+ "If you want to put the credential in another vault," : "Pokud chcete pověření umístit do jiného trezoru,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Odhlaste se z tohoto trezoru a přihlaste se do trezoru, kde chcete sdílené pověření.",
"Permissions" : "Oprávnění",
"Received from" : "Obdrženo od",
"Date" : "Datum",
@@ -235,26 +236,26 @@
"Password strength must be at least: {{strength}}" : "Síla hesla musí být aspoň: {{strength}}",
"Please give your new vault a name." : "Prosím pojmenujte váš nový trezor.",
"Repeat vault password" : "Zopakujte heslo trezoru",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Vaše sdílecí klíče budou mít sílu 1024 bitů, což pak můžete změnit v nastavení.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Vaše sdílecí klíče budou mít sílu 1024 bitů, což pak můžete změnit v nastavení.",
"Create vault" : "Vytvořit trezor",
"Go back to vaults" : "Jít zpět k trezorům",
"Please input the password for" : "Prosím, zadejte heslo pro",
- "Set this vault as default." : "Nastavit tento trezor jako výchozí.",
- "Login automatically to this vault." : "Přihlásit se automaticky do tohoto trezoru.",
- "Logout of this vault automatically after: " : "Automaticky se z tohoto trezoru odhlásit po: ",
+ "Set this vault as the default." : "Nastavit tento trezor jako výchozí.",
+ "Log into this vault automatically." : "Automaticky se přihlašovat k tomuto trezoru.",
+ "Log out of this vault automatically after: " : "Automaticky se z tohoto trezoru odhlásit po: ",
"Decrypt vault" : "Dešifrovat trezor",
- "Seems you lost the vault password and you're unable to login." : "Vypadá to, že jste ztratil(a) heslo k trezoru a nemůžete se přihlásit.",
- "If you want this vault removed you can request removal of the vault here." : "Pokud chcete, aby byl tento trezor odstraněn, můžete o jeho odstranění požádat zde.",
- "An admin then accept to the request (or not)" : "Administrátor pak přijme požadavek (nebo ne)",
- "After an admin destroy's this vault, all credentials will be lost" : "Poté,co administrátor potvrdí destrukci tohoto trezoru, všechna pověření budou ztracena",
- "Reason to request deletion (optional):" : "Důvod žádosti o smazání (volitelné):",
+ "Seems you lost the vault password and you're unable to log in." : "Vypadá to, že jste ztratili heslo k trezoru a nemůžete se přihlásit.",
+ "If you want this vault to be removed you can request that here." : "Pokud chcete, aby byl tento trezor odstraněn, můžete o jeho odstranění požádat zde.",
+ "An admin then accepts or declines the request" : "Administrátor pak přijme nebo odmítne požadavek",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Poté,co administrátor potvrdí destrukci tohoto trezoru, všechna pověření budou ztracena",
+ "Reason for requesting deletion (optional):" : "Důvod žádosti o smazání (volitelné):",
"Request vault destruction" : "Požádat o destrukci trezoru",
"Yes, request an admin to destroy this vault" : "Ano, požádat administrátora o zničení tohoto trezoru",
"Cancel destruction request" : "Zrušit požadavek na destrukci",
"Vault destruction requested" : "Vyžádání zničení trezoru",
"Request removed" : "Požadavek odebrán",
"Destruction request pending" : "Požadavek na destrukci čeká",
- "Warning! Adding credentials over http can be insecure!" : "Varování! Přidávání pověření přes http může být nebezpečné!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Varování! Přidávání pověření přes HTTP může být nebezpečné!",
"Logged in to {{vault_name}}" : "Přihlášeno do {{vault_name}}",
"Change vault" : "Změnit trezor",
"Deleted credentials" : "Smazaná pověření",
@@ -262,8 +263,8 @@
"Donate" : "Přispět",
"Someone has shared a credential with you." : "Někdo s vvám nasdílel pověření",
"Click here to request it" : "Klikněte zde pro vyžádání",
- "Loading..." : "Načítání...",
- "Awwhh.... credential not found. Maybe it expired" : "Hmmmm.... pověření nenalezeno. Možná vypršelo",
+ "Loading…" : "Načítání…",
+ "Awwhh… credential not found. Maybe it expired" : "Hmmmm.... pověření nenalezeno. Možná vypršelo",
"Error while saving field" : "Chyba při ukládání pole",
"A Passman item has been created, modified or deleted" : "Položka v Passmanu byla vytvořena, změněna, nebo odstraněna",
"A Passman item has expired" : "Položka v Passmanu vypršela",
@@ -293,17 +294,18 @@
"%s shared \"%s\" with you. Click here to accept" : "%s s tebou sdílí \"%s\". Kliknout pro přijetí",
"%s has declined your share request for \"%s\"." : "%s zamítl(a) tvůj požadavek na sdílení \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s přijal(a) tvůj požadavek na sdílení \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Nepodařilo se získat informace o verzi",
"Passman Settings" : "Nastavení passmanu",
- "Github version:" : "Github verze:",
- "A newer version of passman is available" : "Je dostupná nová verze passmanu",
+ "GitHub version:" : "GitHub verze:",
+ "A newer version of Passman is available" : "Je dostupná nová verze Passmanu",
"Password sharing" : "Sdílení hesla",
"Credential mover" : "Přesunovač pověření",
"Vault destruction requests" : "Požadavky na zničení trezoru",
"Check for new versions" : "Zkontrolovat nové verze",
"Enable HTTPS check" : "Povolit kontrolu HTTPS",
"Disable context menu" : "Zakázat kontextové menu",
- "Disable javascript debugger" : "Zakázat ladění javascriptu",
+ "Disable JavaScript debugger" : "Zakázat ladění JavaScriptu",
"Allow users on this server to share passwords with a link" : "Povolit na tomto serveru uživatelům sdílení hesel pomocí odkazu",
"Allow users on this server to share passwords with other users" : "Povolit na tomto serveru uživatelům sdílení hesel s ostatními uživateli",
"Move credentials from one account to another" : "Přesuňte pověření z jednoho účtu do druhého",
diff --git a/l10n/da.js b/l10n/da.js
index acd9cad1..630d6824 100644
--- a/l10n/da.js
+++ b/l10n/da.js
@@ -7,51 +7,35 @@ OC.L10N.register(
"Passwords do not match" : "Kodeord matchede ikke",
"General" : "Generel",
"Custom Fields" : "Valgfrit felt",
- "Please fill in a label!" : "Udfyld venligst mærket!",
- "Please fill in a value!" : "Udfyld venligst værdi!",
"Error loading file" : "Fejl ved indlæsning af fil",
- "An error happened during decryption" : "Der skete en fejl under dekryptering",
"Credential created!" : "Brugeroplysninger oprettet!",
"Credential deleted" : "Brugeroplysninger slettet",
"Credential updated" : "Brugeroplysninger opdateret",
"Credential recovered" : "Brugeroplysninger genskabt",
"Credential destroyed" : "Brugeroplysninger ødelagt",
- "Error downloading file, you probably don't have enough permissions" : "Fejl ved download af fil, du har formodenlig ikke rettigheder nok.",
"Invalid QR code" : "Invalid QR kode",
"Starting export" : "Starter eksportering ",
"Decrypting credentials" : "Dekrypterer brugeroplysninger",
"Done" : "Færdig",
- "File read successfully!" : "Fil læst succesfuldt!",
- "Follow the following steps to import your file" : "Gennemgå følgene trin for at importere din fil",
"Credential has no label, skipping" : "Brugeropllysninger har intet mærkat, forsætter",
"Adding {{credential}}" : "Tilføjer {{credential}}",
"Added {{credential}}" : "Tilføjer {{credential}}",
"Skipping credential, missing label on line {{line}}" : "Springer over brugeroplysninger, manglende mærkat på linje {{line}}",
"Importing" : "Importerer",
"Start import" : "Start importering",
- "Select csv file" : "Vælg csv-fil",
- "Parsed {{rows}} lines from csv file" : "Parser {{rows}} linjer fra csv fil",
"Skip first row" : "Spring første række over",
"You need to assign the label field before you can start the import." : "Du er nød til at uddele mærkat felt før du kan begynde at importere",
- "First 5 lines of the csv are shown." : "Første 5 linjer fra csv-filen er vist.",
"Assign the proper fields to each column." : "Tildel de korrekte felter til hver kolonne.",
- "Example imported credential" : "Eksempel på importerede brugeroplysninger",
- "Missing an importer? Try it with the generic csv importer." : "Mangler du en importerings metode? Prøv med den generiske csv importering.",
"Go back to importers." : "Gå tilbage til importerer",
"Revision deleted" : "Revision slettet",
"Revision restored" : "Noten genskabt",
- "Save in passman" : "Gem i passman",
"Settings saved" : "Indstillinger gemt",
"General settings" : "Generelle indstillinger",
- "Password Audit" : "Password revidering",
"Password settings" : "Password indstillinger",
"Import credentials" : "Importer brugeroplysninger",
"Export credentials" : "Eksporter brugeroplysninger",
"Sharing" : "Deling",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Er du sikke på at du vil forlade siden? Dette vil ødelægge dine brugeroplysninger",
"Your old password is incorrect!" : "Dit gamle password er ikke korrekt!",
- "New passwords do not match!" : "Nyt kodeord matchede ikke!",
- "Please login with your new vault password" : "Log venligst ind med dit nye boks password",
"Share with users and groups" : "Del med brugere og grupper",
"Share link" : "Del link",
"Are you sure you want to leave? This will corrupt this credential" : "Er du sikke på at du vil forlade siden? Dette vil ødelægge dine brugeroplysninger",
@@ -71,7 +55,6 @@ OC.L10N.register(
"Complete" : "Færdig",
"Username" : "Brugernavn",
"Repeat password" : "Gentag adgangskode",
- "Add Tag" : "Tilføj Tag",
"Field label" : "Felt mærkat",
"Field value" : "Felt værdi",
"Choose a file" : "Vælg en fil",
@@ -89,8 +72,6 @@ OC.L10N.register(
"Current OTP settings" : "Nuværende OTP indstillinger",
"Issuer" : "Udsteder",
"Secret" : "Hemmelighed",
- "Expire date" : "Udløbsdato",
- "No expire date set" : "Ingen udløbsdato sat",
"Renew interval" : "Forny interval",
"Disabled" : "Deaktiveret",
"Day(s)" : "Dag(e)",
@@ -115,7 +96,6 @@ OC.L10N.register(
"Change vault key" : "Ændre boks nøgle",
"Old vault password" : "Gammelt boks password",
"New vault password" : "Nyt boks password",
- "New vault password repeat" : "Ny boks gentag password",
"Please wait your vault is being updated, do not leave this page." : "Ven venligst din boks er ved at blive opdateret, forlad ikke denne side.",
"Processing" : "Processere",
"Total progress" : "Total forløb",
@@ -127,7 +107,6 @@ OC.L10N.register(
"Vault password" : "Boks password",
"This process is irreversible" : "Denne process er irreversibel",
"Delete my precious passwords" : "Slet mine tidligere passwords",
- "Deleting {{password}}..." : "Sletter {{password}}...",
"Yes, delete my precious passwords" : "Ja, slet mine tidligere adgangskoder",
"Import type" : "Importer type",
"Import" : "Importér",
@@ -138,10 +117,8 @@ OC.L10N.register(
"Generate sharing keys" : "Opret dele nøgler",
"Generating sharing keys" : "Opretter dele nøgler",
"Minimum password stength" : "Minimum password styrke",
- "Passman scanned your passwords, and here is the result." : "Passman skannede dine password,  og her er resultatet.",
"Score" : "Score",
"Action" : "Handling",
- "Search users or groups..." : "Search user or group ...",
"Uploading" : "Uploader",
"User" : "Bruger",
"Read" : "Læs",
@@ -152,7 +129,6 @@ OC.L10N.register(
"Enable link sharing" : "Slå link deling til",
"Share until date" : "Del indtil dato",
"Expire after views" : "Udløb efter visninger",
- "Click share first" : "Klik først på del",
"Show files" : "Vis filer",
"Details" : "Detaljer",
"Hide details" : "Skjul detaljer",
@@ -177,14 +153,12 @@ OC.L10N.register(
"Cancel" : "Annullér",
"Settings" : "Indstillinger",
"Unshare" : "Ophæv deling",
- "Search credential..." : "Søg brugeroplysninger",
"Account" : "Konto",
"Password" : "Adgangskode",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Noter",
- "Expire time" : "Uløbs tid",
"Changed" : "Ændret",
"Created" : "Oprettet",
"Edit" : "Redigér",
@@ -204,20 +178,15 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Password styrke skal være mindst: {{strength}}",
"Please give your new vault a name." : "Navngiv venligst din nye boks",
"Repeat vault password" : "Gentag boks password",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Din delings nøgle får styrke af 1024 bit, dette kan du ændre senere i indstillinger.",
"Create vault" : "Opret boks",
"Go back to vaults" : "Gå tilbage til boks",
"Please input the password for" : "Indtast venligst password for",
- "Set this vault as default." : "Sæt denne boks til standard",
- "Login automatically to this vault." : "Log automatisk ind i denne boks",
"Decrypt vault" : "Dekrypter boks",
- "Seems you lost the vault password and you're unable to login." : "Det lader til du har mistet dit boks password og ikke er i stand til at logge ind",
"Logged in to {{vault_name}}" : "Logget ind i {{vault_name}}",
"Change vault" : "Ændre boks",
"Deleted credentials" : "Slettede brugeroplysninger",
"Logout" : "Log ud",
"Donate" : "Donér",
- "Loading..." : "Indlæser...",
"Error while saving field" : "Fejl under lagring af felt",
"A Passman item has expired" : "Et element i Passman er udløbet",
"A Passman item has been shared" : "Et element i Passman er blevet delt",
@@ -238,10 +207,7 @@ OC.L10N.register(
"Remind me later" : "Påmind mig senere",
"Ignore" : "Ignorér",
"Passman Settings" : "Passman indstillinger",
- "Github version:" : "Github version:",
- "A newer version of passman is available" : "Der er en ny version af Passman tligængelig",
"Password sharing" : "Password deling",
- "Disable javascript debugger" : "Deaktivér javascript debugger",
"Reason" : "Grund",
"Connection to server lost" : "Mistede forbindelsen til serveren",
"Saving..." : "Gemmer...",
diff --git a/l10n/da.json b/l10n/da.json
index 835d7b1d..3ccbd9f0 100644
--- a/l10n/da.json
+++ b/l10n/da.json
@@ -5,51 +5,35 @@
"Passwords do not match" : "Kodeord matchede ikke",
"General" : "Generel",
"Custom Fields" : "Valgfrit felt",
- "Please fill in a label!" : "Udfyld venligst mærket!",
- "Please fill in a value!" : "Udfyld venligst værdi!",
"Error loading file" : "Fejl ved indlæsning af fil",
- "An error happened during decryption" : "Der skete en fejl under dekryptering",
"Credential created!" : "Brugeroplysninger oprettet!",
"Credential deleted" : "Brugeroplysninger slettet",
"Credential updated" : "Brugeroplysninger opdateret",
"Credential recovered" : "Brugeroplysninger genskabt",
"Credential destroyed" : "Brugeroplysninger ødelagt",
- "Error downloading file, you probably don't have enough permissions" : "Fejl ved download af fil, du har formodenlig ikke rettigheder nok.",
"Invalid QR code" : "Invalid QR kode",
"Starting export" : "Starter eksportering ",
"Decrypting credentials" : "Dekrypterer brugeroplysninger",
"Done" : "Færdig",
- "File read successfully!" : "Fil læst succesfuldt!",
- "Follow the following steps to import your file" : "Gennemgå følgene trin for at importere din fil",
"Credential has no label, skipping" : "Brugeropllysninger har intet mærkat, forsætter",
"Adding {{credential}}" : "Tilføjer {{credential}}",
"Added {{credential}}" : "Tilføjer {{credential}}",
"Skipping credential, missing label on line {{line}}" : "Springer over brugeroplysninger, manglende mærkat på linje {{line}}",
"Importing" : "Importerer",
"Start import" : "Start importering",
- "Select csv file" : "Vælg csv-fil",
- "Parsed {{rows}} lines from csv file" : "Parser {{rows}} linjer fra csv fil",
"Skip first row" : "Spring første række over",
"You need to assign the label field before you can start the import." : "Du er nød til at uddele mærkat felt før du kan begynde at importere",
- "First 5 lines of the csv are shown." : "Første 5 linjer fra csv-filen er vist.",
"Assign the proper fields to each column." : "Tildel de korrekte felter til hver kolonne.",
- "Example imported credential" : "Eksempel på importerede brugeroplysninger",
- "Missing an importer? Try it with the generic csv importer." : "Mangler du en importerings metode? Prøv med den generiske csv importering.",
"Go back to importers." : "Gå tilbage til importerer",
"Revision deleted" : "Revision slettet",
"Revision restored" : "Noten genskabt",
- "Save in passman" : "Gem i passman",
"Settings saved" : "Indstillinger gemt",
"General settings" : "Generelle indstillinger",
- "Password Audit" : "Password revidering",
"Password settings" : "Password indstillinger",
"Import credentials" : "Importer brugeroplysninger",
"Export credentials" : "Eksporter brugeroplysninger",
"Sharing" : "Deling",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Er du sikke på at du vil forlade siden? Dette vil ødelægge dine brugeroplysninger",
"Your old password is incorrect!" : "Dit gamle password er ikke korrekt!",
- "New passwords do not match!" : "Nyt kodeord matchede ikke!",
- "Please login with your new vault password" : "Log venligst ind med dit nye boks password",
"Share with users and groups" : "Del med brugere og grupper",
"Share link" : "Del link",
"Are you sure you want to leave? This will corrupt this credential" : "Er du sikke på at du vil forlade siden? Dette vil ødelægge dine brugeroplysninger",
@@ -69,7 +53,6 @@
"Complete" : "Færdig",
"Username" : "Brugernavn",
"Repeat password" : "Gentag adgangskode",
- "Add Tag" : "Tilføj Tag",
"Field label" : "Felt mærkat",
"Field value" : "Felt værdi",
"Choose a file" : "Vælg en fil",
@@ -87,8 +70,6 @@
"Current OTP settings" : "Nuværende OTP indstillinger",
"Issuer" : "Udsteder",
"Secret" : "Hemmelighed",
- "Expire date" : "Udløbsdato",
- "No expire date set" : "Ingen udløbsdato sat",
"Renew interval" : "Forny interval",
"Disabled" : "Deaktiveret",
"Day(s)" : "Dag(e)",
@@ -113,7 +94,6 @@
"Change vault key" : "Ændre boks nøgle",
"Old vault password" : "Gammelt boks password",
"New vault password" : "Nyt boks password",
- "New vault password repeat" : "Ny boks gentag password",
"Please wait your vault is being updated, do not leave this page." : "Ven venligst din boks er ved at blive opdateret, forlad ikke denne side.",
"Processing" : "Processere",
"Total progress" : "Total forløb",
@@ -125,7 +105,6 @@
"Vault password" : "Boks password",
"This process is irreversible" : "Denne process er irreversibel",
"Delete my precious passwords" : "Slet mine tidligere passwords",
- "Deleting {{password}}..." : "Sletter {{password}}...",
"Yes, delete my precious passwords" : "Ja, slet mine tidligere adgangskoder",
"Import type" : "Importer type",
"Import" : "Importér",
@@ -136,10 +115,8 @@
"Generate sharing keys" : "Opret dele nøgler",
"Generating sharing keys" : "Opretter dele nøgler",
"Minimum password stength" : "Minimum password styrke",
- "Passman scanned your passwords, and here is the result." : "Passman skannede dine password,  og her er resultatet.",
"Score" : "Score",
"Action" : "Handling",
- "Search users or groups..." : "Search user or group ...",
"Uploading" : "Uploader",
"User" : "Bruger",
"Read" : "Læs",
@@ -150,7 +127,6 @@
"Enable link sharing" : "Slå link deling til",
"Share until date" : "Del indtil dato",
"Expire after views" : "Udløb efter visninger",
- "Click share first" : "Klik først på del",
"Show files" : "Vis filer",
"Details" : "Detaljer",
"Hide details" : "Skjul detaljer",
@@ -175,14 +151,12 @@
"Cancel" : "Annullér",
"Settings" : "Indstillinger",
"Unshare" : "Ophæv deling",
- "Search credential..." : "Søg brugeroplysninger",
"Account" : "Konto",
"Password" : "Adgangskode",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Noter",
- "Expire time" : "Uløbs tid",
"Changed" : "Ændret",
"Created" : "Oprettet",
"Edit" : "Redigér",
@@ -202,20 +176,15 @@
"Password strength must be at least: {{strength}}" : "Password styrke skal være mindst: {{strength}}",
"Please give your new vault a name." : "Navngiv venligst din nye boks",
"Repeat vault password" : "Gentag boks password",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Din delings nøgle får styrke af 1024 bit, dette kan du ændre senere i indstillinger.",
"Create vault" : "Opret boks",
"Go back to vaults" : "Gå tilbage til boks",
"Please input the password for" : "Indtast venligst password for",
- "Set this vault as default." : "Sæt denne boks til standard",
- "Login automatically to this vault." : "Log automatisk ind i denne boks",
"Decrypt vault" : "Dekrypter boks",
- "Seems you lost the vault password and you're unable to login." : "Det lader til du har mistet dit boks password og ikke er i stand til at logge ind",
"Logged in to {{vault_name}}" : "Logget ind i {{vault_name}}",
"Change vault" : "Ændre boks",
"Deleted credentials" : "Slettede brugeroplysninger",
"Logout" : "Log ud",
"Donate" : "Donér",
- "Loading..." : "Indlæser...",
"Error while saving field" : "Fejl under lagring af felt",
"A Passman item has expired" : "Et element i Passman er udløbet",
"A Passman item has been shared" : "Et element i Passman er blevet delt",
@@ -236,10 +205,7 @@
"Remind me later" : "Påmind mig senere",
"Ignore" : "Ignorér",
"Passman Settings" : "Passman indstillinger",
- "Github version:" : "Github version:",
- "A newer version of passman is available" : "Der er en ny version af Passman tligængelig",
"Password sharing" : "Password deling",
- "Disable javascript debugger" : "Deaktivér javascript debugger",
"Reason" : "Grund",
"Connection to server lost" : "Mistede forbindelsen til serveren",
"Saving..." : "Gemmer...",
diff --git a/l10n/de.js b/l10n/de.js
index 7d958c0f..f855cfe5 100644
--- a/l10n/de.js
+++ b/l10n/de.js
@@ -7,22 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Passwörter stimmen nicht überein",
"General" : "Allgemein",
"Custom Fields" : "Benutzerdefinierte Felder",
- "Please fill in a label!" : "Bitte eine Beschriftung hinzufügen!",
- "Please fill in a value!" : "Bitte einen Wert eingeben!",
+ "Please fill in a label." : " Bitte eine Beschriftung hinzufügen ",
+ "Please fill in a value." : "Bitte einen Wert eingeben.",
"Error loading file" : "Fehler beim Laden der Datei",
- "An error happened during decryption" : "Bei der Entschlüsselung ist ein Fehler aufgetreten",
+ "An error occurred during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
"Credential created!" : "Anmeldeinformation erstellt!",
"Credential deleted" : "Anmeldeinformation gelöscht",
"Credential updated" : "Anmeldeinformation aktualisiert",
"Credential recovered" : "Anmeldeinformation wiederhergestellt",
"Credential destroyed" : "Anmeldeinformation zerstört",
- "Error downloading file, you probably don't have enough permissions" : "Fehler beim Herunterladen der Datei, du hast möglicherweise keine Berechtigung dazu",
+ "Error downloading file, you probably don't have sufficient permissions" : "Fehler beim Herunterladen der Datei, Du hast möglicherweise nicht die erforderliche Berechtigung",
"Invalid QR code" : "Fehlerhafter QR-Code",
"Starting export" : "Export gestartet",
"Decrypting credentials" : "Anmeldeinformationen werden entschlüsselt",
"Done" : "Fertig",
- "File read successfully!" : "Datei erfolgreich gelesen!",
- "Follow the following steps to import your file" : "folgen Sie zum Importieren Ihrer Datei den Schritten",
+ "File read successfully." : "Datei erfolgreich gelesen",
+ "Proceed with the following steps to import your file" : "Führe folgende Schritte aus um Deine Datei zu importieren",
"Credential has no label, skipping" : "Übersprungen, Anmeldeinformation hat keine Beschriftung",
"Adding {{credential}}" : "{{credential}} wird hinzugefügt",
"Added {{credential}}" : "{{credential}} wurde hinzugefügt",
@@ -30,29 +30,29 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
"Importing" : "Importieren",
"Start import" : "Import starten",
- "Select csv file" : "csv-Datei auswählen",
- "Parsed {{rows}} lines from csv file" : "{{rows}} Reihen der csv-Datei verarbeitet",
+ "Select CSV file" : "CSV-Datei auswählen",
+ "Parsed {{rows}} lines from CSV file" : "{{rows}} Zeilen der CSV-Datei gelesen",
"Skip first row" : "Erste Zeile überspringen",
- "You need to assign the label field before you can start the import." : "Sie müssen das Bezeichnunsg-Feld zuordnen, bevor Sie den Import starten können.",
- "First 5 lines of the csv are shown." : "Die ersten 5 Zeilen der csv-Datei werden angezeigt.",
+ "You need to assign the label field before you can start the import." : "Du musst das Bezeichnungsfeld zuordnen, bevor Du den Import starten kannst.",
+ "The first 5 lines of the CSV are shown." : "Die ersten 5 Zeilen der CSV-Datei werden angezeigt. ",
"Assign the proper fields to each column." : "Die richtigen Felder zu jeder Spalte zuordnen",
- "Example imported credential" : "Beispiel einer importierten Anmeldeinformation",
- "Missing an importer? Try it with the generic csv importer." : "Fehlt eine Importfunktion? Versuchen Sie es mit der unspezifischen csv-Importfunktion.",
+ "Example of imported credential" : " Beispiel einer importierten Anmeldeinformation ",
+ "Missing an importer? Try it with the generic CSV importer." : "Fehlt ein Importer? Versuche es mit dem generischen CSV-Importer.",
"Go back to importers." : "Zurück zur Importfunktion.",
"Revision deleted" : "Überarbeitung gelöscht",
"Revision restored" : "Überarbeitung wiederhergestellt",
- "Save in passman" : "In Passman speichern",
+ "Save in Passman" : "In Passman speichern ",
"Settings saved" : "Einstellungen gespeichert",
"General settings" : "Allgemeine Einstellungen",
- "Password Audit" : "Passwortüberprüfung",
+ "Password audit" : "Passwortüberprüfung",
"Password settings" : "Passworteinstellungen",
"Import credentials" : "Anmeldeinformationen importieren",
"Export credentials" : "Anmeldeinformationen exportieren",
"Sharing" : "Teilen",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Möchtest du dies wirklich verlassen? Dies WIRD alle deine Anmeldeinformationen zerstören",
- "Your old password is incorrect!" : "Ihr altes Passwort ist falsch!",
- "New passwords do not match!" : "Ihre neuen Passwörter stimmen nicht überein!",
- "Please login with your new vault password" : "Bitte melden Sie sich mit Ihrem neuen Tresor-Passwort an",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Möchtest du dies wirklich verlassen? Dies wird alle Deine Anmeldeinformationen zerstören",
+ "Your old password is incorrect!" : "Dein altes Passwort ist falsch!",
+ "New password does not match!" : "Deine neuen Passwörter stimmen nicht überein!",
+ "Please log in with your new vault password" : "Bitte melde Dich mit Deinem neuen Tresor-Passwort an",
"Share with users and groups" : "Mit Benutzern oder Gruppen teilen",
"Share link" : "Link freigeben",
"Are you sure you want to leave? This will corrupt this credential" : "Möchtest du dies wirklich verlassen? Dies wird diese Anmeldeinformation zerstören",
@@ -66,13 +66,13 @@ OC.L10N.register(
"Toggle visibility" : "Sichtbarkeit umschalten",
"Copy to clipboard" : "In die Zwischenablage kopieren",
"Copied to clipboard!" : "In die Zwischenablage kopiert!",
- "Generate password" : "Passwort generieren",
+ "Generate password" : "Passwort erzeugen",
"Copy password to clipboard" : "Passwort in die Zwischenablage kopieren",
"Password copied to clipboard!" : "Passwort in die Zwischenablage kopiert!",
"Complete" : "Fertigstellen",
"Username" : "Benutzer",
"Repeat password" : "Passwort wiederholen",
- "Add Tag" : "Schlagwort hinzufügen",
+ "Add tag" : "Schlagwort hinzufügen",
"Field label" : "Beschriftung des Feldes",
"Field value" : "Wert des Feldes",
"Choose a file" : "Datei auswählen",
@@ -86,12 +86,12 @@ OC.L10N.register(
"Filename" : "Dateiname",
"Upload date" : "Datum des Hochladens",
"Size" : "Größe",
- "Upload or enter your OTP secret" : "Geben Sie Ihren OTP-Geheimnis ein oder laden Sie ihn hoch",
+ "Upload or enter your OTP secret" : "Gebe Dein OTP-Geheimnis ein oder lade es ihn hoch",
"Current OTP settings" : "Aktuelle OTP-Einstellungen",
"Issuer" : "Ersteller",
"Secret" : "Geheimnis",
- "Expire date" : "Ablaufdatum",
- "No expire date set" : "Kein Ablaufdatum gesetzt",
+ "Expiration date" : "Ablaufdatum",
+ "No expiration date set" : "Kein Ablaufdatum gesetzt ",
"Renew interval" : "Erneuerungsintervall",
"Disabled" : "Deaktiviert",
"Day(s)" : "Tag(e)",
@@ -116,8 +116,8 @@ OC.L10N.register(
"Change vault key" : "Tresor-Schlüssel ändern",
"Old vault password" : "Altes Tresor-Passwort",
"New vault password" : "Neues Tresor-Passwort",
- "New vault password repeat" : "Neues Tresor-Passwort wiederholen",
- "Please wait your vault is being updated, do not leave this page." : "Bitte warten, Ihr Tresor wird aktualisiert, bitte verlassen Sie diese Seite nicht.",
+ "Repeat new vault password" : "Tresor-Passwort wiederholen",
+ "Please wait your vault is being updated, do not leave this page." : "Bitte warten, Dein Tresor wird aktualisiert, bitte verlasse diese Seite nicht.",
"Processing" : "Verarbeiten",
"Total progress" : "Gesamtfortschritt",
"About Passman" : "Über Passman",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Vault password" : "Tresor-Passwort",
"This process is irreversible" : "Dieser Vorgang kann nicht rückgängig gemacht werden",
"Delete my precious passwords" : "Meine wertvollen Passwörter löschen",
- "Deleting {{password}}..." : "{{password}} löschen...",
+ "Deleting {{password}}…" : "{{password}} löschen…",
"Yes, delete my precious passwords" : "Ja, bitte alle meine wertvollen Passwörter löschen",
"Import type" : "Import-Typ",
"Import" : "Importieren",
@@ -142,13 +142,14 @@ OC.L10N.register(
"Save keys" : "Schlüssel speichern",
"Generate sharing keys" : "Schlüssel zum Teilen erzeugen",
"Generating sharing keys" : "Erzeuge Schlüssel zum Teilen",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Das Passwort-Tool durchsucht deine Passwörter, berechnet die durchschnittliche Zeit zum Knacken des Passworts und wenn diese unter der gewählten Schwelle liegt, wird es angezeigt",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Das Passwort-Tool analysiert dein Passwort, berechnet die Zeit zum knacken des Passwortes und listet die Passwörter auf die unter dem Grenzwert liegen. ",
"Minimum password stength" : "Minimale Passwortstärke",
- "Passman scanned your passwords, and here is the result." : "Passman hat deine Passwörter durchsucht und hier ist das Ergbnis",
- "A total of {{scan_result}} weak credentials." : "Insgesamt {{scan_result}} schwache Anmeldeinformationen.",
+ "Start scan" : "Einen Scan starten",
+ "Result" : "Ergebnis",
+ "A total of {{scan_result}} weak credentials were found." : "Es wurden insgesamt {{scan_result}} schwache Anmeldeinformationen wurden gefunden.",
"Score" : "Bewertung",
"Action" : "Aktion",
- "Search users or groups..." : "Benutzer oder Gruppen suchen...",
+ "Search users or groups…" : "Benutzer oder Gruppen suchen…",
"Missing users? Only users that have vaults are shown." : "Nutzer gesucht? Es werden nur Nutzer mit einem Tresor angezeigt.",
"Cyphering" : "Verschlüsselung",
"Uploading" : "Lade hoch",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Freigaben über Links aktivieren",
"Share until date" : "Freigabe gültig bis Datum",
"Expire after views" : "Läuft nach dem Anschauen ab",
- "Click share first" : "Erst auf Teilen klicken",
+ "Click Share first" : "Erst auf Teilen klicken",
"Show files" : "Dateien anzeigen",
"Details" : "Details",
"Hide details" : "Details ausblenden",
@@ -203,16 +204,16 @@ OC.L10N.register(
"Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
"Unshare" : "Freigabe aufheben",
"Showing deleted since" : "Anzeigen gelöscht seit",
- "All time" : "Gesamte Zeit",
+ "Beginning" : "Beginn",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} of {{credential_number}} Anmeldeinformationen anzeigen",
- "Search credential..." : "Anmeldeinformation suchen...",
+ "Search for credential…" : "Zugangsdaten suchen…",
"Account" : "Konto",
"Password" : "Passwort",
"OTP" : "OTP (One Time Passwort)",
"E-mail" : "E-Mail",
"URL" : "URL",
"Notes" : "Notizen",
- "Expire time" : "Ablaufzeit",
+ "Expiry time" : "Ablaufzeit",
"Changed" : "Geändert",
"Created" : "Erstellt",
"Edit" : "Bearbeiten",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Vernichten",
"Use regex" : "Regex verwenden",
"You have incoming share requests." : "Du hast eingehende Freigabeanforderungen.",
- "If you want to put the credential in a other vault," : "Wenn Du die Anmeldeinformation in einem anderen Tresor verschieben möchtest,",
- "logout of this vault and login to the vault you want the shared credential in." : "melde dich bei diesem Tresor ab und melde dich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
+ "If you want to put the credential in another vault," : "Wenn Du die Anmeldeinformation in einem anderen Tresor verschieben möchtest,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "melde dich bei diesem Tresor ab und melde dich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
"Permissions" : "Rechte",
"Received from" : "Erhalten von",
"Date" : "Datum",
@@ -237,35 +238,35 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
"Repeat vault password" : "Tresor-Passwort wiederholen",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Deine Freigabeschlüssel werden 1024 bit stark sein. Du kannst dies auch später noch in den Einstellungen ändern.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Deine Freigabeschlüssel werden 1024 bit stark sein. Du kannst dies auch später noch in den Einstellungen ändern.",
"Create vault" : "Erstelle Tresor",
"Go back to vaults" : "Zurück zu den Tresoren",
"Please input the password for" : "Passwort eingeben für",
- "Set this vault as default." : "Diesen Tresor als Standard setzen.",
- "Login automatically to this vault." : "Automatisch in diesen Tresor einloggen.",
- "Logout of this vault automatically after: " : "Von diesem Tresor automatisch abmelden nach:",
+ "Set this vault as the default." : "Diesen Tresor als Standard setzen.",
+ "Log into this vault automatically." : "In diesen Tresor automatisch anmelden.",
+ "Log out of this vault automatically after: " : "Von diesem Tresor automatisch abmelden nach:",
"Decrypt vault" : "Tresor entschlüsseln",
- "Seems you lost the vault password and you're unable to login." : "Es scheint, als hätten Sie das Tresor-Passwort vergessen und nicht mehr in der Lage, sich anzumelden.",
- "If you want this vault removed you can request removal of the vault here." : "Wenn Sie möchten, dass dieser Tresor gelöscht wird, dann können Sie eine Löschung hier anfordern.",
- "An admin then accept to the request (or not)" : "Ein Administrator wird die Anfragen dann bestätigen (oder nicht)",
- "After an admin destroy's this vault, all credentials will be lost" : "Wenn ein Administrator diesen Tresor löscht, gehen alle Anmeldeinformationen verloren",
- "Reason to request deletion (optional):" : "Grund die Löschung anzufordern (optional):",
+ "Seems you lost the vault password and you're unable to log in." : "Es scheint, als hättest Du das Tresor-Passwort vergessen und bist nicht mehr in der Lage Dich anzumelden.",
+ "If you want this vault to be removed you can request that here." : "Wenn du möchtest, dass dieser Tresor gelöscht wird, dann kannst du dies hier anfordern.",
+ "An admin then accepts or declines the request" : "Ein Admin akzeptiert dann diese Anfrage (oder nicht)",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Wenn ein Administrator diesen Tresor löscht, gehen alle enthaltenen Anmeldeinformationen verloren",
+ "Reason for requesting deletion (optional):" : "Grund die Löschung anzufordern (optional):",
"Request vault destruction" : "Fordere Tresor-Löschung an",
"Yes, request an admin to destroy this vault" : "Ja, bitte einen Administrator diesen Tresor zu löschen",
"Cancel destruction request" : "Löschanfrage abbrechen",
"Vault destruction requested" : "Tresor-Löschung angefordert",
"Request removed" : "Anfrage entfernt",
"Destruction request pending" : "Lösch-Anforderung wartet",
- "Warning! Adding credentials over http can be insecure!" : "Achtung! Zugangsdaten über http kann unsicher sein!",
- "Logged in to {{vault_name}}" : "Eingeloggt in {{vault_name}}",
+ "Warning! Adding credentials over HTTP is insecure!" : "Achtung! Das Hinzufügen von Zugangsdaten über http ist unsicher!",
+ "Logged in to {{vault_name}}" : "Angemeldet in {{vault_name}}",
"Change vault" : "Wechsle Tresor",
"Deleted credentials" : "Zugangsdaten gelöscht",
- "Logout" : "Ausloggen",
+ "Logout" : "Abmelden",
"Donate" : "Spende",
"Someone has shared a credential with you." : "Jemand hat Zugangsdaten mit Dir geteilt.",
"Click here to request it" : "Hier klicken um es anzufordern",
- "Loading..." : "Lade...",
- "Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
+ "Loading…" : "Lade…",
+ "Awwhh… credential not found. Maybe it expired" : "Oh… Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen ",
"Error while saving field" : "Fehler beim Speichern des Feldes",
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
@@ -295,17 +296,18 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit dir. Um dies zu akzeptieren, klicke hier",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Dir abgelehnt.",
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Dir akzeptiert.",
+ "Passman" : "Passman",
"Unable to get version info" : "Versionsinfo konnte nicht ermittelt werden",
"Passman Settings" : "Passman-Einstellungen",
- "Github version:" : "Github-Version:",
- "A newer version of passman is available" : "Es ist eine neuere Version von Passman verfügbar",
+ "GitHub version:" : "Github-Version: ",
+ "A newer version of Passman is available" : "Eine neue Version von Passman ist vefügbar.",
"Password sharing" : "Passwort teilen",
"Credential mover" : "Verschiebung der Anmeldeinformationen",
"Vault destruction requests" : "Tresor-Löschungs-Anforderungen",
"Check for new versions" : "Nach neuerer Version suchen",
"Enable HTTPS check" : "HTTPS-Prüfung aktivieren",
"Disable context menu" : "Kontextmenü deaktivieren",
- "Disable javascript debugger" : "Javascript-Debugger ausschalten",
+ "Disable JavaScript debugger" : "JavaScript-Debugger deaktivieren",
"Allow users on this server to share passwords with a link" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern via Link",
"Allow users on this server to share passwords with other users" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern mit anderen Benutzern",
"Move credentials from one account to another" : "Verschiebe Anmeldeinformationen von einem Konto zu einem anderen",
diff --git a/l10n/de.json b/l10n/de.json
index 71951d51..37663671 100644
--- a/l10n/de.json
+++ b/l10n/de.json
@@ -5,22 +5,22 @@
"Passwords do not match" : "Passwörter stimmen nicht überein",
"General" : "Allgemein",
"Custom Fields" : "Benutzerdefinierte Felder",
- "Please fill in a label!" : "Bitte eine Beschriftung hinzufügen!",
- "Please fill in a value!" : "Bitte einen Wert eingeben!",
+ "Please fill in a label." : " Bitte eine Beschriftung hinzufügen ",
+ "Please fill in a value." : "Bitte einen Wert eingeben.",
"Error loading file" : "Fehler beim Laden der Datei",
- "An error happened during decryption" : "Bei der Entschlüsselung ist ein Fehler aufgetreten",
+ "An error occurred during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
"Credential created!" : "Anmeldeinformation erstellt!",
"Credential deleted" : "Anmeldeinformation gelöscht",
"Credential updated" : "Anmeldeinformation aktualisiert",
"Credential recovered" : "Anmeldeinformation wiederhergestellt",
"Credential destroyed" : "Anmeldeinformation zerstört",
- "Error downloading file, you probably don't have enough permissions" : "Fehler beim Herunterladen der Datei, du hast möglicherweise keine Berechtigung dazu",
+ "Error downloading file, you probably don't have sufficient permissions" : "Fehler beim Herunterladen der Datei, Du hast möglicherweise nicht die erforderliche Berechtigung",
"Invalid QR code" : "Fehlerhafter QR-Code",
"Starting export" : "Export gestartet",
"Decrypting credentials" : "Anmeldeinformationen werden entschlüsselt",
"Done" : "Fertig",
- "File read successfully!" : "Datei erfolgreich gelesen!",
- "Follow the following steps to import your file" : "folgen Sie zum Importieren Ihrer Datei den Schritten",
+ "File read successfully." : "Datei erfolgreich gelesen",
+ "Proceed with the following steps to import your file" : "Führe folgende Schritte aus um Deine Datei zu importieren",
"Credential has no label, skipping" : "Übersprungen, Anmeldeinformation hat keine Beschriftung",
"Adding {{credential}}" : "{{credential}} wird hinzugefügt",
"Added {{credential}}" : "{{credential}} wurde hinzugefügt",
@@ -28,29 +28,29 @@
"Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
"Importing" : "Importieren",
"Start import" : "Import starten",
- "Select csv file" : "csv-Datei auswählen",
- "Parsed {{rows}} lines from csv file" : "{{rows}} Reihen der csv-Datei verarbeitet",
+ "Select CSV file" : "CSV-Datei auswählen",
+ "Parsed {{rows}} lines from CSV file" : "{{rows}} Zeilen der CSV-Datei gelesen",
"Skip first row" : "Erste Zeile überspringen",
- "You need to assign the label field before you can start the import." : "Sie müssen das Bezeichnunsg-Feld zuordnen, bevor Sie den Import starten können.",
- "First 5 lines of the csv are shown." : "Die ersten 5 Zeilen der csv-Datei werden angezeigt.",
+ "You need to assign the label field before you can start the import." : "Du musst das Bezeichnungsfeld zuordnen, bevor Du den Import starten kannst.",
+ "The first 5 lines of the CSV are shown." : "Die ersten 5 Zeilen der CSV-Datei werden angezeigt. ",
"Assign the proper fields to each column." : "Die richtigen Felder zu jeder Spalte zuordnen",
- "Example imported credential" : "Beispiel einer importierten Anmeldeinformation",
- "Missing an importer? Try it with the generic csv importer." : "Fehlt eine Importfunktion? Versuchen Sie es mit der unspezifischen csv-Importfunktion.",
+ "Example of imported credential" : " Beispiel einer importierten Anmeldeinformation ",
+ "Missing an importer? Try it with the generic CSV importer." : "Fehlt ein Importer? Versuche es mit dem generischen CSV-Importer.",
"Go back to importers." : "Zurück zur Importfunktion.",
"Revision deleted" : "Überarbeitung gelöscht",
"Revision restored" : "Überarbeitung wiederhergestellt",
- "Save in passman" : "In Passman speichern",
+ "Save in Passman" : "In Passman speichern ",
"Settings saved" : "Einstellungen gespeichert",
"General settings" : "Allgemeine Einstellungen",
- "Password Audit" : "Passwortüberprüfung",
+ "Password audit" : "Passwortüberprüfung",
"Password settings" : "Passworteinstellungen",
"Import credentials" : "Anmeldeinformationen importieren",
"Export credentials" : "Anmeldeinformationen exportieren",
"Sharing" : "Teilen",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Möchtest du dies wirklich verlassen? Dies WIRD alle deine Anmeldeinformationen zerstören",
- "Your old password is incorrect!" : "Ihr altes Passwort ist falsch!",
- "New passwords do not match!" : "Ihre neuen Passwörter stimmen nicht überein!",
- "Please login with your new vault password" : "Bitte melden Sie sich mit Ihrem neuen Tresor-Passwort an",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Möchtest du dies wirklich verlassen? Dies wird alle Deine Anmeldeinformationen zerstören",
+ "Your old password is incorrect!" : "Dein altes Passwort ist falsch!",
+ "New password does not match!" : "Deine neuen Passwörter stimmen nicht überein!",
+ "Please log in with your new vault password" : "Bitte melde Dich mit Deinem neuen Tresor-Passwort an",
"Share with users and groups" : "Mit Benutzern oder Gruppen teilen",
"Share link" : "Link freigeben",
"Are you sure you want to leave? This will corrupt this credential" : "Möchtest du dies wirklich verlassen? Dies wird diese Anmeldeinformation zerstören",
@@ -64,13 +64,13 @@
"Toggle visibility" : "Sichtbarkeit umschalten",
"Copy to clipboard" : "In die Zwischenablage kopieren",
"Copied to clipboard!" : "In die Zwischenablage kopiert!",
- "Generate password" : "Passwort generieren",
+ "Generate password" : "Passwort erzeugen",
"Copy password to clipboard" : "Passwort in die Zwischenablage kopieren",
"Password copied to clipboard!" : "Passwort in die Zwischenablage kopiert!",
"Complete" : "Fertigstellen",
"Username" : "Benutzer",
"Repeat password" : "Passwort wiederholen",
- "Add Tag" : "Schlagwort hinzufügen",
+ "Add tag" : "Schlagwort hinzufügen",
"Field label" : "Beschriftung des Feldes",
"Field value" : "Wert des Feldes",
"Choose a file" : "Datei auswählen",
@@ -84,12 +84,12 @@
"Filename" : "Dateiname",
"Upload date" : "Datum des Hochladens",
"Size" : "Größe",
- "Upload or enter your OTP secret" : "Geben Sie Ihren OTP-Geheimnis ein oder laden Sie ihn hoch",
+ "Upload or enter your OTP secret" : "Gebe Dein OTP-Geheimnis ein oder lade es ihn hoch",
"Current OTP settings" : "Aktuelle OTP-Einstellungen",
"Issuer" : "Ersteller",
"Secret" : "Geheimnis",
- "Expire date" : "Ablaufdatum",
- "No expire date set" : "Kein Ablaufdatum gesetzt",
+ "Expiration date" : "Ablaufdatum",
+ "No expiration date set" : "Kein Ablaufdatum gesetzt ",
"Renew interval" : "Erneuerungsintervall",
"Disabled" : "Deaktiviert",
"Day(s)" : "Tag(e)",
@@ -114,8 +114,8 @@
"Change vault key" : "Tresor-Schlüssel ändern",
"Old vault password" : "Altes Tresor-Passwort",
"New vault password" : "Neues Tresor-Passwort",
- "New vault password repeat" : "Neues Tresor-Passwort wiederholen",
- "Please wait your vault is being updated, do not leave this page." : "Bitte warten, Ihr Tresor wird aktualisiert, bitte verlassen Sie diese Seite nicht.",
+ "Repeat new vault password" : "Tresor-Passwort wiederholen",
+ "Please wait your vault is being updated, do not leave this page." : "Bitte warten, Dein Tresor wird aktualisiert, bitte verlasse diese Seite nicht.",
"Processing" : "Verarbeiten",
"Total progress" : "Gesamtfortschritt",
"About Passman" : "Über Passman",
@@ -128,7 +128,7 @@
"Vault password" : "Tresor-Passwort",
"This process is irreversible" : "Dieser Vorgang kann nicht rückgängig gemacht werden",
"Delete my precious passwords" : "Meine wertvollen Passwörter löschen",
- "Deleting {{password}}..." : "{{password}} löschen...",
+ "Deleting {{password}}…" : "{{password}} löschen…",
"Yes, delete my precious passwords" : "Ja, bitte alle meine wertvollen Passwörter löschen",
"Import type" : "Import-Typ",
"Import" : "Importieren",
@@ -140,13 +140,14 @@
"Save keys" : "Schlüssel speichern",
"Generate sharing keys" : "Schlüssel zum Teilen erzeugen",
"Generating sharing keys" : "Erzeuge Schlüssel zum Teilen",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Das Passwort-Tool durchsucht deine Passwörter, berechnet die durchschnittliche Zeit zum Knacken des Passworts und wenn diese unter der gewählten Schwelle liegt, wird es angezeigt",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Das Passwort-Tool analysiert dein Passwort, berechnet die Zeit zum knacken des Passwortes und listet die Passwörter auf die unter dem Grenzwert liegen. ",
"Minimum password stength" : "Minimale Passwortstärke",
- "Passman scanned your passwords, and here is the result." : "Passman hat deine Passwörter durchsucht und hier ist das Ergbnis",
- "A total of {{scan_result}} weak credentials." : "Insgesamt {{scan_result}} schwache Anmeldeinformationen.",
+ "Start scan" : "Einen Scan starten",
+ "Result" : "Ergebnis",
+ "A total of {{scan_result}} weak credentials were found." : "Es wurden insgesamt {{scan_result}} schwache Anmeldeinformationen wurden gefunden.",
"Score" : "Bewertung",
"Action" : "Aktion",
- "Search users or groups..." : "Benutzer oder Gruppen suchen...",
+ "Search users or groups…" : "Benutzer oder Gruppen suchen…",
"Missing users? Only users that have vaults are shown." : "Nutzer gesucht? Es werden nur Nutzer mit einem Tresor angezeigt.",
"Cyphering" : "Verschlüsselung",
"Uploading" : "Lade hoch",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Freigaben über Links aktivieren",
"Share until date" : "Freigabe gültig bis Datum",
"Expire after views" : "Läuft nach dem Anschauen ab",
- "Click share first" : "Erst auf Teilen klicken",
+ "Click Share first" : "Erst auf Teilen klicken",
"Show files" : "Dateien anzeigen",
"Details" : "Details",
"Hide details" : "Details ausblenden",
@@ -201,16 +202,16 @@
"Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
"Unshare" : "Freigabe aufheben",
"Showing deleted since" : "Anzeigen gelöscht seit",
- "All time" : "Gesamte Zeit",
+ "Beginning" : "Beginn",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} of {{credential_number}} Anmeldeinformationen anzeigen",
- "Search credential..." : "Anmeldeinformation suchen...",
+ "Search for credential…" : "Zugangsdaten suchen…",
"Account" : "Konto",
"Password" : "Passwort",
"OTP" : "OTP (One Time Passwort)",
"E-mail" : "E-Mail",
"URL" : "URL",
"Notes" : "Notizen",
- "Expire time" : "Ablaufzeit",
+ "Expiry time" : "Ablaufzeit",
"Changed" : "Geändert",
"Created" : "Erstellt",
"Edit" : "Bearbeiten",
@@ -220,8 +221,8 @@
"Destroy" : "Vernichten",
"Use regex" : "Regex verwenden",
"You have incoming share requests." : "Du hast eingehende Freigabeanforderungen.",
- "If you want to put the credential in a other vault," : "Wenn Du die Anmeldeinformation in einem anderen Tresor verschieben möchtest,",
- "logout of this vault and login to the vault you want the shared credential in." : "melde dich bei diesem Tresor ab und melde dich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
+ "If you want to put the credential in another vault," : "Wenn Du die Anmeldeinformation in einem anderen Tresor verschieben möchtest,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "melde dich bei diesem Tresor ab und melde dich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
"Permissions" : "Rechte",
"Received from" : "Erhalten von",
"Date" : "Datum",
@@ -235,35 +236,35 @@
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
"Repeat vault password" : "Tresor-Passwort wiederholen",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Deine Freigabeschlüssel werden 1024 bit stark sein. Du kannst dies auch später noch in den Einstellungen ändern.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Deine Freigabeschlüssel werden 1024 bit stark sein. Du kannst dies auch später noch in den Einstellungen ändern.",
"Create vault" : "Erstelle Tresor",
"Go back to vaults" : "Zurück zu den Tresoren",
"Please input the password for" : "Passwort eingeben für",
- "Set this vault as default." : "Diesen Tresor als Standard setzen.",
- "Login automatically to this vault." : "Automatisch in diesen Tresor einloggen.",
- "Logout of this vault automatically after: " : "Von diesem Tresor automatisch abmelden nach:",
+ "Set this vault as the default." : "Diesen Tresor als Standard setzen.",
+ "Log into this vault automatically." : "In diesen Tresor automatisch anmelden.",
+ "Log out of this vault automatically after: " : "Von diesem Tresor automatisch abmelden nach:",
"Decrypt vault" : "Tresor entschlüsseln",
- "Seems you lost the vault password and you're unable to login." : "Es scheint, als hätten Sie das Tresor-Passwort vergessen und nicht mehr in der Lage, sich anzumelden.",
- "If you want this vault removed you can request removal of the vault here." : "Wenn Sie möchten, dass dieser Tresor gelöscht wird, dann können Sie eine Löschung hier anfordern.",
- "An admin then accept to the request (or not)" : "Ein Administrator wird die Anfragen dann bestätigen (oder nicht)",
- "After an admin destroy's this vault, all credentials will be lost" : "Wenn ein Administrator diesen Tresor löscht, gehen alle Anmeldeinformationen verloren",
- "Reason to request deletion (optional):" : "Grund die Löschung anzufordern (optional):",
+ "Seems you lost the vault password and you're unable to log in." : "Es scheint, als hättest Du das Tresor-Passwort vergessen und bist nicht mehr in der Lage Dich anzumelden.",
+ "If you want this vault to be removed you can request that here." : "Wenn du möchtest, dass dieser Tresor gelöscht wird, dann kannst du dies hier anfordern.",
+ "An admin then accepts or declines the request" : "Ein Admin akzeptiert dann diese Anfrage (oder nicht)",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Wenn ein Administrator diesen Tresor löscht, gehen alle enthaltenen Anmeldeinformationen verloren",
+ "Reason for requesting deletion (optional):" : "Grund die Löschung anzufordern (optional):",
"Request vault destruction" : "Fordere Tresor-Löschung an",
"Yes, request an admin to destroy this vault" : "Ja, bitte einen Administrator diesen Tresor zu löschen",
"Cancel destruction request" : "Löschanfrage abbrechen",
"Vault destruction requested" : "Tresor-Löschung angefordert",
"Request removed" : "Anfrage entfernt",
"Destruction request pending" : "Lösch-Anforderung wartet",
- "Warning! Adding credentials over http can be insecure!" : "Achtung! Zugangsdaten über http kann unsicher sein!",
- "Logged in to {{vault_name}}" : "Eingeloggt in {{vault_name}}",
+ "Warning! Adding credentials over HTTP is insecure!" : "Achtung! Das Hinzufügen von Zugangsdaten über http ist unsicher!",
+ "Logged in to {{vault_name}}" : "Angemeldet in {{vault_name}}",
"Change vault" : "Wechsle Tresor",
"Deleted credentials" : "Zugangsdaten gelöscht",
- "Logout" : "Ausloggen",
+ "Logout" : "Abmelden",
"Donate" : "Spende",
"Someone has shared a credential with you." : "Jemand hat Zugangsdaten mit Dir geteilt.",
"Click here to request it" : "Hier klicken um es anzufordern",
- "Loading..." : "Lade...",
- "Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
+ "Loading…" : "Lade…",
+ "Awwhh… credential not found. Maybe it expired" : "Oh… Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen ",
"Error while saving field" : "Fehler beim Speichern des Feldes",
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
@@ -293,17 +294,18 @@
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit dir. Um dies zu akzeptieren, klicke hier",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Dir abgelehnt.",
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Dir akzeptiert.",
+ "Passman" : "Passman",
"Unable to get version info" : "Versionsinfo konnte nicht ermittelt werden",
"Passman Settings" : "Passman-Einstellungen",
- "Github version:" : "Github-Version:",
- "A newer version of passman is available" : "Es ist eine neuere Version von Passman verfügbar",
+ "GitHub version:" : "Github-Version: ",
+ "A newer version of Passman is available" : "Eine neue Version von Passman ist vefügbar.",
"Password sharing" : "Passwort teilen",
"Credential mover" : "Verschiebung der Anmeldeinformationen",
"Vault destruction requests" : "Tresor-Löschungs-Anforderungen",
"Check for new versions" : "Nach neuerer Version suchen",
"Enable HTTPS check" : "HTTPS-Prüfung aktivieren",
"Disable context menu" : "Kontextmenü deaktivieren",
- "Disable javascript debugger" : "Javascript-Debugger ausschalten",
+ "Disable JavaScript debugger" : "JavaScript-Debugger deaktivieren",
"Allow users on this server to share passwords with a link" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern via Link",
"Allow users on this server to share passwords with other users" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern mit anderen Benutzern",
"Move credentials from one account to another" : "Verschiebe Anmeldeinformationen von einem Konto zu einem anderen",
diff --git a/l10n/de_DE.js b/l10n/de_DE.js
index 4e721e1f..28705676 100644
--- a/l10n/de_DE.js
+++ b/l10n/de_DE.js
@@ -7,22 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Passwörter stimmen nicht überein",
"General" : "Allgemein",
"Custom Fields" : "Benutzerdefinierte Felder",
- "Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
- "Please fill in a value!" : "Bitte einen Wert eingeben!",
+ "Please fill in a label." : " Bitte eine Beschriftung hinzufügen ",
+ "Please fill in a value." : "Bitte einen Wert eingeben.",
"Error loading file" : "Fehler beim Laden der Datei",
- "An error happened during decryption" : "Ein Fehler ist bei der Entschlüsselung aufgetreten",
+ "An error occurred during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
"Credential created!" : "Anmeldeinformation erstellt!",
"Credential deleted" : "Anmeldeinformation gelöscht",
"Credential updated" : "Anmeldeinformation aktualisiert",
"Credential recovered" : "Anmeldeinformation wiederhergestellt",
"Credential destroyed" : "Anmeldeinformation zerstört",
- "Error downloading file, you probably don't have enough permissions" : "Fehler beim Herunterladen der Datei, Sie haben möglicherweise nicht die entsprechende Berechtigung",
+ "Error downloading file, you probably don't have sufficient permissions" : "Fehler beim Herunterladen der Datei, Sie haben möglicherweise nicht die erforderliche Berechtigung",
"Invalid QR code" : "Fehlerhafter QR-Code",
"Starting export" : "Export gestartet",
"Decrypting credentials" : "Anmeldeinformationen werden entschlüsselt",
"Done" : "Fertig",
- "File read successfully!" : "Datei erfolgreich gelesen!",
- "Follow the following steps to import your file" : "Folgen Sie, zum Importieren Ihrer Datei, den folgenden Schritten",
+ "File read successfully." : "Datei erfolgreich gelesen",
+ "Proceed with the following steps to import your file" : "Führen Sie folgende Schritte aus um Ihre Datei zu importieren",
"Credential has no label, skipping" : "Übersprungen, Anmeldeinformation hat keine Beschriftung",
"Adding {{credential}}" : "{{credential}} werden hinzugefügt",
"Added {{credential}}" : "{{credential}} hinzugefügt",
@@ -30,29 +30,29 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
"Importing" : "Wird importiert",
"Start import" : "Beginne Import",
- "Select csv file" : "csv-Datei auswählen",
- "Parsed {{rows}} lines from csv file" : "{{rows}} Zeilen der csv-Datei analysiert",
+ "Select CSV file" : "CSV-Datei auswählen",
+ "Parsed {{rows}} lines from CSV file" : "{{rows}} Zeilen der CSV-Datei gelesen",
"Skip first row" : "Erste Reihe überspringen",
"You need to assign the label field before you can start the import." : "Sie müssen das Beschriftungsfeld festlegen bevor Sie den Import beginnen können.",
- "First 5 lines of the csv are shown." : "Die ersten 5 Zeilen der csv-Datei werden angezeigt.",
+ "The first 5 lines of the CSV are shown." : "Die ersten 5 Zeilen der CSV-Datei werden angezeigt. ",
"Assign the proper fields to each column." : "Die passenden Felder jeder Spalte zuweisen.",
- "Example imported credential" : "Beispiel-Anmeldeinformationen importiert",
- "Missing an importer? Try it with the generic csv importer." : "Fehlt ein Importer? Versuchen Sie es mit dem generischen csv-Importer.",
+ "Example of imported credential" : " Beispiel einer importierten Anmeldeinformation ",
+ "Missing an importer? Try it with the generic CSV importer." : "Fehlt ein Importer? Versuchen Sie es mit dem generischen CSV-Importer.",
"Go back to importers." : "Zurück zu den Importern.",
"Revision deleted" : "Revision gelöscht",
"Revision restored" : "Revision wiederhergestellt",
- "Save in passman" : "In Passman speichern",
+ "Save in Passman" : "In Passman speichern ",
"Settings saved" : "Einstellungen gespeichert",
"General settings" : "Allgemeine Einstellungen",
- "Password Audit" : "Passwort-Audit",
+ "Password audit" : "Passwortüberprüfung",
"Password settings" : "Passwort-Einstellungen",
"Import credentials" : "Anmeldeinformationen importieren",
"Export credentials" : "Anmeldeinformationen exportieren",
"Sharing" : "Teilen",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Möchten Sie dies wirklich verlassen? Dies WIRD alle Ihre Anmeldeinformationen zerstören",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Möchten Sie dies wirklich verlassen? Dies wird alle Ihre Anmeldeinformationen zerstören",
"Your old password is incorrect!" : "Ihr altes Passwort ist falsch!",
- "New passwords do not match!" : "Die neuen Passwörter stimmen nicht überein!",
- "Please login with your new vault password" : "Bitte mit Ihrem neuen Tresor-Passwort anmelden",
+ "New password does not match!" : "Die neuen Passwörter stimmen nicht überein!",
+ "Please log in with your new vault password" : "Bitte mit Ihrem neuen Tresor-Passwort anmelden",
"Share with users and groups" : "Mit Benutzern und Gruppen teilen",
"Share link" : "Link teilen",
"Are you sure you want to leave? This will corrupt this credential" : "Möchten Sie dies wirklich verlassen? Dies wird diese Anmeldeinformation zerstören",
@@ -66,13 +66,13 @@ OC.L10N.register(
"Toggle visibility" : "Sichtbarkeit umschalten",
"Copy to clipboard" : "In die Zwischenablage kopieren",
"Copied to clipboard!" : "In die Zwischenablage kopiert!",
- "Generate password" : "Passwort generieren",
+ "Generate password" : "Passwort erzeugen",
"Copy password to clipboard" : "Passwort in die Zwischenablage kopieren",
"Password copied to clipboard!" : "Passwort in die Zwischenablage kopiert!",
"Complete" : "Fertigstellen",
"Username" : "Benutzername",
"Repeat password" : "Passwort wiederholen",
- "Add Tag" : "Schlagwort hinzufügen",
+ "Add tag" : "Schlagwort hinzufügen",
"Field label" : "Beschriftung des Feldes",
"Field value" : "Wert des Feldes",
"Choose a file" : "Datei auswählen",
@@ -90,8 +90,8 @@ OC.L10N.register(
"Current OTP settings" : "Aktuelle OTP-Einstellungen",
"Issuer" : "Ersteller",
"Secret" : "Geheimnis",
- "Expire date" : "Ablaufdatum",
- "No expire date set" : "Kein Ablaufdatum gesetzt",
+ "Expiration date" : "Ablaufdatum",
+ "No expiration date set" : "Kein Ablaufdatum gesetzt ",
"Renew interval" : "Intervall erneuern",
"Disabled" : "Deaktiviert",
"Day(s)" : "Tag(e)",
@@ -116,7 +116,7 @@ OC.L10N.register(
"Change vault key" : "Tresor-Schlüssel ändern",
"Old vault password" : "Altes Tresor-Passwort",
"New vault password" : "Neues Tresor-Passwort",
- "New vault password repeat" : "Neues Tresor-Passwort wiederholen",
+ "Repeat new vault password" : "Tresor-Passwort wiederholen",
"Please wait your vault is being updated, do not leave this page." : "Bitte warten, Ihr Tresor wird aktualisiert, bitte diese Seite nicht verlassen.",
"Processing" : "Verarbeite",
"Total progress" : "Gesamtfortschritt",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Vault password" : "Tresor-Passwort",
"This process is irreversible" : "Dieser Vorgang ist unumkehrbar",
"Delete my precious passwords" : "Meine wertvollen Passwörter löschen",
- "Deleting {{password}}..." : "{{password}} löschen...",
+ "Deleting {{password}}…" : "{{password}} löschen…",
"Yes, delete my precious passwords" : "Ja, bitte meine wertvollen Passwörter löschen",
"Import type" : "Import-Typ",
"Import" : "Importieren",
@@ -142,13 +142,14 @@ OC.L10N.register(
"Save keys" : "Schlüssel speichern",
"Generate sharing keys" : "Schlüssel zum Teilen erzeugen",
"Generating sharing keys" : "Erzeuge Schlüssel zum Teilen",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Das Passwort-Tool durchsucht Ihre Passwörter, berechnet die durchschnittliche Zeit zum Knacken des Passworts und wenn diese unter eine Schwelle liegt, wird dieses angezeigt",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Das Passwort-Tool analysiert Ihr Passwort, berechnet die Zeit zum knacken des Passwortes und listet die Passwörter auf die unter dem Grenzwert liegen. ",
"Minimum password stength" : "Minimale Passwortstärke",
- "Passman scanned your passwords, and here is the result." : "Passman hat Ihre Passwörter durchsucht und hier ist das Ergbnis",
- "A total of {{scan_result}} weak credentials." : "Insgesamt {{scan_result}} schwache Anmeldeinformationen.",
+ "Start scan" : "Einen Scan starten",
+ "Result" : "Ergebnis",
+ "A total of {{scan_result}} weak credentials were found." : "Es wurden insgesamt {{scan_result}} schwache Anmeldeinformationen wurden gefunden.",
"Score" : "Bewertung",
"Action" : "Aktion",
- "Search users or groups..." : "Suche Benutzer oder Gruppen...",
+ "Search users or groups…" : "Suche Benutzer oder Gruppen…",
"Missing users? Only users that have vaults are shown." : "Nutzer gesucht? Es werden nur Nutzer mit einem Tresor angezeigt.",
"Cyphering" : "Verschlüsselung",
"Uploading" : "Lade hoch",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Freigaben über Links aktivieren",
"Share until date" : "Freigabe gültig bis Datum",
"Expire after views" : "Läuft nach dem Anschauen ab",
- "Click share first" : "Erst auf Teilen klicken",
+ "Click Share first" : "Erst auf Teilen klicken",
"Show files" : "Dateien anzeigen",
"Details" : "Details",
"Hide details" : "Details ausblenden",
@@ -203,16 +204,16 @@ OC.L10N.register(
"Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
"Unshare" : "Freigabe aufheben",
"Showing deleted since" : "Anzeigen gelöscht seit",
- "All time" : "Gesamte Zeit",
+ "Beginning" : "Beginn",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} of {{credential_number}} Anmeldeinformationen anzeigen",
- "Search credential..." : "Anmeldeinformation suchen...",
+ "Search for credential…" : "Suche Anmeldeinformationen…",
"Account" : "Konto",
"Password" : "Passwort",
"OTP" : "OTP (One Time Passwort)",
"E-mail" : "E-Mail",
- "URL" : "Url",
+ "URL" : "URL",
"Notes" : "Notizen",
- "Expire time" : "Ablaufzeit",
+ "Expiry time" : "Ablaufzeit",
"Changed" : "Geändert",
"Created" : "Erstellt",
"Edit" : "Bearbeiten",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Vernichten",
"Use regex" : "Regex verwenden",
"You have incoming share requests." : "Sie haben eingehende Freigabeanforderungen.",
- "If you want to put the credential in a other vault," : "Falls Sie die Anmeldeinformation in einen andern Tresor übertragen möchten,",
- "logout of this vault and login to the vault you want the shared credential in." : "melden Sie sich bei diesem Tresor ab und melde Sie sich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
+ "If you want to put the credential in another vault," : "Falls Sie die Anmeldeinformation in einen andern Tresor übertragen möchten,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "melden Sie sich bei diesem Tresor ab und melde Sie sich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
"Permissions" : "Rechte",
"Received from" : "Erhalten von",
"Date" : "Datum",
@@ -237,35 +238,35 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
"Repeat vault password" : "Tresor-Passwort wiederholen",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Ihre Freigabeschlüssel werden 1024 bit stark sein. Sie können dies auch später noch in den Einstellungen ändern.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Ihre Freigabeschlüssel werden 1024 bit stark sein. Sie können dies auch später noch in den Einstellungen ändern.",
"Create vault" : "Erstelle Tresor",
"Go back to vaults" : "Zurück zu den Tresoren",
"Please input the password for" : "Passwort eingeben für",
- "Set this vault as default." : "Diesen Tresor als Standard setzen.",
- "Login automatically to this vault." : "Automatisch in diesen Tresor einloggen.",
- "Logout of this vault automatically after: " : "Von diesem Tresor automatisch abmelden nach:",
+ "Set this vault as the default." : "Diesen Tresor als Standard setzen.",
+ "Log into this vault automatically." : "In diesen Tresor automatisch anmelden.",
+ "Log out of this vault automatically after: " : "Von diesem Tresor automatisch abmelden nach:",
"Decrypt vault" : "Tresor entschlüsseln",
- "Seems you lost the vault password and you're unable to login." : "Es scheint, als hätten Sie das Passwort für den Tresor verloren und könnten sich nicht mehr einloggen.",
- "If you want this vault removed you can request removal of the vault here." : "Wenn Sie diesen Tresor entfernt haben möchten, können Sie das Entfernen hier beauftragen.",
- "An admin then accept to the request (or not)" : "Ein Admin akzeptiert dann diese Anfrage (oder nicht)",
- "After an admin destroy's this vault, all credentials will be lost" : "Nachdem ein Admin diesen Tresor zerstört, sind alle Zugangsdaten verloren",
- "Reason to request deletion (optional):" : "Grund für die Lösch-Anfrage (optional):",
+ "Seems you lost the vault password and you're unable to log in." : "Es scheint, als hätten Sie das Passwort für den Tresor verloren und könnten sich nicht mehr anmelden.",
+ "If you want this vault to be removed you can request that here." : "Wenn Sie möchten, dass dieser Tresor gelöscht wird, dann können Sie dies hier anfordern.",
+ "An admin then accepts or declines the request" : "Ein Admin akzeptiert dann diese Anfrage (oder nicht)",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Wenn ein Administrator diesen Tresor löscht, gehen alle enthaltenen Anmeldeinformationen verloren",
+ "Reason for requesting deletion (optional):" : "Grund für die Lösch-Anfrage (optional):",
"Request vault destruction" : "Beantrage die Zerstörung des Tresors",
"Yes, request an admin to destroy this vault" : "Ja, beauftrage einen Administrator, den Tresor zu zerstören.",
"Cancel destruction request" : "Brich die Aufforderung zur Zerstörung ab",
"Vault destruction requested" : "Zerstörung des Tresors in Auftrag gegeben",
"Request removed" : "Anfrage entfernt",
"Destruction request pending" : "Auftrag zur Zerstörung in der Warteschleife",
- "Warning! Adding credentials over http can be insecure!" : "Achtung! Zugangsdaten über http kann unsicher sein!",
- "Logged in to {{vault_name}}" : "Eingeloggt in {{vault_name}}",
+ "Warning! Adding credentials over HTTP is insecure!" : "Achtung! Das Hinzufügen von Zugangsdaten über http ist unsicher!",
+ "Logged in to {{vault_name}}" : "Angemeldet in {{vault_name}}",
"Change vault" : "Wechsle Tresor",
"Deleted credentials" : "Zugangsdaten gelöscht",
- "Logout" : "Ausloggen",
+ "Logout" : "Abmelden",
"Donate" : "Spende",
"Someone has shared a credential with you." : "Jemand hat Zugangsdaten mit Ihnen geteilt.",
"Click here to request it" : "Hier klicken um es anzufordern",
- "Loading..." : "Lade...",
- "Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
+ "Loading…" : "Lade…",
+ "Awwhh… credential not found. Maybe it expired" : "Oh… Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen ",
"Error while saving field" : "Fehler beim Speichern des Feldes",
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
@@ -295,17 +296,18 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit Ihnen. Um dies zu akzeptieren, klicken Sie bitte hier",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen abgelehnt.",
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen akzeptiert.",
+ "Passman" : "Passman",
"Unable to get version info" : "Versionsinfo konnte nicht ermittelt werden",
"Passman Settings" : "Passman-Einstellungen",
- "Github version:" : "Github-Version:",
- "A newer version of passman is available" : "Es ist eine neuere Version von Passman verfügbar",
+ "GitHub version:" : "Github-Version: ",
+ "A newer version of Passman is available" : "Eine neue Version von Passman ist vefügbar.",
"Password sharing" : "Passwort teilen",
"Credential mover" : "Zugangsdaten verschieben",
"Vault destruction requests" : "Aufträge zur Zerstörung des Tresors",
"Check for new versions" : "Nach neuerer Version suchen",
"Enable HTTPS check" : "HTTPS-Prüfung aktivieren",
"Disable context menu" : "Kontextmenü deaktivieren",
- "Disable javascript debugger" : "Javascript-Debugger ausschalten",
+ "Disable JavaScript debugger" : "JavaScript-Debugger deaktivieren",
"Allow users on this server to share passwords with a link" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern via Link",
"Allow users on this server to share passwords with other users" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern mit anderen Benutzern",
"Move credentials from one account to another" : "Verschiebe Zugangsdaten von einem Konto zu einem anderen",
@@ -318,7 +320,7 @@ OC.L10N.register(
"Reason" : "Grund",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden erneut geladen",
- "Saving..." : "Speichere...",
+ "Saving..." : "Speichere …",
"Dismiss" : "Ausblenden",
"seconds ago" : "Gerade ebene"
},
diff --git a/l10n/de_DE.json b/l10n/de_DE.json
index 6bb938ec..f660a264 100644
--- a/l10n/de_DE.json
+++ b/l10n/de_DE.json
@@ -5,22 +5,22 @@
"Passwords do not match" : "Passwörter stimmen nicht überein",
"General" : "Allgemein",
"Custom Fields" : "Benutzerdefinierte Felder",
- "Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
- "Please fill in a value!" : "Bitte einen Wert eingeben!",
+ "Please fill in a label." : " Bitte eine Beschriftung hinzufügen ",
+ "Please fill in a value." : "Bitte einen Wert eingeben.",
"Error loading file" : "Fehler beim Laden der Datei",
- "An error happened during decryption" : "Ein Fehler ist bei der Entschlüsselung aufgetreten",
+ "An error occurred during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
"Credential created!" : "Anmeldeinformation erstellt!",
"Credential deleted" : "Anmeldeinformation gelöscht",
"Credential updated" : "Anmeldeinformation aktualisiert",
"Credential recovered" : "Anmeldeinformation wiederhergestellt",
"Credential destroyed" : "Anmeldeinformation zerstört",
- "Error downloading file, you probably don't have enough permissions" : "Fehler beim Herunterladen der Datei, Sie haben möglicherweise nicht die entsprechende Berechtigung",
+ "Error downloading file, you probably don't have sufficient permissions" : "Fehler beim Herunterladen der Datei, Sie haben möglicherweise nicht die erforderliche Berechtigung",
"Invalid QR code" : "Fehlerhafter QR-Code",
"Starting export" : "Export gestartet",
"Decrypting credentials" : "Anmeldeinformationen werden entschlüsselt",
"Done" : "Fertig",
- "File read successfully!" : "Datei erfolgreich gelesen!",
- "Follow the following steps to import your file" : "Folgen Sie, zum Importieren Ihrer Datei, den folgenden Schritten",
+ "File read successfully." : "Datei erfolgreich gelesen",
+ "Proceed with the following steps to import your file" : "Führen Sie folgende Schritte aus um Ihre Datei zu importieren",
"Credential has no label, skipping" : "Übersprungen, Anmeldeinformation hat keine Beschriftung",
"Adding {{credential}}" : "{{credential}} werden hinzugefügt",
"Added {{credential}}" : "{{credential}} hinzugefügt",
@@ -28,29 +28,29 @@
"Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
"Importing" : "Wird importiert",
"Start import" : "Beginne Import",
- "Select csv file" : "csv-Datei auswählen",
- "Parsed {{rows}} lines from csv file" : "{{rows}} Zeilen der csv-Datei analysiert",
+ "Select CSV file" : "CSV-Datei auswählen",
+ "Parsed {{rows}} lines from CSV file" : "{{rows}} Zeilen der CSV-Datei gelesen",
"Skip first row" : "Erste Reihe überspringen",
"You need to assign the label field before you can start the import." : "Sie müssen das Beschriftungsfeld festlegen bevor Sie den Import beginnen können.",
- "First 5 lines of the csv are shown." : "Die ersten 5 Zeilen der csv-Datei werden angezeigt.",
+ "The first 5 lines of the CSV are shown." : "Die ersten 5 Zeilen der CSV-Datei werden angezeigt. ",
"Assign the proper fields to each column." : "Die passenden Felder jeder Spalte zuweisen.",
- "Example imported credential" : "Beispiel-Anmeldeinformationen importiert",
- "Missing an importer? Try it with the generic csv importer." : "Fehlt ein Importer? Versuchen Sie es mit dem generischen csv-Importer.",
+ "Example of imported credential" : " Beispiel einer importierten Anmeldeinformation ",
+ "Missing an importer? Try it with the generic CSV importer." : "Fehlt ein Importer? Versuchen Sie es mit dem generischen CSV-Importer.",
"Go back to importers." : "Zurück zu den Importern.",
"Revision deleted" : "Revision gelöscht",
"Revision restored" : "Revision wiederhergestellt",
- "Save in passman" : "In Passman speichern",
+ "Save in Passman" : "In Passman speichern ",
"Settings saved" : "Einstellungen gespeichert",
"General settings" : "Allgemeine Einstellungen",
- "Password Audit" : "Passwort-Audit",
+ "Password audit" : "Passwortüberprüfung",
"Password settings" : "Passwort-Einstellungen",
"Import credentials" : "Anmeldeinformationen importieren",
"Export credentials" : "Anmeldeinformationen exportieren",
"Sharing" : "Teilen",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Möchten Sie dies wirklich verlassen? Dies WIRD alle Ihre Anmeldeinformationen zerstören",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Möchten Sie dies wirklich verlassen? Dies wird alle Ihre Anmeldeinformationen zerstören",
"Your old password is incorrect!" : "Ihr altes Passwort ist falsch!",
- "New passwords do not match!" : "Die neuen Passwörter stimmen nicht überein!",
- "Please login with your new vault password" : "Bitte mit Ihrem neuen Tresor-Passwort anmelden",
+ "New password does not match!" : "Die neuen Passwörter stimmen nicht überein!",
+ "Please log in with your new vault password" : "Bitte mit Ihrem neuen Tresor-Passwort anmelden",
"Share with users and groups" : "Mit Benutzern und Gruppen teilen",
"Share link" : "Link teilen",
"Are you sure you want to leave? This will corrupt this credential" : "Möchten Sie dies wirklich verlassen? Dies wird diese Anmeldeinformation zerstören",
@@ -64,13 +64,13 @@
"Toggle visibility" : "Sichtbarkeit umschalten",
"Copy to clipboard" : "In die Zwischenablage kopieren",
"Copied to clipboard!" : "In die Zwischenablage kopiert!",
- "Generate password" : "Passwort generieren",
+ "Generate password" : "Passwort erzeugen",
"Copy password to clipboard" : "Passwort in die Zwischenablage kopieren",
"Password copied to clipboard!" : "Passwort in die Zwischenablage kopiert!",
"Complete" : "Fertigstellen",
"Username" : "Benutzername",
"Repeat password" : "Passwort wiederholen",
- "Add Tag" : "Schlagwort hinzufügen",
+ "Add tag" : "Schlagwort hinzufügen",
"Field label" : "Beschriftung des Feldes",
"Field value" : "Wert des Feldes",
"Choose a file" : "Datei auswählen",
@@ -88,8 +88,8 @@
"Current OTP settings" : "Aktuelle OTP-Einstellungen",
"Issuer" : "Ersteller",
"Secret" : "Geheimnis",
- "Expire date" : "Ablaufdatum",
- "No expire date set" : "Kein Ablaufdatum gesetzt",
+ "Expiration date" : "Ablaufdatum",
+ "No expiration date set" : "Kein Ablaufdatum gesetzt ",
"Renew interval" : "Intervall erneuern",
"Disabled" : "Deaktiviert",
"Day(s)" : "Tag(e)",
@@ -114,7 +114,7 @@
"Change vault key" : "Tresor-Schlüssel ändern",
"Old vault password" : "Altes Tresor-Passwort",
"New vault password" : "Neues Tresor-Passwort",
- "New vault password repeat" : "Neues Tresor-Passwort wiederholen",
+ "Repeat new vault password" : "Tresor-Passwort wiederholen",
"Please wait your vault is being updated, do not leave this page." : "Bitte warten, Ihr Tresor wird aktualisiert, bitte diese Seite nicht verlassen.",
"Processing" : "Verarbeite",
"Total progress" : "Gesamtfortschritt",
@@ -128,7 +128,7 @@
"Vault password" : "Tresor-Passwort",
"This process is irreversible" : "Dieser Vorgang ist unumkehrbar",
"Delete my precious passwords" : "Meine wertvollen Passwörter löschen",
- "Deleting {{password}}..." : "{{password}} löschen...",
+ "Deleting {{password}}…" : "{{password}} löschen…",
"Yes, delete my precious passwords" : "Ja, bitte meine wertvollen Passwörter löschen",
"Import type" : "Import-Typ",
"Import" : "Importieren",
@@ -140,13 +140,14 @@
"Save keys" : "Schlüssel speichern",
"Generate sharing keys" : "Schlüssel zum Teilen erzeugen",
"Generating sharing keys" : "Erzeuge Schlüssel zum Teilen",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Das Passwort-Tool durchsucht Ihre Passwörter, berechnet die durchschnittliche Zeit zum Knacken des Passworts und wenn diese unter eine Schwelle liegt, wird dieses angezeigt",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Das Passwort-Tool analysiert Ihr Passwort, berechnet die Zeit zum knacken des Passwortes und listet die Passwörter auf die unter dem Grenzwert liegen. ",
"Minimum password stength" : "Minimale Passwortstärke",
- "Passman scanned your passwords, and here is the result." : "Passman hat Ihre Passwörter durchsucht und hier ist das Ergbnis",
- "A total of {{scan_result}} weak credentials." : "Insgesamt {{scan_result}} schwache Anmeldeinformationen.",
+ "Start scan" : "Einen Scan starten",
+ "Result" : "Ergebnis",
+ "A total of {{scan_result}} weak credentials were found." : "Es wurden insgesamt {{scan_result}} schwache Anmeldeinformationen wurden gefunden.",
"Score" : "Bewertung",
"Action" : "Aktion",
- "Search users or groups..." : "Suche Benutzer oder Gruppen...",
+ "Search users or groups…" : "Suche Benutzer oder Gruppen…",
"Missing users? Only users that have vaults are shown." : "Nutzer gesucht? Es werden nur Nutzer mit einem Tresor angezeigt.",
"Cyphering" : "Verschlüsselung",
"Uploading" : "Lade hoch",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Freigaben über Links aktivieren",
"Share until date" : "Freigabe gültig bis Datum",
"Expire after views" : "Läuft nach dem Anschauen ab",
- "Click share first" : "Erst auf Teilen klicken",
+ "Click Share first" : "Erst auf Teilen klicken",
"Show files" : "Dateien anzeigen",
"Details" : "Details",
"Hide details" : "Details ausblenden",
@@ -201,16 +202,16 @@
"Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
"Unshare" : "Freigabe aufheben",
"Showing deleted since" : "Anzeigen gelöscht seit",
- "All time" : "Gesamte Zeit",
+ "Beginning" : "Beginn",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} of {{credential_number}} Anmeldeinformationen anzeigen",
- "Search credential..." : "Anmeldeinformation suchen...",
+ "Search for credential…" : "Suche Anmeldeinformationen…",
"Account" : "Konto",
"Password" : "Passwort",
"OTP" : "OTP (One Time Passwort)",
"E-mail" : "E-Mail",
- "URL" : "Url",
+ "URL" : "URL",
"Notes" : "Notizen",
- "Expire time" : "Ablaufzeit",
+ "Expiry time" : "Ablaufzeit",
"Changed" : "Geändert",
"Created" : "Erstellt",
"Edit" : "Bearbeiten",
@@ -220,8 +221,8 @@
"Destroy" : "Vernichten",
"Use regex" : "Regex verwenden",
"You have incoming share requests." : "Sie haben eingehende Freigabeanforderungen.",
- "If you want to put the credential in a other vault," : "Falls Sie die Anmeldeinformation in einen andern Tresor übertragen möchten,",
- "logout of this vault and login to the vault you want the shared credential in." : "melden Sie sich bei diesem Tresor ab und melde Sie sich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
+ "If you want to put the credential in another vault," : "Falls Sie die Anmeldeinformation in einen andern Tresor übertragen möchten,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "melden Sie sich bei diesem Tresor ab und melde Sie sich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
"Permissions" : "Rechte",
"Received from" : "Erhalten von",
"Date" : "Datum",
@@ -235,35 +236,35 @@
"Password strength must be at least: {{strength}}" : "Mindest erforderliche Passwortstärke: {{strength}}",
"Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
"Repeat vault password" : "Tresor-Passwort wiederholen",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Ihre Freigabeschlüssel werden 1024 bit stark sein. Sie können dies auch später noch in den Einstellungen ändern.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Ihre Freigabeschlüssel werden 1024 bit stark sein. Sie können dies auch später noch in den Einstellungen ändern.",
"Create vault" : "Erstelle Tresor",
"Go back to vaults" : "Zurück zu den Tresoren",
"Please input the password for" : "Passwort eingeben für",
- "Set this vault as default." : "Diesen Tresor als Standard setzen.",
- "Login automatically to this vault." : "Automatisch in diesen Tresor einloggen.",
- "Logout of this vault automatically after: " : "Von diesem Tresor automatisch abmelden nach:",
+ "Set this vault as the default." : "Diesen Tresor als Standard setzen.",
+ "Log into this vault automatically." : "In diesen Tresor automatisch anmelden.",
+ "Log out of this vault automatically after: " : "Von diesem Tresor automatisch abmelden nach:",
"Decrypt vault" : "Tresor entschlüsseln",
- "Seems you lost the vault password and you're unable to login." : "Es scheint, als hätten Sie das Passwort für den Tresor verloren und könnten sich nicht mehr einloggen.",
- "If you want this vault removed you can request removal of the vault here." : "Wenn Sie diesen Tresor entfernt haben möchten, können Sie das Entfernen hier beauftragen.",
- "An admin then accept to the request (or not)" : "Ein Admin akzeptiert dann diese Anfrage (oder nicht)",
- "After an admin destroy's this vault, all credentials will be lost" : "Nachdem ein Admin diesen Tresor zerstört, sind alle Zugangsdaten verloren",
- "Reason to request deletion (optional):" : "Grund für die Lösch-Anfrage (optional):",
+ "Seems you lost the vault password and you're unable to log in." : "Es scheint, als hätten Sie das Passwort für den Tresor verloren und könnten sich nicht mehr anmelden.",
+ "If you want this vault to be removed you can request that here." : "Wenn Sie möchten, dass dieser Tresor gelöscht wird, dann können Sie dies hier anfordern.",
+ "An admin then accepts or declines the request" : "Ein Admin akzeptiert dann diese Anfrage (oder nicht)",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Wenn ein Administrator diesen Tresor löscht, gehen alle enthaltenen Anmeldeinformationen verloren",
+ "Reason for requesting deletion (optional):" : "Grund für die Lösch-Anfrage (optional):",
"Request vault destruction" : "Beantrage die Zerstörung des Tresors",
"Yes, request an admin to destroy this vault" : "Ja, beauftrage einen Administrator, den Tresor zu zerstören.",
"Cancel destruction request" : "Brich die Aufforderung zur Zerstörung ab",
"Vault destruction requested" : "Zerstörung des Tresors in Auftrag gegeben",
"Request removed" : "Anfrage entfernt",
"Destruction request pending" : "Auftrag zur Zerstörung in der Warteschleife",
- "Warning! Adding credentials over http can be insecure!" : "Achtung! Zugangsdaten über http kann unsicher sein!",
- "Logged in to {{vault_name}}" : "Eingeloggt in {{vault_name}}",
+ "Warning! Adding credentials over HTTP is insecure!" : "Achtung! Das Hinzufügen von Zugangsdaten über http ist unsicher!",
+ "Logged in to {{vault_name}}" : "Angemeldet in {{vault_name}}",
"Change vault" : "Wechsle Tresor",
"Deleted credentials" : "Zugangsdaten gelöscht",
- "Logout" : "Ausloggen",
+ "Logout" : "Abmelden",
"Donate" : "Spende",
"Someone has shared a credential with you." : "Jemand hat Zugangsdaten mit Ihnen geteilt.",
"Click here to request it" : "Hier klicken um es anzufordern",
- "Loading..." : "Lade...",
- "Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
+ "Loading…" : "Lade…",
+ "Awwhh… credential not found. Maybe it expired" : "Oh… Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen ",
"Error while saving field" : "Fehler beim Speichern des Feldes",
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
@@ -293,17 +294,18 @@
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit Ihnen. Um dies zu akzeptieren, klicken Sie bitte hier",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen abgelehnt.",
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen akzeptiert.",
+ "Passman" : "Passman",
"Unable to get version info" : "Versionsinfo konnte nicht ermittelt werden",
"Passman Settings" : "Passman-Einstellungen",
- "Github version:" : "Github-Version:",
- "A newer version of passman is available" : "Es ist eine neuere Version von Passman verfügbar",
+ "GitHub version:" : "Github-Version: ",
+ "A newer version of Passman is available" : "Eine neue Version von Passman ist vefügbar.",
"Password sharing" : "Passwort teilen",
"Credential mover" : "Zugangsdaten verschieben",
"Vault destruction requests" : "Aufträge zur Zerstörung des Tresors",
"Check for new versions" : "Nach neuerer Version suchen",
"Enable HTTPS check" : "HTTPS-Prüfung aktivieren",
"Disable context menu" : "Kontextmenü deaktivieren",
- "Disable javascript debugger" : "Javascript-Debugger ausschalten",
+ "Disable JavaScript debugger" : "JavaScript-Debugger deaktivieren",
"Allow users on this server to share passwords with a link" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern via Link",
"Allow users on this server to share passwords with other users" : "Erlaube Benutzern dieses Servers das Teilen von Passwörtern mit anderen Benutzern",
"Move credentials from one account to another" : "Verschiebe Zugangsdaten von einem Konto zu einem anderen",
@@ -316,7 +318,7 @@
"Reason" : "Grund",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden erneut geladen",
- "Saving..." : "Speichere...",
+ "Saving..." : "Speichere …",
"Dismiss" : "Ausblenden",
"seconds ago" : "Gerade ebene"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/el.js b/l10n/el.js
index 805507f0..cd981a6c 100644
--- a/l10n/el.js
+++ b/l10n/el.js
@@ -3,41 +3,43 @@ OC.L10N.register(
{
"Passwords" : "Συνθηματικά",
"Generating sharing keys ( %step / 2)" : "Δημιουργία κλειδιών διαμοιρασμού ( %step / 2)",
- "Incorrect vault password!" : "Εσφαλμένος κωδικός κρύπτη ",
+ "Incorrect vault password!" : "Εσφαλμένος κωδικός θαλάμου!",
"Passwords do not match" : "Δεν ταιριάζουν τα συθηματικά",
"General" : "Γενικά",
"Custom Fields" : "Προσαρμοσμένα πεδία",
- "Please fill in a label!" : "Παρακαλώ συμπληρώστε μια ετικέτα!",
- "Please fill in a value!" : "Παρακαλώ συμπληρώστε μια τιμή!",
"Error loading file" : "Σφάλμα φόρτωσης αρχείου",
- "An error happened during decryption" : "Παρουσιάστηκε σφάλμα κατά την αποκρυπτογράφηση",
"Credential created!" : "Τα διαπιστευτήρια δημιουργήθηκαν!",
"Credential deleted" : "Τα διαπιστευτήρια διαγράφηκαν",
"Credential updated" : "Τα διαπιστευτήρια ενημερώθηκαν",
+ "Credential recovered" : "Τα διαπιστευτήρια ανακτήθηκαν",
"Credential destroyed" : "Τα διαπιστευτήρια καταστράφηκαν",
"Invalid QR code" : "Με έγκυρος κώδικας QR",
+ "Starting export" : "Έναρξη εξαγωγής",
"Decrypting credentials" : "Αποκρυπτογράφηση διαπιστευτηρίων",
"Done" : "Ολοκληρώθηκε",
- "File read successfully!" : "Επιτυχημένη ανάγνωση αρχείου!",
+ "Added {{credential}}" : "Προστέθηκε {{credential}}",
+ "Skipping credential, missing label on line {{line}}" : "Παράλειψη διαπιστευτηρίων, έλλειψη ετικέτας στη γραμμή {{line}}",
+ "Parsed {{num}} credentials, starting to import" : "Αναλυτικά αναγνωριστικά {{num}}, άρχισαν να εισάγουν",
"Importing" : "Γίνεται εισαγωγή",
- "Select csv file" : "Επιλογή αρχείου csv",
+ "Start import" : "Έναρξη εισαγωγής",
"Revision deleted" : "Διαγράφηκε η αναθεώρηση",
- "Save in passman" : "Αποθήκευση στο passman",
"Settings saved" : "Οι ρυθμίσεις αποθηκεύτηκαν",
"General settings" : "Γενικές ρυθμίσεις",
"Password settings" : "Ρυθμίσεις συνθηματικού",
"Import credentials" : "Εισαγωγή διαπιστευτηρίων",
"Export credentials" : "Εξαγωγή διαπιστευτηρίων",
"Your old password is incorrect!" : "Εσφαλμένο παλαιό συνθηματικό!",
- "New passwords do not match!" : "Τα νέα συνθηματικά δεν ταιριάζουν!",
"Share link" : "Διαμοιρασμός συνδέσμου",
"Saved!" : "Αποθηκεύτηκαν!",
+ "Weak" : "Ασθενές",
+ "Copy to clipboard" : "Αντιγραφή στο πρόχειρο",
+ "Copied to clipboard!" : "Αντιγράφηκε στο πρόχειρο!",
"Generate password" : "Δημιουργία συνθηματικού",
"Copy password to clipboard" : "Αντιγραφή συνθηματικού στο πρόχειρο",
"Password copied to clipboard!" : "Το συνθηματικό αντιγράφτηκε στο πρόχειρο.",
"Username" : "Όνομα χρήστη",
"Repeat password" : "Επανάληψη συνθηματικού",
- "Add Tag" : "Προσθήκη ετικέτας",
+ "Add tag" : "Πρόσθεσε ετικέτα",
"Field label" : "Ετικέτα πεδίου",
"Field value" : "Τιμή πεδίου",
"Choose a file" : "Επιλογή αρχείου",
@@ -46,18 +48,18 @@ OC.L10N.register(
"Add" : "Προσθήκη",
"Value" : "Τιμή",
"Type" : "Τύπος",
+ "Actions" : "Ενέργειες",
"Empty" : "Άδειο",
"Filename" : "Όνομα αρχείου",
"Upload date" : "Ημερομηνία μεταφόρτωσης",
"Size" : "Μέγεθος",
"Secret" : "Μυστικό",
- "Expire date" : "Ημερομηνία λήξης",
- "No expire date set" : "Δεν ορίστηκε ημερομηνία λήψης",
"Disabled" : "Απενεργοποιημένο",
"Day(s)" : "Ημέρα(-ες)",
"Week(s)" : "Εβδομάδα(-ες)",
"Month(s)" : "Μήνας(-ες)",
"Year(s)" : "Χρόνος(-ια)",
+ "Password generation settings" : "Ρυθμίσεις δημιουργίας συνθηματικών",
"Password length" : "Μέγεθος συνθηματικού",
"Use lowercase letters" : "Χρησιμοποιήστε πεζούς χαρακτήρες",
"Use numbers" : "Χρήση αριθμών",
@@ -65,17 +67,22 @@ OC.L10N.register(
"Export type" : "Τύπος εξαγωγής",
"Export" : "Εξαγωγή",
"Change" : "Αλλαγή",
+ "Total progress" : "Συνολική πρόοδος",
"About Passman" : "Περί εφαρμογής Passman",
"Version" : "Έκδοση",
"Donate to support development" : "Κάντε μια δωρεά για να υποστηρίξετε την ανάπτυξη",
"Save your passwords with 1 click!" : "Αποθηκεύστε το συνθηματικό σας με 1 κλικ!",
- "Deleting {{password}}..." : "Γίνεται διαγραφή {{password}}...",
+ "Delete my precious passwords" : "Διαγραφή των πολύτιμων συνθηματικών μου",
"Import type" : "Τύπος εισαγωγής",
"Import" : "Εισαγωγή",
+ "Read progress" : "Πρόοδος ανάγνωσης",
+ "Upload progress" : "Πρόοδος μεταφόρτωσης",
"Private Key" : "Ιδιωτικό κλειδί",
"Public key" : "Δημόσιο κλειδί",
"Key size" : "Μέγεθος κλειδιού",
"Save keys" : "Αποθήκευση κλειδιών",
+ "Start scan" : "Εκκίνηση σάρωσης",
+ "Result" : "Αποτέλεσμα",
"Action" : "Ενέργεια",
"Uploading" : "Γίνεται μεταφόρτωση",
"User" : "Χρήστης",
@@ -85,13 +92,17 @@ OC.L10N.register(
"Pending" : "Εκκρεμεί",
"Enable link sharing" : "Ενεργοποίηση διαμοιρασμού συνδέσμου",
"Share until date" : "Διαμοιρασμός έως την ημερομηνία",
+ "Expire after views" : "Λήξη μετά από προβολές",
"Show files" : "Εμφάνιση αρχείων",
"Details" : "Λεπτομέρειες",
"Hide details" : "Απόκρυψη λεπτομερειών",
+ "100 / hour" : "100 / ώρα",
"10 / second" : "10 / δευτερόλεπτο",
"10k / second" : "10k / δευτερόλεπτο",
"10B / second" : "10B / δευτερόλεπτο",
+ "Pattern" : "Μοτίβο",
"Dictionary name" : "Όνομα λεξικου",
+ "Rank" : "Θέση",
"by" : "από",
"Label" : "Ετικέτα",
"Restore revision" : "Επαναφορά αναθεώρησης",
@@ -112,24 +123,54 @@ OC.L10N.register(
"Edit" : "Επεξεργασία",
"Delete" : "Διαγραφή",
"Share" : "Διαμοιρασμός",
+ "Recover" : "Ανάκτηση",
"Destroy" : "Καταστροφή",
"Permissions" : "Δικαιώματα",
"Received from" : "Ελήφθη από",
"Date" : "Ημερομηνία",
"Accept" : "Αποδοχή",
"Decline" : "Απόρριψη",
+ "You have {{session_time}} left before logout." : "Έχει απομείνει {{session_time}} πριν την έξοδο.",
"Last accessed" : "Τελευταία προσπέλαση",
"Never" : "Ποτέ",
+ "Cancel destruction request" : "Αίτημα ακύρωσης καταστροφής",
+ "Destruction request pending" : "Εκκρεμεί το αίτημα καταστροφής",
+ "Logged in to {{vault_name}}" : "Είσοδος στο {{vault_name}}",
+ "Deleted credentials" : "Διεγραμμένα διαπιστευτήρια",
"Logout" : "Έξοδος",
"Donate" : "Δωρεά",
- "Loading..." : "Γίνεται φόρτωση...",
+ "Someone has shared a credential with you." : "Κάποιος διαμοιράστηκε τα διαπιστευτήρια μαζί σας.",
+ "Click here to request it" : "Κάντε κλικ εδώ για να το αιτηθείτε",
+ "Error while saving field" : "Σφάλμα κατά την αποθήκευση πεδίου",
+ "A Passman item has been created, modified or deleted" : "Ένα αντικείμενο Passman δημιουργήθηκε, τροποποιήθηκε ή διαγράφηκε",
+ "A Passman item has expired" : "Έληξε ένα αντικείμενο Passman",
+ "A Passman item has been shared" : "Ένα αντικείμενο του Passman έχει διαμοιραστεί",
+ "A Passman item has been renamed" : "Μετονομάστηκε ένα αντικείμενο Passman",
+ "You created %1$s" : "Δημιουργήσατε το %1$s",
+ "You updated %1$s" : "Ενημερώσατε %1$s",
+ "%3$s has renamed %1$s to %2$s" : "%3$s μετονόμασε το %1$s σε %2$s",
+ "You renamed %1$s to %2$s" : "Μετονομάσατε το %1$s σε %2$s",
+ "You deleted %1$s" : "Διαγράψατε το %1$s",
+ "You permanently deleted %1$s" : "Διαγράψατε μόνιμα το %1$s",
+ "The password of %1$s has expired, renew it now." : "Εληξε το συνθηματικό του %1$s, να ανανεωθεί τώρα.",
+ "You received a share request for %1$s from %2$s" : "Λάβατε αίτημα διαμοιρασμού για %1$s από τον %2$s",
+ "%s has been shared with a link" : "%s διαμοιράστηκε με σύνδεσμο",
"Remind me later" : "Θύμισέ μου αργότερα",
+ "Ignore" : "Αγνόηση",
+ "%s shared \"%s\" with you. Click here to accept" : "%s διαμοιράστηκε \"%s\" μαζί σας. Κάντε κλίκ για αποδοχή",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Αδυναμία λήψης πληροφορίες έκδοσης",
"Passman Settings" : "Ρυθμίσεις Passman",
- "Github version:" : "Έκδοση Github:",
- "A newer version of passman is available" : "Είναι διαθέσιμη νεότερη έκδοση passman",
+ "A newer version of Passman is available" : "Μια νέα έκδοση του Passman είναι διαθέσιμη",
+ "Password sharing" : "Διαμοιρασμός συνθηματικών",
"Check for new versions" : "Έλεγχος για νέες εκδόσεις",
"Enable HTTPS check" : "Ενεργοποίηση ελέγχου HTTPS",
+ "Source account" : "Πηγαίος λογαριασμός",
+ "Request ID" : "Αίτημα ID",
+ "Requested by" : "Αιτήθηκε από",
+ "Reason" : "Λόγος",
"Connection to server lost" : "Η σύνδεση στον διακομιστή διακόπηκε",
+ "Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, φόρτωση ξανά σε 5 δευτερόλεπτα",
"Saving..." : "Γίνεται αποθήκευση...",
"seconds ago" : "δευτερόλεπτα πριν"
},
diff --git a/l10n/el.json b/l10n/el.json
index 425f5d85..561897e0 100644
--- a/l10n/el.json
+++ b/l10n/el.json
@@ -1,41 +1,43 @@
{ "translations": {
"Passwords" : "Συνθηματικά",
"Generating sharing keys ( %step / 2)" : "Δημιουργία κλειδιών διαμοιρασμού ( %step / 2)",
- "Incorrect vault password!" : "Εσφαλμένος κωδικός κρύπτη ",
+ "Incorrect vault password!" : "Εσφαλμένος κωδικός θαλάμου!",
"Passwords do not match" : "Δεν ταιριάζουν τα συθηματικά",
"General" : "Γενικά",
"Custom Fields" : "Προσαρμοσμένα πεδία",
- "Please fill in a label!" : "Παρακαλώ συμπληρώστε μια ετικέτα!",
- "Please fill in a value!" : "Παρακαλώ συμπληρώστε μια τιμή!",
"Error loading file" : "Σφάλμα φόρτωσης αρχείου",
- "An error happened during decryption" : "Παρουσιάστηκε σφάλμα κατά την αποκρυπτογράφηση",
"Credential created!" : "Τα διαπιστευτήρια δημιουργήθηκαν!",
"Credential deleted" : "Τα διαπιστευτήρια διαγράφηκαν",
"Credential updated" : "Τα διαπιστευτήρια ενημερώθηκαν",
+ "Credential recovered" : "Τα διαπιστευτήρια ανακτήθηκαν",
"Credential destroyed" : "Τα διαπιστευτήρια καταστράφηκαν",
"Invalid QR code" : "Με έγκυρος κώδικας QR",
+ "Starting export" : "Έναρξη εξαγωγής",
"Decrypting credentials" : "Αποκρυπτογράφηση διαπιστευτηρίων",
"Done" : "Ολοκληρώθηκε",
- "File read successfully!" : "Επιτυχημένη ανάγνωση αρχείου!",
+ "Added {{credential}}" : "Προστέθηκε {{credential}}",
+ "Skipping credential, missing label on line {{line}}" : "Παράλειψη διαπιστευτηρίων, έλλειψη ετικέτας στη γραμμή {{line}}",
+ "Parsed {{num}} credentials, starting to import" : "Αναλυτικά αναγνωριστικά {{num}}, άρχισαν να εισάγουν",
"Importing" : "Γίνεται εισαγωγή",
- "Select csv file" : "Επιλογή αρχείου csv",
+ "Start import" : "Έναρξη εισαγωγής",
"Revision deleted" : "Διαγράφηκε η αναθεώρηση",
- "Save in passman" : "Αποθήκευση στο passman",
"Settings saved" : "Οι ρυθμίσεις αποθηκεύτηκαν",
"General settings" : "Γενικές ρυθμίσεις",
"Password settings" : "Ρυθμίσεις συνθηματικού",
"Import credentials" : "Εισαγωγή διαπιστευτηρίων",
"Export credentials" : "Εξαγωγή διαπιστευτηρίων",
"Your old password is incorrect!" : "Εσφαλμένο παλαιό συνθηματικό!",
- "New passwords do not match!" : "Τα νέα συνθηματικά δεν ταιριάζουν!",
"Share link" : "Διαμοιρασμός συνδέσμου",
"Saved!" : "Αποθηκεύτηκαν!",
+ "Weak" : "Ασθενές",
+ "Copy to clipboard" : "Αντιγραφή στο πρόχειρο",
+ "Copied to clipboard!" : "Αντιγράφηκε στο πρόχειρο!",
"Generate password" : "Δημιουργία συνθηματικού",
"Copy password to clipboard" : "Αντιγραφή συνθηματικού στο πρόχειρο",
"Password copied to clipboard!" : "Το συνθηματικό αντιγράφτηκε στο πρόχειρο.",
"Username" : "Όνομα χρήστη",
"Repeat password" : "Επανάληψη συνθηματικού",
- "Add Tag" : "Προσθήκη ετικέτας",
+ "Add tag" : "Πρόσθεσε ετικέτα",
"Field label" : "Ετικέτα πεδίου",
"Field value" : "Τιμή πεδίου",
"Choose a file" : "Επιλογή αρχείου",
@@ -44,18 +46,18 @@
"Add" : "Προσθήκη",
"Value" : "Τιμή",
"Type" : "Τύπος",
+ "Actions" : "Ενέργειες",
"Empty" : "Άδειο",
"Filename" : "Όνομα αρχείου",
"Upload date" : "Ημερομηνία μεταφόρτωσης",
"Size" : "Μέγεθος",
"Secret" : "Μυστικό",
- "Expire date" : "Ημερομηνία λήξης",
- "No expire date set" : "Δεν ορίστηκε ημερομηνία λήψης",
"Disabled" : "Απενεργοποιημένο",
"Day(s)" : "Ημέρα(-ες)",
"Week(s)" : "Εβδομάδα(-ες)",
"Month(s)" : "Μήνας(-ες)",
"Year(s)" : "Χρόνος(-ια)",
+ "Password generation settings" : "Ρυθμίσεις δημιουργίας συνθηματικών",
"Password length" : "Μέγεθος συνθηματικού",
"Use lowercase letters" : "Χρησιμοποιήστε πεζούς χαρακτήρες",
"Use numbers" : "Χρήση αριθμών",
@@ -63,17 +65,22 @@
"Export type" : "Τύπος εξαγωγής",
"Export" : "Εξαγωγή",
"Change" : "Αλλαγή",
+ "Total progress" : "Συνολική πρόοδος",
"About Passman" : "Περί εφαρμογής Passman",
"Version" : "Έκδοση",
"Donate to support development" : "Κάντε μια δωρεά για να υποστηρίξετε την ανάπτυξη",
"Save your passwords with 1 click!" : "Αποθηκεύστε το συνθηματικό σας με 1 κλικ!",
- "Deleting {{password}}..." : "Γίνεται διαγραφή {{password}}...",
+ "Delete my precious passwords" : "Διαγραφή των πολύτιμων συνθηματικών μου",
"Import type" : "Τύπος εισαγωγής",
"Import" : "Εισαγωγή",
+ "Read progress" : "Πρόοδος ανάγνωσης",
+ "Upload progress" : "Πρόοδος μεταφόρτωσης",
"Private Key" : "Ιδιωτικό κλειδί",
"Public key" : "Δημόσιο κλειδί",
"Key size" : "Μέγεθος κλειδιού",
"Save keys" : "Αποθήκευση κλειδιών",
+ "Start scan" : "Εκκίνηση σάρωσης",
+ "Result" : "Αποτέλεσμα",
"Action" : "Ενέργεια",
"Uploading" : "Γίνεται μεταφόρτωση",
"User" : "Χρήστης",
@@ -83,13 +90,17 @@
"Pending" : "Εκκρεμεί",
"Enable link sharing" : "Ενεργοποίηση διαμοιρασμού συνδέσμου",
"Share until date" : "Διαμοιρασμός έως την ημερομηνία",
+ "Expire after views" : "Λήξη μετά από προβολές",
"Show files" : "Εμφάνιση αρχείων",
"Details" : "Λεπτομέρειες",
"Hide details" : "Απόκρυψη λεπτομερειών",
+ "100 / hour" : "100 / ώρα",
"10 / second" : "10 / δευτερόλεπτο",
"10k / second" : "10k / δευτερόλεπτο",
"10B / second" : "10B / δευτερόλεπτο",
+ "Pattern" : "Μοτίβο",
"Dictionary name" : "Όνομα λεξικου",
+ "Rank" : "Θέση",
"by" : "από",
"Label" : "Ετικέτα",
"Restore revision" : "Επαναφορά αναθεώρησης",
@@ -110,24 +121,54 @@
"Edit" : "Επεξεργασία",
"Delete" : "Διαγραφή",
"Share" : "Διαμοιρασμός",
+ "Recover" : "Ανάκτηση",
"Destroy" : "Καταστροφή",
"Permissions" : "Δικαιώματα",
"Received from" : "Ελήφθη από",
"Date" : "Ημερομηνία",
"Accept" : "Αποδοχή",
"Decline" : "Απόρριψη",
+ "You have {{session_time}} left before logout." : "Έχει απομείνει {{session_time}} πριν την έξοδο.",
"Last accessed" : "Τελευταία προσπέλαση",
"Never" : "Ποτέ",
+ "Cancel destruction request" : "Αίτημα ακύρωσης καταστροφής",
+ "Destruction request pending" : "Εκκρεμεί το αίτημα καταστροφής",
+ "Logged in to {{vault_name}}" : "Είσοδος στο {{vault_name}}",
+ "Deleted credentials" : "Διεγραμμένα διαπιστευτήρια",
"Logout" : "Έξοδος",
"Donate" : "Δωρεά",
- "Loading..." : "Γίνεται φόρτωση...",
+ "Someone has shared a credential with you." : "Κάποιος διαμοιράστηκε τα διαπιστευτήρια μαζί σας.",
+ "Click here to request it" : "Κάντε κλικ εδώ για να το αιτηθείτε",
+ "Error while saving field" : "Σφάλμα κατά την αποθήκευση πεδίου",
+ "A Passman item has been created, modified or deleted" : "Ένα αντικείμενο Passman δημιουργήθηκε, τροποποιήθηκε ή διαγράφηκε",
+ "A Passman item has expired" : "Έληξε ένα αντικείμενο Passman",
+ "A Passman item has been shared" : "Ένα αντικείμενο του Passman έχει διαμοιραστεί",
+ "A Passman item has been renamed" : "Μετονομάστηκε ένα αντικείμενο Passman",
+ "You created %1$s" : "Δημιουργήσατε το %1$s",
+ "You updated %1$s" : "Ενημερώσατε %1$s",
+ "%3$s has renamed %1$s to %2$s" : "%3$s μετονόμασε το %1$s σε %2$s",
+ "You renamed %1$s to %2$s" : "Μετονομάσατε το %1$s σε %2$s",
+ "You deleted %1$s" : "Διαγράψατε το %1$s",
+ "You permanently deleted %1$s" : "Διαγράψατε μόνιμα το %1$s",
+ "The password of %1$s has expired, renew it now." : "Εληξε το συνθηματικό του %1$s, να ανανεωθεί τώρα.",
+ "You received a share request for %1$s from %2$s" : "Λάβατε αίτημα διαμοιρασμού για %1$s από τον %2$s",
+ "%s has been shared with a link" : "%s διαμοιράστηκε με σύνδεσμο",
"Remind me later" : "Θύμισέ μου αργότερα",
+ "Ignore" : "Αγνόηση",
+ "%s shared \"%s\" with you. Click here to accept" : "%s διαμοιράστηκε \"%s\" μαζί σας. Κάντε κλίκ για αποδοχή",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Αδυναμία λήψης πληροφορίες έκδοσης",
"Passman Settings" : "Ρυθμίσεις Passman",
- "Github version:" : "Έκδοση Github:",
- "A newer version of passman is available" : "Είναι διαθέσιμη νεότερη έκδοση passman",
+ "A newer version of Passman is available" : "Μια νέα έκδοση του Passman είναι διαθέσιμη",
+ "Password sharing" : "Διαμοιρασμός συνθηματικών",
"Check for new versions" : "Έλεγχος για νέες εκδόσεις",
"Enable HTTPS check" : "Ενεργοποίηση ελέγχου HTTPS",
+ "Source account" : "Πηγαίος λογαριασμός",
+ "Request ID" : "Αίτημα ID",
+ "Requested by" : "Αιτήθηκε από",
+ "Reason" : "Λόγος",
"Connection to server lost" : "Η σύνδεση στον διακομιστή διακόπηκε",
+ "Problem loading page, reloading in 5 seconds" : "Πρόβλημα φόρτωσης σελίδας, φόρτωση ξανά σε 5 δευτερόλεπτα",
"Saving..." : "Γίνεται αποθήκευση...",
"seconds ago" : "δευτερόλεπτα πριν"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
diff --git a/l10n/en_GB.js b/l10n/en_GB.js
new file mode 100644
index 00000000..1f7378bd
--- /dev/null
+++ b/l10n/en_GB.js
@@ -0,0 +1,327 @@
+OC.L10N.register(
+ "passman",
+ {
+ "Passwords" : "Passwords",
+ "Generating sharing keys ( %step / 2)" : "Generating sharing keys ( %step / 2)",
+ "Incorrect vault password!" : "Incorrect vault password!",
+ "Passwords do not match" : "Passwords do not match",
+ "General" : "General",
+ "Custom Fields" : "Custom Fields",
+ "Please fill in a label." : "Please fill in a label.",
+ "Please fill in a value." : "Please fill in a value.",
+ "Error loading file" : "Error loading file",
+ "An error occurred during decryption" : "An error occurred during decryption",
+ "Credential created!" : "Credential created!",
+ "Credential deleted" : "Credential deleted",
+ "Credential updated" : "Credential updated",
+ "Credential recovered" : "Credential recovered",
+ "Credential destroyed" : "Credential destroyed",
+ "Error downloading file, you probably don't have sufficient permissions" : "Error downloading file. You probably don't have sufficient permissions",
+ "Invalid QR code" : "Invalid QR code",
+ "Starting export" : "Starting export",
+ "Decrypting credentials" : "Decrypting credentials",
+ "Done" : "Done",
+ "File read successfully." : "File read successfully.",
+ "Proceed with the following steps to import your file" : "Proceed with the following steps to import your file",
+ "Credential has no label, skipping" : "Credential has no label, skipping",
+ "Adding {{credential}}" : "Adding {{credential}}",
+ "Added {{credential}}" : "Added {{credential}}",
+ "Skipping credential, missing label on line {{line}}" : "Skipping credential, missing label on line {{line}}",
+ "Parsed {{num}} credentials, starting to import" : "Parsed {{num}} credentials, starting to import",
+ "Importing" : "Importing",
+ "Start import" : "Start import",
+ "Select CSV file" : "Select CSV file",
+ "Parsed {{rows}} lines from CSV file" : "Parsed {{rows}} lines from CSV file",
+ "Skip first row" : "Skip first row",
+ "You need to assign the label field before you can start the import." : "You need to assign the label field before you can start the import.",
+ "The first 5 lines of the CSV are shown." : "The first 5 lines of the CSV are shown.",
+ "Assign the proper fields to each column." : "Assign the proper fields to each column.",
+ "Example of imported credential" : "Example of imported credential",
+ "Missing an importer? Try it with the generic CSV importer." : "Missing an importer? Try it with the generic CSV importer.",
+ "Go back to importers." : "Go back to importers.",
+ "Revision deleted" : "Revision deleted",
+ "Revision restored" : "Revision restored",
+ "Save in Passman" : "Save in Passman",
+ "Settings saved" : "Settings saved",
+ "General settings" : "General settings",
+ "Password audit" : "Password audit",
+ "Password settings" : "Password settings",
+ "Import credentials" : "Import credentials",
+ "Export credentials" : "Export credentials",
+ "Sharing" : "Sharing",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Are you sure you want to leave? This will destroy all your credentials",
+ "Your old password is incorrect!" : "Your old password is incorrect!",
+ "New password does not match!" : "New password does not match!",
+ "Please log in with your new vault password" : "Please log in with your new vault password",
+ "Share with users and groups" : "Share with users and groups",
+ "Share link" : "Share link",
+ "Are you sure you want to leave? This will corrupt this credential" : "Are you sure you want to leave? This will corrupt this credential",
+ "Credential unshared" : "Credential unshared",
+ "Credential shared" : "Credential shared",
+ "Saved!" : "Saved!",
+ "Poor" : "Poor",
+ "Weak" : "Weak",
+ "Good" : "Good",
+ "Strong" : "Strong",
+ "Toggle visibility" : "Toggle visibility",
+ "Copy to clipboard" : "Copy to clipboard",
+ "Copied to clipboard!" : "Copied to clipboard!",
+ "Generate password" : "Generate password",
+ "Copy password to clipboard" : "Copy password to clipboard",
+ "Password copied to clipboard!" : "Password copied to clipboard!",
+ "Complete" : "Complete",
+ "Username" : "Username",
+ "Repeat password" : "Repeat password",
+ "Add tag" : "Add tag",
+ "Field label" : "Field label",
+ "Field value" : "Field value",
+ "Choose a file" : "Choose a file",
+ "Text" : "Text",
+ "File" : "File",
+ "Add" : "Add",
+ "Value" : "Value",
+ "Type" : "Type",
+ "Actions" : "Actions",
+ "Empty" : "Empty",
+ "Filename" : "Filename",
+ "Upload date" : "Upload date",
+ "Size" : "Size",
+ "Upload or enter your OTP secret" : "Upload or enter your OTP secret",
+ "Current OTP settings" : "Current OTP settings",
+ "Issuer" : "Issuer",
+ "Secret" : "Secret",
+ "Expiration date" : "Expiration date",
+ "No expiration date set" : "No expiration date set",
+ "Renew interval" : "Renew interval",
+ "Disabled" : "Disabled",
+ "Day(s)" : "Day(s)",
+ "Week(s)" : "Week(s)",
+ "Month(s)" : "Month(s)",
+ "Year(s)" : "Year(s)",
+ "Password generation settings" : "Password generation settings",
+ "Password length" : "Password length",
+ "Minimum amount of digits" : "Minimum amount of digits",
+ "Use uppercase letters" : "Use uppercase letters",
+ "Use lowercase letters" : "Use lowercase letters",
+ "Use numbers" : "Use numbers",
+ "Use special characters" : "Use special characters",
+ "Avoid ambiguous characters" : "Avoid ambiguous characters",
+ "Require every character type" : "Require every character type",
+ "Export type" : "Export type",
+ "Export" : "Export",
+ "Enter vault password to confirm export." : "Enter vault password to confirm export.",
+ "Rename vault" : "Rename vault",
+ "New vault name" : "New vault name",
+ "Change" : "Change",
+ "Change vault key" : "Change vault key",
+ "Old vault password" : "Old vault password",
+ "New vault password" : "New vault password",
+ "Repeat new vault password" : "Repeat new vault password",
+ "Please wait your vault is being updated, do not leave this page." : "Please wait your vault is being updated, do not leave this page.",
+ "Processing" : "Processing",
+ "Total progress" : "Total progress",
+ "About Passman" : "About Passman",
+ "Version" : "Version",
+ "Donate to support development" : "Donate to support development",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "Save your passwords with 1 click!",
+ "Drag below button to your bookmark toolbar." : "Drag below button to your bookmark toolbar.",
+ "Delete vault" : "Delete vault",
+ "Vault password" : "Vault password",
+ "This process is irreversible" : "This process is irreversible",
+ "Delete my precious passwords" : "Delete my precious passwords",
+ "Deleting {{password}}…" : "Deleting {{password}}…",
+ "Yes, delete my precious passwords" : "Yes, delete my precious passwords",
+ "Import type" : "Import type",
+ "Import" : "Import",
+ "Read progress" : "Read progress",
+ "Upload progress" : "Upload progress",
+ "Private Key" : "Private Key",
+ "Public key" : "Public key",
+ "Key size" : "Key size",
+ "Save keys" : "Save keys",
+ "Generate sharing keys" : "Generate sharing keys",
+ "Generating sharing keys" : "Generating sharing keys",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "The password tool will scan your password, calculate the average crack time and list those which are below the threshold",
+ "Minimum password stength" : "Minimum password stength",
+ "Start scan" : "Start scan",
+ "Result" : "Result",
+ "A total of {{scan_result}} weak credentials were found." : "A total of {{scan_result}} weak credentials were found.",
+ "Score" : "Score",
+ "Action" : "Action",
+ "Search users or groups…" : "Search users or groups…",
+ "Missing users? Only users that have vaults are shown." : "Missing users? Only users that have vaults are shown.",
+ "Cyphering" : "Cyphering",
+ "Uploading" : "Uploading",
+ "User" : "User",
+ "Crypto time" : "Crypto time",
+ "Total time spent cyphering" : "Total time spent cyphering",
+ "Read" : "Read",
+ "Write" : "Write",
+ "Files" : "Files",
+ "Revisions" : "Revisions",
+ "Pending" : "Pending",
+ "Enable link sharing" : "Enable link sharing",
+ "Share until date" : "Share until date",
+ "Expire after views" : "Expire after views",
+ "Click Share first" : "Click Share first",
+ "Show files" : "Show files",
+ "Details" : "Details",
+ "Hide details" : "Hide details",
+ "Password score" : "Password score",
+ "Cracking times" : "Cracking times",
+ "100 / hour" : "100 / hour",
+ "Throttled online attack" : "Throttled online attack",
+ "10 / second" : "10 / second",
+ "Unthrottled online attack" : "Unthrottled online attack",
+ "10k / second" : "10k / second",
+ "Offline attack, slow hash, many cores" : "Offline attack, slow hash, many cores",
+ "10B / second" : "10B / second",
+ "Offline attack, fast hash, many cores" : "Offline attack, fast hash, many cores",
+ "Match sequence" : "Match sequence",
+ "See match sequence" : "See match sequence",
+ "Pattern" : "Pattern",
+ "Matched word" : "Matched word",
+ "Dictionary name" : "Dictionary name",
+ "Rank" : "Rank",
+ "Reversed" : "Reversed",
+ "Guesses" : "Guesses",
+ "Base guesses" : "Base guesses",
+ "Uppercase variations" : "Uppercase variations",
+ "l33t-variations" : "l33t-variations",
+ "Showing revisions of" : "Showing revisions of",
+ "Revision of" : "Revision of",
+ "by" : "by",
+ "No revisions found." : "No revisions found.",
+ "Label" : "Label",
+ "Restore revision" : "Restore revision",
+ "Delete revision" : "Delete revision",
+ "Edit credential" : "Edit credential",
+ "Create new credential" : "Create new credential",
+ "Save" : "Save",
+ "Cancel" : "Cancel",
+ "Settings" : "Settings",
+ "Share credential {{credential}}" : "Share credential {{credential}}",
+ "Unshare" : "Unshare",
+ "Showing deleted since" : "Showing deleted since",
+ "Beginning" : "Beginning",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Showing {{number_filtered}} of {{credential_number}} credentials",
+ "Search for credential…" : "Search for credential…",
+ "Account" : "Account",
+ "Password" : "Password",
+ "OTP" : "OTP",
+ "E-mail" : "E-mail",
+ "URL" : "URL",
+ "Notes" : "Notes",
+ "Expiry time" : "Expiry time",
+ "Changed" : "Changed",
+ "Created" : "Created",
+ "Edit" : "Edit",
+ "Delete" : "Delete",
+ "Share" : "Share",
+ "Recover" : "Recover",
+ "Destroy" : "Destroy",
+ "Use regex" : "Use regex",
+ "You have incoming share requests." : "You have incoming share requests.",
+ "If you want to put the credential in another vault," : "If you want to put the credential in another vault,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "log out of this vault and log in to the vault you want the shared credential in.",
+ "Permissions" : "Permissions",
+ "Received from" : "Received from",
+ "Date" : "Date",
+ "Accept" : "Accept",
+ "Decline" : "Decline",
+ "You have {{session_time}} left before logout." : "You have {{session_time}} left before logout.",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Your vault has been locked for {{time}} because of {{tries}} failed attempts!",
+ "Last accessed" : "Last accessed",
+ "Never" : "Never",
+ "No vaults found, why not create one?" : "No vaults found, why not create one?",
+ "Password strength must be at least: {{strength}}" : "Password strength must be at least: {{strength}}",
+ "Please give your new vault a name." : "Please give your new vault a name.",
+ "Repeat vault password" : "Repeat vault password",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Your sharing keys will have a strength of 1024 bit, which you can change in Settings later.",
+ "Create vault" : "Create vault",
+ "Go back to vaults" : "Go back to vaults",
+ "Please input the password for" : "Please input the password for",
+ "Set this vault as the default." : "Set this vault as the default.",
+ "Log into this vault automatically." : "Log into this vault automatically.",
+ "Log out of this vault automatically after: " : "Log out of this vault automatically after: ",
+ "Decrypt vault" : "Decrypt vault",
+ "Seems you lost the vault password and you're unable to log in." : "Seems you lost the vault password and you're unable to log in.",
+ "If you want this vault to be removed you can request that here." : "If you want this vault to be removed you can request that here.",
+ "An admin then accepts or declines the request" : "An admin then accepts or declines the request",
+ "After an admin destroys this vault, all credentials in it will be lost" : "After an admin destroys this vault, all credentials in it will be lost",
+ "Reason for requesting deletion (optional):" : "Reason for requesting deletion (optional):",
+ "Request vault destruction" : "Request vault destruction",
+ "Yes, request an admin to destroy this vault" : "Yes, request an admin to destroy this vault",
+ "Cancel destruction request" : "Cancel destruction request",
+ "Vault destruction requested" : "Vault destruction requested",
+ "Request removed" : "Request removed",
+ "Destruction request pending" : "Destruction request pending",
+ "Warning! Adding credentials over HTTP is insecure!" : "Warning! Adding credentials over HTTP is insecure!",
+ "Logged in to {{vault_name}}" : "Logged in to {{vault_name}}",
+ "Change vault" : "Change vault",
+ "Deleted credentials" : "Deleted credentials",
+ "Logout" : "Logout",
+ "Donate" : "Donate",
+ "Someone has shared a credential with you." : "Someone has shared a credential with you.",
+ "Click here to request it" : "Click here to request it",
+ "Loading…" : "Loading…",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh… credential not found. Maybe it expired",
+ "Error while saving field" : "Error while saving field",
+ "A Passman item has been created, modified or deleted" : "A Passman item has been created, modified or deleted",
+ "A Passman item has expired" : "A Passman item has expired",
+ "A Passman item has been shared" : "A Passman item has been shared",
+ "A Passman item has been renamed" : "A Passman item has been renamed",
+ "%1$s has been created by %2$s" : "%1$s has been created by %2$s",
+ "You created %1$s" : "You created %1$s",
+ "%1$s has been updated by %2$s" : "%1$s has been updated by %2$s",
+ "You updated %1$s" : "You updated %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s has revised %1$s to the revision of %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "You reverted %1$s back to the revision of %3$s",
+ "%3$s has renamed %1$s to %2$s" : "%3$s has renamed %1$s to %2$s",
+ "You renamed %1$s to %2$s" : "You renamed %1$s to %2$s",
+ "%1$s has been deleted by %2$s" : "%1$s has been deleted by %2$s",
+ "You deleted %1$s" : "You deleted %1$s",
+ "%1$s has been recovered by %2$s" : "%1$s has been recovered by %2$s",
+ "You recovered %1$s" : "You recovered %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%1$s has been permanently deleted by %2$s",
+ "You permanently deleted %1$s" : "You permanently deleted %1$s",
+ "The password of %1$s has expired, renew it now." : "The password of %1$s has expired, renew it now.",
+ "%1$s has been shared with %2$s" : "%1$s has been shared with %2$s",
+ "You received a share request for %1$s from %2$s" : "You received a share request for %1$s from %2$s",
+ "%s has been shared with a link" : "%s has been shared with a link",
+ "Your credential \"%s\" expired, click here to update the credential." : "Your credential \"%s\" expired, click here to update the credential.",
+ "Remind me later" : "Remind me later",
+ "Ignore" : "Ignore",
+ "%s shared \"%s\" with you. Click here to accept" : "%s shared \"%s\" with you. Click here to accept",
+ "%s has declined your share request for \"%s\"." : "%s has declined your share request for \"%s\".",
+ "%s has accepted your share request for \"%s\"." : "%s has accepted your share request for \"%s\".",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Unable to get version info",
+ "Passman Settings" : "Passman Settings",
+ "GitHub version:" : "GitHub version:",
+ "A newer version of Passman is available" : "A newer version of Passman is available",
+ "Password sharing" : "Password sharing",
+ "Credential mover" : "Credential mover",
+ "Vault destruction requests" : "Vault destruction requests",
+ "Check for new versions" : "Check for new versions",
+ "Enable HTTPS check" : "Enable HTTPS check",
+ "Disable context menu" : "Disable context menu",
+ "Disable JavaScript debugger" : "Disable JavaScript debugger",
+ "Allow users on this server to share passwords with a link" : "Allow users on this server to share passwords with a link",
+ "Allow users on this server to share passwords with other users" : "Allow users on this server to share passwords with other users",
+ "Move credentials from one account to another" : "Move credentials from one account to another",
+ "Source account" : "Source account",
+ "Destination account" : "Destination account",
+ "Credentials moved!" : "Credentials moved!",
+ "Requests to destroy vault" : "Requests to destroy vault",
+ "Request ID" : "Request ID",
+ "Requested by" : "Requested by",
+ "Reason" : "Reason",
+ "Connection to server lost" : "Connection to server lost",
+ "Problem loading page, reloading in 5 seconds" : "Problem loading page, reloading in 5 seconds",
+ "Saving..." : "Saving...",
+ "Dismiss" : "Dismiss",
+ "seconds ago" : "seconds ago"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/l10n/en_GB.json b/l10n/en_GB.json
new file mode 100644
index 00000000..923f2a37
--- /dev/null
+++ b/l10n/en_GB.json
@@ -0,0 +1,325 @@
+{ "translations": {
+ "Passwords" : "Passwords",
+ "Generating sharing keys ( %step / 2)" : "Generating sharing keys ( %step / 2)",
+ "Incorrect vault password!" : "Incorrect vault password!",
+ "Passwords do not match" : "Passwords do not match",
+ "General" : "General",
+ "Custom Fields" : "Custom Fields",
+ "Please fill in a label." : "Please fill in a label.",
+ "Please fill in a value." : "Please fill in a value.",
+ "Error loading file" : "Error loading file",
+ "An error occurred during decryption" : "An error occurred during decryption",
+ "Credential created!" : "Credential created!",
+ "Credential deleted" : "Credential deleted",
+ "Credential updated" : "Credential updated",
+ "Credential recovered" : "Credential recovered",
+ "Credential destroyed" : "Credential destroyed",
+ "Error downloading file, you probably don't have sufficient permissions" : "Error downloading file. You probably don't have sufficient permissions",
+ "Invalid QR code" : "Invalid QR code",
+ "Starting export" : "Starting export",
+ "Decrypting credentials" : "Decrypting credentials",
+ "Done" : "Done",
+ "File read successfully." : "File read successfully.",
+ "Proceed with the following steps to import your file" : "Proceed with the following steps to import your file",
+ "Credential has no label, skipping" : "Credential has no label, skipping",
+ "Adding {{credential}}" : "Adding {{credential}}",
+ "Added {{credential}}" : "Added {{credential}}",
+ "Skipping credential, missing label on line {{line}}" : "Skipping credential, missing label on line {{line}}",
+ "Parsed {{num}} credentials, starting to import" : "Parsed {{num}} credentials, starting to import",
+ "Importing" : "Importing",
+ "Start import" : "Start import",
+ "Select CSV file" : "Select CSV file",
+ "Parsed {{rows}} lines from CSV file" : "Parsed {{rows}} lines from CSV file",
+ "Skip first row" : "Skip first row",
+ "You need to assign the label field before you can start the import." : "You need to assign the label field before you can start the import.",
+ "The first 5 lines of the CSV are shown." : "The first 5 lines of the CSV are shown.",
+ "Assign the proper fields to each column." : "Assign the proper fields to each column.",
+ "Example of imported credential" : "Example of imported credential",
+ "Missing an importer? Try it with the generic CSV importer." : "Missing an importer? Try it with the generic CSV importer.",
+ "Go back to importers." : "Go back to importers.",
+ "Revision deleted" : "Revision deleted",
+ "Revision restored" : "Revision restored",
+ "Save in Passman" : "Save in Passman",
+ "Settings saved" : "Settings saved",
+ "General settings" : "General settings",
+ "Password audit" : "Password audit",
+ "Password settings" : "Password settings",
+ "Import credentials" : "Import credentials",
+ "Export credentials" : "Export credentials",
+ "Sharing" : "Sharing",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Are you sure you want to leave? This will destroy all your credentials",
+ "Your old password is incorrect!" : "Your old password is incorrect!",
+ "New password does not match!" : "New password does not match!",
+ "Please log in with your new vault password" : "Please log in with your new vault password",
+ "Share with users and groups" : "Share with users and groups",
+ "Share link" : "Share link",
+ "Are you sure you want to leave? This will corrupt this credential" : "Are you sure you want to leave? This will corrupt this credential",
+ "Credential unshared" : "Credential unshared",
+ "Credential shared" : "Credential shared",
+ "Saved!" : "Saved!",
+ "Poor" : "Poor",
+ "Weak" : "Weak",
+ "Good" : "Good",
+ "Strong" : "Strong",
+ "Toggle visibility" : "Toggle visibility",
+ "Copy to clipboard" : "Copy to clipboard",
+ "Copied to clipboard!" : "Copied to clipboard!",
+ "Generate password" : "Generate password",
+ "Copy password to clipboard" : "Copy password to clipboard",
+ "Password copied to clipboard!" : "Password copied to clipboard!",
+ "Complete" : "Complete",
+ "Username" : "Username",
+ "Repeat password" : "Repeat password",
+ "Add tag" : "Add tag",
+ "Field label" : "Field label",
+ "Field value" : "Field value",
+ "Choose a file" : "Choose a file",
+ "Text" : "Text",
+ "File" : "File",
+ "Add" : "Add",
+ "Value" : "Value",
+ "Type" : "Type",
+ "Actions" : "Actions",
+ "Empty" : "Empty",
+ "Filename" : "Filename",
+ "Upload date" : "Upload date",
+ "Size" : "Size",
+ "Upload or enter your OTP secret" : "Upload or enter your OTP secret",
+ "Current OTP settings" : "Current OTP settings",
+ "Issuer" : "Issuer",
+ "Secret" : "Secret",
+ "Expiration date" : "Expiration date",
+ "No expiration date set" : "No expiration date set",
+ "Renew interval" : "Renew interval",
+ "Disabled" : "Disabled",
+ "Day(s)" : "Day(s)",
+ "Week(s)" : "Week(s)",
+ "Month(s)" : "Month(s)",
+ "Year(s)" : "Year(s)",
+ "Password generation settings" : "Password generation settings",
+ "Password length" : "Password length",
+ "Minimum amount of digits" : "Minimum amount of digits",
+ "Use uppercase letters" : "Use uppercase letters",
+ "Use lowercase letters" : "Use lowercase letters",
+ "Use numbers" : "Use numbers",
+ "Use special characters" : "Use special characters",
+ "Avoid ambiguous characters" : "Avoid ambiguous characters",
+ "Require every character type" : "Require every character type",
+ "Export type" : "Export type",
+ "Export" : "Export",
+ "Enter vault password to confirm export." : "Enter vault password to confirm export.",
+ "Rename vault" : "Rename vault",
+ "New vault name" : "New vault name",
+ "Change" : "Change",
+ "Change vault key" : "Change vault key",
+ "Old vault password" : "Old vault password",
+ "New vault password" : "New vault password",
+ "Repeat new vault password" : "Repeat new vault password",
+ "Please wait your vault is being updated, do not leave this page." : "Please wait your vault is being updated, do not leave this page.",
+ "Processing" : "Processing",
+ "Total progress" : "Total progress",
+ "About Passman" : "About Passman",
+ "Version" : "Version",
+ "Donate to support development" : "Donate to support development",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "Save your passwords with 1 click!",
+ "Drag below button to your bookmark toolbar." : "Drag below button to your bookmark toolbar.",
+ "Delete vault" : "Delete vault",
+ "Vault password" : "Vault password",
+ "This process is irreversible" : "This process is irreversible",
+ "Delete my precious passwords" : "Delete my precious passwords",
+ "Deleting {{password}}…" : "Deleting {{password}}…",
+ "Yes, delete my precious passwords" : "Yes, delete my precious passwords",
+ "Import type" : "Import type",
+ "Import" : "Import",
+ "Read progress" : "Read progress",
+ "Upload progress" : "Upload progress",
+ "Private Key" : "Private Key",
+ "Public key" : "Public key",
+ "Key size" : "Key size",
+ "Save keys" : "Save keys",
+ "Generate sharing keys" : "Generate sharing keys",
+ "Generating sharing keys" : "Generating sharing keys",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "The password tool will scan your password, calculate the average crack time and list those which are below the threshold",
+ "Minimum password stength" : "Minimum password stength",
+ "Start scan" : "Start scan",
+ "Result" : "Result",
+ "A total of {{scan_result}} weak credentials were found." : "A total of {{scan_result}} weak credentials were found.",
+ "Score" : "Score",
+ "Action" : "Action",
+ "Search users or groups…" : "Search users or groups…",
+ "Missing users? Only users that have vaults are shown." : "Missing users? Only users that have vaults are shown.",
+ "Cyphering" : "Cyphering",
+ "Uploading" : "Uploading",
+ "User" : "User",
+ "Crypto time" : "Crypto time",
+ "Total time spent cyphering" : "Total time spent cyphering",
+ "Read" : "Read",
+ "Write" : "Write",
+ "Files" : "Files",
+ "Revisions" : "Revisions",
+ "Pending" : "Pending",
+ "Enable link sharing" : "Enable link sharing",
+ "Share until date" : "Share until date",
+ "Expire after views" : "Expire after views",
+ "Click Share first" : "Click Share first",
+ "Show files" : "Show files",
+ "Details" : "Details",
+ "Hide details" : "Hide details",
+ "Password score" : "Password score",
+ "Cracking times" : "Cracking times",
+ "100 / hour" : "100 / hour",
+ "Throttled online attack" : "Throttled online attack",
+ "10 / second" : "10 / second",
+ "Unthrottled online attack" : "Unthrottled online attack",
+ "10k / second" : "10k / second",
+ "Offline attack, slow hash, many cores" : "Offline attack, slow hash, many cores",
+ "10B / second" : "10B / second",
+ "Offline attack, fast hash, many cores" : "Offline attack, fast hash, many cores",
+ "Match sequence" : "Match sequence",
+ "See match sequence" : "See match sequence",
+ "Pattern" : "Pattern",
+ "Matched word" : "Matched word",
+ "Dictionary name" : "Dictionary name",
+ "Rank" : "Rank",
+ "Reversed" : "Reversed",
+ "Guesses" : "Guesses",
+ "Base guesses" : "Base guesses",
+ "Uppercase variations" : "Uppercase variations",
+ "l33t-variations" : "l33t-variations",
+ "Showing revisions of" : "Showing revisions of",
+ "Revision of" : "Revision of",
+ "by" : "by",
+ "No revisions found." : "No revisions found.",
+ "Label" : "Label",
+ "Restore revision" : "Restore revision",
+ "Delete revision" : "Delete revision",
+ "Edit credential" : "Edit credential",
+ "Create new credential" : "Create new credential",
+ "Save" : "Save",
+ "Cancel" : "Cancel",
+ "Settings" : "Settings",
+ "Share credential {{credential}}" : "Share credential {{credential}}",
+ "Unshare" : "Unshare",
+ "Showing deleted since" : "Showing deleted since",
+ "Beginning" : "Beginning",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Showing {{number_filtered}} of {{credential_number}} credentials",
+ "Search for credential…" : "Search for credential…",
+ "Account" : "Account",
+ "Password" : "Password",
+ "OTP" : "OTP",
+ "E-mail" : "E-mail",
+ "URL" : "URL",
+ "Notes" : "Notes",
+ "Expiry time" : "Expiry time",
+ "Changed" : "Changed",
+ "Created" : "Created",
+ "Edit" : "Edit",
+ "Delete" : "Delete",
+ "Share" : "Share",
+ "Recover" : "Recover",
+ "Destroy" : "Destroy",
+ "Use regex" : "Use regex",
+ "You have incoming share requests." : "You have incoming share requests.",
+ "If you want to put the credential in another vault," : "If you want to put the credential in another vault,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "log out of this vault and log in to the vault you want the shared credential in.",
+ "Permissions" : "Permissions",
+ "Received from" : "Received from",
+ "Date" : "Date",
+ "Accept" : "Accept",
+ "Decline" : "Decline",
+ "You have {{session_time}} left before logout." : "You have {{session_time}} left before logout.",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Your vault has been locked for {{time}} because of {{tries}} failed attempts!",
+ "Last accessed" : "Last accessed",
+ "Never" : "Never",
+ "No vaults found, why not create one?" : "No vaults found, why not create one?",
+ "Password strength must be at least: {{strength}}" : "Password strength must be at least: {{strength}}",
+ "Please give your new vault a name." : "Please give your new vault a name.",
+ "Repeat vault password" : "Repeat vault password",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Your sharing keys will have a strength of 1024 bit, which you can change in Settings later.",
+ "Create vault" : "Create vault",
+ "Go back to vaults" : "Go back to vaults",
+ "Please input the password for" : "Please input the password for",
+ "Set this vault as the default." : "Set this vault as the default.",
+ "Log into this vault automatically." : "Log into this vault automatically.",
+ "Log out of this vault automatically after: " : "Log out of this vault automatically after: ",
+ "Decrypt vault" : "Decrypt vault",
+ "Seems you lost the vault password and you're unable to log in." : "Seems you lost the vault password and you're unable to log in.",
+ "If you want this vault to be removed you can request that here." : "If you want this vault to be removed you can request that here.",
+ "An admin then accepts or declines the request" : "An admin then accepts or declines the request",
+ "After an admin destroys this vault, all credentials in it will be lost" : "After an admin destroys this vault, all credentials in it will be lost",
+ "Reason for requesting deletion (optional):" : "Reason for requesting deletion (optional):",
+ "Request vault destruction" : "Request vault destruction",
+ "Yes, request an admin to destroy this vault" : "Yes, request an admin to destroy this vault",
+ "Cancel destruction request" : "Cancel destruction request",
+ "Vault destruction requested" : "Vault destruction requested",
+ "Request removed" : "Request removed",
+ "Destruction request pending" : "Destruction request pending",
+ "Warning! Adding credentials over HTTP is insecure!" : "Warning! Adding credentials over HTTP is insecure!",
+ "Logged in to {{vault_name}}" : "Logged in to {{vault_name}}",
+ "Change vault" : "Change vault",
+ "Deleted credentials" : "Deleted credentials",
+ "Logout" : "Logout",
+ "Donate" : "Donate",
+ "Someone has shared a credential with you." : "Someone has shared a credential with you.",
+ "Click here to request it" : "Click here to request it",
+ "Loading…" : "Loading…",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh… credential not found. Maybe it expired",
+ "Error while saving field" : "Error while saving field",
+ "A Passman item has been created, modified or deleted" : "A Passman item has been created, modified or deleted",
+ "A Passman item has expired" : "A Passman item has expired",
+ "A Passman item has been shared" : "A Passman item has been shared",
+ "A Passman item has been renamed" : "A Passman item has been renamed",
+ "%1$s has been created by %2$s" : "%1$s has been created by %2$s",
+ "You created %1$s" : "You created %1$s",
+ "%1$s has been updated by %2$s" : "%1$s has been updated by %2$s",
+ "You updated %1$s" : "You updated %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s has revised %1$s to the revision of %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "You reverted %1$s back to the revision of %3$s",
+ "%3$s has renamed %1$s to %2$s" : "%3$s has renamed %1$s to %2$s",
+ "You renamed %1$s to %2$s" : "You renamed %1$s to %2$s",
+ "%1$s has been deleted by %2$s" : "%1$s has been deleted by %2$s",
+ "You deleted %1$s" : "You deleted %1$s",
+ "%1$s has been recovered by %2$s" : "%1$s has been recovered by %2$s",
+ "You recovered %1$s" : "You recovered %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%1$s has been permanently deleted by %2$s",
+ "You permanently deleted %1$s" : "You permanently deleted %1$s",
+ "The password of %1$s has expired, renew it now." : "The password of %1$s has expired, renew it now.",
+ "%1$s has been shared with %2$s" : "%1$s has been shared with %2$s",
+ "You received a share request for %1$s from %2$s" : "You received a share request for %1$s from %2$s",
+ "%s has been shared with a link" : "%s has been shared with a link",
+ "Your credential \"%s\" expired, click here to update the credential." : "Your credential \"%s\" expired, click here to update the credential.",
+ "Remind me later" : "Remind me later",
+ "Ignore" : "Ignore",
+ "%s shared \"%s\" with you. Click here to accept" : "%s shared \"%s\" with you. Click here to accept",
+ "%s has declined your share request for \"%s\"." : "%s has declined your share request for \"%s\".",
+ "%s has accepted your share request for \"%s\"." : "%s has accepted your share request for \"%s\".",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Unable to get version info",
+ "Passman Settings" : "Passman Settings",
+ "GitHub version:" : "GitHub version:",
+ "A newer version of Passman is available" : "A newer version of Passman is available",
+ "Password sharing" : "Password sharing",
+ "Credential mover" : "Credential mover",
+ "Vault destruction requests" : "Vault destruction requests",
+ "Check for new versions" : "Check for new versions",
+ "Enable HTTPS check" : "Enable HTTPS check",
+ "Disable context menu" : "Disable context menu",
+ "Disable JavaScript debugger" : "Disable JavaScript debugger",
+ "Allow users on this server to share passwords with a link" : "Allow users on this server to share passwords with a link",
+ "Allow users on this server to share passwords with other users" : "Allow users on this server to share passwords with other users",
+ "Move credentials from one account to another" : "Move credentials from one account to another",
+ "Source account" : "Source account",
+ "Destination account" : "Destination account",
+ "Credentials moved!" : "Credentials moved!",
+ "Requests to destroy vault" : "Requests to destroy vault",
+ "Request ID" : "Request ID",
+ "Requested by" : "Requested by",
+ "Reason" : "Reason",
+ "Connection to server lost" : "Connection to server lost",
+ "Problem loading page, reloading in 5 seconds" : "Problem loading page, reloading in 5 seconds",
+ "Saving..." : "Saving...",
+ "Dismiss" : "Dismiss",
+ "seconds ago" : "seconds ago"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/l10n/es.js b/l10n/es.js
index 447073c7..76b9f2db 100644
--- a/l10n/es.js
+++ b/l10n/es.js
@@ -7,22 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Contraseñas no coinciden",
"General" : "General",
"Custom Fields" : "Campos personalizados",
- "Please fill in a label!" : "¡Por favor llene en una etiqueta!",
- "Please fill in a value!" : "¡Por favor llene un valor!",
+ "Please fill in a label." : "Por favor, rellena una etiqueta.",
+ "Please fill in a value." : "Por favor, rellena un valor.",
"Error loading file" : "Error al cargar el archivo",
- "An error happened during decryption" : "Un error sucedió durante el descifrado",
+ "An error occurred during decryption" : "Ha ocurrido un error durante el descifrado.",
"Credential created!" : "¡Credencial creada!",
"Credential deleted" : "Credencial eliminada",
"Credential updated" : "Credencial actualziada",
"Credential recovered" : "Credencial recuperada",
"Credential destroyed" : "Credencial eliminada",
- "Error downloading file, you probably don't have enough permissions" : "Error al descargar archivo, probablemente no tiene suficientes permisos",
+ "Error downloading file, you probably don't have sufficient permissions" : "Error al descargar el archivo, probablemente no tienes suficientes permisos.",
"Invalid QR code" : "Código QR inválido",
"Starting export" : "Iniciar exportación",
"Decrypting credentials" : "Descifrando credenciales",
"Done" : "Hecho",
- "File read successfully!" : "¡Lectura de archivo exitosa!",
- "Follow the following steps to import your file" : "Sigue los siguientes pasos para importar tu archivo",
+ "File read successfully." : "Archivo leído con éxito.",
+ "Proceed with the following steps to import your file" : "Continúa con los siguientes pasos para importar tu archivo",
"Credential has no label, skipping" : "Credencial sin etiquete, saltando",
"Adding {{credential}}" : "Agregando {{credential}}",
"Added {{credential}}" : "Se ha agregado la {{credential}}",
@@ -30,49 +30,49 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Analizadas {{num}} credenciales, comenzando a importar",
"Importing" : "Importando",
"Start import" : "Iniciar importación",
- "Select csv file" : "Seleccione el archivo csv",
- "Parsed {{rows}} lines from csv file" : "{{rows}} lineas analizadas del archivo csv",
+ "Select CSV file" : "Selecciona el archivo CSV",
+ "Parsed {{rows}} lines from CSV file" : "Se han analizado {{rows}} líneas del archivo CSV",
"Skip first row" : "Saltar la primer fila",
"You need to assign the label field before you can start the import." : "Necesita asignar el campo de etiqueta antes de comenzar la importación.",
- "First 5 lines of the csv are shown." : "Primeras 5 lineas del csv están mostradas.",
+ "The first 5 lines of the CSV are shown." : "Se muestran las 5 primeras líneas del CSV.",
"Assign the proper fields to each column." : "Asignar los campos apropiados para cada columna.",
- "Example imported credential" : "Credencial importada de ejemplo",
- "Missing an importer? Try it with the generic csv importer." : "¿Sin la herramienta para importar? Pruebe con el importador genérico de csv",
+ "Example of imported credential" : "Ejemplo de credencial importada",
+ "Missing an importer? Try it with the generic CSV importer." : "¿Echas de menos un importador? Intenta el importador genérico CSV.",
"Go back to importers." : "Regresar a importadores",
"Revision deleted" : "Revisión eliminada",
"Revision restored" : "Revisión restaurada",
- "Save in passman" : "Guardar en passman",
+ "Save in Passman" : "Guardar en Passman",
"Settings saved" : "Ajustes guardados",
"General settings" : "Ajustes generales",
- "Password Audit" : "Auditoría de Contraseña",
+ "Password audit" : "Auditoría de contraseña",
"Password settings" : "Ajustes de contraseña",
"Import credentials" : "Importar credenciales",
"Export credentials" : "Exportar credenciales",
"Sharing" : "Compartir",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "¿Esta seguro que desea salir? Esto CORROMPERA todas sus credenciales",
+ "Are you sure you want to leave? This will destroy all your credentials" : "¿Estás seguro de que quieres salir? Esto destruirá todas tus credenciales",
"Your old password is incorrect!" : "¡Su contraseña anterior es incorrecta!",
- "New passwords do not match!" : "¡Las contraseñas nuevas no coinciden!",
- "Please login with your new vault password" : "Por favor inicie sesión con su nueva contraseña de bóveda",
- "Share with users and groups" : "Comparta con usuarios y grupos",
- "Share link" : "Comparta el enlace",
- "Are you sure you want to leave? This will corrupt this credential" : "¿Esta seguro que desea salir? Esto corromperá esta credencial",
+ "New password does not match!" : "¡La nueva contraseña no coincide!",
+ "Please log in with your new vault password" : "Por favor, identifícate con tu nueva contraseña de bóveda",
+ "Share with users and groups" : "Comparte con usuarios y grupos",
+ "Share link" : "Comparte el enlace",
+ "Are you sure you want to leave? This will corrupt this credential" : "¿Estás seguro de que deseas salir? Esto corromperá esta credencial",
"Credential unshared" : "Dejo de compartir esta credencial",
"Credential shared" : "Ha compartido esta credencial",
"Saved!" : "¡Guardado!",
- "Poor" : "Podre",
+ "Poor" : "Pobre",
"Weak" : "Débil",
"Good" : "Buena",
"Strong" : "Fuerte",
- "Toggle visibility" : "Visibilidad alterna",
- "Copy to clipboard" : "Copiar a portapapeles",
- "Copied to clipboard!" : "¡Copiado a portapapeles!",
+ "Toggle visibility" : "Activar/desactivar visibilidad",
+ "Copy to clipboard" : "Copiar a lportapapeles",
+ "Copied to clipboard!" : "¡Copiado al portapapeles!",
"Generate password" : "Generar contraseña",
- "Copy password to clipboard" : "Copiar contraseña a portapapeles",
- "Password copied to clipboard!" : "¡Contraseña copiada a portapapeles!",
+ "Copy password to clipboard" : "Copiar contraseña al portapapeles",
+ "Password copied to clipboard!" : "¡Contraseña copiada al portapapeles!",
"Complete" : "Completo",
"Username" : "Nombre de usuario",
- "Repeat password" : "Repita constraseña",
- "Add Tag" : "Agregar Etiqueta",
+ "Repeat password" : "Repite la constraseña",
+ "Add tag" : "Añadir etiqueta",
"Field label" : "Llene etiqueta",
"Field value" : "Llene valor",
"Choose a file" : "Elija un archivo",
@@ -90,9 +90,9 @@ OC.L10N.register(
"Current OTP settings" : "Ajustes OTP actuales",
"Issuer" : "Editor",
"Secret" : "Secreto",
- "Expire date" : "Fecha de expiración",
- "No expire date set" : "Sin fecha de expiración definida",
- "Renew interval" : "Renueve intervalo",
+ "Expiration date" : "Fecha de expiración",
+ "No expiration date set" : "No se ha establecido una fecha de expiración",
+ "Renew interval" : "Renueva el intervalo",
"Disabled" : "Deshabilitado",
"Day(s)" : "Día(s)",
"Week(s)" : "Semana(s)",
@@ -101,60 +101,61 @@ OC.L10N.register(
"Password generation settings" : "Ajustes de generación de contraseñas",
"Password length" : "Longitud de contraseña",
"Minimum amount of digits" : "Cantidad mínima de dígitos",
- "Use uppercase letters" : "Use letras mayúsculas",
- "Use lowercase letters" : "Use letras minúsculas",
- "Use numbers" : "Use numeros",
- "Use special characters" : "Use caracteres especiales",
- "Avoid ambiguous characters" : "Evite caracteres ambiguos",
+ "Use uppercase letters" : "Usar letras mayúsculas",
+ "Use lowercase letters" : "Usar letras minúsculas",
+ "Use numbers" : "Usar numeros",
+ "Use special characters" : "Usar caracteres especiales",
+ "Avoid ambiguous characters" : "Evitar caracteres ambiguos",
"Require every character type" : "Requerir todos los tipos de caracteres",
"Export type" : "Exportar tipo",
"Export" : "Exportar",
- "Enter vault password to confirm export." : "Introduce la contraseña de la cripta para confirmar la exportación.",
+ "Enter vault password to confirm export." : "Introduce la contraseña de la bóveda para confirmar la exportación.",
"Rename vault" : "Renombrar bóveda",
"New vault name" : "Nuevo nombre de bóveda",
"Change" : "Cambiar",
"Change vault key" : "Cambiar la llave de la bóveda",
- "Old vault password" : "Contraseña de la bóveda anterior",
+ "Old vault password" : "Contraseña anterior de la bóveda",
"New vault password" : "Contraseña nueva de la bóveda",
- "New vault password repeat" : "Repita la contraseña nueva de la bóveda",
- "Please wait your vault is being updated, do not leave this page." : "Por favor espere su esta bóveda siendo actualizada, no deje esta página",
+ "Repeat new vault password" : "Repite la nueva contraseña de la bóveda",
+ "Please wait your vault is being updated, do not leave this page." : "Por favor, espera. Tu bóveda se está actualizando, no salgas de esta página",
"Processing" : "Procesando",
"Total progress" : "Progreso total",
- "About Passman" : "Acerca de passman",
+ "About Passman" : "Acerca de Passman",
"Version" : "Versión",
"Donate to support development" : "Done para dar soporte al desarrollo",
- "Bookmarklet" : "Marcadores",
- "Save your passwords with 1 click!" : "¡Guarde sus contraseñas en 1 click!",
- "Drag below button to your bookmark toolbar." : "Arrastre debajo del botón de marcadores en su barra de herramientas ",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "¡Guarda tus contraseñas en 1 click!",
+ "Drag below button to your bookmark toolbar." : "Arrastra el botón de abajo a tu barra de herramientas ",
"Delete vault" : "Eliminar bóveda",
"Vault password" : "Contraseña de bóveda",
"This process is irreversible" : "Este proceso es irreversible",
"Delete my precious passwords" : "Eliminar mis valiosas contraseñas",
- "Deleting {{password}}..." : "Eliminando {{password}}...",
+ "Deleting {{password}}…" : "Borrando {{password}}…",
"Yes, delete my precious passwords" : "Sí, eliminar mis valiosas contraseñas",
- "Import type" : "Tipo de importe",
+ "Import type" : "Tipo de importación",
"Import" : "Importar",
"Read progress" : "Progreso de lectura",
- "Upload progress" : "Progreso de Subida",
+ "Upload progress" : "Progreso de subida",
"Private Key" : "Llave privada",
"Public key" : "Llave pública",
"Key size" : "Tamaño de llave",
"Save keys" : "Guardar llaves",
"Generate sharing keys" : "Generar llaves para compartir",
"Generating sharing keys" : "Generando llaves para compartir",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "La herramienta escaneará sus contraseñas, calcular el tiempo promedio de descifrado, si está debajo de la marca, las muestra",
- "Minimum password stength" : "Fuerza mínima de contraseña",
- "Passman scanned your passwords, and here is the result." : "Passman escaneó sus contraseñas, y aquí están los resultados.",
- "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} credenciales débiles.",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "La herramienta de contraseñas escaneará tus contraseñas, calculará el tiempo medio para reventarlas y señalará aquellas que estén por debajo del umbral",
+ "Minimum password stength" : "Fuerza mínima de la contraseña",
+ "Start scan" : "Comenzar escaneado",
+ "Result" : "Resultado",
+ "A total of {{scan_result}} weak credentials were found." : "Se han encontrado un tota del {{scan_result}} credenciales débiles",
"Score" : "Puntaje",
"Action" : "Acción",
- "Search users or groups..." : "Buscar usuarios o grupos...",
- "Missing users? Only users that have vaults are shown." : "¿Faltan usuarios? Solo se muestran usuarios que tengan criptas.",
+ "Search users or groups…" : "Buscar usuarios o grupos...",
+ "Missing users? Only users that have vaults are shown." : "¿Faltan usuarios? Solo se muestran usuarios que tengan bóvedas.",
"Cyphering" : "Cifrando",
"Uploading" : "Subiendo",
"User" : "Usuario",
"Crypto time" : "Tiempo de cifrado",
- "Total time spent cyphering" : "Tiempo total usado en cifrado",
+ "Total time spent cyphering" : "Tiempo total usado al cifrar",
"Read" : "Leer",
"Write" : "Escribir",
"Files" : "Archivos",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Activar compartir enlace",
"Share until date" : "Compartir hasta la fecha",
"Expire after views" : "Expirar después de vistas",
- "Click share first" : "Primero haga click en compartir",
+ "Click Share first" : "Haz clic primero en Compartir",
"Show files" : "Mostrar archivos",
"Details" : "Detalles",
"Hide details" : "Esconder detalles",
@@ -200,19 +201,19 @@ OC.L10N.register(
"Save" : "Guardar",
"Cancel" : "Cancelar",
"Settings" : "Ajustes",
- "Share credential {{credential}}" : "Compartir credenciales {{credential}}",
+ "Share credential {{credential}}" : "Compartir credencial {{credential}}",
"Unshare" : "Dejar de compartir",
"Showing deleted since" : "Mostrar fecha de eliminación",
- "All time" : "Todo el tiempo",
+ "Beginning" : "Comenzando",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciales",
- "Search credential..." : "Mostrar credenciales...",
+ "Search for credential…" : "Buscando credencial...",
"Account" : "Cuenta",
"Password" : "Contraseña",
"OTP" : "OTP",
"E-mail" : "Correo electrónico",
"URL" : "URL",
"Notes" : "Notas",
- "Expire time" : "Tiempo de expiración ",
+ "Expiry time" : "Hora de expiración",
"Changed" : "Cambiado",
"Created" : "Creado",
"Edit" : "Editar",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Destruir",
"Use regex" : "Use regex",
"You have incoming share requests." : "Tiene solicitudes de compartición entrantes",
- "If you want to put the credential in a other vault," : "Si desea poner la credencial en otra bóveda,",
- "logout of this vault and login to the vault you want the shared credential in." : "cierre su sesión en esta bóveda e inicie sesión en la bóveda con la que quiere compartir la credencial.",
+ "If you want to put the credential in another vault," : "Si quieres poner la credencial en otra bóveda,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Sal de esta bóveda y entra en la bóveda en la que quieres guardar la credencial compartida.",
"Permissions" : "Permisos",
"Received from" : "Recibido de",
"Date" : "Fecha",
@@ -233,41 +234,41 @@ OC.L10N.register(
"Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "¡Tu cripta ha sido bloqueada durante {{time}} debido a {{tries}} intentos fallidos!",
"Last accessed" : "Último acceso",
"Never" : "Nunca",
- "No vaults found, why not create one?" : "No se encontraron bóvedas, ¿porque no crear una?",
+ "No vaults found, why not create one?" : "No se encontraron bóvedas, ¿por qué no creas una?",
"Password strength must be at least: {{strength}}" : "La fuerza de la contraseña debe ser al menos de: {{strength}}",
- "Please give your new vault a name." : "Por favor de nombre a su nueva bóveda.",
- "Repeat vault password" : "Repita contraseña de bóveda",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Su llave para compartir tendrá una fuerza de 1024bit, la cual puede cambiar después en los ajustes.",
+ "Please give your new vault a name." : "Por favor, dé nombre a su nueva bóveda.",
+ "Repeat vault password" : "Repite la contraseña de la bóveda",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Tu clave de compartición tendrá una fortaleza de 1024 bits, lo que puedes cambiar más tarde en la configuración.",
"Create vault" : "Crear bóveda",
"Go back to vaults" : "Regresar a las bóvedas",
"Please input the password for" : "Por favor ingrese la contraseña para",
- "Set this vault as default." : "Coloque esta bóveda como predeterminada.",
- "Login automatically to this vault." : "Inicie sesión automáticamente para esta bóveda.",
- "Logout of this vault automatically after: " : "Salir de esta bóveda automáticamente después de:",
+ "Set this vault as the default." : "Marcar esta como la bóveda por defecto.",
+ "Log into this vault automatically." : "Entrar en esta bóveda automáticamente",
+ "Log out of this vault automatically after: " : "Salir automáticamente de esta bóveda después de:",
"Decrypt vault" : "Descifre bóveda",
- "Seems you lost the vault password and you're unable to login." : "Parece que ha perdido la contraseña de la bóveda y que no es capaz de iniciar sesión.",
- "If you want this vault removed you can request removal of the vault here." : "Si desea eliminar esta bóveda puede solicitar la eliminación de la bóveda aquí.",
- "An admin then accept to the request (or not)" : "Un administrador después aceta la solicitud (o no)",
- "After an admin destroy's this vault, all credentials will be lost" : "Después de que un administrador elimine esta bóveda, todas las credenciales serán perdidas",
- "Reason to request deletion (optional):" : "Razón para solicitar eliminación (opcional):",
+ "Seems you lost the vault password and you're unable to log in." : "Parece que has perdido la contraseña de la bóveda y no puedes entrar.",
+ "If you want this vault to be removed you can request that here." : "Si quieres que esta bóveda sea eliminada, lo puedes solicitar aquí.",
+ "An admin then accepts or declines the request" : "Un administrador, entonces, acepta o rechaza la petición",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Después de que un administrador destruya la bóveda, todas las credenciales en ella se perderán",
+ "Reason for requesting deletion (optional):" : "Razón para pedir el borrado (opcional):",
"Request vault destruction" : "Solicitar la eliminación de bóveda",
"Yes, request an admin to destroy this vault" : "Si, solicitar que un administrador elimine esta bóveda",
"Cancel destruction request" : "Cancelar la solicitud de eliminación",
"Vault destruction requested" : "Eliminación de la bóveda solicitada",
"Request removed" : "Solicitud eliminada",
"Destruction request pending" : "Solicitud de eliminación pendiente",
- "Warning! Adding credentials over http can be insecure!" : "¡Advertencia! ¡Agregar credenciales sobre http puede ser inseguro!",
+ "Warning! Adding credentials over HTTP is insecure!" : "¡Atención! ¡Añadir credenciales sobre HTTP es inseguro!",
"Logged in to {{vault_name}}" : "Sesión iniciada en {{vault_name}}",
"Change vault" : "Cambiar bóveda",
"Deleted credentials" : "Borrar credenciales",
"Logout" : "Salir",
"Donate" : "Donar",
- "Someone has shared a credential with you." : "Alguien a compartido una credencial con usted.",
- "Click here to request it" : "Haga click aquí para solicitar",
- "Loading..." : "Cargando...",
- "Awwhh.... credential not found. Maybe it expired" : "Oh oh... la credencial no se encontró. Tal vez esta expiró",
+ "Someone has shared a credential with you." : "Alguien ha compartido una credencial contigo.",
+ "Click here to request it" : "Haz clic aquí para solicitarlo",
+ "Loading…" : "Cargando...",
+ "Awwhh… credential not found. Maybe it expired" : "Ooooh... No se ha encontrado la credencial. Quizás haya expirado",
"Error while saving field" : "Error mientras se guardaba el campo",
- "A Passman item has been created, modified or deleted" : "Un objeto Passman puede ser creado, modificado o borrado",
+ "A Passman item has been created, modified or deleted" : "Se ha creado, modificado o borrado un objeto de Passman",
"A Passman item has expired" : "Un objeto Passman ha expirado",
"A Passman item has been shared" : "Un objeto Passman ha sido compartido",
"A Passman item has been renamed" : "Un objeto Passman ha sido renombrado",
@@ -276,13 +277,13 @@ OC.L10N.register(
"%1$s has been updated by %2$s" : "%1$s ha sido actualizado por %2$s",
"You updated %1$s" : "Estas actualizado a %1$s",
"%2$s has revised %1$s to the revision of %3$s" : "%2$s ha revisado %1$s para la revisión de %3$s",
- "You reverted %1$s back to the revision of %3$s" : "Tu has revertido %1$s a una revisión hacía atrás de %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "Has revertido %1$s a una revisión hacía atrás de %3$s",
"%3$s has renamed %1$s to %2$s" : "%3$s ha sido renombrado %1$s a %2$s",
- "You renamed %1$s to %2$s" : "Usted ha renombrado %1$s a %2$s",
+ "You renamed %1$s to %2$s" : "Has renombrado %1$s a %2$s",
"%1$s has been deleted by %2$s" : "%1$s ha sido borrado por %2$s",
- "You deleted %1$s" : "Ha eliminado %1$s",
- "%1$s has been recovered by %2$s" : "%1$s ha sido borrado por %2$s",
- "You recovered %1$s" : "Ha recuperado %1$s",
+ "You deleted %1$s" : "Has eliminado %1$s",
+ "%1$s has been recovered by %2$s" : "%1$s ha sido recuperado por %2$s",
+ "You recovered %1$s" : "Has recuperado %1$s",
"%1$s has been permanently deleted by %2$s" : "%1$s ha sido borrado permanentemente por %2$s",
"You permanently deleted %1$s" : "Has borrado permanentemente %1$s",
"The password of %1$s has expired, renew it now." : "La contraseña de %1$s ha caducado, renuévela ahora.",
@@ -295,19 +296,20 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s comparte \"%s\" contigo. Hacer click aquí para aceptar",
"%s has declined your share request for \"%s\"." : "%s ha rechazado su petición para compartir \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s ha aceptado tu petición para compartir \"%s\".",
- "Unable to get version info" : "Incapaz de obtener la información de la versión",
+ "Passman" : "Passman",
+ "Unable to get version info" : "No se puede de obtener la información de la versión",
"Passman Settings" : "Ajustes de Passman",
- "Github version:" : "Versión de Github:",
- "A newer version of passman is available" : "Una nueva versión de passman está disponible",
+ "GitHub version:" : "Versión de GitHub:",
+ "A newer version of Passman is available" : "Hay disponible una nueva versión de Passman",
"Password sharing" : "Compartir contraseña",
"Credential mover" : "Trasladar credenciales",
"Vault destruction requests" : "Solicitudes de eliminación de bóvedas",
"Check for new versions" : "Revisar por nuevas versiones",
"Enable HTTPS check" : "Activar revisión HTTPS",
"Disable context menu" : "Deshabilitar menú contextual",
- "Disable javascript debugger" : "Deshabilitar el depurador javascript",
- "Allow users on this server to share passwords with a link" : "Permitir usuarios de este servidor compartir contraseñas con un enlace",
- "Allow users on this server to share passwords with other users" : "Permitir usuarios en este servidor compartir contraseñas con otros usuarios",
+ "Disable JavaScript debugger" : "Deshabilitar el depurador JavaScript",
+ "Allow users on this server to share passwords with a link" : "Permitir a usuarios de este servidor compartir contraseñas con un enlace",
+ "Allow users on this server to share passwords with other users" : "Permitir a usuarios en este servidor compartir contraseñas con otros usuarios",
"Move credentials from one account to another" : "Trasladar credenciales de una cuenta a otra",
"Source account" : "Cuenta de origen",
"Destination account" : "Cuenta destino",
diff --git a/l10n/es.json b/l10n/es.json
index 9c369e76..4102a3db 100644
--- a/l10n/es.json
+++ b/l10n/es.json
@@ -5,22 +5,22 @@
"Passwords do not match" : "Contraseñas no coinciden",
"General" : "General",
"Custom Fields" : "Campos personalizados",
- "Please fill in a label!" : "¡Por favor llene en una etiqueta!",
- "Please fill in a value!" : "¡Por favor llene un valor!",
+ "Please fill in a label." : "Por favor, rellena una etiqueta.",
+ "Please fill in a value." : "Por favor, rellena un valor.",
"Error loading file" : "Error al cargar el archivo",
- "An error happened during decryption" : "Un error sucedió durante el descifrado",
+ "An error occurred during decryption" : "Ha ocurrido un error durante el descifrado.",
"Credential created!" : "¡Credencial creada!",
"Credential deleted" : "Credencial eliminada",
"Credential updated" : "Credencial actualziada",
"Credential recovered" : "Credencial recuperada",
"Credential destroyed" : "Credencial eliminada",
- "Error downloading file, you probably don't have enough permissions" : "Error al descargar archivo, probablemente no tiene suficientes permisos",
+ "Error downloading file, you probably don't have sufficient permissions" : "Error al descargar el archivo, probablemente no tienes suficientes permisos.",
"Invalid QR code" : "Código QR inválido",
"Starting export" : "Iniciar exportación",
"Decrypting credentials" : "Descifrando credenciales",
"Done" : "Hecho",
- "File read successfully!" : "¡Lectura de archivo exitosa!",
- "Follow the following steps to import your file" : "Sigue los siguientes pasos para importar tu archivo",
+ "File read successfully." : "Archivo leído con éxito.",
+ "Proceed with the following steps to import your file" : "Continúa con los siguientes pasos para importar tu archivo",
"Credential has no label, skipping" : "Credencial sin etiquete, saltando",
"Adding {{credential}}" : "Agregando {{credential}}",
"Added {{credential}}" : "Se ha agregado la {{credential}}",
@@ -28,49 +28,49 @@
"Parsed {{num}} credentials, starting to import" : "Analizadas {{num}} credenciales, comenzando a importar",
"Importing" : "Importando",
"Start import" : "Iniciar importación",
- "Select csv file" : "Seleccione el archivo csv",
- "Parsed {{rows}} lines from csv file" : "{{rows}} lineas analizadas del archivo csv",
+ "Select CSV file" : "Selecciona el archivo CSV",
+ "Parsed {{rows}} lines from CSV file" : "Se han analizado {{rows}} líneas del archivo CSV",
"Skip first row" : "Saltar la primer fila",
"You need to assign the label field before you can start the import." : "Necesita asignar el campo de etiqueta antes de comenzar la importación.",
- "First 5 lines of the csv are shown." : "Primeras 5 lineas del csv están mostradas.",
+ "The first 5 lines of the CSV are shown." : "Se muestran las 5 primeras líneas del CSV.",
"Assign the proper fields to each column." : "Asignar los campos apropiados para cada columna.",
- "Example imported credential" : "Credencial importada de ejemplo",
- "Missing an importer? Try it with the generic csv importer." : "¿Sin la herramienta para importar? Pruebe con el importador genérico de csv",
+ "Example of imported credential" : "Ejemplo de credencial importada",
+ "Missing an importer? Try it with the generic CSV importer." : "¿Echas de menos un importador? Intenta el importador genérico CSV.",
"Go back to importers." : "Regresar a importadores",
"Revision deleted" : "Revisión eliminada",
"Revision restored" : "Revisión restaurada",
- "Save in passman" : "Guardar en passman",
+ "Save in Passman" : "Guardar en Passman",
"Settings saved" : "Ajustes guardados",
"General settings" : "Ajustes generales",
- "Password Audit" : "Auditoría de Contraseña",
+ "Password audit" : "Auditoría de contraseña",
"Password settings" : "Ajustes de contraseña",
"Import credentials" : "Importar credenciales",
"Export credentials" : "Exportar credenciales",
"Sharing" : "Compartir",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "¿Esta seguro que desea salir? Esto CORROMPERA todas sus credenciales",
+ "Are you sure you want to leave? This will destroy all your credentials" : "¿Estás seguro de que quieres salir? Esto destruirá todas tus credenciales",
"Your old password is incorrect!" : "¡Su contraseña anterior es incorrecta!",
- "New passwords do not match!" : "¡Las contraseñas nuevas no coinciden!",
- "Please login with your new vault password" : "Por favor inicie sesión con su nueva contraseña de bóveda",
- "Share with users and groups" : "Comparta con usuarios y grupos",
- "Share link" : "Comparta el enlace",
- "Are you sure you want to leave? This will corrupt this credential" : "¿Esta seguro que desea salir? Esto corromperá esta credencial",
+ "New password does not match!" : "¡La nueva contraseña no coincide!",
+ "Please log in with your new vault password" : "Por favor, identifícate con tu nueva contraseña de bóveda",
+ "Share with users and groups" : "Comparte con usuarios y grupos",
+ "Share link" : "Comparte el enlace",
+ "Are you sure you want to leave? This will corrupt this credential" : "¿Estás seguro de que deseas salir? Esto corromperá esta credencial",
"Credential unshared" : "Dejo de compartir esta credencial",
"Credential shared" : "Ha compartido esta credencial",
"Saved!" : "¡Guardado!",
- "Poor" : "Podre",
+ "Poor" : "Pobre",
"Weak" : "Débil",
"Good" : "Buena",
"Strong" : "Fuerte",
- "Toggle visibility" : "Visibilidad alterna",
- "Copy to clipboard" : "Copiar a portapapeles",
- "Copied to clipboard!" : "¡Copiado a portapapeles!",
+ "Toggle visibility" : "Activar/desactivar visibilidad",
+ "Copy to clipboard" : "Copiar a lportapapeles",
+ "Copied to clipboard!" : "¡Copiado al portapapeles!",
"Generate password" : "Generar contraseña",
- "Copy password to clipboard" : "Copiar contraseña a portapapeles",
- "Password copied to clipboard!" : "¡Contraseña copiada a portapapeles!",
+ "Copy password to clipboard" : "Copiar contraseña al portapapeles",
+ "Password copied to clipboard!" : "¡Contraseña copiada al portapapeles!",
"Complete" : "Completo",
"Username" : "Nombre de usuario",
- "Repeat password" : "Repita constraseña",
- "Add Tag" : "Agregar Etiqueta",
+ "Repeat password" : "Repite la constraseña",
+ "Add tag" : "Añadir etiqueta",
"Field label" : "Llene etiqueta",
"Field value" : "Llene valor",
"Choose a file" : "Elija un archivo",
@@ -88,9 +88,9 @@
"Current OTP settings" : "Ajustes OTP actuales",
"Issuer" : "Editor",
"Secret" : "Secreto",
- "Expire date" : "Fecha de expiración",
- "No expire date set" : "Sin fecha de expiración definida",
- "Renew interval" : "Renueve intervalo",
+ "Expiration date" : "Fecha de expiración",
+ "No expiration date set" : "No se ha establecido una fecha de expiración",
+ "Renew interval" : "Renueva el intervalo",
"Disabled" : "Deshabilitado",
"Day(s)" : "Día(s)",
"Week(s)" : "Semana(s)",
@@ -99,60 +99,61 @@
"Password generation settings" : "Ajustes de generación de contraseñas",
"Password length" : "Longitud de contraseña",
"Minimum amount of digits" : "Cantidad mínima de dígitos",
- "Use uppercase letters" : "Use letras mayúsculas",
- "Use lowercase letters" : "Use letras minúsculas",
- "Use numbers" : "Use numeros",
- "Use special characters" : "Use caracteres especiales",
- "Avoid ambiguous characters" : "Evite caracteres ambiguos",
+ "Use uppercase letters" : "Usar letras mayúsculas",
+ "Use lowercase letters" : "Usar letras minúsculas",
+ "Use numbers" : "Usar numeros",
+ "Use special characters" : "Usar caracteres especiales",
+ "Avoid ambiguous characters" : "Evitar caracteres ambiguos",
"Require every character type" : "Requerir todos los tipos de caracteres",
"Export type" : "Exportar tipo",
"Export" : "Exportar",
- "Enter vault password to confirm export." : "Introduce la contraseña de la cripta para confirmar la exportación.",
+ "Enter vault password to confirm export." : "Introduce la contraseña de la bóveda para confirmar la exportación.",
"Rename vault" : "Renombrar bóveda",
"New vault name" : "Nuevo nombre de bóveda",
"Change" : "Cambiar",
"Change vault key" : "Cambiar la llave de la bóveda",
- "Old vault password" : "Contraseña de la bóveda anterior",
+ "Old vault password" : "Contraseña anterior de la bóveda",
"New vault password" : "Contraseña nueva de la bóveda",
- "New vault password repeat" : "Repita la contraseña nueva de la bóveda",
- "Please wait your vault is being updated, do not leave this page." : "Por favor espere su esta bóveda siendo actualizada, no deje esta página",
+ "Repeat new vault password" : "Repite la nueva contraseña de la bóveda",
+ "Please wait your vault is being updated, do not leave this page." : "Por favor, espera. Tu bóveda se está actualizando, no salgas de esta página",
"Processing" : "Procesando",
"Total progress" : "Progreso total",
- "About Passman" : "Acerca de passman",
+ "About Passman" : "Acerca de Passman",
"Version" : "Versión",
"Donate to support development" : "Done para dar soporte al desarrollo",
- "Bookmarklet" : "Marcadores",
- "Save your passwords with 1 click!" : "¡Guarde sus contraseñas en 1 click!",
- "Drag below button to your bookmark toolbar." : "Arrastre debajo del botón de marcadores en su barra de herramientas ",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "¡Guarda tus contraseñas en 1 click!",
+ "Drag below button to your bookmark toolbar." : "Arrastra el botón de abajo a tu barra de herramientas ",
"Delete vault" : "Eliminar bóveda",
"Vault password" : "Contraseña de bóveda",
"This process is irreversible" : "Este proceso es irreversible",
"Delete my precious passwords" : "Eliminar mis valiosas contraseñas",
- "Deleting {{password}}..." : "Eliminando {{password}}...",
+ "Deleting {{password}}…" : "Borrando {{password}}…",
"Yes, delete my precious passwords" : "Sí, eliminar mis valiosas contraseñas",
- "Import type" : "Tipo de importe",
+ "Import type" : "Tipo de importación",
"Import" : "Importar",
"Read progress" : "Progreso de lectura",
- "Upload progress" : "Progreso de Subida",
+ "Upload progress" : "Progreso de subida",
"Private Key" : "Llave privada",
"Public key" : "Llave pública",
"Key size" : "Tamaño de llave",
"Save keys" : "Guardar llaves",
"Generate sharing keys" : "Generar llaves para compartir",
"Generating sharing keys" : "Generando llaves para compartir",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "La herramienta escaneará sus contraseñas, calcular el tiempo promedio de descifrado, si está debajo de la marca, las muestra",
- "Minimum password stength" : "Fuerza mínima de contraseña",
- "Passman scanned your passwords, and here is the result." : "Passman escaneó sus contraseñas, y aquí están los resultados.",
- "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} credenciales débiles.",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "La herramienta de contraseñas escaneará tus contraseñas, calculará el tiempo medio para reventarlas y señalará aquellas que estén por debajo del umbral",
+ "Minimum password stength" : "Fuerza mínima de la contraseña",
+ "Start scan" : "Comenzar escaneado",
+ "Result" : "Resultado",
+ "A total of {{scan_result}} weak credentials were found." : "Se han encontrado un tota del {{scan_result}} credenciales débiles",
"Score" : "Puntaje",
"Action" : "Acción",
- "Search users or groups..." : "Buscar usuarios o grupos...",
- "Missing users? Only users that have vaults are shown." : "¿Faltan usuarios? Solo se muestran usuarios que tengan criptas.",
+ "Search users or groups…" : "Buscar usuarios o grupos...",
+ "Missing users? Only users that have vaults are shown." : "¿Faltan usuarios? Solo se muestran usuarios que tengan bóvedas.",
"Cyphering" : "Cifrando",
"Uploading" : "Subiendo",
"User" : "Usuario",
"Crypto time" : "Tiempo de cifrado",
- "Total time spent cyphering" : "Tiempo total usado en cifrado",
+ "Total time spent cyphering" : "Tiempo total usado al cifrar",
"Read" : "Leer",
"Write" : "Escribir",
"Files" : "Archivos",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Activar compartir enlace",
"Share until date" : "Compartir hasta la fecha",
"Expire after views" : "Expirar después de vistas",
- "Click share first" : "Primero haga click en compartir",
+ "Click Share first" : "Haz clic primero en Compartir",
"Show files" : "Mostrar archivos",
"Details" : "Detalles",
"Hide details" : "Esconder detalles",
@@ -198,19 +199,19 @@
"Save" : "Guardar",
"Cancel" : "Cancelar",
"Settings" : "Ajustes",
- "Share credential {{credential}}" : "Compartir credenciales {{credential}}",
+ "Share credential {{credential}}" : "Compartir credencial {{credential}}",
"Unshare" : "Dejar de compartir",
"Showing deleted since" : "Mostrar fecha de eliminación",
- "All time" : "Todo el tiempo",
+ "Beginning" : "Comenzando",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciales",
- "Search credential..." : "Mostrar credenciales...",
+ "Search for credential…" : "Buscando credencial...",
"Account" : "Cuenta",
"Password" : "Contraseña",
"OTP" : "OTP",
"E-mail" : "Correo electrónico",
"URL" : "URL",
"Notes" : "Notas",
- "Expire time" : "Tiempo de expiración ",
+ "Expiry time" : "Hora de expiración",
"Changed" : "Cambiado",
"Created" : "Creado",
"Edit" : "Editar",
@@ -220,8 +221,8 @@
"Destroy" : "Destruir",
"Use regex" : "Use regex",
"You have incoming share requests." : "Tiene solicitudes de compartición entrantes",
- "If you want to put the credential in a other vault," : "Si desea poner la credencial en otra bóveda,",
- "logout of this vault and login to the vault you want the shared credential in." : "cierre su sesión en esta bóveda e inicie sesión en la bóveda con la que quiere compartir la credencial.",
+ "If you want to put the credential in another vault," : "Si quieres poner la credencial en otra bóveda,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Sal de esta bóveda y entra en la bóveda en la que quieres guardar la credencial compartida.",
"Permissions" : "Permisos",
"Received from" : "Recibido de",
"Date" : "Fecha",
@@ -231,41 +232,41 @@
"Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "¡Tu cripta ha sido bloqueada durante {{time}} debido a {{tries}} intentos fallidos!",
"Last accessed" : "Último acceso",
"Never" : "Nunca",
- "No vaults found, why not create one?" : "No se encontraron bóvedas, ¿porque no crear una?",
+ "No vaults found, why not create one?" : "No se encontraron bóvedas, ¿por qué no creas una?",
"Password strength must be at least: {{strength}}" : "La fuerza de la contraseña debe ser al menos de: {{strength}}",
- "Please give your new vault a name." : "Por favor de nombre a su nueva bóveda.",
- "Repeat vault password" : "Repita contraseña de bóveda",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Su llave para compartir tendrá una fuerza de 1024bit, la cual puede cambiar después en los ajustes.",
+ "Please give your new vault a name." : "Por favor, dé nombre a su nueva bóveda.",
+ "Repeat vault password" : "Repite la contraseña de la bóveda",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Tu clave de compartición tendrá una fortaleza de 1024 bits, lo que puedes cambiar más tarde en la configuración.",
"Create vault" : "Crear bóveda",
"Go back to vaults" : "Regresar a las bóvedas",
"Please input the password for" : "Por favor ingrese la contraseña para",
- "Set this vault as default." : "Coloque esta bóveda como predeterminada.",
- "Login automatically to this vault." : "Inicie sesión automáticamente para esta bóveda.",
- "Logout of this vault automatically after: " : "Salir de esta bóveda automáticamente después de:",
+ "Set this vault as the default." : "Marcar esta como la bóveda por defecto.",
+ "Log into this vault automatically." : "Entrar en esta bóveda automáticamente",
+ "Log out of this vault automatically after: " : "Salir automáticamente de esta bóveda después de:",
"Decrypt vault" : "Descifre bóveda",
- "Seems you lost the vault password and you're unable to login." : "Parece que ha perdido la contraseña de la bóveda y que no es capaz de iniciar sesión.",
- "If you want this vault removed you can request removal of the vault here." : "Si desea eliminar esta bóveda puede solicitar la eliminación de la bóveda aquí.",
- "An admin then accept to the request (or not)" : "Un administrador después aceta la solicitud (o no)",
- "After an admin destroy's this vault, all credentials will be lost" : "Después de que un administrador elimine esta bóveda, todas las credenciales serán perdidas",
- "Reason to request deletion (optional):" : "Razón para solicitar eliminación (opcional):",
+ "Seems you lost the vault password and you're unable to log in." : "Parece que has perdido la contraseña de la bóveda y no puedes entrar.",
+ "If you want this vault to be removed you can request that here." : "Si quieres que esta bóveda sea eliminada, lo puedes solicitar aquí.",
+ "An admin then accepts or declines the request" : "Un administrador, entonces, acepta o rechaza la petición",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Después de que un administrador destruya la bóveda, todas las credenciales en ella se perderán",
+ "Reason for requesting deletion (optional):" : "Razón para pedir el borrado (opcional):",
"Request vault destruction" : "Solicitar la eliminación de bóveda",
"Yes, request an admin to destroy this vault" : "Si, solicitar que un administrador elimine esta bóveda",
"Cancel destruction request" : "Cancelar la solicitud de eliminación",
"Vault destruction requested" : "Eliminación de la bóveda solicitada",
"Request removed" : "Solicitud eliminada",
"Destruction request pending" : "Solicitud de eliminación pendiente",
- "Warning! Adding credentials over http can be insecure!" : "¡Advertencia! ¡Agregar credenciales sobre http puede ser inseguro!",
+ "Warning! Adding credentials over HTTP is insecure!" : "¡Atención! ¡Añadir credenciales sobre HTTP es inseguro!",
"Logged in to {{vault_name}}" : "Sesión iniciada en {{vault_name}}",
"Change vault" : "Cambiar bóveda",
"Deleted credentials" : "Borrar credenciales",
"Logout" : "Salir",
"Donate" : "Donar",
- "Someone has shared a credential with you." : "Alguien a compartido una credencial con usted.",
- "Click here to request it" : "Haga click aquí para solicitar",
- "Loading..." : "Cargando...",
- "Awwhh.... credential not found. Maybe it expired" : "Oh oh... la credencial no se encontró. Tal vez esta expiró",
+ "Someone has shared a credential with you." : "Alguien ha compartido una credencial contigo.",
+ "Click here to request it" : "Haz clic aquí para solicitarlo",
+ "Loading…" : "Cargando...",
+ "Awwhh… credential not found. Maybe it expired" : "Ooooh... No se ha encontrado la credencial. Quizás haya expirado",
"Error while saving field" : "Error mientras se guardaba el campo",
- "A Passman item has been created, modified or deleted" : "Un objeto Passman puede ser creado, modificado o borrado",
+ "A Passman item has been created, modified or deleted" : "Se ha creado, modificado o borrado un objeto de Passman",
"A Passman item has expired" : "Un objeto Passman ha expirado",
"A Passman item has been shared" : "Un objeto Passman ha sido compartido",
"A Passman item has been renamed" : "Un objeto Passman ha sido renombrado",
@@ -274,13 +275,13 @@
"%1$s has been updated by %2$s" : "%1$s ha sido actualizado por %2$s",
"You updated %1$s" : "Estas actualizado a %1$s",
"%2$s has revised %1$s to the revision of %3$s" : "%2$s ha revisado %1$s para la revisión de %3$s",
- "You reverted %1$s back to the revision of %3$s" : "Tu has revertido %1$s a una revisión hacía atrás de %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "Has revertido %1$s a una revisión hacía atrás de %3$s",
"%3$s has renamed %1$s to %2$s" : "%3$s ha sido renombrado %1$s a %2$s",
- "You renamed %1$s to %2$s" : "Usted ha renombrado %1$s a %2$s",
+ "You renamed %1$s to %2$s" : "Has renombrado %1$s a %2$s",
"%1$s has been deleted by %2$s" : "%1$s ha sido borrado por %2$s",
- "You deleted %1$s" : "Ha eliminado %1$s",
- "%1$s has been recovered by %2$s" : "%1$s ha sido borrado por %2$s",
- "You recovered %1$s" : "Ha recuperado %1$s",
+ "You deleted %1$s" : "Has eliminado %1$s",
+ "%1$s has been recovered by %2$s" : "%1$s ha sido recuperado por %2$s",
+ "You recovered %1$s" : "Has recuperado %1$s",
"%1$s has been permanently deleted by %2$s" : "%1$s ha sido borrado permanentemente por %2$s",
"You permanently deleted %1$s" : "Has borrado permanentemente %1$s",
"The password of %1$s has expired, renew it now." : "La contraseña de %1$s ha caducado, renuévela ahora.",
@@ -293,19 +294,20 @@
"%s shared \"%s\" with you. Click here to accept" : "%s comparte \"%s\" contigo. Hacer click aquí para aceptar",
"%s has declined your share request for \"%s\"." : "%s ha rechazado su petición para compartir \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s ha aceptado tu petición para compartir \"%s\".",
- "Unable to get version info" : "Incapaz de obtener la información de la versión",
+ "Passman" : "Passman",
+ "Unable to get version info" : "No se puede de obtener la información de la versión",
"Passman Settings" : "Ajustes de Passman",
- "Github version:" : "Versión de Github:",
- "A newer version of passman is available" : "Una nueva versión de passman está disponible",
+ "GitHub version:" : "Versión de GitHub:",
+ "A newer version of Passman is available" : "Hay disponible una nueva versión de Passman",
"Password sharing" : "Compartir contraseña",
"Credential mover" : "Trasladar credenciales",
"Vault destruction requests" : "Solicitudes de eliminación de bóvedas",
"Check for new versions" : "Revisar por nuevas versiones",
"Enable HTTPS check" : "Activar revisión HTTPS",
"Disable context menu" : "Deshabilitar menú contextual",
- "Disable javascript debugger" : "Deshabilitar el depurador javascript",
- "Allow users on this server to share passwords with a link" : "Permitir usuarios de este servidor compartir contraseñas con un enlace",
- "Allow users on this server to share passwords with other users" : "Permitir usuarios en este servidor compartir contraseñas con otros usuarios",
+ "Disable JavaScript debugger" : "Deshabilitar el depurador JavaScript",
+ "Allow users on this server to share passwords with a link" : "Permitir a usuarios de este servidor compartir contraseñas con un enlace",
+ "Allow users on this server to share passwords with other users" : "Permitir a usuarios en este servidor compartir contraseñas con otros usuarios",
"Move credentials from one account to another" : "Trasladar credenciales de una cuenta a otra",
"Source account" : "Cuenta de origen",
"Destination account" : "Cuenta destino",
diff --git a/l10n/es_AR.js b/l10n/es_AR.js
new file mode 100644
index 00000000..4ff9eece
--- /dev/null
+++ b/l10n/es_AR.js
@@ -0,0 +1,291 @@
+OC.L10N.register(
+ "passman",
+ {
+ "Passwords" : "Contraseñas",
+ "Generating sharing keys ( %step / 2)" : "Generando llaves para compartir (paso %s /2)",
+ "Incorrect vault password!" : "¡Bóveda de contraseñas incorrecta!",
+ "Passwords do not match" : "Las contraseñas no coinciden",
+ "General" : "General",
+ "Custom Fields" : "Campos personalizados",
+ "Error loading file" : "Se presentó un error al cargar el archivo",
+ "Credential created!" : "¡Credenciales creadas!",
+ "Credential deleted" : "Credenciales borradas",
+ "Credential updated" : "Credenciales actualizadas",
+ "Credential recovered" : "Credenciales recuperadas",
+ "Credential destroyed" : "Credenciales destruidas",
+ "Invalid QR code" : "Código QR inválido",
+ "Starting export" : "Comenzando exportación",
+ "Decrypting credentials" : "Decriptando credenciales",
+ "Done" : "Terminado",
+ "Credential has no label, skipping" : "Las credenciales no tienen etiqueta, omitiendo",
+ "Adding {{credential}}" : "Agregando {{credential}}",
+ "Added {{credential}}" : "{{credential}} agregado",
+ "Skipping credential, missing label on line {{line}}" : "Omitiendo credenciales, etiqueta faltante en la línea {{line}}",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} credenciales interpretadas, comenzando a importar",
+ "Importing" : "Importando",
+ "Start import" : "Comenzar importación",
+ "Select CSV file" : "Seleccione el archivo CSV",
+ "Parsed {{rows}} lines from CSV file" : "{{num}} líneas interpretadas del archivo CSV",
+ "Skip first row" : "Omitir primer renglón",
+ "You need to assign the label field before you can start the import." : "Necesita asignar el campo etiqueta antes de que pueda comenzar la importación.",
+ "Assign the proper fields to each column." : "Asigne el campo correspondiente a cada columna. ",
+ "Missing an importer? Try it with the generic CSV importer." : "¿Requiere de una herramienta para importar? Pruebe con la herramienta genérica para importar CSV.",
+ "Go back to importers." : "Regresar a importadores.",
+ "Revision deleted" : "Revisión borrada",
+ "Revision restored" : "Revisión restaurada",
+ "Settings saved" : "Configuraciones guardadas",
+ "General settings" : "Configuraciones generales",
+ "Password settings" : "Configuraciones de contraseña",
+ "Import credentials" : "Importar credenciales",
+ "Export credentials" : "Exportar credenciales",
+ "Sharing" : "Compartiendo",
+ "Your old password is incorrect!" : "¡Su contraseña anterior es incorrecta!",
+ "Share with users and groups" : "Compartir con otros usuarios y grupos",
+ "Share link" : "Compartir link",
+ "Are you sure you want to leave? This will corrupt this credential" : "¿Está seguro que desea salir? Esto va a corrpomer estas credenciales",
+ "Credential unshared" : "Credenciales no compartidas",
+ "Credential shared" : "Credenciales compartidas",
+ "Saved!" : "¡Guardado!",
+ "Poor" : "Pobre",
+ "Weak" : "Débil",
+ "Good" : "Buena",
+ "Strong" : "Fuerte",
+ "Toggle visibility" : "Alternar visibilidad",
+ "Copy to clipboard" : "Copiar al portapapeles",
+ "Copied to clipboard!" : "¡Copiado al portapapeles!",
+ "Generate password" : "Generar contraseña",
+ "Copy password to clipboard" : "Copiar contraseña al portapapeles",
+ "Password copied to clipboard!" : "¡Contraseña copiada al portapapeles!",
+ "Complete" : "Terminar",
+ "Username" : "Nombre de usuario",
+ "Repeat password" : "Repetir contraseña",
+ "Field label" : "Etiqueta del campo",
+ "Field value" : "Valor del campo",
+ "Choose a file" : "Seleccione un archivo",
+ "Text" : "Texto",
+ "File" : "Archivo",
+ "Add" : "Agregar",
+ "Value" : "Valor",
+ "Type" : "Tipo",
+ "Actions" : "Acciones",
+ "Empty" : "Vacío",
+ "Filename" : "Nombre del archivo",
+ "Upload date" : "Fecha de carga",
+ "Size" : "Tamaño",
+ "Upload or enter your OTP secret" : "Carge o ingrese su secreto de OTP",
+ "Current OTP settings" : "Configuraciones actuales de OTP",
+ "Issuer" : "Quien levanta",
+ "Secret" : "Secreto",
+ "Renew interval" : "Intervalo de renovación",
+ "Disabled" : "Deshabilitado",
+ "Day(s)" : "Día(s)",
+ "Week(s)" : "Semana(s)",
+ "Month(s)" : "Mes(es)",
+ "Year(s)" : "Año(s)",
+ "Password generation settings" : "Configuraciones de generación de  contraseñas",
+ "Password length" : "Longitud de contraseña",
+ "Minimum amount of digits" : "Número mínimo de dígitos",
+ "Use uppercase letters" : "Usar mayúsculas",
+ "Use lowercase letters" : "Usar minúsculas",
+ "Use numbers" : "Usar números",
+ "Use special characters" : "Usar caracteres especiales",
+ "Avoid ambiguous characters" : "Evitar caracteres ambíguos",
+ "Require every character type" : "Requerir todos los tipos de caracteres",
+ "Export type" : "Tipo de exportación",
+ "Export" : "Exportar",
+ "Enter vault password to confirm export." : "Ingresar contraseña de bóveda para confirmar la exportación. ",
+ "Rename vault" : "Renombrar bóveda",
+ "New vault name" : "Nuevo nombre de la bóveda",
+ "Change" : "Cambiar",
+ "Change vault key" : "Cambiar la llave de la bóveda",
+ "Old vault password" : "Anterior contraseña de la bóveda",
+ "New vault password" : "Nueva contraseña de la bóveda",
+ "Please wait your vault is being updated, do not leave this page." : "Favor de aguardar mientras se actualiza su bóveda, no salga de esta página. ",
+ "Processing" : "Procesando",
+ "Total progress" : "Progreso total",
+ "About Passman" : "Acerca de Passman",
+ "Version" : "Versión",
+ "Donate to support development" : "Donar en apoyo al desarrollo",
+ "Bookmarklet" : "Marcador a código",
+ "Save your passwords with 1 click!" : "¡Guarde sus contraseñas con 1 sólo click!",
+ "Drag below button to your bookmark toolbar." : "Arrastre el botón de abajo hasta su barra de herramientas de marcadores. ",
+ "Delete vault" : "Borrar bóveda",
+ "Vault password" : "Bóveda de contraseñas",
+ "This process is irreversible" : "Este proceso es irreversible",
+ "Delete my precious passwords" : "Borrar mis preciadas contraseñas",
+ "Yes, delete my precious passwords" : "Sí, borrar mis preciadas contraseñas",
+ "Import type" : "Tipo de importación",
+ "Import" : "Importar",
+ "Read progress" : "Progreso de la lectura",
+ "Upload progress" : "Progreso de la carga",
+ "Private Key" : "Llave privada",
+ "Public key" : "Llave pública",
+ "Key size" : "Tamaño de la llave",
+ "Save keys" : "Guardar llaves",
+ "Generate sharing keys" : "Generar llaves de comparitr",
+ "Generating sharing keys" : "Generando llaves de comparitr",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "La herramienta de contraseñas escaneará su contraseña, calculará el tiempo promedio para romperla y enlistará aquellas que estén por debajo del umbral",
+ "Minimum password stength" : "Fortaleza mínima de contraseña",
+ "Start scan" : "Iniciar escaneo",
+ "Result" : "Resultado",
+ "A total of {{scan_result}} weak credentials were found." : "Se encontraron un total de {{scan_result}} credenciales débiles.",
+ "Score" : "Calificación",
+ "Action" : "Acción",
+ "Missing users? Only users that have vaults are shown." : "¿Faltan usuarios? Sólo se muestran los usuarios que tienen bóvedas.",
+ "Cyphering" : "Encriptando",
+ "Uploading" : "Cargando",
+ "User" : "Usuario",
+ "Crypto time" : "Tiempo criptográfico",
+ "Total time spent cyphering" : "Tiempo total destinado a encriptar",
+ "Read" : "Leer",
+ "Write" : "Escribir",
+ "Files" : "Archivo",
+ "Revisions" : "Revisiones",
+ "Pending" : "Pendiente",
+ "Enable link sharing" : "Habilitar compartir link",
+ "Share until date" : "Compartir hasta fecha",
+ "Expire after views" : "Expirar después de visualizaciones",
+ "Show files" : "Mostrar archivos",
+ "Details" : "Detalles",
+ "Hide details" : "Ocultar detalles",
+ "Password score" : "Calificación de contraseña",
+ "Cracking times" : "Tiempos para romper la contraseña",
+ "100 / hour" : "100 / hora",
+ "Throttled online attack" : "Ataque en línea regulado",
+ "10 / second" : "10 / segundo",
+ "Unthrottled online attack" : "Ataque en línea sin regular",
+ "10k / second" : "10k / segundo",
+ "Offline attack, slow hash, many cores" : "Ataque sin conexión, funciones de resumen lentas, muchos núcleos",
+ "10B / second" : "10k / segundo",
+ "Offline attack, fast hash, many cores" : "Ataque sin conexión, funciones de resumen rápidas, muchos núcleos",
+ "Match sequence" : "Secuencia con coincidencia",
+ "See match sequence" : "Ver secuencia con coincidencia",
+ "Pattern" : "Patrón",
+ "Matched word" : "Palabra con coincidencia",
+ "Dictionary name" : "Nombre del diccionario",
+ "Rank" : "Rango",
+ "Reversed" : "Revertido",
+ "Guesses" : "Intentos",
+ "Base guesses" : "Intentos base",
+ "Uppercase variations" : "Variaciones en mayúsculas",
+ "l33t-variations" : "Variaciones en l33t",
+ "Showing revisions of" : "Mostrando revisiones de",
+ "Revision of" : "Revisión de",
+ "by" : "por",
+ "No revisions found." : "No se encontraron revisiones. ",
+ "Label" : "Etiqueta",
+ "Restore revision" : "Restaurar revisión",
+ "Delete revision" : "Borrar revisión",
+ "Edit credential" : "Editar credenciales",
+ "Create new credential" : "Crear credenciales nuevas",
+ "Save" : "Guardar",
+ "Cancel" : "Cancelar",
+ "Settings" : "Configuraciones ",
+ "Share credential {{credential}}" : "Compartir credenciales {{credential}}",
+ "Unshare" : "Dejar de compartir",
+ "Showing deleted since" : "Mostrando borrados desde",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciales",
+ "Account" : "Cuenta",
+ "Password" : "Contraseña",
+ "OTP" : "OTP",
+ "E-mail" : "Correo electrónico",
+ "URL" : "URL",
+ "Notes" : "Notas",
+ "Changed" : "Cambiado",
+ "Created" : "Creado",
+ "Edit" : "Editar",
+ "Delete" : "Borrar",
+ "Share" : "Compartir",
+ "Recover" : "Recuperar",
+ "Destroy" : "Destruir",
+ "Use regex" : "Usar regex",
+ "You have incoming share requests." : "Usted recibió solicitudes para compartir. ",
+ "Permissions" : "Permisos",
+ "Received from" : "Recibido de",
+ "Date" : "Fecha",
+ "Accept" : "Aceptar",
+ "Decline" : "Declinar",
+ "You have {{session_time}} left before logout." : "Cuenta con {{session_time}} antes de que su sesión se cierre.",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "¡Su bóveda se encuentra bloqueada por {{time}} debido a los {{tries}} intentos fallidos!",
+ "Last accessed" : "Último acceso",
+ "Never" : "Nunca",
+ "No vaults found, why not create one?" : "No se encontraron bóvedas. ¿Por qué no crear una?",
+ "Password strength must be at least: {{strength}}" : "La fortaleza de la contraseña debe ser por lo menos: {{strength}}",
+ "Please give your new vault a name." : "Favor de ingresar el nombre de su bóveda nueva. ",
+ "Repeat vault password" : "Repita la contraseña de la bóveda",
+ "Create vault" : "Crear bóveda",
+ "Go back to vaults" : "Regresar a bóvedas",
+ "Please input the password for" : "Favor de ingresar la contraseña para",
+ "Log into this vault automatically." : "Inicie sesión en esta bóveda automáticamente.",
+ "Decrypt vault" : "Decriptar bóveda",
+ "If you want this vault to be removed you can request that here." : "Si desea que esta bóveda sea eliminada puede solicitarlo aquí.",
+ "Request vault destruction" : "Solicitar la destrucción de la bóveda",
+ "Yes, request an admin to destroy this vault" : "Sí, solicitar a un administrador la destrucción de esta bóveda",
+ "Cancel destruction request" : "Cancelar la solicitud de destrucción",
+ "Vault destruction requested" : "Destrucción de la bóveda solicitada",
+ "Request removed" : "Solicitud eliminada",
+ "Destruction request pending" : "Solicitud de destrucción pendiente",
+ "Logged in to {{vault_name}}" : "Inició sesión en {{vault_name}}",
+ "Change vault" : "Cambiar bóveda",
+ "Deleted credentials" : "Credenciales borradas",
+ "Logout" : "Salir",
+ "Donate" : "Donar",
+ "Someone has shared a credential with you." : "Alguien ha compartido credenciales con usted. ",
+ "Click here to request it" : "Haga click para solicitarlo",
+ "Error while saving field" : "Se presentó un error al guardar el campo",
+ "A Passman item has been created, modified or deleted" : "Un elemento de Passman ha sido creado, modificado o borrado",
+ "A Passman item has expired" : "El elemento de Passman ha expirado",
+ "A Passman item has been shared" : "Un elemento de Passman ha sido compartido",
+ "A Passman item has been renamed" : "Un elemento de Passman ha sido renombrado",
+ "%1$s has been created by %2$s" : "%1$s ha sido creado por %2$s",
+ "You created %1$s" : "Usted creó %1$s",
+ "%1$s has been updated by %2$s" : "%1$s ha sido actualizado por %2$s",
+ "You updated %1$s" : "Usted actualizó %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s ha revisado %1$s a la revisón de %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "Usted revirtió %1$s de vuelta a la revisión de %3$s",
+ "%3$s has renamed %1$s to %2$s" : "%3$s ha renombrado %1$s como %2$s",
+ "You renamed %1$s to %2$s" : "Usted renombro %1$s como %2$s",
+ "%1$s has been deleted by %2$s" : "%1$s ha sido borrado por %2$s",
+ "You deleted %1$s" : "Usted borró %1$s",
+ "%1$s has been recovered by %2$s" : "%1$s ha sido recuperado por %2$s",
+ "You recovered %1$s" : "Usted recuperó %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%1$s ha sido borrado permanentemente por %2$s",
+ "You permanently deleted %1$s" : "Ha borrado permanentemente %1$s",
+ "The password of %1$s has expired, renew it now." : "La contraseña de %1$s ha expirado, renuévela ahora.",
+ "%1$s has been shared with %2$s" : "%1$s ha sido compartido con %2$s",
+ "You received a share request for %1$s from %2$s" : "Usted ha recibido una solicitud para compartir de %1$s desde%2$s",
+ "%s has been shared with a link" : "%s ha sido compartido con un link",
+ "Your credential \"%s\" expired, click here to update the credential." : "Sus credenciales \"%s\" han expirado, haga click aquí para actualizarlas.",
+ "Remind me later" : "Recordarme más tarde",
+ "Ignore" : "Ignorar",
+ "%s shared \"%s\" with you. Click here to accept" : "%s ha compartido \"%s\" con usted. Haga click aquí para aceptar",
+ "%s has declined your share request for \"%s\"." : "%s ha declinado su solicitud para compartir \"%s\".",
+ "%s has accepted your share request for \"%s\"." : "%s ha aceptado su solicitud para compartir \"%s\".",
+ "Passman" : "Passman",
+ "Unable to get version info" : "No fue posible obtener la información de la versión",
+ "Passman Settings" : "Configuraciones de Passman",
+ "A newer version of Passman is available" : "Una nueva versión de Passman se encuentra disponible",
+ "Password sharing" : "Compartir contraseña",
+ "Credential mover" : "Mover credenciales",
+ "Vault destruction requests" : "Solicitudes para destruir bóvedas",
+ "Check for new versions" : "Verificar si hay nuevas versiones",
+ "Enable HTTPS check" : "Habilitar verificación HTTPS",
+ "Disable context menu" : "Deshabilitar menú contextual",
+ "Disable JavaScript debugger" : "Deshabilitar el depurador JavaScript",
+ "Allow users on this server to share passwords with a link" : "Permitir a los usuarios en este servidor compartir contraseñas con un link",
+ "Allow users on this server to share passwords with other users" : "Permitir a los usuarios en este servidor compartir contraseñas con otros usuarios",
+ "Move credentials from one account to another" : "Mover credenciales de una cuenta a otra",
+ "Source account" : "Cuenta fuente",
+ "Destination account" : "Cuenta destino",
+ "Credentials moved!" : "¡Se movieron las credenciales!",
+ "Requests to destroy vault" : "Solicitudes para destruir bóvedas",
+ "Request ID" : "ID de solicitud",
+ "Requested by" : "Solciitado por",
+ "Reason" : "Razón",
+ "Connection to server lost" : "Se perdió la conexión al servidor",
+ "Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
+ "Saving..." : "Guardando ...",
+ "Dismiss" : "Descartar",
+ "seconds ago" : "segundos"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/l10n/es_AR.json b/l10n/es_AR.json
new file mode 100644
index 00000000..1fb46537
--- /dev/null
+++ b/l10n/es_AR.json
@@ -0,0 +1,289 @@
+{ "translations": {
+ "Passwords" : "Contraseñas",
+ "Generating sharing keys ( %step / 2)" : "Generando llaves para compartir (paso %s /2)",
+ "Incorrect vault password!" : "¡Bóveda de contraseñas incorrecta!",
+ "Passwords do not match" : "Las contraseñas no coinciden",
+ "General" : "General",
+ "Custom Fields" : "Campos personalizados",
+ "Error loading file" : "Se presentó un error al cargar el archivo",
+ "Credential created!" : "¡Credenciales creadas!",
+ "Credential deleted" : "Credenciales borradas",
+ "Credential updated" : "Credenciales actualizadas",
+ "Credential recovered" : "Credenciales recuperadas",
+ "Credential destroyed" : "Credenciales destruidas",
+ "Invalid QR code" : "Código QR inválido",
+ "Starting export" : "Comenzando exportación",
+ "Decrypting credentials" : "Decriptando credenciales",
+ "Done" : "Terminado",
+ "Credential has no label, skipping" : "Las credenciales no tienen etiqueta, omitiendo",
+ "Adding {{credential}}" : "Agregando {{credential}}",
+ "Added {{credential}}" : "{{credential}} agregado",
+ "Skipping credential, missing label on line {{line}}" : "Omitiendo credenciales, etiqueta faltante en la línea {{line}}",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} credenciales interpretadas, comenzando a importar",
+ "Importing" : "Importando",
+ "Start import" : "Comenzar importación",
+ "Select CSV file" : "Seleccione el archivo CSV",
+ "Parsed {{rows}} lines from CSV file" : "{{num}} líneas interpretadas del archivo CSV",
+ "Skip first row" : "Omitir primer renglón",
+ "You need to assign the label field before you can start the import." : "Necesita asignar el campo etiqueta antes de que pueda comenzar la importación.",
+ "Assign the proper fields to each column." : "Asigne el campo correspondiente a cada columna. ",
+ "Missing an importer? Try it with the generic CSV importer." : "¿Requiere de una herramienta para importar? Pruebe con la herramienta genérica para importar CSV.",
+ "Go back to importers." : "Regresar a importadores.",
+ "Revision deleted" : "Revisión borrada",
+ "Revision restored" : "Revisión restaurada",
+ "Settings saved" : "Configuraciones guardadas",
+ "General settings" : "Configuraciones generales",
+ "Password settings" : "Configuraciones de contraseña",
+ "Import credentials" : "Importar credenciales",
+ "Export credentials" : "Exportar credenciales",
+ "Sharing" : "Compartiendo",
+ "Your old password is incorrect!" : "¡Su contraseña anterior es incorrecta!",
+ "Share with users and groups" : "Compartir con otros usuarios y grupos",
+ "Share link" : "Compartir link",
+ "Are you sure you want to leave? This will corrupt this credential" : "¿Está seguro que desea salir? Esto va a corrpomer estas credenciales",
+ "Credential unshared" : "Credenciales no compartidas",
+ "Credential shared" : "Credenciales compartidas",
+ "Saved!" : "¡Guardado!",
+ "Poor" : "Pobre",
+ "Weak" : "Débil",
+ "Good" : "Buena",
+ "Strong" : "Fuerte",
+ "Toggle visibility" : "Alternar visibilidad",
+ "Copy to clipboard" : "Copiar al portapapeles",
+ "Copied to clipboard!" : "¡Copiado al portapapeles!",
+ "Generate password" : "Generar contraseña",
+ "Copy password to clipboard" : "Copiar contraseña al portapapeles",
+ "Password copied to clipboard!" : "¡Contraseña copiada al portapapeles!",
+ "Complete" : "Terminar",
+ "Username" : "Nombre de usuario",
+ "Repeat password" : "Repetir contraseña",
+ "Field label" : "Etiqueta del campo",
+ "Field value" : "Valor del campo",
+ "Choose a file" : "Seleccione un archivo",
+ "Text" : "Texto",
+ "File" : "Archivo",
+ "Add" : "Agregar",
+ "Value" : "Valor",
+ "Type" : "Tipo",
+ "Actions" : "Acciones",
+ "Empty" : "Vacío",
+ "Filename" : "Nombre del archivo",
+ "Upload date" : "Fecha de carga",
+ "Size" : "Tamaño",
+ "Upload or enter your OTP secret" : "Carge o ingrese su secreto de OTP",
+ "Current OTP settings" : "Configuraciones actuales de OTP",
+ "Issuer" : "Quien levanta",
+ "Secret" : "Secreto",
+ "Renew interval" : "Intervalo de renovación",
+ "Disabled" : "Deshabilitado",
+ "Day(s)" : "Día(s)",
+ "Week(s)" : "Semana(s)",
+ "Month(s)" : "Mes(es)",
+ "Year(s)" : "Año(s)",
+ "Password generation settings" : "Configuraciones de generación de  contraseñas",
+ "Password length" : "Longitud de contraseña",
+ "Minimum amount of digits" : "Número mínimo de dígitos",
+ "Use uppercase letters" : "Usar mayúsculas",
+ "Use lowercase letters" : "Usar minúsculas",
+ "Use numbers" : "Usar números",
+ "Use special characters" : "Usar caracteres especiales",
+ "Avoid ambiguous characters" : "Evitar caracteres ambíguos",
+ "Require every character type" : "Requerir todos los tipos de caracteres",
+ "Export type" : "Tipo de exportación",
+ "Export" : "Exportar",
+ "Enter vault password to confirm export." : "Ingresar contraseña de bóveda para confirmar la exportación. ",
+ "Rename vault" : "Renombrar bóveda",
+ "New vault name" : "Nuevo nombre de la bóveda",
+ "Change" : "Cambiar",
+ "Change vault key" : "Cambiar la llave de la bóveda",
+ "Old vault password" : "Anterior contraseña de la bóveda",
+ "New vault password" : "Nueva contraseña de la bóveda",
+ "Please wait your vault is being updated, do not leave this page." : "Favor de aguardar mientras se actualiza su bóveda, no salga de esta página. ",
+ "Processing" : "Procesando",
+ "Total progress" : "Progreso total",
+ "About Passman" : "Acerca de Passman",
+ "Version" : "Versión",
+ "Donate to support development" : "Donar en apoyo al desarrollo",
+ "Bookmarklet" : "Marcador a código",
+ "Save your passwords with 1 click!" : "¡Guarde sus contraseñas con 1 sólo click!",
+ "Drag below button to your bookmark toolbar." : "Arrastre el botón de abajo hasta su barra de herramientas de marcadores. ",
+ "Delete vault" : "Borrar bóveda",
+ "Vault password" : "Bóveda de contraseñas",
+ "This process is irreversible" : "Este proceso es irreversible",
+ "Delete my precious passwords" : "Borrar mis preciadas contraseñas",
+ "Yes, delete my precious passwords" : "Sí, borrar mis preciadas contraseñas",
+ "Import type" : "Tipo de importación",
+ "Import" : "Importar",
+ "Read progress" : "Progreso de la lectura",
+ "Upload progress" : "Progreso de la carga",
+ "Private Key" : "Llave privada",
+ "Public key" : "Llave pública",
+ "Key size" : "Tamaño de la llave",
+ "Save keys" : "Guardar llaves",
+ "Generate sharing keys" : "Generar llaves de comparitr",
+ "Generating sharing keys" : "Generando llaves de comparitr",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "La herramienta de contraseñas escaneará su contraseña, calculará el tiempo promedio para romperla y enlistará aquellas que estén por debajo del umbral",
+ "Minimum password stength" : "Fortaleza mínima de contraseña",
+ "Start scan" : "Iniciar escaneo",
+ "Result" : "Resultado",
+ "A total of {{scan_result}} weak credentials were found." : "Se encontraron un total de {{scan_result}} credenciales débiles.",
+ "Score" : "Calificación",
+ "Action" : "Acción",
+ "Missing users? Only users that have vaults are shown." : "¿Faltan usuarios? Sólo se muestran los usuarios que tienen bóvedas.",
+ "Cyphering" : "Encriptando",
+ "Uploading" : "Cargando",
+ "User" : "Usuario",
+ "Crypto time" : "Tiempo criptográfico",
+ "Total time spent cyphering" : "Tiempo total destinado a encriptar",
+ "Read" : "Leer",
+ "Write" : "Escribir",
+ "Files" : "Archivo",
+ "Revisions" : "Revisiones",
+ "Pending" : "Pendiente",
+ "Enable link sharing" : "Habilitar compartir link",
+ "Share until date" : "Compartir hasta fecha",
+ "Expire after views" : "Expirar después de visualizaciones",
+ "Show files" : "Mostrar archivos",
+ "Details" : "Detalles",
+ "Hide details" : "Ocultar detalles",
+ "Password score" : "Calificación de contraseña",
+ "Cracking times" : "Tiempos para romper la contraseña",
+ "100 / hour" : "100 / hora",
+ "Throttled online attack" : "Ataque en línea regulado",
+ "10 / second" : "10 / segundo",
+ "Unthrottled online attack" : "Ataque en línea sin regular",
+ "10k / second" : "10k / segundo",
+ "Offline attack, slow hash, many cores" : "Ataque sin conexión, funciones de resumen lentas, muchos núcleos",
+ "10B / second" : "10k / segundo",
+ "Offline attack, fast hash, many cores" : "Ataque sin conexión, funciones de resumen rápidas, muchos núcleos",
+ "Match sequence" : "Secuencia con coincidencia",
+ "See match sequence" : "Ver secuencia con coincidencia",
+ "Pattern" : "Patrón",
+ "Matched word" : "Palabra con coincidencia",
+ "Dictionary name" : "Nombre del diccionario",
+ "Rank" : "Rango",
+ "Reversed" : "Revertido",
+ "Guesses" : "Intentos",
+ "Base guesses" : "Intentos base",
+ "Uppercase variations" : "Variaciones en mayúsculas",
+ "l33t-variations" : "Variaciones en l33t",
+ "Showing revisions of" : "Mostrando revisiones de",
+ "Revision of" : "Revisión de",
+ "by" : "por",
+ "No revisions found." : "No se encontraron revisiones. ",
+ "Label" : "Etiqueta",
+ "Restore revision" : "Restaurar revisión",
+ "Delete revision" : "Borrar revisión",
+ "Edit credential" : "Editar credenciales",
+ "Create new credential" : "Crear credenciales nuevas",
+ "Save" : "Guardar",
+ "Cancel" : "Cancelar",
+ "Settings" : "Configuraciones ",
+ "Share credential {{credential}}" : "Compartir credenciales {{credential}}",
+ "Unshare" : "Dejar de compartir",
+ "Showing deleted since" : "Mostrando borrados desde",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciales",
+ "Account" : "Cuenta",
+ "Password" : "Contraseña",
+ "OTP" : "OTP",
+ "E-mail" : "Correo electrónico",
+ "URL" : "URL",
+ "Notes" : "Notas",
+ "Changed" : "Cambiado",
+ "Created" : "Creado",
+ "Edit" : "Editar",
+ "Delete" : "Borrar",
+ "Share" : "Compartir",
+ "Recover" : "Recuperar",
+ "Destroy" : "Destruir",
+ "Use regex" : "Usar regex",
+ "You have incoming share requests." : "Usted recibió solicitudes para compartir. ",
+ "Permissions" : "Permisos",
+ "Received from" : "Recibido de",
+ "Date" : "Fecha",
+ "Accept" : "Aceptar",
+ "Decline" : "Declinar",
+ "You have {{session_time}} left before logout." : "Cuenta con {{session_time}} antes de que su sesión se cierre.",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "¡Su bóveda se encuentra bloqueada por {{time}} debido a los {{tries}} intentos fallidos!",
+ "Last accessed" : "Último acceso",
+ "Never" : "Nunca",
+ "No vaults found, why not create one?" : "No se encontraron bóvedas. ¿Por qué no crear una?",
+ "Password strength must be at least: {{strength}}" : "La fortaleza de la contraseña debe ser por lo menos: {{strength}}",
+ "Please give your new vault a name." : "Favor de ingresar el nombre de su bóveda nueva. ",
+ "Repeat vault password" : "Repita la contraseña de la bóveda",
+ "Create vault" : "Crear bóveda",
+ "Go back to vaults" : "Regresar a bóvedas",
+ "Please input the password for" : "Favor de ingresar la contraseña para",
+ "Log into this vault automatically." : "Inicie sesión en esta bóveda automáticamente.",
+ "Decrypt vault" : "Decriptar bóveda",
+ "If you want this vault to be removed you can request that here." : "Si desea que esta bóveda sea eliminada puede solicitarlo aquí.",
+ "Request vault destruction" : "Solicitar la destrucción de la bóveda",
+ "Yes, request an admin to destroy this vault" : "Sí, solicitar a un administrador la destrucción de esta bóveda",
+ "Cancel destruction request" : "Cancelar la solicitud de destrucción",
+ "Vault destruction requested" : "Destrucción de la bóveda solicitada",
+ "Request removed" : "Solicitud eliminada",
+ "Destruction request pending" : "Solicitud de destrucción pendiente",
+ "Logged in to {{vault_name}}" : "Inició sesión en {{vault_name}}",
+ "Change vault" : "Cambiar bóveda",
+ "Deleted credentials" : "Credenciales borradas",
+ "Logout" : "Salir",
+ "Donate" : "Donar",
+ "Someone has shared a credential with you." : "Alguien ha compartido credenciales con usted. ",
+ "Click here to request it" : "Haga click para solicitarlo",
+ "Error while saving field" : "Se presentó un error al guardar el campo",
+ "A Passman item has been created, modified or deleted" : "Un elemento de Passman ha sido creado, modificado o borrado",
+ "A Passman item has expired" : "El elemento de Passman ha expirado",
+ "A Passman item has been shared" : "Un elemento de Passman ha sido compartido",
+ "A Passman item has been renamed" : "Un elemento de Passman ha sido renombrado",
+ "%1$s has been created by %2$s" : "%1$s ha sido creado por %2$s",
+ "You created %1$s" : "Usted creó %1$s",
+ "%1$s has been updated by %2$s" : "%1$s ha sido actualizado por %2$s",
+ "You updated %1$s" : "Usted actualizó %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$s ha revisado %1$s a la revisón de %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "Usted revirtió %1$s de vuelta a la revisión de %3$s",
+ "%3$s has renamed %1$s to %2$s" : "%3$s ha renombrado %1$s como %2$s",
+ "You renamed %1$s to %2$s" : "Usted renombro %1$s como %2$s",
+ "%1$s has been deleted by %2$s" : "%1$s ha sido borrado por %2$s",
+ "You deleted %1$s" : "Usted borró %1$s",
+ "%1$s has been recovered by %2$s" : "%1$s ha sido recuperado por %2$s",
+ "You recovered %1$s" : "Usted recuperó %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%1$s ha sido borrado permanentemente por %2$s",
+ "You permanently deleted %1$s" : "Ha borrado permanentemente %1$s",
+ "The password of %1$s has expired, renew it now." : "La contraseña de %1$s ha expirado, renuévela ahora.",
+ "%1$s has been shared with %2$s" : "%1$s ha sido compartido con %2$s",
+ "You received a share request for %1$s from %2$s" : "Usted ha recibido una solicitud para compartir de %1$s desde%2$s",
+ "%s has been shared with a link" : "%s ha sido compartido con un link",
+ "Your credential \"%s\" expired, click here to update the credential." : "Sus credenciales \"%s\" han expirado, haga click aquí para actualizarlas.",
+ "Remind me later" : "Recordarme más tarde",
+ "Ignore" : "Ignorar",
+ "%s shared \"%s\" with you. Click here to accept" : "%s ha compartido \"%s\" con usted. Haga click aquí para aceptar",
+ "%s has declined your share request for \"%s\"." : "%s ha declinado su solicitud para compartir \"%s\".",
+ "%s has accepted your share request for \"%s\"." : "%s ha aceptado su solicitud para compartir \"%s\".",
+ "Passman" : "Passman",
+ "Unable to get version info" : "No fue posible obtener la información de la versión",
+ "Passman Settings" : "Configuraciones de Passman",
+ "A newer version of Passman is available" : "Una nueva versión de Passman se encuentra disponible",
+ "Password sharing" : "Compartir contraseña",
+ "Credential mover" : "Mover credenciales",
+ "Vault destruction requests" : "Solicitudes para destruir bóvedas",
+ "Check for new versions" : "Verificar si hay nuevas versiones",
+ "Enable HTTPS check" : "Habilitar verificación HTTPS",
+ "Disable context menu" : "Deshabilitar menú contextual",
+ "Disable JavaScript debugger" : "Deshabilitar el depurador JavaScript",
+ "Allow users on this server to share passwords with a link" : "Permitir a los usuarios en este servidor compartir contraseñas con un link",
+ "Allow users on this server to share passwords with other users" : "Permitir a los usuarios en este servidor compartir contraseñas con otros usuarios",
+ "Move credentials from one account to another" : "Mover credenciales de una cuenta a otra",
+ "Source account" : "Cuenta fuente",
+ "Destination account" : "Cuenta destino",
+ "Credentials moved!" : "¡Se movieron las credenciales!",
+ "Requests to destroy vault" : "Solicitudes para destruir bóvedas",
+ "Request ID" : "ID de solicitud",
+ "Requested by" : "Solciitado por",
+ "Reason" : "Razón",
+ "Connection to server lost" : "Se perdió la conexión al servidor",
+ "Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
+ "Saving..." : "Guardando ...",
+ "Dismiss" : "Descartar",
+ "seconds ago" : "segundos"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/l10n/es_MX.js b/l10n/es_MX.js
index 6142f16e..007a5b28 100644
--- a/l10n/es_MX.js
+++ b/l10n/es_MX.js
@@ -7,22 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Las contraseñas no coinciden",
"General" : "General",
"Custom Fields" : "Campos personalizados",
- "Please fill in a label!" : "¡Favor de llenar la etiqueta!",
- "Please fill in a value!" : "¡Favor de llenar el valor!",
+ "Please fill in a label." : "Por favor llena la etiqueta.",
+ "Please fill in a value." : "Por favor llena el valor.",
"Error loading file" : "Se presentó un error al cargar el archivo",
- "An error happened during decryption" : "Se presentó un error al decriptar",
+ "An error occurred during decryption" : "Se presentó un error durante la decripción",
"Credential created!" : "¡Credenciales creadas!",
"Credential deleted" : "Credenciales borradas",
"Credential updated" : "Credenciales actualizadas",
"Credential recovered" : "Credenciales recuperadas",
"Credential destroyed" : "Credenciales destruidas",
- "Error downloading file, you probably don't have enough permissions" : "Se presentó un error al descargar el archivo, usted posiblemente no cuenta con suficientes privilegios",
+ "Error downloading file, you probably don't have sufficient permissions" : "Se presentó un error al descargar el archivo, probablemente no tengas suficientes permisos",
"Invalid QR code" : "Código QR inválido",
"Starting export" : "Comenzando exportación",
"Decrypting credentials" : "Decriptando credenciales",
"Done" : "Terminado",
- "File read successfully!" : "¡El archivo se leyó exitosamente!",
- "Follow the following steps to import your file" : "Favor de seguir los siguientes pasos para importar su archivo",
+ "File read successfully." : "El archivo se leyó exitosamente.",
+ "Proceed with the following steps to import your file" : "Sigue los siguientes pasos para importar tu archivo",
"Credential has no label, skipping" : "Las credenciales no tienen etiqueta, omitiendo",
"Adding {{credential}}" : "Agregando {{credential}}",
"Added {{credential}}" : "{{credential}} agregado",
@@ -30,32 +30,32 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "{{num}} credenciales interpretadas, comenzando a importar",
"Importing" : "Importando",
"Start import" : "Comenzar importación",
- "Select csv file" : "Seleccione archivo csv",
- "Parsed {{rows}} lines from csv file" : "{{rows}} regnlones interpretados del archivo csv",
+ "Select CSV file" : "Selecciona el archivo CSV",
+ "Parsed {{rows}} lines from CSV file" : "{{num}} líneas interpretadas del archivo CSV",
"Skip first row" : "Omitir primer renglón",
- "You need to assign the label field before you can start the import." : "Necesita asignar el campo etiqueta antes de que pueda comenzar la importación.",
- "First 5 lines of the csv are shown." : "Se muestran las primeras 5 líneas del archivo csv.",
- "Assign the proper fields to each column." : "Asigne el campo correspondiente a cada columna. ",
- "Example imported credential" : "Ejemplo de credenciales importadas",
- "Missing an importer? Try it with the generic csv importer." : "¿Necesita un importador? Pruebe el importador genérico de csv. ",
+ "You need to assign the label field before you can start the import." : "Necesitas asignar el campo etiqueta antes de que puedas comenzar la importación.",
+ "The first 5 lines of the CSV are shown." : "Se muestran las primeras 5 líneas del CSV.",
+ "Assign the proper fields to each column." : "Asigna el campo correspondiente a cada columna. ",
+ "Example of imported credential" : "Ejemplo de unas credenciales importadas",
+ "Missing an importer? Try it with the generic CSV importer." : "¿Requieres de una herramienta para importar? Prueba con la herramienta genérica para importar CSV.",
"Go back to importers." : "Regresar a importadores.",
"Revision deleted" : "Revisión borrada",
"Revision restored" : "Revisión restaurada",
- "Save in passman" : "Guardar en passman",
- "Settings saved" : "Ajustes guardados",
- "General settings" : "Ajustes generales",
- "Password Audit" : "Auditoria de contraseñas",
- "Password settings" : "Ajustes de contraseña",
+ "Save in Passman" : "Guardar en Passman",
+ "Settings saved" : "Configuraciones guardadas",
+ "General settings" : "Configuraciones generales",
+ "Password audit" : "Auditoria de contraseñas",
+ "Password settings" : "Configuraciones de contraseña",
"Import credentials" : "Importar credenciales",
"Export credentials" : "Exportar credenciales",
"Sharing" : "Compartiendo",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "¿Está seguro que desea salir? Esto va a CORROMPER todas sus credenciales",
- "Your old password is incorrect!" : "¡Su contraseña anterior es incorrecta!",
- "New passwords do not match!" : "¡Las nuevas contraseñas no son iguales!",
- "Please login with your new vault password" : "Favor de iniciar sesión con su nueva contraseña de bóveda",
+ "Are you sure you want to leave? This will destroy all your credentials" : "¿Estás seguro que deseas salir? Esto destruirá todas tus credenciales",
+ "Your old password is incorrect!" : "¡Tu contraseña anterior es incorrecta!",
+ "New password does not match!" : "¡La nueva contraseña no coincide!",
+ "Please log in with your new vault password" : "Por favor inicia sesión con tu nueva contraseña de bóveda",
"Share with users and groups" : "Compartir con otros usuarios y grupos",
"Share link" : "Compartir liga",
- "Are you sure you want to leave? This will corrupt this credential" : "¿Está seguro que desea salir? Esto va a corrpomer estas credenciales",
+ "Are you sure you want to leave? This will corrupt this credential" : "¿Estás seguro que deseas salir? Esto va a corromper estas credenciales",
"Credential unshared" : "Credenciales no compartidas",
"Credential shared" : "Credenciales compartidas",
"Saved!" : "¡Guardado!",
@@ -70,12 +70,12 @@ OC.L10N.register(
"Copy password to clipboard" : "Copiar contraseña al portapapeles",
"Password copied to clipboard!" : "¡Contraseña copiada al portapapeles!",
"Complete" : "Terminar",
- "Username" : "Nombre de usuario",
+ "Username" : "Usuario",
"Repeat password" : "Repetir contraseña",
- "Add Tag" : "Agregar etiqueta",
+ "Add tag" : "Agregar etiqueta",
"Field label" : "Etiqueta del campo",
"Field value" : "Valor del campo",
- "Choose a file" : "Seleccione un archivo",
+ "Choose a file" : "Selecciona un archivo",
"Text" : "Texto",
"File" : "Archivo",
"Add" : "Agregar",
@@ -86,19 +86,19 @@ OC.L10N.register(
"Filename" : "Nombre del archivo",
"Upload date" : "Fecha de carga",
"Size" : "Tamaño",
- "Upload or enter your OTP secret" : "Carge o ingrese su secreto de OTP",
- "Current OTP settings" : "Ajustes actuales de OTP",
+ "Upload or enter your OTP secret" : "Carga o ingresa tu secreto de OTP",
+ "Current OTP settings" : "Configuraciones actuales de OTP",
"Issuer" : "Quien levanta",
"Secret" : "Secreto",
- "Expire date" : "Fecha de expiración",
- "No expire date set" : "No se ha establecido la fecha de expiración ",
+ "Expiration date" : "Fecha de expiración",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
"Renew interval" : "Intervalo de renovación",
"Disabled" : "Deshabilitado",
"Day(s)" : "Día(s)",
"Week(s)" : "Semana(s)",
"Month(s)" : "Mes(es)",
"Year(s)" : "Año(s)",
- "Password generation settings" : "Ajustes de generación de  contraseñas",
+ "Password generation settings" : "Configuraciones de generación de contraseñas",
"Password length" : "Longitud de contraseña",
"Minimum amount of digits" : "Número mínimo de dígitos",
"Use uppercase letters" : "Usar mayúsculas",
@@ -109,28 +109,28 @@ OC.L10N.register(
"Require every character type" : "Requerir todos los tipos de caracteres",
"Export type" : "Tipo de exportación",
"Export" : "Exportar",
- "Enter vault password to confirm export." : "Ingresar contraseña de bóveda para confirmar la exportación. ",
+ "Enter vault password to confirm export." : "Ingresa la contraseña de la bóveda para confirmar la exportación. ",
"Rename vault" : "Renombrar bóveda",
"New vault name" : "Nuevo nombre de la bóveda",
"Change" : "Cambiar",
"Change vault key" : "Cambiar la llave de la bóveda",
"Old vault password" : "Anterior contraseña de la bóveda",
"New vault password" : "Nueva contraseña de la bóveda",
- "New vault password repeat" : "Repetir nueva contraseña de la bóveda",
- "Please wait your vault is being updated, do not leave this page." : "Favor de aguardar mientras se actualiza su bóveda, no salga de esta página. ",
+ "Repeat new vault password" : "Repite la nueva contraseña de la bóveda",
+ "Please wait your vault is being updated, do not leave this page." : "Por favor aguarda mientras se actualiza tu bóveda, no salgas de esta página. ",
"Processing" : "Procesando",
"Total progress" : "Progreso total",
"About Passman" : "Acerca de Passman",
"Version" : "Versión",
"Donate to support development" : "Donar en apoyo al desarrollo",
"Bookmarklet" : "Marcador a código",
- "Save your passwords with 1 click!" : "¡Guarde sus contraseñas con 1 sólo click!",
- "Drag below button to your bookmark toolbar." : "Arrastre el botón de abajo hasta su barra de herramientas de marcadores. ",
+ "Save your passwords with 1 click!" : "¡Guarda tus contraseñas con 1 sólo click!",
+ "Drag below button to your bookmark toolbar." : "Arrastra el botón de abajo hasta tu barra de herramientas de marcadores. ",
"Delete vault" : "Borrar bóveda",
"Vault password" : "Bóveda de contraseñas",
"This process is irreversible" : "Este proceso es irreversible",
"Delete my precious passwords" : "Borrar mis preciadas contraseñas",
- "Deleting {{password}}..." : "Borrando {{password}}...",
+ "Deleting {{password}}…" : "Borrando {{password}}…",
"Yes, delete my precious passwords" : "Sí, borrar mis preciadas contraseñas",
"Import type" : "Tipo de importación",
"Import" : "Importar",
@@ -141,20 +141,21 @@ OC.L10N.register(
"Key size" : "Tamaño de la llave",
"Save keys" : "Guardar llaves",
"Generate sharing keys" : "Generar llaves de comparitr",
- "Generating sharing keys" : "Generando llaves de comparitr",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "La herramienta de contraseñas analizara su contraseña, calculará el tiempo promedio para romperla y si está por debajo del umbral, los mostrará",
+ "Generating sharing keys" : "Generando llaves para comparitr",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "La herramienta de contraseñas escaneará tu contraseña, calculará el tiempo promedio para romperla y enlistará aquellas que estén por debajo del umbral",
"Minimum password stength" : "Fortaleza mínima de contraseña",
- "Passman scanned your passwords, and here is the result." : "Passman analizó sus contraseñas, el resultado a continuación. ",
- "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} credenciales débiles.",
+ "Start scan" : "Iniciar escaneo",
+ "Result" : "Resultado",
+ "A total of {{scan_result}} weak credentials were found." : "Se encontraron un total de {{scan_result}} credenciales débiles.",
"Score" : "Calificación",
"Action" : "Acción",
- "Search users or groups..." : "Buscar usuarios o grupos ...",
+ "Search users or groups…" : "Buscar usuarios o grupos...",
"Missing users? Only users that have vaults are shown." : "¿Faltan usuarios? Sólo se muestran los usuarios que tienen bóvedas.",
"Cyphering" : "Encriptando",
"Uploading" : "Cargando",
"User" : "Usuario",
"Crypto time" : "Tiempo criptográfico",
- "Total time spent cyphering" : "Tiempo total destinado a encriptar",
+ "Total time spent cyphering" : "Tiempo total encriptando",
"Read" : "Leer",
"Write" : "Escribir",
"Files" : "Archivo",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Habilitar compartir liga",
"Share until date" : "Compartir hasta fecha",
"Expire after views" : "Expirar después de visualizaciones",
- "Click share first" : "Haga click en compartir primero",
+ "Click Share first" : "Has click en share antes",
"Show files" : "Mostrar archivos",
"Details" : "Detalles",
"Hide details" : "Ocultar detalles",
@@ -174,10 +175,10 @@ OC.L10N.register(
"10 / second" : "10 / segundo",
"Unthrottled online attack" : "Ataque en línea sin regular",
"10k / second" : "10k / segundo",
- "Offline attack, slow hash, many cores" : "Ataque fuera de línea, funciones de resumen lentas, muchos núcleos",
- "10B / second" : "10k / segundo",
- "Offline attack, fast hash, many cores" : "Ataque fuera de línea, funciones de resumen rápidas, muchos núcleos",
- "Match sequence" : "Secuencia con coincidencia",
+ "Offline attack, slow hash, many cores" : "Ataque sin conexión, funciones de resumen lentas, muchos núcleos",
+ "10B / second" : "10B / segundo",
+ "Offline attack, fast hash, many cores" : "Ataque sin conexión, funciones de resumen rápidas, muchos núcleos",
+ "Match sequence" : "Coincidencia en la secuencia ",
"See match sequence" : "Ver secuencia con coincidencia",
"Pattern" : "Patrón",
"Matched word" : "Palabra con coincidencia",
@@ -199,20 +200,20 @@ OC.L10N.register(
"Create new credential" : "Crear credenciales nuevas",
"Save" : "Guardar",
"Cancel" : "Cancelar",
- "Settings" : "Ajustes",
+ "Settings" : "Configuraciones ",
"Share credential {{credential}}" : "Compartir credenciales {{credential}}",
"Unshare" : "Dejar de compartir",
"Showing deleted since" : "Mostrando borrados desde",
- "All time" : "Tiempo total",
+ "Beginning" : "Comenzando",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciales",
- "Search credential..." : "Buscar credenciales ...",
+ "Search for credential…" : "Buscando las credenciales...",
"Account" : "Cuenta",
"Password" : "Contraseña",
"OTP" : "OTP",
"E-mail" : "Correo electrónico",
"URL" : "URL",
"Notes" : "Notas",
- "Expire time" : "Tiempo de expiración",
+ "Expiry time" : "Tiemp de expiración",
"Changed" : "Cambiado",
"Created" : "Creado",
"Edit" : "Editar",
@@ -221,91 +222,92 @@ OC.L10N.register(
"Recover" : "Recuperar",
"Destroy" : "Destruir",
"Use regex" : "Usar regex",
- "You have incoming share requests." : "Usted recibió solicitudes para compartir. ",
- "If you want to put the credential in a other vault," : "Si usted quiere colocar las credenciales en otra bóveda,",
- "logout of this vault and login to the vault you want the shared credential in." : "salga de esta bóveda e inicie sesión a la bóveda en la que desea tener las credenciales compartidas",
+ "You have incoming share requests." : "Recibiste solicitudes para compartir. ",
+ "If you want to put the credential in another vault," : "Si quieres colocar las credenciales en otra bóveda, ",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Sal de esta bóveda y entra a la bóveda en la que quieras compartir las credenciales. ",
"Permissions" : "Permisos",
"Received from" : "Recibido de",
"Date" : "Fecha",
"Accept" : "Aceptar",
"Decline" : "Declinar",
- "You have {{session_time}} left before logout." : "Cuenta con {{session_time}} antes de que su sesión se cierre.",
- "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "¡Su bóveda se encuentra bloqueada por {{time}} debido a los {{tries}} intentos fallidos!",
+ "You have {{session_time}} left before logout." : "Cuentas con {{session_time}} antes de que tu sesión se cierre.",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "¡Tu bóveda se encuentra bloqueada por {{time}} debido a los {{tries}} intentos fallidos!",
"Last accessed" : "Último acceso",
"Never" : "Nunca",
"No vaults found, why not create one?" : "No se encontraron bóvedas. ¿Por qué no crear una?",
"Password strength must be at least: {{strength}}" : "La fortaleza de la contraseña debe ser por lo menos: {{strength}}",
- "Please give your new vault a name." : "Favor de ingresar el nombre de su bóveda nueva. ",
+ "Please give your new vault a name." : "Por favor ingresa el nombre de tu bóveda nueva. ",
"Repeat vault password" : "Repita la contraseña de la bóveda",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Su llave para compartir tendrá una fortaleza de 1024 bits, usted lo podrá cambiar en los ajustes. ",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Tus llaves para compartir tendrán una fuerza de 1024 bits, que podrás cambiar después en las Configuraciones. ",
"Create vault" : "Crear bóveda",
"Go back to vaults" : "Regresar a bóvedas",
- "Please input the password for" : "Favor de ingresar la contraseña para",
- "Set this vault as default." : "Establercer esta bóveda por defecto. ",
- "Login automatically to this vault." : "Iniciar sesión automáticamente a esta bóveda",
- "Logout of this vault automatically after: " : "Salir de esta bóveda automáticamente después de:",
+ "Please input the password for" : "Por favor ingresa la contraseña para",
+ "Set this vault as the default." : "Establecer esta bóveda como la predeterminada.",
+ "Log into this vault automatically." : "Inicia sesión en esta bóveda automáticamente.",
+ "Log out of this vault automatically after: " : "Salir de esta bóveda automáticamente después de:",
"Decrypt vault" : "Decriptar bóveda",
- "Seems you lost the vault password and you're unable to login." : "Al parecer ha perdido la contraseña de esta bóveda y no puede iniciar sesión. ",
- "If you want this vault removed you can request removal of the vault here." : "Si desdea eliminar esta bóveda, puede solicitarlo aquí.",
- "An admin then accept to the request (or not)" : "Entonces un administrador acepto (o rechazo) la solicitud",
- "After an admin destroy's this vault, all credentials will be lost" : "Después de que el adminsitrador destruya la bóveda, todas las credenciales se perderán ",
- "Reason to request deletion (optional):" : "Razón por la que solcita el borrado (opcional):",
+ "Seems you lost the vault password and you're unable to log in." : "Parece que perdiste la contraseña de la bóveda y no puedes iniciar sesión. ",
+ "If you want this vault to be removed you can request that here." : "Si deseas que esta bóveda sea eliminada puedes solicitarlo aquí.",
+ "An admin then accepts or declines the request" : "Un administrador entonces acepta o declina la solicitud",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Después de que un administrador destruya la bóveda, todas las credenciales se perderán",
+ "Reason for requesting deletion (optional):" : "Razón por la que se solicita el borrado (opcional):",
"Request vault destruction" : "Solicitar la destrucción de la bóveda",
"Yes, request an admin to destroy this vault" : "Sí, solicitar a un administrador la destrucción de esta bóveda",
"Cancel destruction request" : "Cancelar la solicitud de destrucción",
"Vault destruction requested" : "Destrucción de la bóveda solicitada",
"Request removed" : "Solicitud eliminada",
"Destruction request pending" : "Solicitud de destrucción pendiente",
- "Warning! Adding credentials over http can be insecure!" : "¡Advertncia! ¡Agregar credenciales sobre http puede ser inserguro!",
+ "Warning! Adding credentials over HTTP is insecure!" : "¡Advertencia! ¡Agregar credenciales sobre HTTP es inseguro!",
"Logged in to {{vault_name}}" : "Inició sesión en {{vault_name}}",
"Change vault" : "Cambiar bóveda",
"Deleted credentials" : "Credenciales borradas",
"Logout" : "Salir",
- "Donate" : "Donar",
- "Someone has shared a credential with you." : "Alguien ha compartido credenciales con usted. ",
- "Click here to request it" : "Haga click para solicitarlo",
- "Loading..." : "Cargando...",
- "Awwhh.... credential not found. Maybe it expired" : "Awwhh.... credenciales no encontradas. Tal vez expiraron",
+ "Donate" : "Dona",
+ "Someone has shared a credential with you." : "Alguien ha compartido credenciales contigo. ",
+ "Click here to request it" : "Has click para solicitarlo",
+ "Loading…" : "Cargando...",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh... no se encontraron las credenciales. Tal vez expiraron",
"Error while saving field" : "Se presentó un error al guardar el campo",
"A Passman item has been created, modified or deleted" : "Un elemento de Passman ha sido creado, modificado o borrado",
"A Passman item has expired" : "El elemento de Passman ha expirado",
"A Passman item has been shared" : "Un elemento de Passman ha sido compartido",
"A Passman item has been renamed" : "Un elemento de Passman ha sido renombrado",
"%1$s has been created by %2$s" : "%1$s ha sido creado por %2$s",
- "You created %1$s" : "Usted creó %1$s",
+ "You created %1$s" : "Creaste %1$s",
"%1$s has been updated by %2$s" : "%1$s ha sido actualizado por %2$s",
- "You updated %1$s" : "Usted actualizó %1$s",
+ "You updated %1$s" : "Actualisaste %1$s",
"%2$s has revised %1$s to the revision of %3$s" : "%2$s ha revisado %1$s a la revisón de %3$s",
- "You reverted %1$s back to the revision of %3$s" : "Usted revirtió %1$s de vuelta a la revisión de %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "Revirtiste %1$s de vuelta a la revisión de %3$s",
"%3$s has renamed %1$s to %2$s" : "%3$s ha renombrado %1$s como %2$s",
- "You renamed %1$s to %2$s" : "Usted renombro %1$s como %2$s",
+ "You renamed %1$s to %2$s" : "Renombraste %1$s como %2$s",
"%1$s has been deleted by %2$s" : "%1$s ha sido borrado por %2$s",
- "You deleted %1$s" : "Usted borró %1$s",
+ "You deleted %1$s" : "Borraste %1$s",
"%1$s has been recovered by %2$s" : "%1$s ha sido recuperado por %2$s",
- "You recovered %1$s" : "Usted recuperó %1$s",
+ "You recovered %1$s" : "Recuperaste %1$s",
"%1$s has been permanently deleted by %2$s" : "%1$s ha sido borrado permanentemente por %2$s",
- "You permanently deleted %1$s" : "Ha borrado permanentemente %1$s",
- "The password of %1$s has expired, renew it now." : "La contraseña de %1$s ha expirado, renuévela ahora.",
+ "You permanently deleted %1$s" : "Has borrado %1$s permanentemente",
+ "The password of %1$s has expired, renew it now." : "La contraseña de %1$s ha expirado, renuévala ahora.",
"%1$s has been shared with %2$s" : "%1$s ha sido compartido con %2$s",
- "You received a share request for %1$s from %2$s" : "Usted ha recibido una solicitud para compartir de %1$s desde%2$s",
+ "You received a share request for %1$s from %2$s" : "Recibiste una solicitud para compartir de %1$s desde %2$s",
"%s has been shared with a link" : "%s ha sido compartido con una liga",
- "Your credential \"%s\" expired, click here to update the credential." : "Sus credenciales \"%s\" han expirado, haga click aquí para actualizarlas.",
- "Remind me later" : "Recordarme más tarde",
+ "Your credential \"%s\" expired, click here to update the credential." : "Tus credenciales \"%s\" han expirado, has click aquí para actualizarlas.",
+ "Remind me later" : "Recuérdame más tarde",
"Ignore" : "Ignorar",
- "%s shared \"%s\" with you. Click here to accept" : "%s ha compartido \"%s\" con usted. Haga click aquí para aceptar",
- "%s has declined your share request for \"%s\"." : "%s ha declinado su solicitud para compartir \"%s\".",
- "%s has accepted your share request for \"%s\"." : "%s ha aceptado su solicitud para compartir \"%s\".",
+ "%s shared \"%s\" with you. Click here to accept" : "%s ha compartido \"%s\" contigo. Has click aquí para aceptar",
+ "%s has declined your share request for \"%s\"." : "%s ha declinado tu solicitud para compartir \"%s\".",
+ "%s has accepted your share request for \"%s\"." : "%s ha aceptado tu solicitud para compartir \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "No fue posible obtener la información de la versión",
- "Passman Settings" : "Ajustes de Passman",
- "Github version:" : "Versión de Github:",
- "A newer version of passman is available" : "Una nueva versión de Passman etá disponible",
+ "Passman Settings" : "Configuraciones de Passman",
+ "GitHub version:" : "Versión de GitHub:",
+ "A newer version of Passman is available" : "Hay una nueva versión de Passman disponible",
"Password sharing" : "Compartir contraseña",
"Credential mover" : "Mover credenciales",
"Vault destruction requests" : "Solicitudes para destruir bóvedas",
"Check for new versions" : "Verificar si hay nuevas versiones",
"Enable HTTPS check" : "Habilitar verificación HTTPS",
"Disable context menu" : "Deshabilitar menú contextual",
- "Disable javascript debugger" : "Deshabilitar el depurador de javascript",
+ "Disable JavaScript debugger" : "Deshabilitar el depurador JavaScript",
"Allow users on this server to share passwords with a link" : "Permitir a los usuarios en este servidor compartir contraseñas con una liga",
"Allow users on this server to share passwords with other users" : "Permitir a los usuarios en este servidor compartir contraseñas con otros usuarios",
"Move credentials from one account to another" : "Mover credenciales de una cuenta a otra",
@@ -320,6 +322,6 @@ OC.L10N.register(
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
"Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
- "seconds ago" : "segundos"
+ "seconds ago" : "hace segundos"
},
"nplurals=2; plural=(n != 1);");
diff --git a/l10n/es_MX.json b/l10n/es_MX.json
index a35fffdf..45ec6e13 100644
--- a/l10n/es_MX.json
+++ b/l10n/es_MX.json
@@ -5,22 +5,22 @@
"Passwords do not match" : "Las contraseñas no coinciden",
"General" : "General",
"Custom Fields" : "Campos personalizados",
- "Please fill in a label!" : "¡Favor de llenar la etiqueta!",
- "Please fill in a value!" : "¡Favor de llenar el valor!",
+ "Please fill in a label." : "Por favor llena la etiqueta.",
+ "Please fill in a value." : "Por favor llena el valor.",
"Error loading file" : "Se presentó un error al cargar el archivo",
- "An error happened during decryption" : "Se presentó un error al decriptar",
+ "An error occurred during decryption" : "Se presentó un error durante la decripción",
"Credential created!" : "¡Credenciales creadas!",
"Credential deleted" : "Credenciales borradas",
"Credential updated" : "Credenciales actualizadas",
"Credential recovered" : "Credenciales recuperadas",
"Credential destroyed" : "Credenciales destruidas",
- "Error downloading file, you probably don't have enough permissions" : "Se presentó un error al descargar el archivo, usted posiblemente no cuenta con suficientes privilegios",
+ "Error downloading file, you probably don't have sufficient permissions" : "Se presentó un error al descargar el archivo, probablemente no tengas suficientes permisos",
"Invalid QR code" : "Código QR inválido",
"Starting export" : "Comenzando exportación",
"Decrypting credentials" : "Decriptando credenciales",
"Done" : "Terminado",
- "File read successfully!" : "¡El archivo se leyó exitosamente!",
- "Follow the following steps to import your file" : "Favor de seguir los siguientes pasos para importar su archivo",
+ "File read successfully." : "El archivo se leyó exitosamente.",
+ "Proceed with the following steps to import your file" : "Sigue los siguientes pasos para importar tu archivo",
"Credential has no label, skipping" : "Las credenciales no tienen etiqueta, omitiendo",
"Adding {{credential}}" : "Agregando {{credential}}",
"Added {{credential}}" : "{{credential}} agregado",
@@ -28,32 +28,32 @@
"Parsed {{num}} credentials, starting to import" : "{{num}} credenciales interpretadas, comenzando a importar",
"Importing" : "Importando",
"Start import" : "Comenzar importación",
- "Select csv file" : "Seleccione archivo csv",
- "Parsed {{rows}} lines from csv file" : "{{rows}} regnlones interpretados del archivo csv",
+ "Select CSV file" : "Selecciona el archivo CSV",
+ "Parsed {{rows}} lines from CSV file" : "{{num}} líneas interpretadas del archivo CSV",
"Skip first row" : "Omitir primer renglón",
- "You need to assign the label field before you can start the import." : "Necesita asignar el campo etiqueta antes de que pueda comenzar la importación.",
- "First 5 lines of the csv are shown." : "Se muestran las primeras 5 líneas del archivo csv.",
- "Assign the proper fields to each column." : "Asigne el campo correspondiente a cada columna. ",
- "Example imported credential" : "Ejemplo de credenciales importadas",
- "Missing an importer? Try it with the generic csv importer." : "¿Necesita un importador? Pruebe el importador genérico de csv. ",
+ "You need to assign the label field before you can start the import." : "Necesitas asignar el campo etiqueta antes de que puedas comenzar la importación.",
+ "The first 5 lines of the CSV are shown." : "Se muestran las primeras 5 líneas del CSV.",
+ "Assign the proper fields to each column." : "Asigna el campo correspondiente a cada columna. ",
+ "Example of imported credential" : "Ejemplo de unas credenciales importadas",
+ "Missing an importer? Try it with the generic CSV importer." : "¿Requieres de una herramienta para importar? Prueba con la herramienta genérica para importar CSV.",
"Go back to importers." : "Regresar a importadores.",
"Revision deleted" : "Revisión borrada",
"Revision restored" : "Revisión restaurada",
- "Save in passman" : "Guardar en passman",
- "Settings saved" : "Ajustes guardados",
- "General settings" : "Ajustes generales",
- "Password Audit" : "Auditoria de contraseñas",
- "Password settings" : "Ajustes de contraseña",
+ "Save in Passman" : "Guardar en Passman",
+ "Settings saved" : "Configuraciones guardadas",
+ "General settings" : "Configuraciones generales",
+ "Password audit" : "Auditoria de contraseñas",
+ "Password settings" : "Configuraciones de contraseña",
"Import credentials" : "Importar credenciales",
"Export credentials" : "Exportar credenciales",
"Sharing" : "Compartiendo",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "¿Está seguro que desea salir? Esto va a CORROMPER todas sus credenciales",
- "Your old password is incorrect!" : "¡Su contraseña anterior es incorrecta!",
- "New passwords do not match!" : "¡Las nuevas contraseñas no son iguales!",
- "Please login with your new vault password" : "Favor de iniciar sesión con su nueva contraseña de bóveda",
+ "Are you sure you want to leave? This will destroy all your credentials" : "¿Estás seguro que deseas salir? Esto destruirá todas tus credenciales",
+ "Your old password is incorrect!" : "¡Tu contraseña anterior es incorrecta!",
+ "New password does not match!" : "¡La nueva contraseña no coincide!",
+ "Please log in with your new vault password" : "Por favor inicia sesión con tu nueva contraseña de bóveda",
"Share with users and groups" : "Compartir con otros usuarios y grupos",
"Share link" : "Compartir liga",
- "Are you sure you want to leave? This will corrupt this credential" : "¿Está seguro que desea salir? Esto va a corrpomer estas credenciales",
+ "Are you sure you want to leave? This will corrupt this credential" : "¿Estás seguro que deseas salir? Esto va a corromper estas credenciales",
"Credential unshared" : "Credenciales no compartidas",
"Credential shared" : "Credenciales compartidas",
"Saved!" : "¡Guardado!",
@@ -68,12 +68,12 @@
"Copy password to clipboard" : "Copiar contraseña al portapapeles",
"Password copied to clipboard!" : "¡Contraseña copiada al portapapeles!",
"Complete" : "Terminar",
- "Username" : "Nombre de usuario",
+ "Username" : "Usuario",
"Repeat password" : "Repetir contraseña",
- "Add Tag" : "Agregar etiqueta",
+ "Add tag" : "Agregar etiqueta",
"Field label" : "Etiqueta del campo",
"Field value" : "Valor del campo",
- "Choose a file" : "Seleccione un archivo",
+ "Choose a file" : "Selecciona un archivo",
"Text" : "Texto",
"File" : "Archivo",
"Add" : "Agregar",
@@ -84,19 +84,19 @@
"Filename" : "Nombre del archivo",
"Upload date" : "Fecha de carga",
"Size" : "Tamaño",
- "Upload or enter your OTP secret" : "Carge o ingrese su secreto de OTP",
- "Current OTP settings" : "Ajustes actuales de OTP",
+ "Upload or enter your OTP secret" : "Carga o ingresa tu secreto de OTP",
+ "Current OTP settings" : "Configuraciones actuales de OTP",
"Issuer" : "Quien levanta",
"Secret" : "Secreto",
- "Expire date" : "Fecha de expiración",
- "No expire date set" : "No se ha establecido la fecha de expiración ",
+ "Expiration date" : "Fecha de expiración",
+ "No expiration date set" : "No se ha establecido la fecha de expiración",
"Renew interval" : "Intervalo de renovación",
"Disabled" : "Deshabilitado",
"Day(s)" : "Día(s)",
"Week(s)" : "Semana(s)",
"Month(s)" : "Mes(es)",
"Year(s)" : "Año(s)",
- "Password generation settings" : "Ajustes de generación de  contraseñas",
+ "Password generation settings" : "Configuraciones de generación de contraseñas",
"Password length" : "Longitud de contraseña",
"Minimum amount of digits" : "Número mínimo de dígitos",
"Use uppercase letters" : "Usar mayúsculas",
@@ -107,28 +107,28 @@
"Require every character type" : "Requerir todos los tipos de caracteres",
"Export type" : "Tipo de exportación",
"Export" : "Exportar",
- "Enter vault password to confirm export." : "Ingresar contraseña de bóveda para confirmar la exportación. ",
+ "Enter vault password to confirm export." : "Ingresa la contraseña de la bóveda para confirmar la exportación. ",
"Rename vault" : "Renombrar bóveda",
"New vault name" : "Nuevo nombre de la bóveda",
"Change" : "Cambiar",
"Change vault key" : "Cambiar la llave de la bóveda",
"Old vault password" : "Anterior contraseña de la bóveda",
"New vault password" : "Nueva contraseña de la bóveda",
- "New vault password repeat" : "Repetir nueva contraseña de la bóveda",
- "Please wait your vault is being updated, do not leave this page." : "Favor de aguardar mientras se actualiza su bóveda, no salga de esta página. ",
+ "Repeat new vault password" : "Repite la nueva contraseña de la bóveda",
+ "Please wait your vault is being updated, do not leave this page." : "Por favor aguarda mientras se actualiza tu bóveda, no salgas de esta página. ",
"Processing" : "Procesando",
"Total progress" : "Progreso total",
"About Passman" : "Acerca de Passman",
"Version" : "Versión",
"Donate to support development" : "Donar en apoyo al desarrollo",
"Bookmarklet" : "Marcador a código",
- "Save your passwords with 1 click!" : "¡Guarde sus contraseñas con 1 sólo click!",
- "Drag below button to your bookmark toolbar." : "Arrastre el botón de abajo hasta su barra de herramientas de marcadores. ",
+ "Save your passwords with 1 click!" : "¡Guarda tus contraseñas con 1 sólo click!",
+ "Drag below button to your bookmark toolbar." : "Arrastra el botón de abajo hasta tu barra de herramientas de marcadores. ",
"Delete vault" : "Borrar bóveda",
"Vault password" : "Bóveda de contraseñas",
"This process is irreversible" : "Este proceso es irreversible",
"Delete my precious passwords" : "Borrar mis preciadas contraseñas",
- "Deleting {{password}}..." : "Borrando {{password}}...",
+ "Deleting {{password}}…" : "Borrando {{password}}…",
"Yes, delete my precious passwords" : "Sí, borrar mis preciadas contraseñas",
"Import type" : "Tipo de importación",
"Import" : "Importar",
@@ -139,20 +139,21 @@
"Key size" : "Tamaño de la llave",
"Save keys" : "Guardar llaves",
"Generate sharing keys" : "Generar llaves de comparitr",
- "Generating sharing keys" : "Generando llaves de comparitr",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "La herramienta de contraseñas analizara su contraseña, calculará el tiempo promedio para romperla y si está por debajo del umbral, los mostrará",
+ "Generating sharing keys" : "Generando llaves para comparitr",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "La herramienta de contraseñas escaneará tu contraseña, calculará el tiempo promedio para romperla y enlistará aquellas que estén por debajo del umbral",
"Minimum password stength" : "Fortaleza mínima de contraseña",
- "Passman scanned your passwords, and here is the result." : "Passman analizó sus contraseñas, el resultado a continuación. ",
- "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} credenciales débiles.",
+ "Start scan" : "Iniciar escaneo",
+ "Result" : "Resultado",
+ "A total of {{scan_result}} weak credentials were found." : "Se encontraron un total de {{scan_result}} credenciales débiles.",
"Score" : "Calificación",
"Action" : "Acción",
- "Search users or groups..." : "Buscar usuarios o grupos ...",
+ "Search users or groups…" : "Buscar usuarios o grupos...",
"Missing users? Only users that have vaults are shown." : "¿Faltan usuarios? Sólo se muestran los usuarios que tienen bóvedas.",
"Cyphering" : "Encriptando",
"Uploading" : "Cargando",
"User" : "Usuario",
"Crypto time" : "Tiempo criptográfico",
- "Total time spent cyphering" : "Tiempo total destinado a encriptar",
+ "Total time spent cyphering" : "Tiempo total encriptando",
"Read" : "Leer",
"Write" : "Escribir",
"Files" : "Archivo",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Habilitar compartir liga",
"Share until date" : "Compartir hasta fecha",
"Expire after views" : "Expirar después de visualizaciones",
- "Click share first" : "Haga click en compartir primero",
+ "Click Share first" : "Has click en share antes",
"Show files" : "Mostrar archivos",
"Details" : "Detalles",
"Hide details" : "Ocultar detalles",
@@ -172,10 +173,10 @@
"10 / second" : "10 / segundo",
"Unthrottled online attack" : "Ataque en línea sin regular",
"10k / second" : "10k / segundo",
- "Offline attack, slow hash, many cores" : "Ataque fuera de línea, funciones de resumen lentas, muchos núcleos",
- "10B / second" : "10k / segundo",
- "Offline attack, fast hash, many cores" : "Ataque fuera de línea, funciones de resumen rápidas, muchos núcleos",
- "Match sequence" : "Secuencia con coincidencia",
+ "Offline attack, slow hash, many cores" : "Ataque sin conexión, funciones de resumen lentas, muchos núcleos",
+ "10B / second" : "10B / segundo",
+ "Offline attack, fast hash, many cores" : "Ataque sin conexión, funciones de resumen rápidas, muchos núcleos",
+ "Match sequence" : "Coincidencia en la secuencia ",
"See match sequence" : "Ver secuencia con coincidencia",
"Pattern" : "Patrón",
"Matched word" : "Palabra con coincidencia",
@@ -197,20 +198,20 @@
"Create new credential" : "Crear credenciales nuevas",
"Save" : "Guardar",
"Cancel" : "Cancelar",
- "Settings" : "Ajustes",
+ "Settings" : "Configuraciones ",
"Share credential {{credential}}" : "Compartir credenciales {{credential}}",
"Unshare" : "Dejar de compartir",
"Showing deleted since" : "Mostrando borrados desde",
- "All time" : "Tiempo total",
+ "Beginning" : "Comenzando",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciales",
- "Search credential..." : "Buscar credenciales ...",
+ "Search for credential…" : "Buscando las credenciales...",
"Account" : "Cuenta",
"Password" : "Contraseña",
"OTP" : "OTP",
"E-mail" : "Correo electrónico",
"URL" : "URL",
"Notes" : "Notas",
- "Expire time" : "Tiempo de expiración",
+ "Expiry time" : "Tiemp de expiración",
"Changed" : "Cambiado",
"Created" : "Creado",
"Edit" : "Editar",
@@ -219,91 +220,92 @@
"Recover" : "Recuperar",
"Destroy" : "Destruir",
"Use regex" : "Usar regex",
- "You have incoming share requests." : "Usted recibió solicitudes para compartir. ",
- "If you want to put the credential in a other vault," : "Si usted quiere colocar las credenciales en otra bóveda,",
- "logout of this vault and login to the vault you want the shared credential in." : "salga de esta bóveda e inicie sesión a la bóveda en la que desea tener las credenciales compartidas",
+ "You have incoming share requests." : "Recibiste solicitudes para compartir. ",
+ "If you want to put the credential in another vault," : "Si quieres colocar las credenciales en otra bóveda, ",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Sal de esta bóveda y entra a la bóveda en la que quieras compartir las credenciales. ",
"Permissions" : "Permisos",
"Received from" : "Recibido de",
"Date" : "Fecha",
"Accept" : "Aceptar",
"Decline" : "Declinar",
- "You have {{session_time}} left before logout." : "Cuenta con {{session_time}} antes de que su sesión se cierre.",
- "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "¡Su bóveda se encuentra bloqueada por {{time}} debido a los {{tries}} intentos fallidos!",
+ "You have {{session_time}} left before logout." : "Cuentas con {{session_time}} antes de que tu sesión se cierre.",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "¡Tu bóveda se encuentra bloqueada por {{time}} debido a los {{tries}} intentos fallidos!",
"Last accessed" : "Último acceso",
"Never" : "Nunca",
"No vaults found, why not create one?" : "No se encontraron bóvedas. ¿Por qué no crear una?",
"Password strength must be at least: {{strength}}" : "La fortaleza de la contraseña debe ser por lo menos: {{strength}}",
- "Please give your new vault a name." : "Favor de ingresar el nombre de su bóveda nueva. ",
+ "Please give your new vault a name." : "Por favor ingresa el nombre de tu bóveda nueva. ",
"Repeat vault password" : "Repita la contraseña de la bóveda",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Su llave para compartir tendrá una fortaleza de 1024 bits, usted lo podrá cambiar en los ajustes. ",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Tus llaves para compartir tendrán una fuerza de 1024 bits, que podrás cambiar después en las Configuraciones. ",
"Create vault" : "Crear bóveda",
"Go back to vaults" : "Regresar a bóvedas",
- "Please input the password for" : "Favor de ingresar la contraseña para",
- "Set this vault as default." : "Establercer esta bóveda por defecto. ",
- "Login automatically to this vault." : "Iniciar sesión automáticamente a esta bóveda",
- "Logout of this vault automatically after: " : "Salir de esta bóveda automáticamente después de:",
+ "Please input the password for" : "Por favor ingresa la contraseña para",
+ "Set this vault as the default." : "Establecer esta bóveda como la predeterminada.",
+ "Log into this vault automatically." : "Inicia sesión en esta bóveda automáticamente.",
+ "Log out of this vault automatically after: " : "Salir de esta bóveda automáticamente después de:",
"Decrypt vault" : "Decriptar bóveda",
- "Seems you lost the vault password and you're unable to login." : "Al parecer ha perdido la contraseña de esta bóveda y no puede iniciar sesión. ",
- "If you want this vault removed you can request removal of the vault here." : "Si desdea eliminar esta bóveda, puede solicitarlo aquí.",
- "An admin then accept to the request (or not)" : "Entonces un administrador acepto (o rechazo) la solicitud",
- "After an admin destroy's this vault, all credentials will be lost" : "Después de que el adminsitrador destruya la bóveda, todas las credenciales se perderán ",
- "Reason to request deletion (optional):" : "Razón por la que solcita el borrado (opcional):",
+ "Seems you lost the vault password and you're unable to log in." : "Parece que perdiste la contraseña de la bóveda y no puedes iniciar sesión. ",
+ "If you want this vault to be removed you can request that here." : "Si deseas que esta bóveda sea eliminada puedes solicitarlo aquí.",
+ "An admin then accepts or declines the request" : "Un administrador entonces acepta o declina la solicitud",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Después de que un administrador destruya la bóveda, todas las credenciales se perderán",
+ "Reason for requesting deletion (optional):" : "Razón por la que se solicita el borrado (opcional):",
"Request vault destruction" : "Solicitar la destrucción de la bóveda",
"Yes, request an admin to destroy this vault" : "Sí, solicitar a un administrador la destrucción de esta bóveda",
"Cancel destruction request" : "Cancelar la solicitud de destrucción",
"Vault destruction requested" : "Destrucción de la bóveda solicitada",
"Request removed" : "Solicitud eliminada",
"Destruction request pending" : "Solicitud de destrucción pendiente",
- "Warning! Adding credentials over http can be insecure!" : "¡Advertncia! ¡Agregar credenciales sobre http puede ser inserguro!",
+ "Warning! Adding credentials over HTTP is insecure!" : "¡Advertencia! ¡Agregar credenciales sobre HTTP es inseguro!",
"Logged in to {{vault_name}}" : "Inició sesión en {{vault_name}}",
"Change vault" : "Cambiar bóveda",
"Deleted credentials" : "Credenciales borradas",
"Logout" : "Salir",
- "Donate" : "Donar",
- "Someone has shared a credential with you." : "Alguien ha compartido credenciales con usted. ",
- "Click here to request it" : "Haga click para solicitarlo",
- "Loading..." : "Cargando...",
- "Awwhh.... credential not found. Maybe it expired" : "Awwhh.... credenciales no encontradas. Tal vez expiraron",
+ "Donate" : "Dona",
+ "Someone has shared a credential with you." : "Alguien ha compartido credenciales contigo. ",
+ "Click here to request it" : "Has click para solicitarlo",
+ "Loading…" : "Cargando...",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh... no se encontraron las credenciales. Tal vez expiraron",
"Error while saving field" : "Se presentó un error al guardar el campo",
"A Passman item has been created, modified or deleted" : "Un elemento de Passman ha sido creado, modificado o borrado",
"A Passman item has expired" : "El elemento de Passman ha expirado",
"A Passman item has been shared" : "Un elemento de Passman ha sido compartido",
"A Passman item has been renamed" : "Un elemento de Passman ha sido renombrado",
"%1$s has been created by %2$s" : "%1$s ha sido creado por %2$s",
- "You created %1$s" : "Usted creó %1$s",
+ "You created %1$s" : "Creaste %1$s",
"%1$s has been updated by %2$s" : "%1$s ha sido actualizado por %2$s",
- "You updated %1$s" : "Usted actualizó %1$s",
+ "You updated %1$s" : "Actualisaste %1$s",
"%2$s has revised %1$s to the revision of %3$s" : "%2$s ha revisado %1$s a la revisón de %3$s",
- "You reverted %1$s back to the revision of %3$s" : "Usted revirtió %1$s de vuelta a la revisión de %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "Revirtiste %1$s de vuelta a la revisión de %3$s",
"%3$s has renamed %1$s to %2$s" : "%3$s ha renombrado %1$s como %2$s",
- "You renamed %1$s to %2$s" : "Usted renombro %1$s como %2$s",
+ "You renamed %1$s to %2$s" : "Renombraste %1$s como %2$s",
"%1$s has been deleted by %2$s" : "%1$s ha sido borrado por %2$s",
- "You deleted %1$s" : "Usted borró %1$s",
+ "You deleted %1$s" : "Borraste %1$s",
"%1$s has been recovered by %2$s" : "%1$s ha sido recuperado por %2$s",
- "You recovered %1$s" : "Usted recuperó %1$s",
+ "You recovered %1$s" : "Recuperaste %1$s",
"%1$s has been permanently deleted by %2$s" : "%1$s ha sido borrado permanentemente por %2$s",
- "You permanently deleted %1$s" : "Ha borrado permanentemente %1$s",
- "The password of %1$s has expired, renew it now." : "La contraseña de %1$s ha expirado, renuévela ahora.",
+ "You permanently deleted %1$s" : "Has borrado %1$s permanentemente",
+ "The password of %1$s has expired, renew it now." : "La contraseña de %1$s ha expirado, renuévala ahora.",
"%1$s has been shared with %2$s" : "%1$s ha sido compartido con %2$s",
- "You received a share request for %1$s from %2$s" : "Usted ha recibido una solicitud para compartir de %1$s desde%2$s",
+ "You received a share request for %1$s from %2$s" : "Recibiste una solicitud para compartir de %1$s desde %2$s",
"%s has been shared with a link" : "%s ha sido compartido con una liga",
- "Your credential \"%s\" expired, click here to update the credential." : "Sus credenciales \"%s\" han expirado, haga click aquí para actualizarlas.",
- "Remind me later" : "Recordarme más tarde",
+ "Your credential \"%s\" expired, click here to update the credential." : "Tus credenciales \"%s\" han expirado, has click aquí para actualizarlas.",
+ "Remind me later" : "Recuérdame más tarde",
"Ignore" : "Ignorar",
- "%s shared \"%s\" with you. Click here to accept" : "%s ha compartido \"%s\" con usted. Haga click aquí para aceptar",
- "%s has declined your share request for \"%s\"." : "%s ha declinado su solicitud para compartir \"%s\".",
- "%s has accepted your share request for \"%s\"." : "%s ha aceptado su solicitud para compartir \"%s\".",
+ "%s shared \"%s\" with you. Click here to accept" : "%s ha compartido \"%s\" contigo. Has click aquí para aceptar",
+ "%s has declined your share request for \"%s\"." : "%s ha declinado tu solicitud para compartir \"%s\".",
+ "%s has accepted your share request for \"%s\"." : "%s ha aceptado tu solicitud para compartir \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "No fue posible obtener la información de la versión",
- "Passman Settings" : "Ajustes de Passman",
- "Github version:" : "Versión de Github:",
- "A newer version of passman is available" : "Una nueva versión de Passman etá disponible",
+ "Passman Settings" : "Configuraciones de Passman",
+ "GitHub version:" : "Versión de GitHub:",
+ "A newer version of Passman is available" : "Hay una nueva versión de Passman disponible",
"Password sharing" : "Compartir contraseña",
"Credential mover" : "Mover credenciales",
"Vault destruction requests" : "Solicitudes para destruir bóvedas",
"Check for new versions" : "Verificar si hay nuevas versiones",
"Enable HTTPS check" : "Habilitar verificación HTTPS",
"Disable context menu" : "Deshabilitar menú contextual",
- "Disable javascript debugger" : "Deshabilitar el depurador de javascript",
+ "Disable JavaScript debugger" : "Deshabilitar el depurador JavaScript",
"Allow users on this server to share passwords with a link" : "Permitir a los usuarios en este servidor compartir contraseñas con una liga",
"Allow users on this server to share passwords with other users" : "Permitir a los usuarios en este servidor compartir contraseñas con otros usuarios",
"Move credentials from one account to another" : "Mover credenciales de una cuenta a otra",
@@ -318,6 +320,6 @@
"Problem loading page, reloading in 5 seconds" : "Se presentó un problema al cargar la página, recargando en 5 segundos",
"Saving..." : "Guardando ...",
"Dismiss" : "Descartar",
- "seconds ago" : "segundos"
+ "seconds ago" : "hace segundos"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/l10n/fi.js b/l10n/fi.js
index ea4dd20a..c09c8943 100644
--- a/l10n/fi.js
+++ b/l10n/fi.js
@@ -6,35 +6,27 @@ OC.L10N.register(
"Passwords do not match" : "Salasanat eivät täsmää",
"General" : "Yleiset",
"Custom Fields" : "Omavalintaiset kentät",
- "Please fill in a value!" : "Anna arvo!",
"Error loading file" : "Virhe tiedostoa ladatessa",
- "An error happened during decryption" : "Salauksen avaamisessa tapahtui virhe",
"Credential created!" : "Tilitieto luotu!",
"Credential deleted" : "Tilitieto poistettu",
"Credential updated" : "Tilitieto päivitetty",
"Credential recovered" : "Tilitieto palautettu",
"Credential destroyed" : "Tilitieto tuhottu",
- "Error downloading file, you probably don't have enough permissions" : "Virhe tiedostoa ladatessa. Sinulla ei mitä luultavimmin ole riittäviä oikeuksia",
"Invalid QR code" : "Virheellinen QR-koodi",
"Done" : "Valmis",
- "File read successfully!" : "Tiedosto luettu onnistuneesti!",
"Adding {{credential}}" : "Lisätään {{credential}}",
"Added {{credential}}" : "Lisätty {{credential}}",
"Importing" : "Tuodaan",
"Start import" : "Aloita tuonti",
- "Select csv file" : "Valitse csv-tiedosto",
- "Parsed {{rows}} lines from csv file" : "Käytiin läpi {{rows}} riviä csv-tiedostosta",
+ "Select CSV file" : "Valitse CSV-tiedosto",
"Skip first row" : "Ohita ensimmäinen rivi",
"You need to assign the label field before you can start the import." : "Sinun tulee määritellä nimikekenttä ennen tuonnin aloittamista.",
- "First 5 lines of the csv are shown." : "Näytetään viisi ensimmäistä riviä csv-tiedostosta.",
"Assign the proper fields to each column." : "Määrittele sopivat kentät kullekin sarakkeelle.",
"Settings saved" : "Asetukset tallennettu",
"General settings" : "Yleiset asetukset",
"Password settings" : "Salasana-asetukset",
"Sharing" : "Jakaminen",
"Your old password is incorrect!" : "Vanha salasana on väärä!",
- "New passwords do not match!" : "Uudet salasanat eivät täsmää!",
- "Please login with your new vault password" : "Kirjaudu uudella holvin salasanallasi",
"Share with users and groups" : "Jaa käyttäjien ja ryhmien kanssa",
"Share link" : "Jaa linkki",
"Credential shared" : "Tilitieto jaettu",
@@ -51,7 +43,6 @@ OC.L10N.register(
"Password copied to clipboard!" : "Salasana kopioitu leikepöydälle!",
"Username" : "Käyttäjätunnus",
"Repeat password" : "Toista salasana",
- "Add Tag" : "Lisää tunniste",
"Field label" : "Kentän nimike",
"Field value" : "Kentän arvo",
"Choose a file" : "Valitse tiedosto",
@@ -68,6 +59,9 @@ OC.L10N.register(
"Issuer" : "Myöntäjä",
"Renew interval" : "Uusimisväli",
"Disabled" : "Poistettu käytöstä",
+ "Week(s)" : "Viikko(a)",
+ "Month(s)" : "Kuukausi(a)",
+ "Year(s)" : "Vuosi(a)",
"Password generation settings" : "Salasanan luomisen asetuket",
"Password length" : "Salasanan pituus",
"Use uppercase letters" : "Käytä suuria kirjaimia",
@@ -75,6 +69,7 @@ OC.L10N.register(
"Use numbers" : "Käytä numeroita",
"Use special characters" : "Käytä erikoismerkkejä",
"Require every character type" : "Käytä kaikentyyppisiä merkkejä",
+ "Export" : "Vie",
"Rename vault" : "Nimeä holvi uudelleen",
"New vault name" : "Holvin uusi nimi",
"Change" : "Muuta",
@@ -82,6 +77,7 @@ OC.L10N.register(
"Old vault password" : "Holvin vanha salasana",
"New vault password" : "Holvin uusi salasana",
"Processing" : "Käsitellään",
+ "About Passman" : "Tietoja Passmanista",
"Version" : "Versio",
"Donate to support development" : "Lahjoita tukeaksesi kehitystä",
"Save your passwords with 1 click!" : "Tallenna salasanasi yhdellä kilkkauksella!",
@@ -89,8 +85,8 @@ OC.L10N.register(
"Delete vault" : "Poista holvi",
"Vault password" : "Holvin salasana",
"Delete my precious passwords" : "Poista arvokkaat salasanani",
- "Deleting {{password}}..." : "Poistetaan {{password}}...",
"Yes, delete my precious passwords" : "Kyllä, poista arvokkaat salasanani",
+ "Import" : "Tuo",
"Private Key" : "Yksityinen avain",
"Public key" : "Julkinen avain",
"Key size" : "Avaimen koko",
@@ -98,26 +94,34 @@ OC.L10N.register(
"Generate sharing keys" : "Luo jakamisavaimet",
"Generating sharing keys" : "Luodaan jakamisavaimia",
"Minimum password stength" : "Salasanan vähimmäisvahvuus",
+ "Start scan" : "Aloita skannaus",
+ "Result" : "Tulos",
"Action" : "Toiminto",
- "Search users or groups..." : "Etsi käyttäjiä tai ryhmiä...",
"Missing users? Only users that have vaults are shown." : "Etkö löydä käyttäjää? Vain holvin omaavat käyttäjät näytetään.",
+ "Uploading" : "Lähetetään",
"User" : "Käyttäjä",
+ "Read" : "Luku",
+ "Write" : "Kirjoitus",
+ "Files" : "Tiedostot",
+ "Pending" : "Odottaa",
"Show files" : "Näytä tiedostot",
"Details" : "Yksityiskohdat",
"Hide details" : "Piilota yksityiskohdat",
+ "100 / hour" : "100 / tunti",
+ "10 / second" : "10 / sekunti",
"Edit credential" : "Muokkaa tilitietoa",
"Create new credential" : "Luo uusi tilitieto",
"Save" : "Tallenna",
"Cancel" : "Peruuta",
"Settings" : "Asetukset",
"Share credential {{credential}}" : "Jaa tilitieto {{credential}}",
+ "Unshare" : "Lopeta jakaminen",
"Account" : "Tili",
"Password" : "Salasana",
"OTP" : "OTP",
"E-mail" : "Sähköposti",
"URL" : "Osoite",
"Notes" : "Huomiot",
- "Expire time" : "Vanhenemisaika",
"Changed" : "Muutettu",
"Created" : "Luotu",
"Edit" : "Muokkaa",
@@ -126,8 +130,10 @@ OC.L10N.register(
"Recover" : "Palauta",
"Destroy" : "Tuhoa",
"Permissions" : "Oikeudet",
+ "Date" : "Päiväys",
"Accept" : "Hyväksy",
"Decline" : "Hylkää",
+ "Last accessed" : "Viimeksi käytetty",
"Never" : "Ei koskaan",
"No vaults found, why not create one?" : "Holveja ei löytynyt. Luodaanko holvi?",
"Password strength must be at least: {{strength}}" : "Salasanan vahvuus tulee olla vähintään: {{strength}}",
@@ -135,22 +141,18 @@ OC.L10N.register(
"Repeat vault password" : "Toista holvin salasana",
"Create vault" : "Luo holvi",
"Go back to vaults" : "Palaa takaisin holveihin",
- "Set this vault as default." : "Aseta tämä holvi oletukseksi.",
- "Login automatically to this vault." : "Kirjaudu automaattisesti tähän holviin.",
"Request vault destruction" : "Pyydä holvin tuhoamista",
"Yes, request an admin to destroy this vault" : "Kyllä, pyydä ylläpitäjää tuhoamaan tämä holvi",
"Cancel destruction request" : "Peru tuhoamispyyntö",
"Vault destruction requested" : "Holvin tuhoamista pyydetty",
"Request removed" : "Pyyntö poistettu",
"Destruction request pending" : "Tuhoamispyyntö odottaa",
- "Warning! Adding credentials over http can be insecure!" : "Varoitus! Tilitietojen lisääminen HTTP:n välityksellä voi olla vaarallista!",
"Logged in to {{vault_name}}" : "Kirjauduttu holviin {{vault_name}}",
"Change vault" : "Vaihda holvia",
"Deleted credentials" : "Poistettu tilitiedot",
"Logout" : "Kirjaudu ulos",
"Donate" : "Lahjoita",
"Someone has shared a credential with you." : "Joku on jakanut tilitiedot kanssasi.",
- "Loading..." : "Ladataan...",
"Error while saving field" : "Virhe kenttää tallentaessa",
"A Passman item has been created, modified or deleted" : "Passman-tietu on luotu, sitä on muokattu tai se on poistettu",
"A Passman item has expired" : "Passman-tietue on vanhentunut",
@@ -163,7 +165,6 @@ OC.L10N.register(
"Ignore" : "Ohita",
"Unable to get version info" : "Versiotiedon haku epäonnistui",
"Passman Settings" : "Passman-asetukset",
- "Github version:" : "Github-versio:",
"Check for new versions" : "Tarkista uudet versiot",
"Enable HTTPS check" : "Käytä HTTPS-tarkistusta",
"Reason" : "Syy",
diff --git a/l10n/fi.json b/l10n/fi.json
index 0fe5efcb..b02ce4e8 100644
--- a/l10n/fi.json
+++ b/l10n/fi.json
@@ -4,35 +4,27 @@
"Passwords do not match" : "Salasanat eivät täsmää",
"General" : "Yleiset",
"Custom Fields" : "Omavalintaiset kentät",
- "Please fill in a value!" : "Anna arvo!",
"Error loading file" : "Virhe tiedostoa ladatessa",
- "An error happened during decryption" : "Salauksen avaamisessa tapahtui virhe",
"Credential created!" : "Tilitieto luotu!",
"Credential deleted" : "Tilitieto poistettu",
"Credential updated" : "Tilitieto päivitetty",
"Credential recovered" : "Tilitieto palautettu",
"Credential destroyed" : "Tilitieto tuhottu",
- "Error downloading file, you probably don't have enough permissions" : "Virhe tiedostoa ladatessa. Sinulla ei mitä luultavimmin ole riittäviä oikeuksia",
"Invalid QR code" : "Virheellinen QR-koodi",
"Done" : "Valmis",
- "File read successfully!" : "Tiedosto luettu onnistuneesti!",
"Adding {{credential}}" : "Lisätään {{credential}}",
"Added {{credential}}" : "Lisätty {{credential}}",
"Importing" : "Tuodaan",
"Start import" : "Aloita tuonti",
- "Select csv file" : "Valitse csv-tiedosto",
- "Parsed {{rows}} lines from csv file" : "Käytiin läpi {{rows}} riviä csv-tiedostosta",
+ "Select CSV file" : "Valitse CSV-tiedosto",
"Skip first row" : "Ohita ensimmäinen rivi",
"You need to assign the label field before you can start the import." : "Sinun tulee määritellä nimikekenttä ennen tuonnin aloittamista.",
- "First 5 lines of the csv are shown." : "Näytetään viisi ensimmäistä riviä csv-tiedostosta.",
"Assign the proper fields to each column." : "Määrittele sopivat kentät kullekin sarakkeelle.",
"Settings saved" : "Asetukset tallennettu",
"General settings" : "Yleiset asetukset",
"Password settings" : "Salasana-asetukset",
"Sharing" : "Jakaminen",
"Your old password is incorrect!" : "Vanha salasana on väärä!",
- "New passwords do not match!" : "Uudet salasanat eivät täsmää!",
- "Please login with your new vault password" : "Kirjaudu uudella holvin salasanallasi",
"Share with users and groups" : "Jaa käyttäjien ja ryhmien kanssa",
"Share link" : "Jaa linkki",
"Credential shared" : "Tilitieto jaettu",
@@ -49,7 +41,6 @@
"Password copied to clipboard!" : "Salasana kopioitu leikepöydälle!",
"Username" : "Käyttäjätunnus",
"Repeat password" : "Toista salasana",
- "Add Tag" : "Lisää tunniste",
"Field label" : "Kentän nimike",
"Field value" : "Kentän arvo",
"Choose a file" : "Valitse tiedosto",
@@ -66,6 +57,9 @@
"Issuer" : "Myöntäjä",
"Renew interval" : "Uusimisväli",
"Disabled" : "Poistettu käytöstä",
+ "Week(s)" : "Viikko(a)",
+ "Month(s)" : "Kuukausi(a)",
+ "Year(s)" : "Vuosi(a)",
"Password generation settings" : "Salasanan luomisen asetuket",
"Password length" : "Salasanan pituus",
"Use uppercase letters" : "Käytä suuria kirjaimia",
@@ -73,6 +67,7 @@
"Use numbers" : "Käytä numeroita",
"Use special characters" : "Käytä erikoismerkkejä",
"Require every character type" : "Käytä kaikentyyppisiä merkkejä",
+ "Export" : "Vie",
"Rename vault" : "Nimeä holvi uudelleen",
"New vault name" : "Holvin uusi nimi",
"Change" : "Muuta",
@@ -80,6 +75,7 @@
"Old vault password" : "Holvin vanha salasana",
"New vault password" : "Holvin uusi salasana",
"Processing" : "Käsitellään",
+ "About Passman" : "Tietoja Passmanista",
"Version" : "Versio",
"Donate to support development" : "Lahjoita tukeaksesi kehitystä",
"Save your passwords with 1 click!" : "Tallenna salasanasi yhdellä kilkkauksella!",
@@ -87,8 +83,8 @@
"Delete vault" : "Poista holvi",
"Vault password" : "Holvin salasana",
"Delete my precious passwords" : "Poista arvokkaat salasanani",
- "Deleting {{password}}..." : "Poistetaan {{password}}...",
"Yes, delete my precious passwords" : "Kyllä, poista arvokkaat salasanani",
+ "Import" : "Tuo",
"Private Key" : "Yksityinen avain",
"Public key" : "Julkinen avain",
"Key size" : "Avaimen koko",
@@ -96,26 +92,34 @@
"Generate sharing keys" : "Luo jakamisavaimet",
"Generating sharing keys" : "Luodaan jakamisavaimia",
"Minimum password stength" : "Salasanan vähimmäisvahvuus",
+ "Start scan" : "Aloita skannaus",
+ "Result" : "Tulos",
"Action" : "Toiminto",
- "Search users or groups..." : "Etsi käyttäjiä tai ryhmiä...",
"Missing users? Only users that have vaults are shown." : "Etkö löydä käyttäjää? Vain holvin omaavat käyttäjät näytetään.",
+ "Uploading" : "Lähetetään",
"User" : "Käyttäjä",
+ "Read" : "Luku",
+ "Write" : "Kirjoitus",
+ "Files" : "Tiedostot",
+ "Pending" : "Odottaa",
"Show files" : "Näytä tiedostot",
"Details" : "Yksityiskohdat",
"Hide details" : "Piilota yksityiskohdat",
+ "100 / hour" : "100 / tunti",
+ "10 / second" : "10 / sekunti",
"Edit credential" : "Muokkaa tilitietoa",
"Create new credential" : "Luo uusi tilitieto",
"Save" : "Tallenna",
"Cancel" : "Peruuta",
"Settings" : "Asetukset",
"Share credential {{credential}}" : "Jaa tilitieto {{credential}}",
+ "Unshare" : "Lopeta jakaminen",
"Account" : "Tili",
"Password" : "Salasana",
"OTP" : "OTP",
"E-mail" : "Sähköposti",
"URL" : "Osoite",
"Notes" : "Huomiot",
- "Expire time" : "Vanhenemisaika",
"Changed" : "Muutettu",
"Created" : "Luotu",
"Edit" : "Muokkaa",
@@ -124,8 +128,10 @@
"Recover" : "Palauta",
"Destroy" : "Tuhoa",
"Permissions" : "Oikeudet",
+ "Date" : "Päiväys",
"Accept" : "Hyväksy",
"Decline" : "Hylkää",
+ "Last accessed" : "Viimeksi käytetty",
"Never" : "Ei koskaan",
"No vaults found, why not create one?" : "Holveja ei löytynyt. Luodaanko holvi?",
"Password strength must be at least: {{strength}}" : "Salasanan vahvuus tulee olla vähintään: {{strength}}",
@@ -133,22 +139,18 @@
"Repeat vault password" : "Toista holvin salasana",
"Create vault" : "Luo holvi",
"Go back to vaults" : "Palaa takaisin holveihin",
- "Set this vault as default." : "Aseta tämä holvi oletukseksi.",
- "Login automatically to this vault." : "Kirjaudu automaattisesti tähän holviin.",
"Request vault destruction" : "Pyydä holvin tuhoamista",
"Yes, request an admin to destroy this vault" : "Kyllä, pyydä ylläpitäjää tuhoamaan tämä holvi",
"Cancel destruction request" : "Peru tuhoamispyyntö",
"Vault destruction requested" : "Holvin tuhoamista pyydetty",
"Request removed" : "Pyyntö poistettu",
"Destruction request pending" : "Tuhoamispyyntö odottaa",
- "Warning! Adding credentials over http can be insecure!" : "Varoitus! Tilitietojen lisääminen HTTP:n välityksellä voi olla vaarallista!",
"Logged in to {{vault_name}}" : "Kirjauduttu holviin {{vault_name}}",
"Change vault" : "Vaihda holvia",
"Deleted credentials" : "Poistettu tilitiedot",
"Logout" : "Kirjaudu ulos",
"Donate" : "Lahjoita",
"Someone has shared a credential with you." : "Joku on jakanut tilitiedot kanssasi.",
- "Loading..." : "Ladataan...",
"Error while saving field" : "Virhe kenttää tallentaessa",
"A Passman item has been created, modified or deleted" : "Passman-tietu on luotu, sitä on muokattu tai se on poistettu",
"A Passman item has expired" : "Passman-tietue on vanhentunut",
@@ -161,7 +163,6 @@
"Ignore" : "Ohita",
"Unable to get version info" : "Versiotiedon haku epäonnistui",
"Passman Settings" : "Passman-asetukset",
- "Github version:" : "Github-versio:",
"Check for new versions" : "Tarkista uudet versiot",
"Enable HTTPS check" : "Käytä HTTPS-tarkistusta",
"Reason" : "Syy",
diff --git a/l10n/fr.js b/l10n/fr.js
index c22a6a77..c5d540de 100644
--- a/l10n/fr.js
+++ b/l10n/fr.js
@@ -7,22 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Les mots de passe ne correspondent pas",
"General" : "Général",
"Custom Fields" : "Champs personnalisés",
- "Please fill in a label!" : "Veuillez indiquer un libellé !",
- "Please fill in a value!" : "Veuillez renseigner une valeur !",
+ "Please fill in a label." : "Veuillez remplir l'étiquette.",
+ "Please fill in a value." : "Veuillez renseigner une valeur.",
"Error loading file" : "Erreur lors du chargement du fichier",
- "An error happened during decryption" : "Une erreur est survenue lors du décryptage",
+ "An error occurred during decryption" : "Une erreur est survenue lors du décryptage",
"Credential created!" : "Information d'identification créée !",
"Credential deleted" : "Information d'identification supprimée",
"Credential updated" : "Information d'identification mise à jour",
"Credential recovered" : "Information d'identification récupérée",
"Credential destroyed" : "Information d'identification détruite",
- "Error downloading file, you probably don't have enough permissions" : "Erreur lors du téléchargement du fichier, vous ne devez sans doute pas avoir toutes les autorisations",
+ "Error downloading file, you probably don't have sufficient permissions" : "Erreur lors du téléchargement du fichier, vous ne devez sans doute pas avoir les autorisations suffisantes",
"Invalid QR code" : "Code QR invalide",
"Starting export" : "Démarrage de l'export",
- "Decrypting credentials" : "Décryptage des informations d'identification",
+ "Decrypting credentials" : "Déchiffrement des informations d'identification",
"Done" : "Fait",
- "File read successfully!" : "Fichier lu avec succès !",
- "Follow the following steps to import your file" : "Passez les étapes suivantes pour importer votre fichier",
+ "File read successfully." : "Fichier lu avec succès.",
+ "Proceed with the following steps to import your file" : "Poursuivez les étapes suivantes pour importer votre fichier",
"Credential has no label, skipping" : "L'information d'identification n'a pas d'étiquette, ignorée",
"Adding {{credential}}" : "{{credential}} en cours d'ajout",
"Added {{credential}}" : "{{credential}} ajouté",
@@ -30,29 +30,29 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "{{num}} informations d'identification analysées, commence à importer",
"Importing" : "Import en cours",
"Start import" : "Démarrer l'import",
- "Select csv file" : "Sélectionner le fichier csv",
- "Parsed {{rows}} lines from csv file" : "A analysé {{rows}} lignes du fichier csv",
+ "Select CSV file" : "Sélectionner le fichier CSV",
+ "Parsed {{rows}} lines from CSV file" : "A analysé {{rows}} lignes du fichier CSV",
"Skip first row" : "Ignorer le premier rang",
"You need to assign the label field before you can start the import." : "Vous devez attribuer le champ d'étiquette avant de pouvoir commencer l'importation.",
- "First 5 lines of the csv are shown." : "Les 5 premières lignes du csv sont montrées.",
+ "The first 5 lines of the CSV are shown." : "Les 5 premières lignes du CSV sont montrées.",
"Assign the proper fields to each column." : "Attribuer les champs appropriés à chaque colonne.",
- "Example imported credential" : "Exemple d'information d'identification importé",
- "Missing an importer? Try it with the generic csv importer." : "Donnée importée manquante ? Essayez avec l'importation du csv générique.",
+ "Example of imported credential" : "Exemple d'information d'identification importé",
+ "Missing an importer? Try it with the generic CSV importer." : "Donnée importée manquante ? Essayez avec l'importation du CSV générique.",
"Go back to importers." : "Retourner aux données importées.",
"Revision deleted" : "Révision supprimée",
"Revision restored" : "Révision restaurée",
- "Save in passman" : "Sauvegarder dans Passman",
+ "Save in Passman" : "Sauvegarder dans Passman",
"Settings saved" : "Paramètres sauvegardés",
"General settings" : "Paramètres généraux",
- "Password Audit" : "Vérification du mot de passe",
+ "Password audit" : "Vérification du mot de passe",
"Password settings" : "Paramètres du mot de passe",
"Import credentials" : "Importer les informations d'identification",
"Export credentials" : "Exporter les informations d'identification",
"Sharing" : "Partage",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Êtes-vous sûr de vouloir quitter ? Cela VA corrompre toutes vos informations d'identification",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Êtes-vous sûr de vouloir quitter ? Cela va détruire toutes vos informations d'identification",
"Your old password is incorrect!" : "Votre ancien mot de passe est incorrect !",
- "New passwords do not match!" : "Les nouveaux mots de passe ne correspondent pas !",
- "Please login with your new vault password" : "Veuillez vous connecter avec votre nouveau mot de passe du coffre-fort",
+ "New password does not match!" : "Le nouveau mot de passe ne correspond pas !",
+ "Please log in with your new vault password" : "Veuillez vous connecter avec votre nouveau mot de passe du coffre-fort",
"Share with users and groups" : "Partager avec des utilisateurs et des groupes",
"Share link" : "Partager un lien",
"Are you sure you want to leave? This will corrupt this credential" : "Êtes-vous sûr de vouloir quitter ? Cela va corrompre cette information d'identification",
@@ -72,7 +72,7 @@ OC.L10N.register(
"Complete" : "Terminer",
"Username" : "Nom d'utilisateur",
"Repeat password" : "Répéter le mot de passe",
- "Add Tag" : "Ajouter une étiquette",
+ "Add tag" : "Ajouter une étiquette",
"Field label" : "Étiquette du champ",
"Field value" : "Valeur du champ",
"Choose a file" : "Choisir un fichier",
@@ -90,8 +90,8 @@ OC.L10N.register(
"Current OTP settings" : "Paramètres du mot de passe OTP actuel",
"Issuer" : "Émetteur",
"Secret" : "Secret",
- "Expire date" : "Date d'expiration",
- "No expire date set" : "Aucune date d'expiration définie",
+ "Expiration date" : "Date d'expiration",
+ "No expiration date set" : "Aucune date d'expiration définie",
"Renew interval" : "Renouveler l'intervalle",
"Disabled" : "Désactivé",
"Day(s)" : "Jour(s)",
@@ -116,7 +116,7 @@ OC.L10N.register(
"Change vault key" : "Changer la clé du coffre-fort",
"Old vault password" : "Ancien mot de passe du coffre-fort",
"New vault password" : "Nouveau mot de passe du coffre-fort",
- "New vault password repeat" : "Confirmer le nouveau mot de passe du coffre-fort",
+ "Repeat new vault password" : "Confirmer le mot de passe du coffre-fort",
"Please wait your vault is being updated, do not leave this page." : "Veuillez patienter que votre coffre-fort soit mis à jour, ne quittez pas cette page.",
"Processing" : "En cours d'exécution",
"Total progress" : "Progression totale",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Vault password" : "Mot de passe du coffre-fort",
"This process is irreversible" : "Ce processus est irréversible",
"Delete my precious passwords" : "Supprimer mes mots de passe de grandes valeurs",
- "Deleting {{password}}..." : "Suppression de {{password}}...",
+ "Deleting {{password}}…" : "Suppression de {{password}}...",
"Yes, delete my precious passwords" : "Oui, supprimer mes mots de passe de grandes valeurs",
"Import type" : "Type d'importation",
"Import" : "Importer",
@@ -142,13 +142,14 @@ OC.L10N.register(
"Save keys" : "Sauvegarder les clés",
"Generate sharing keys" : "Générer des clés de partage",
"Generating sharing keys" : "Génération des clés de partage",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "L'outil de mot de passe va scanner vos mots de passe, calculer le temps moyen pour le déchiffrer et, si inférieur au seuil, les afficher",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "L'outil de mot de passe va scanner vos mots de passe, calculer le temps moyen pour le déchiffrer et afficher ceux qui sont inférieur au seuil",
"Minimum password stength" : "Force minimale du mot de passe",
- "Passman scanned your passwords, and here is the result." : "Passman a scanné vos mots de passe, et voici le résultat.",
- "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} informations d'identification faibles",
+ "Start scan" : "Commencer le scan",
+ "Result" : "Résultat",
+ "A total of {{scan_result}} weak credentials were found." : "Un total de {{scan_result}} informations d'identification faibles ont été trouvées",
"Score" : "Résultat",
"Action" : "Action",
- "Search users or groups..." : "Recherche des utilisateurs ou des groupes ...",
+ "Search users or groups…" : "Recherche des utilisateurs ou des groupes...",
"Missing users? Only users that have vaults are shown." : "Il manque des utilisateurs ? Uniquement les utilisateurs qui ont un coffre-fort sont montrés.",
"Cyphering" : "Chiffrement",
"Uploading" : "Téléversement en cours",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Activer le partage par lien",
"Share until date" : "Partage jusqu'à la date",
"Expire after views" : "Expire après plusieurs visualisations",
- "Click share first" : "Premier partage par clic",
+ "Click Share first" : "Cliquer d'abord sur Partager",
"Show files" : "Afficher les fichiers",
"Details" : "Détails",
"Hide details" : "Masquer les détails",
@@ -203,16 +204,16 @@ OC.L10N.register(
"Share credential {{credential}}" : "Partage l'information d'identification {{credential}}",
"Unshare" : "Ne plus partager",
"Showing deleted since" : "Montrer ceux supprimés depuis",
- "All time" : "Tout le temps",
+ "Beginning" : "Début",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Affiche {{number_filtered}} sur {{credential_number}} informations d'identification",
- "Search credential..." : "Rechercher l'information d'identification...",
+ "Search for credential…" : "Rechercher les informations d'identification...",
"Account" : "Compte",
"Password" : "Mot de passe",
"OTP" : "OTP",
"E-mail" : "E-Mail",
"URL" : "URL",
"Notes" : "Notes",
- "Expire time" : "Date d'expiration",
+ "Expiry time" : "Heure d'expiration",
"Changed" : "Modifié",
"Created" : "Créé",
"Edit" : "Éditer",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Détruire",
"Use regex" : "Utiliser une expression régulière",
"You have incoming share requests." : "Vous avez des nouvelles demandes de partage.",
- "If you want to put the credential in a other vault," : "Si vous souhaitez déplacer les informations d'identification dans un autre coffre-fort,",
- "logout of this vault and login to the vault you want the shared credential in." : "déconnectez-vous de ce coffre-fort et connectez-vous au coffre-fort dans lequel vous voulez les informations d'identification partagées.",
+ "If you want to put the credential in another vault," : "Si vous souhaitez déplacer les informations d'identification dans un autre coffre-fort,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "déconnectez-vous de ce coffre-fort et connectez-vous au coffre-fort dans lequel vous voulez les informations d'identification partagées.",
"Permissions" : "Permissions",
"Received from" : "Reçu de",
"Date" : "Date",
@@ -237,26 +238,26 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "La force du mot de passe doit être au moins : {{strength}}",
"Please give your new vault a name." : "Veuillez donner un nom à votre nouveau coffre-fort.",
"Repeat vault password" : "Confirmer le mot de passe du coffre-fort",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Votre clé de partage aura un poids de 1024 octet, ce qui pourra être modifié plus tard dans les paramètres.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Votre clé de partage aura un poids de 1024 octet, ce qui pourra être modifié plus tard dans les paramètres.",
"Create vault" : "Créer un coffre-fort",
"Go back to vaults" : "Retourner aux coffres-forts",
"Please input the password for" : "Veuillez entrer le mot de passe pour",
- "Set this vault as default." : "Choisir ce coffre-fort par défaut.",
- "Login automatically to this vault." : "Se connecter automatiquement à ce coffre-fort.",
- "Logout of this vault automatically after: " : "Se déconnecter de ce coffre-fort automatiquement après :",
+ "Set this vault as the default." : "Choisir ce coffre-fort par défaut.",
+ "Log into this vault automatically." : "Se connecter à ce coffre-fort automatiquement.",
+ "Log out of this vault automatically after: " : "Se déconnecter de ce coffre-fort automatiquement après :",
"Decrypt vault" : "Déchiffrer le coffre-fort",
- "Seems you lost the vault password and you're unable to login." : "Il semblerait que vous avez perdu le mot de passe du coffre-fort et que vous êtes incapable de vous connecter.",
- "If you want this vault removed you can request removal of the vault here." : "Si vous souhaitez supprimer ce coffre-fort, vous pouvez demander la suppression de ce coffre-fort ici.",
- "An admin then accept to the request (or not)" : "Un administrateur accepte alors la requête (ou non)",
- "After an admin destroy's this vault, all credentials will be lost" : "Après la destruction de ce coffre-fort par un administrateur, toutes les informations d'identification seront perdues.",
- "Reason to request deletion (optional):" : "Motif de la demande de suppression (optionnel) :",
+ "Seems you lost the vault password and you're unable to log in." : "Il semblerait que vous avez perdu le mot de passe du coffre-fort et que vous êtes incapable de vous connecter.",
+ "If you want this vault to be removed you can request that here." : "Si vous souhaitez supprimer ce coffre-fort, vous pouvez demander lsa suppression ici.",
+ "An admin then accepts or declines the request" : "Un administrateur accepte ou refuse alors la requête",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Après qu'un administrateur ait détruit ce coffre-fort, toutes les informations d'identification contenues à l'intérieur seront perdues",
+ "Reason for requesting deletion (optional):" : "Motif de la demande de suppression (optionnel) :",
"Request vault destruction" : "Demander la destruction du coffre-fort",
"Yes, request an admin to destroy this vault" : "Oui, demander à un administrateur de détruire ce coffre-fort",
"Cancel destruction request" : "Annuler la requête de destruction",
"Vault destruction requested" : "Destruction du coffre-fort demandée",
"Request removed" : "Demande supprimée",
"Destruction request pending" : "Requête de destruction en attente",
- "Warning! Adding credentials over http can be insecure!" : "Attention ! Ajouter des informations d'identification en http peut être insécurisé !",
+ "Warning! Adding credentials over HTTP is insecure!" : "Attention ! Ajouter des informations d'identification en HTTP n'est pas sécurisé !",
"Logged in to {{vault_name}}" : "Connecté à {{vault_name}}",
"Change vault" : "Modifier le coffre-fort",
"Deleted credentials" : "Supprimer les informations d'identification",
@@ -264,8 +265,8 @@ OC.L10N.register(
"Donate" : "Donner",
"Someone has shared a credential with you." : "Quelqu'un a partagé une information d'identification avec vous.",
"Click here to request it" : "Cliquez ici pour le demander",
- "Loading..." : "Chargement...",
- "Awwhh.... credential not found. Maybe it expired" : "Awwhh.... information d'identification non trouvée. Il est peut être expiré",
+ "Loading…" : "Chargement...",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh.... information d'identification non trouvée. Il est peut être expiré",
"Error while saving field" : "Erreur lors de la sauvegarde du champ",
"A Passman item has been created, modified or deleted" : "Un élément Passman a été créé, modifié ou supprimé",
"A Passman item has expired" : "Un élément Passman a expiré",
@@ -295,17 +296,18 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s a partagé \"%s\" avec vous. Cliquez ici pour accepter",
"%s has declined your share request for \"%s\"." : "%s a refusé votre demande de partage pour \"%s\"",
"%s has accepted your share request for \"%s\"." : "%s a accepté votre demande de partage pour \"%s\"",
+ "Passman" : "Passman",
"Unable to get version info" : "Impossible d'obtenir l'information de la version",
"Passman Settings" : "Paramètres de Passman",
- "Github version:" : "Version Github :",
- "A newer version of passman is available" : "Une version plus récente de Passman est disponible",
+ "GitHub version:" : "Version GitHub :",
+ "A newer version of Passman is available" : "Une version plus récente de Passman est disponible",
"Password sharing" : "Partage de mot de passe",
"Credential mover" : "Déplacement des informations d'identification",
"Vault destruction requests" : "Requêtes de destruction de coffre-fort",
"Check for new versions" : "Vérifier la présence de nouvelles versions",
"Enable HTTPS check" : "Activer la vérification HTTPS",
"Disable context menu" : "Désactiver le menu contextuel",
- "Disable javascript debugger" : "Désactiver le débogueur javascript",
+ "Disable JavaScript debugger" : "Désactiver le débogueur Javascript",
"Allow users on this server to share passwords with a link" : "Autoriser les utilisateurs de ce serveur à partager par lien des mots de passe",
"Allow users on this server to share passwords with other users" : "Autoriser les utilisateurs de ce serveur à partager des mots de passe avec d'autres utilisateurs",
"Move credentials from one account to another" : "Déplacer les informations d'identification d'un compte vers un autre",
diff --git a/l10n/fr.json b/l10n/fr.json
index e224f680..929087fb 100644
--- a/l10n/fr.json
+++ b/l10n/fr.json
@@ -5,22 +5,22 @@
"Passwords do not match" : "Les mots de passe ne correspondent pas",
"General" : "Général",
"Custom Fields" : "Champs personnalisés",
- "Please fill in a label!" : "Veuillez indiquer un libellé !",
- "Please fill in a value!" : "Veuillez renseigner une valeur !",
+ "Please fill in a label." : "Veuillez remplir l'étiquette.",
+ "Please fill in a value." : "Veuillez renseigner une valeur.",
"Error loading file" : "Erreur lors du chargement du fichier",
- "An error happened during decryption" : "Une erreur est survenue lors du décryptage",
+ "An error occurred during decryption" : "Une erreur est survenue lors du décryptage",
"Credential created!" : "Information d'identification créée !",
"Credential deleted" : "Information d'identification supprimée",
"Credential updated" : "Information d'identification mise à jour",
"Credential recovered" : "Information d'identification récupérée",
"Credential destroyed" : "Information d'identification détruite",
- "Error downloading file, you probably don't have enough permissions" : "Erreur lors du téléchargement du fichier, vous ne devez sans doute pas avoir toutes les autorisations",
+ "Error downloading file, you probably don't have sufficient permissions" : "Erreur lors du téléchargement du fichier, vous ne devez sans doute pas avoir les autorisations suffisantes",
"Invalid QR code" : "Code QR invalide",
"Starting export" : "Démarrage de l'export",
- "Decrypting credentials" : "Décryptage des informations d'identification",
+ "Decrypting credentials" : "Déchiffrement des informations d'identification",
"Done" : "Fait",
- "File read successfully!" : "Fichier lu avec succès !",
- "Follow the following steps to import your file" : "Passez les étapes suivantes pour importer votre fichier",
+ "File read successfully." : "Fichier lu avec succès.",
+ "Proceed with the following steps to import your file" : "Poursuivez les étapes suivantes pour importer votre fichier",
"Credential has no label, skipping" : "L'information d'identification n'a pas d'étiquette, ignorée",
"Adding {{credential}}" : "{{credential}} en cours d'ajout",
"Added {{credential}}" : "{{credential}} ajouté",
@@ -28,29 +28,29 @@
"Parsed {{num}} credentials, starting to import" : "{{num}} informations d'identification analysées, commence à importer",
"Importing" : "Import en cours",
"Start import" : "Démarrer l'import",
- "Select csv file" : "Sélectionner le fichier csv",
- "Parsed {{rows}} lines from csv file" : "A analysé {{rows}} lignes du fichier csv",
+ "Select CSV file" : "Sélectionner le fichier CSV",
+ "Parsed {{rows}} lines from CSV file" : "A analysé {{rows}} lignes du fichier CSV",
"Skip first row" : "Ignorer le premier rang",
"You need to assign the label field before you can start the import." : "Vous devez attribuer le champ d'étiquette avant de pouvoir commencer l'importation.",
- "First 5 lines of the csv are shown." : "Les 5 premières lignes du csv sont montrées.",
+ "The first 5 lines of the CSV are shown." : "Les 5 premières lignes du CSV sont montrées.",
"Assign the proper fields to each column." : "Attribuer les champs appropriés à chaque colonne.",
- "Example imported credential" : "Exemple d'information d'identification importé",
- "Missing an importer? Try it with the generic csv importer." : "Donnée importée manquante ? Essayez avec l'importation du csv générique.",
+ "Example of imported credential" : "Exemple d'information d'identification importé",
+ "Missing an importer? Try it with the generic CSV importer." : "Donnée importée manquante ? Essayez avec l'importation du CSV générique.",
"Go back to importers." : "Retourner aux données importées.",
"Revision deleted" : "Révision supprimée",
"Revision restored" : "Révision restaurée",
- "Save in passman" : "Sauvegarder dans Passman",
+ "Save in Passman" : "Sauvegarder dans Passman",
"Settings saved" : "Paramètres sauvegardés",
"General settings" : "Paramètres généraux",
- "Password Audit" : "Vérification du mot de passe",
+ "Password audit" : "Vérification du mot de passe",
"Password settings" : "Paramètres du mot de passe",
"Import credentials" : "Importer les informations d'identification",
"Export credentials" : "Exporter les informations d'identification",
"Sharing" : "Partage",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Êtes-vous sûr de vouloir quitter ? Cela VA corrompre toutes vos informations d'identification",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Êtes-vous sûr de vouloir quitter ? Cela va détruire toutes vos informations d'identification",
"Your old password is incorrect!" : "Votre ancien mot de passe est incorrect !",
- "New passwords do not match!" : "Les nouveaux mots de passe ne correspondent pas !",
- "Please login with your new vault password" : "Veuillez vous connecter avec votre nouveau mot de passe du coffre-fort",
+ "New password does not match!" : "Le nouveau mot de passe ne correspond pas !",
+ "Please log in with your new vault password" : "Veuillez vous connecter avec votre nouveau mot de passe du coffre-fort",
"Share with users and groups" : "Partager avec des utilisateurs et des groupes",
"Share link" : "Partager un lien",
"Are you sure you want to leave? This will corrupt this credential" : "Êtes-vous sûr de vouloir quitter ? Cela va corrompre cette information d'identification",
@@ -70,7 +70,7 @@
"Complete" : "Terminer",
"Username" : "Nom d'utilisateur",
"Repeat password" : "Répéter le mot de passe",
- "Add Tag" : "Ajouter une étiquette",
+ "Add tag" : "Ajouter une étiquette",
"Field label" : "Étiquette du champ",
"Field value" : "Valeur du champ",
"Choose a file" : "Choisir un fichier",
@@ -88,8 +88,8 @@
"Current OTP settings" : "Paramètres du mot de passe OTP actuel",
"Issuer" : "Émetteur",
"Secret" : "Secret",
- "Expire date" : "Date d'expiration",
- "No expire date set" : "Aucune date d'expiration définie",
+ "Expiration date" : "Date d'expiration",
+ "No expiration date set" : "Aucune date d'expiration définie",
"Renew interval" : "Renouveler l'intervalle",
"Disabled" : "Désactivé",
"Day(s)" : "Jour(s)",
@@ -114,7 +114,7 @@
"Change vault key" : "Changer la clé du coffre-fort",
"Old vault password" : "Ancien mot de passe du coffre-fort",
"New vault password" : "Nouveau mot de passe du coffre-fort",
- "New vault password repeat" : "Confirmer le nouveau mot de passe du coffre-fort",
+ "Repeat new vault password" : "Confirmer le mot de passe du coffre-fort",
"Please wait your vault is being updated, do not leave this page." : "Veuillez patienter que votre coffre-fort soit mis à jour, ne quittez pas cette page.",
"Processing" : "En cours d'exécution",
"Total progress" : "Progression totale",
@@ -128,7 +128,7 @@
"Vault password" : "Mot de passe du coffre-fort",
"This process is irreversible" : "Ce processus est irréversible",
"Delete my precious passwords" : "Supprimer mes mots de passe de grandes valeurs",
- "Deleting {{password}}..." : "Suppression de {{password}}...",
+ "Deleting {{password}}…" : "Suppression de {{password}}...",
"Yes, delete my precious passwords" : "Oui, supprimer mes mots de passe de grandes valeurs",
"Import type" : "Type d'importation",
"Import" : "Importer",
@@ -140,13 +140,14 @@
"Save keys" : "Sauvegarder les clés",
"Generate sharing keys" : "Générer des clés de partage",
"Generating sharing keys" : "Génération des clés de partage",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "L'outil de mot de passe va scanner vos mots de passe, calculer le temps moyen pour le déchiffrer et, si inférieur au seuil, les afficher",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "L'outil de mot de passe va scanner vos mots de passe, calculer le temps moyen pour le déchiffrer et afficher ceux qui sont inférieur au seuil",
"Minimum password stength" : "Force minimale du mot de passe",
- "Passman scanned your passwords, and here is the result." : "Passman a scanné vos mots de passe, et voici le résultat.",
- "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} informations d'identification faibles",
+ "Start scan" : "Commencer le scan",
+ "Result" : "Résultat",
+ "A total of {{scan_result}} weak credentials were found." : "Un total de {{scan_result}} informations d'identification faibles ont été trouvées",
"Score" : "Résultat",
"Action" : "Action",
- "Search users or groups..." : "Recherche des utilisateurs ou des groupes ...",
+ "Search users or groups…" : "Recherche des utilisateurs ou des groupes...",
"Missing users? Only users that have vaults are shown." : "Il manque des utilisateurs ? Uniquement les utilisateurs qui ont un coffre-fort sont montrés.",
"Cyphering" : "Chiffrement",
"Uploading" : "Téléversement en cours",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Activer le partage par lien",
"Share until date" : "Partage jusqu'à la date",
"Expire after views" : "Expire après plusieurs visualisations",
- "Click share first" : "Premier partage par clic",
+ "Click Share first" : "Cliquer d'abord sur Partager",
"Show files" : "Afficher les fichiers",
"Details" : "Détails",
"Hide details" : "Masquer les détails",
@@ -201,16 +202,16 @@
"Share credential {{credential}}" : "Partage l'information d'identification {{credential}}",
"Unshare" : "Ne plus partager",
"Showing deleted since" : "Montrer ceux supprimés depuis",
- "All time" : "Tout le temps",
+ "Beginning" : "Début",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Affiche {{number_filtered}} sur {{credential_number}} informations d'identification",
- "Search credential..." : "Rechercher l'information d'identification...",
+ "Search for credential…" : "Rechercher les informations d'identification...",
"Account" : "Compte",
"Password" : "Mot de passe",
"OTP" : "OTP",
"E-mail" : "E-Mail",
"URL" : "URL",
"Notes" : "Notes",
- "Expire time" : "Date d'expiration",
+ "Expiry time" : "Heure d'expiration",
"Changed" : "Modifié",
"Created" : "Créé",
"Edit" : "Éditer",
@@ -220,8 +221,8 @@
"Destroy" : "Détruire",
"Use regex" : "Utiliser une expression régulière",
"You have incoming share requests." : "Vous avez des nouvelles demandes de partage.",
- "If you want to put the credential in a other vault," : "Si vous souhaitez déplacer les informations d'identification dans un autre coffre-fort,",
- "logout of this vault and login to the vault you want the shared credential in." : "déconnectez-vous de ce coffre-fort et connectez-vous au coffre-fort dans lequel vous voulez les informations d'identification partagées.",
+ "If you want to put the credential in another vault," : "Si vous souhaitez déplacer les informations d'identification dans un autre coffre-fort,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "déconnectez-vous de ce coffre-fort et connectez-vous au coffre-fort dans lequel vous voulez les informations d'identification partagées.",
"Permissions" : "Permissions",
"Received from" : "Reçu de",
"Date" : "Date",
@@ -235,26 +236,26 @@
"Password strength must be at least: {{strength}}" : "La force du mot de passe doit être au moins : {{strength}}",
"Please give your new vault a name." : "Veuillez donner un nom à votre nouveau coffre-fort.",
"Repeat vault password" : "Confirmer le mot de passe du coffre-fort",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Votre clé de partage aura un poids de 1024 octet, ce qui pourra être modifié plus tard dans les paramètres.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Votre clé de partage aura un poids de 1024 octet, ce qui pourra être modifié plus tard dans les paramètres.",
"Create vault" : "Créer un coffre-fort",
"Go back to vaults" : "Retourner aux coffres-forts",
"Please input the password for" : "Veuillez entrer le mot de passe pour",
- "Set this vault as default." : "Choisir ce coffre-fort par défaut.",
- "Login automatically to this vault." : "Se connecter automatiquement à ce coffre-fort.",
- "Logout of this vault automatically after: " : "Se déconnecter de ce coffre-fort automatiquement après :",
+ "Set this vault as the default." : "Choisir ce coffre-fort par défaut.",
+ "Log into this vault automatically." : "Se connecter à ce coffre-fort automatiquement.",
+ "Log out of this vault automatically after: " : "Se déconnecter de ce coffre-fort automatiquement après :",
"Decrypt vault" : "Déchiffrer le coffre-fort",
- "Seems you lost the vault password and you're unable to login." : "Il semblerait que vous avez perdu le mot de passe du coffre-fort et que vous êtes incapable de vous connecter.",
- "If you want this vault removed you can request removal of the vault here." : "Si vous souhaitez supprimer ce coffre-fort, vous pouvez demander la suppression de ce coffre-fort ici.",
- "An admin then accept to the request (or not)" : "Un administrateur accepte alors la requête (ou non)",
- "After an admin destroy's this vault, all credentials will be lost" : "Après la destruction de ce coffre-fort par un administrateur, toutes les informations d'identification seront perdues.",
- "Reason to request deletion (optional):" : "Motif de la demande de suppression (optionnel) :",
+ "Seems you lost the vault password and you're unable to log in." : "Il semblerait que vous avez perdu le mot de passe du coffre-fort et que vous êtes incapable de vous connecter.",
+ "If you want this vault to be removed you can request that here." : "Si vous souhaitez supprimer ce coffre-fort, vous pouvez demander lsa suppression ici.",
+ "An admin then accepts or declines the request" : "Un administrateur accepte ou refuse alors la requête",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Après qu'un administrateur ait détruit ce coffre-fort, toutes les informations d'identification contenues à l'intérieur seront perdues",
+ "Reason for requesting deletion (optional):" : "Motif de la demande de suppression (optionnel) :",
"Request vault destruction" : "Demander la destruction du coffre-fort",
"Yes, request an admin to destroy this vault" : "Oui, demander à un administrateur de détruire ce coffre-fort",
"Cancel destruction request" : "Annuler la requête de destruction",
"Vault destruction requested" : "Destruction du coffre-fort demandée",
"Request removed" : "Demande supprimée",
"Destruction request pending" : "Requête de destruction en attente",
- "Warning! Adding credentials over http can be insecure!" : "Attention ! Ajouter des informations d'identification en http peut être insécurisé !",
+ "Warning! Adding credentials over HTTP is insecure!" : "Attention ! Ajouter des informations d'identification en HTTP n'est pas sécurisé !",
"Logged in to {{vault_name}}" : "Connecté à {{vault_name}}",
"Change vault" : "Modifier le coffre-fort",
"Deleted credentials" : "Supprimer les informations d'identification",
@@ -262,8 +263,8 @@
"Donate" : "Donner",
"Someone has shared a credential with you." : "Quelqu'un a partagé une information d'identification avec vous.",
"Click here to request it" : "Cliquez ici pour le demander",
- "Loading..." : "Chargement...",
- "Awwhh.... credential not found. Maybe it expired" : "Awwhh.... information d'identification non trouvée. Il est peut être expiré",
+ "Loading…" : "Chargement...",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh.... information d'identification non trouvée. Il est peut être expiré",
"Error while saving field" : "Erreur lors de la sauvegarde du champ",
"A Passman item has been created, modified or deleted" : "Un élément Passman a été créé, modifié ou supprimé",
"A Passman item has expired" : "Un élément Passman a expiré",
@@ -293,17 +294,18 @@
"%s shared \"%s\" with you. Click here to accept" : "%s a partagé \"%s\" avec vous. Cliquez ici pour accepter",
"%s has declined your share request for \"%s\"." : "%s a refusé votre demande de partage pour \"%s\"",
"%s has accepted your share request for \"%s\"." : "%s a accepté votre demande de partage pour \"%s\"",
+ "Passman" : "Passman",
"Unable to get version info" : "Impossible d'obtenir l'information de la version",
"Passman Settings" : "Paramètres de Passman",
- "Github version:" : "Version Github :",
- "A newer version of passman is available" : "Une version plus récente de Passman est disponible",
+ "GitHub version:" : "Version GitHub :",
+ "A newer version of Passman is available" : "Une version plus récente de Passman est disponible",
"Password sharing" : "Partage de mot de passe",
"Credential mover" : "Déplacement des informations d'identification",
"Vault destruction requests" : "Requêtes de destruction de coffre-fort",
"Check for new versions" : "Vérifier la présence de nouvelles versions",
"Enable HTTPS check" : "Activer la vérification HTTPS",
"Disable context menu" : "Désactiver le menu contextuel",
- "Disable javascript debugger" : "Désactiver le débogueur javascript",
+ "Disable JavaScript debugger" : "Désactiver le débogueur Javascript",
"Allow users on this server to share passwords with a link" : "Autoriser les utilisateurs de ce serveur à partager par lien des mots de passe",
"Allow users on this server to share passwords with other users" : "Autoriser les utilisateurs de ce serveur à partager des mots de passe avec d'autres utilisateurs",
"Move credentials from one account to another" : "Déplacer les informations d'identification d'un compte vers un autre",
diff --git a/l10n/hu.js b/l10n/hu.js
index 5f356bd0..e12d2b62 100644
--- a/l10n/hu.js
+++ b/l10n/hu.js
@@ -7,44 +7,32 @@ OC.L10N.register(
"Passwords do not match" : "A jelszavak nem egyeznek",
"General" : "Általános",
"Custom Fields" : "Egyéni mezők",
- "Please fill in a label!" : "Kérlek tölts ki egy címkét!",
- "Please fill in a value!" : "Kérlek töltsd ki egy értéket!",
"Error loading file" : "Hiba a fájl betöltésekor",
- "An error happened during decryption" : "Hiba történt visszafejtés közben",
"Credential created!" : "Azonosító létrehozva!",
"Credential deleted" : "Azonosító törölve",
"Credential updated" : "Azonosító frissítve",
"Credential recovered" : "Azonosító visszaállítva",
"Credential destroyed" : "Azonosító megsemmisítve",
- "Error downloading file, you probably don't have enough permissions" : "Hiba fájl letöltésekor, lehet, hogy nincs elegendő jogosultságod",
"Invalid QR code" : "Érvénytelen QR kód",
"Starting export" : "Exportálás kezdése",
"Decrypting credentials" : "Azonosítók visszafejtése",
"Done" : "Kész",
- "File read successfully!" : "Fáj sikeresen beolvasva!",
"Credential has no label, skipping" : "Címke nélküli azonosító, kihagyás",
"Adding {{credential}}" : "Hozzáadás: {{credential}}",
"Added {{credential}}" : "Hozzáadva: {{credential}}",
"Parsed {{num}} credentials, starting to import" : "{{num}} azonosító feldolgozva, importálás megkezdése",
"Importing" : "Importálás",
"Start import" : "Importálás elindítása",
- "Select csv file" : "CSV fájl kiválasztása",
- "Parsed {{rows}} lines from csv file" : "[{rows}} sor feldolgozva a CSV fájlból",
"Skip first row" : "Első sor kihagyása",
"Revision deleted" : "Változat törölve",
"Revision restored" : "Változat visszaállítva",
- "Save in passman" : "Mentés a jelszókezelőben",
"Settings saved" : "Beállítások elmentve",
"General settings" : "Általános beállítások",
- "Password Audit" : "Jelszó felülvizsgálat",
"Password settings" : "Jelszó beállítások",
"Import credentials" : "Azonosítók importálása",
"Export credentials" : "Azonosítók eyportálása",
"Sharing" : "Megosztás",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Biztos, hogy el akarsz menni? Ez minden azonosítót tönkre fog tenni",
"Your old password is incorrect!" : "A régi jelszavad nem megfelelő!",
- "New passwords do not match!" : "Az új jelszavak nem egyeznek meg!",
- "Please login with your new vault password" : "Kérlek jelentkezz be az új széf jelszavaddal",
"Share with users and groups" : "Megosztás felhasználókkal és csoportokkal",
"Share link" : "Megosztás hivatkozással",
"Are you sure you want to leave? This will corrupt this credential" : "Biztos, hogy el akarsz menni? Ez tönkre fogja tenni az azonosítót",
@@ -64,7 +52,6 @@ OC.L10N.register(
"Complete" : "Befejezve",
"Username" : "Felhasználónév",
"Repeat password" : "Jelszó ismétlés",
- "Add Tag" : "Címke hozzáadás",
"Field label" : "Mező címke",
"Field value" : "Mező érték",
"Choose a file" : "Válassz egy fájlt",
@@ -80,8 +67,6 @@ OC.L10N.register(
"Size" : "Méret",
"Issuer" : "Kibocsátó",
"Secret" : "Titok",
- "Expire date" : "Lejárati dátum",
- "No expire date set" : "Nincs beállítva lejárati dátum",
"Renew interval" : "Megújítási időköz",
"Disabled" : "Letiltva",
"Day(s)" : "Nap",
@@ -105,7 +90,6 @@ OC.L10N.register(
"Change vault key" : "Széf kulcs módosítás",
"Old vault password" : "Régi széf jelszó",
"New vault password" : "Új széf jelszó",
- "New vault password repeat" : "Új széf jelszó ismét",
"Please wait your vault is being updated, do not leave this page." : "Kérlek várj amíg frissül a széfed, ne hagyd el ezt az oldalt.",
"Processing" : "Feldolgozás",
"Total progress" : "Teljes folyamat",
@@ -115,7 +99,6 @@ OC.L10N.register(
"Bookmarklet" : "Bookmarklet",
"Save your passwords with 1 click!" : "Mentsd el a jelszavaidat 1 kattintással!",
"Drag below button to your bookmark toolbar." : "Húzd az alábbi gombot a könyvjelző eszköztáradra.",
- "Deleting {{password}}..." : " {{password}} törlése...",
"Yes, delete my precious passwords" : "Igen, töröld az értékes jelszavam",
"Import type" : "Importálás típusa",
"Import" : "Importálás",
@@ -127,12 +110,9 @@ OC.L10N.register(
"Save keys" : "Kulcsok mentése",
"Generate sharing keys" : "Megosztási kulcsok létrehozása",
"Generating sharing keys" : "Megosztási kulcsok létrehozása",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "A jelszókezelő ellenőrzi a jelszavadat, kiszámítja a feltöréséhez szükséges átlagos időt, ha a határérték alatt van, akkor megjelíti",
"Minimum password stength" : "Minimális jelszó hossz",
- "Passman scanned your passwords, and here is the result." : "A jelszókezelő ellenőrizte a jelszavaidat, íme az eredmény.",
"Score" : "Pontszám",
"Action" : "Művelet",
- "Search users or groups..." : "Felhasználók vagy csoportok keresése...",
"Cyphering" : "Rejtjelezés",
"Uploading" : "Feltöltés",
"User" : "Felhasználó",
@@ -145,7 +125,6 @@ OC.L10N.register(
"Enable link sharing" : "Hivatkozással megosztás engedélyezése",
"Share until date" : "Megosztás eddig a dátumig",
"Expire after views" : "Lejárat ennyi megtekintés után",
- "Click share first" : "Először kattints a megosztásra",
"Show files" : "Fájlok megjelenítése",
"Details" : "Részletel",
"Hide details" : "Részletek elrejtése",
@@ -165,7 +144,6 @@ OC.L10N.register(
"E-mail" : "E-mail",
"URL" : "Hivatkozás",
"Notes" : "Megjegyzés",
- "Expire time" : "Lejárati idő",
"Changed" : "Megváltoztatva",
"Created" : "Létrehozva",
"Edit" : "Szerkesztés",
@@ -181,7 +159,6 @@ OC.L10N.register(
"Never" : "Soha",
"Logout" : "Kijelentkezés",
"Donate" : "Adományozás",
- "Loading..." : "Betöltés...",
"A Passman item has been created, modified or deleted" : "Egy Jelszókezelő elem létrehozva, módosítva vagy törölve",
"A Passman item has expired" : "Egy Jelszókezelő elem lejárt",
"A Passman item has been shared" : "Egy Jelszókezelő elem megosztva",
@@ -208,8 +185,6 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s megosztotta veled ezt: \"%s\". Kattints ide az elfogadáshoz",
"%s has declined your share request for \"%s\"." : "%s elutasította \"%s\" megosztási kérésedet.",
"%s has accepted your share request for \"%s\"." : "%s elfogadta \"%s\" megosztási kérésedet.",
- "Github version:" : "Github verzió:",
- "A newer version of passman is available" : "Újabb jelszótár verzió elérhető!",
"Password sharing" : "Jelszómegosztás",
"Enable HTTPS check" : "HTTPS ellenőrzés engedélyezése",
"Reason" : "Indok",
diff --git a/l10n/hu.json b/l10n/hu.json
index a248118e..b1b5d617 100644
--- a/l10n/hu.json
+++ b/l10n/hu.json
@@ -5,44 +5,32 @@
"Passwords do not match" : "A jelszavak nem egyeznek",
"General" : "Általános",
"Custom Fields" : "Egyéni mezők",
- "Please fill in a label!" : "Kérlek tölts ki egy címkét!",
- "Please fill in a value!" : "Kérlek töltsd ki egy értéket!",
"Error loading file" : "Hiba a fájl betöltésekor",
- "An error happened during decryption" : "Hiba történt visszafejtés közben",
"Credential created!" : "Azonosító létrehozva!",
"Credential deleted" : "Azonosító törölve",
"Credential updated" : "Azonosító frissítve",
"Credential recovered" : "Azonosító visszaállítva",
"Credential destroyed" : "Azonosító megsemmisítve",
- "Error downloading file, you probably don't have enough permissions" : "Hiba fájl letöltésekor, lehet, hogy nincs elegendő jogosultságod",
"Invalid QR code" : "Érvénytelen QR kód",
"Starting export" : "Exportálás kezdése",
"Decrypting credentials" : "Azonosítók visszafejtése",
"Done" : "Kész",
- "File read successfully!" : "Fáj sikeresen beolvasva!",
"Credential has no label, skipping" : "Címke nélküli azonosító, kihagyás",
"Adding {{credential}}" : "Hozzáadás: {{credential}}",
"Added {{credential}}" : "Hozzáadva: {{credential}}",
"Parsed {{num}} credentials, starting to import" : "{{num}} azonosító feldolgozva, importálás megkezdése",
"Importing" : "Importálás",
"Start import" : "Importálás elindítása",
- "Select csv file" : "CSV fájl kiválasztása",
- "Parsed {{rows}} lines from csv file" : "[{rows}} sor feldolgozva a CSV fájlból",
"Skip first row" : "Első sor kihagyása",
"Revision deleted" : "Változat törölve",
"Revision restored" : "Változat visszaállítva",
- "Save in passman" : "Mentés a jelszókezelőben",
"Settings saved" : "Beállítások elmentve",
"General settings" : "Általános beállítások",
- "Password Audit" : "Jelszó felülvizsgálat",
"Password settings" : "Jelszó beállítások",
"Import credentials" : "Azonosítók importálása",
"Export credentials" : "Azonosítók eyportálása",
"Sharing" : "Megosztás",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Biztos, hogy el akarsz menni? Ez minden azonosítót tönkre fog tenni",
"Your old password is incorrect!" : "A régi jelszavad nem megfelelő!",
- "New passwords do not match!" : "Az új jelszavak nem egyeznek meg!",
- "Please login with your new vault password" : "Kérlek jelentkezz be az új széf jelszavaddal",
"Share with users and groups" : "Megosztás felhasználókkal és csoportokkal",
"Share link" : "Megosztás hivatkozással",
"Are you sure you want to leave? This will corrupt this credential" : "Biztos, hogy el akarsz menni? Ez tönkre fogja tenni az azonosítót",
@@ -62,7 +50,6 @@
"Complete" : "Befejezve",
"Username" : "Felhasználónév",
"Repeat password" : "Jelszó ismétlés",
- "Add Tag" : "Címke hozzáadás",
"Field label" : "Mező címke",
"Field value" : "Mező érték",
"Choose a file" : "Válassz egy fájlt",
@@ -78,8 +65,6 @@
"Size" : "Méret",
"Issuer" : "Kibocsátó",
"Secret" : "Titok",
- "Expire date" : "Lejárati dátum",
- "No expire date set" : "Nincs beállítva lejárati dátum",
"Renew interval" : "Megújítási időköz",
"Disabled" : "Letiltva",
"Day(s)" : "Nap",
@@ -103,7 +88,6 @@
"Change vault key" : "Széf kulcs módosítás",
"Old vault password" : "Régi széf jelszó",
"New vault password" : "Új széf jelszó",
- "New vault password repeat" : "Új széf jelszó ismét",
"Please wait your vault is being updated, do not leave this page." : "Kérlek várj amíg frissül a széfed, ne hagyd el ezt az oldalt.",
"Processing" : "Feldolgozás",
"Total progress" : "Teljes folyamat",
@@ -113,7 +97,6 @@
"Bookmarklet" : "Bookmarklet",
"Save your passwords with 1 click!" : "Mentsd el a jelszavaidat 1 kattintással!",
"Drag below button to your bookmark toolbar." : "Húzd az alábbi gombot a könyvjelző eszköztáradra.",
- "Deleting {{password}}..." : " {{password}} törlése...",
"Yes, delete my precious passwords" : "Igen, töröld az értékes jelszavam",
"Import type" : "Importálás típusa",
"Import" : "Importálás",
@@ -125,12 +108,9 @@
"Save keys" : "Kulcsok mentése",
"Generate sharing keys" : "Megosztási kulcsok létrehozása",
"Generating sharing keys" : "Megosztási kulcsok létrehozása",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "A jelszókezelő ellenőrzi a jelszavadat, kiszámítja a feltöréséhez szükséges átlagos időt, ha a határérték alatt van, akkor megjelíti",
"Minimum password stength" : "Minimális jelszó hossz",
- "Passman scanned your passwords, and here is the result." : "A jelszókezelő ellenőrizte a jelszavaidat, íme az eredmény.",
"Score" : "Pontszám",
"Action" : "Művelet",
- "Search users or groups..." : "Felhasználók vagy csoportok keresése...",
"Cyphering" : "Rejtjelezés",
"Uploading" : "Feltöltés",
"User" : "Felhasználó",
@@ -143,7 +123,6 @@
"Enable link sharing" : "Hivatkozással megosztás engedélyezése",
"Share until date" : "Megosztás eddig a dátumig",
"Expire after views" : "Lejárat ennyi megtekintés után",
- "Click share first" : "Először kattints a megosztásra",
"Show files" : "Fájlok megjelenítése",
"Details" : "Részletel",
"Hide details" : "Részletek elrejtése",
@@ -163,7 +142,6 @@
"E-mail" : "E-mail",
"URL" : "Hivatkozás",
"Notes" : "Megjegyzés",
- "Expire time" : "Lejárati idő",
"Changed" : "Megváltoztatva",
"Created" : "Létrehozva",
"Edit" : "Szerkesztés",
@@ -179,7 +157,6 @@
"Never" : "Soha",
"Logout" : "Kijelentkezés",
"Donate" : "Adományozás",
- "Loading..." : "Betöltés...",
"A Passman item has been created, modified or deleted" : "Egy Jelszókezelő elem létrehozva, módosítva vagy törölve",
"A Passman item has expired" : "Egy Jelszókezelő elem lejárt",
"A Passman item has been shared" : "Egy Jelszókezelő elem megosztva",
@@ -206,8 +183,6 @@
"%s shared \"%s\" with you. Click here to accept" : "%s megosztotta veled ezt: \"%s\". Kattints ide az elfogadáshoz",
"%s has declined your share request for \"%s\"." : "%s elutasította \"%s\" megosztási kérésedet.",
"%s has accepted your share request for \"%s\"." : "%s elfogadta \"%s\" megosztási kérésedet.",
- "Github version:" : "Github verzió:",
- "A newer version of passman is available" : "Újabb jelszótár verzió elérhető!",
"Password sharing" : "Jelszómegosztás",
"Enable HTTPS check" : "HTTPS ellenőrzés engedélyezése",
"Reason" : "Indok",
diff --git a/l10n/is.js b/l10n/is.js
index 66265269..afdb2150 100644
--- a/l10n/is.js
+++ b/l10n/is.js
@@ -7,22 +7,16 @@ OC.L10N.register(
"Passwords do not match" : "Lykilorðin stemma ekki",
"General" : "Almennt",
"Custom Fields" : "Sérsniðnir reitir",
- "Please fill in a label!" : "Fylltu út skýringu!",
- "Please fill in a value!" : "Fylltu út gildi!",
"Error loading file" : "Villa við að hlaða inn skrá",
- "An error happened during decryption" : "Villa kom upp við afkóðun",
"Credential created!" : "Bjó til auðkenni!",
"Credential deleted" : "Eyddi auðkennum",
"Credential updated" : "Uppfærði auðkenni",
"Credential recovered" : "Endurheimti auðkenni",
"Credential destroyed" : "Eyðilagði auðkenni",
- "Error downloading file, you probably don't have enough permissions" : "Villa við að sækja skrá, þú hefur líklega ekki nægar aðgangsheimildir",
"Invalid QR code" : "Ógildur QR-kóði",
"Starting export" : "Hef útflutning",
"Decrypting credentials" : "Afkóða auðkenni",
"Done" : "Lokið",
- "File read successfully!" : "Tókst að lesa skrána!",
- "Follow the following steps to import your file" : "Fylgdu eftirfarandi þrepum til að flytja inn skrána þína",
"Credential has no label, skipping" : "Auðkennið er ekki með neina skýringu, sleppi því",
"Adding {{credential}}" : "Bæti við {{credential}}",
"Added {{credential}}" : "Bætti við {{credential}}",
@@ -30,29 +24,22 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Þáttaði {{num}} auðkenni, hef innflutning",
"Importing" : "Innflutningur",
"Start import" : "Hefja innflutning",
- "Select csv file" : "Veldu csv-skrá",
- "Parsed {{rows}} lines from csv file" : "Þáttaði {{rows}} línur úr csv-skrá",
+ "Select CSV file" : "Veldu CSV-skrá",
+ "Parsed {{rows}} lines from CSV file" : "Þáttaði {{rows}} línur úr CSV-skrá",
"Skip first row" : "Sleppti fyrstu röð",
"You need to assign the label field before you can start the import." : "Þú þarft að setja inn skýringu á gagnasviðið áður en þú getur hafið innflutning.",
- "First 5 lines of the csv are shown." : "Fyrstu5 línur csv-skrárinnar eru sýndar.",
"Assign the proper fields to each column." : "Úthlutaðu réttum gagnasviðum á hvern dálk.",
- "Example imported credential" : "Dæmi um innflutt auðkenni",
- "Missing an importer? Try it with the generic csv importer." : "Vantar innflutningsskriftu? Prófaðu með almennu CSV-innflutningsskriftunni.",
+ "Missing an importer? Try it with the generic CSV importer." : "Vantar innflutningsskriftu? Prófaðu með almennu CSV-innflutningsskriftunni.",
"Go back to importers." : "Fara aftur í innflutningsskriftur.",
"Revision deleted" : "Útgáfu eytt",
"Revision restored" : "Útgáfa endurheimt",
- "Save in passman" : "Vista í Passman",
"Settings saved" : "Stillingar vistaðar",
"General settings" : "Almennar stillingar",
- "Password Audit" : "Athugun á lykilorði",
"Password settings" : "Stillingar lykilorðs",
"Import credentials" : "Flytja inn auðkenni",
"Export credentials" : "Flytja út auðkenni",
"Sharing" : "Deiling",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Ertu viss um að þú viljir fara? Þetta mun skemma öll auðkennin þín",
"Your old password is incorrect!" : "Gamla lykilorðið þitt er ekki rétt!",
- "New passwords do not match!" : "Nýju lykilorðin stemma ekki!",
- "Please login with your new vault password" : "Skráðu þig inn í lykilorðageymslu með nýja lykilorðinu",
"Share with users and groups" : "Deila með notendum og hópum",
"Share link" : "Deila tengli",
"Are you sure you want to leave? This will corrupt this credential" : "Ertu viss um að þú viljir fara? Þetta mun skemma þessi auðkenni",
@@ -72,7 +59,6 @@ OC.L10N.register(
"Complete" : "Fullklárað",
"Username" : "Notandanafn",
"Repeat password" : "Endurtaktu lykilorð",
- "Add Tag" : "Bæta við merki",
"Field label" : "Skýring gagnasviðs",
"Field value" : "Gildi gagnasviðs",
"Choose a file" : "Veldu skrá",
@@ -90,8 +76,6 @@ OC.L10N.register(
"Current OTP settings" : "Núverandi ESL-stillingar",
"Issuer" : "Útgefandi",
"Secret" : "Leyndarmál",
- "Expire date" : "Rennur út",
- "No expire date set" : "Engin lokadagsetning sett",
"Renew interval" : "Millibil endurnýjunar",
"Disabled" : "Óvirkt",
"Day(s)" : "dag(a)",
@@ -116,7 +100,6 @@ OC.L10N.register(
"Change vault key" : "Breyta lykli á lykilorðageymslu",
"Old vault password" : "Eldra lykilorð lykilorðageymslu",
"New vault password" : "Nýtt lykilorð lykilorðageymslu",
- "New vault password repeat" : "Endurtaka nýja lykilorðið",
"Please wait your vault is being updated, do not leave this page." : "Bíddu á meðan lykilorðageymslan þín er uppfærð, ekki fara af þessari síðu.",
"Processing" : "Í vinnslu",
"Total progress" : "Heildarframvinda",
@@ -130,7 +113,6 @@ OC.L10N.register(
"Vault password" : "Lykilorð lykilorðageymslu",
"This process is irreversible" : "Þetta ferli er ekki hægt að afturkalla",
"Delete my precious passwords" : "Eyða dýrmætu lykilorðunum mínum",
- "Deleting {{password}}..." : "Eyði {{password}}...",
"Yes, delete my precious passwords" : "Já, eyða dýrmætu lykilorðunum mínum",
"Import type" : "Tegund innflutnings",
"Import" : "Flytja inn",
@@ -142,14 +124,14 @@ OC.L10N.register(
"Save keys" : "Vista lykla",
"Generate sharing keys" : "Útbúa deilingarlykla",
"Generating sharing keys" : "Útbý deilingarlykla",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Lykilorðatólið mun skanna lykilorðið þitt, reikna meðaltímann sem tæki að ráða það, og birta skýringar ef það er neðan við ákveðin mörk",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Lykilorðatólið mun skanna lykilorðið þitt, reikna meðaltímann sem tæki að ráða það, og birta lista yfir það sem er neðan við ákveðin mörk",
"Minimum password stength" : "Lágmarksstyrkur lykilorðs",
- "Passman scanned your passwords, and here is the result." : "Passman skannaði lykilorðin þín, hér eru niðurstöðurnar.",
- "A total of {{scan_result}} weak credentials." : "Alls {{scan_result}} veik auðkenni.",
+ "Start scan" : "Hefja skönnun",
+ "Result" : "Niðurstöður",
+ "A total of {{scan_result}} weak credentials were found." : "Alls fundust {{scan_result}} veik auðkenni.",
"Score" : "Einkunn",
"Action" : "Aðgerð",
- "Search users or groups..." : "Leita að notendum eða hópum...",
- "Missing users? Only users that have vaults are shown." : "Vantar notendur? A'eins eru birtir notendur sem hafa lykilorðageymslur.",
+ "Missing users? Only users that have vaults are shown." : "Vantar notendur? Aðeins eru birtir notendur sem hafa lykilorðageymslur.",
"Cyphering" : "Dulkóðun",
"Uploading" : "Sendi inn ",
"User" : "Notandi",
@@ -163,7 +145,6 @@ OC.L10N.register(
"Enable link sharing" : "Virkja deilingu með tengli",
"Share until date" : "Deila þangað til",
"Expire after views" : "Rennur út eftir n skoðanir",
- "Click share first" : "Smelltu fyrst á sameign",
"Show files" : "Sýna skrár",
"Details" : "Nánar",
"Hide details" : "Fela nánari upplýsingar",
@@ -203,16 +184,13 @@ OC.L10N.register(
"Share credential {{credential}}" : "Deila auðkennum {{credential}}",
"Unshare" : "Hætta deilingu",
"Showing deleted since" : "Sýni eytt síðan",
- "All time" : "alltaf",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Birti {{number_filtered}} af {{credential_number}} auðkennum",
- "Search credential..." : "Leita að auðkennum...",
"Account" : "Aðgangur",
"Password" : "Lykilorð",
"OTP" : "ESL (eins-skiptis-leyniorð)",
"E-mail" : "Tölvupóstur",
"URL" : "Slóð (URL)",
"Notes" : "Minnispunktar",
- "Expire time" : "Tími þegar rennur út",
"Changed" : "Breytt",
"Created" : "Búið til",
"Edit" : "Breyta",
@@ -222,8 +200,6 @@ OC.L10N.register(
"Destroy" : "Eyðileggja",
"Use regex" : "Nota reglulega segð",
"You have incoming share requests." : "Þú hefur fengið beiðnir um deilingu.",
- "If you want to put the credential in a other vault," : "Ef þú vilt geyma auðkennin í annarri lykilorðageymslu,",
- "logout of this vault and login to the vault you want the shared credential in." : "skráðu þig út úr þessari lykilorðageymslu og skráðu þig inn í þá sem þú vilt geyma sameiginlegu auðkennin í.",
"Permissions" : "Heimildir",
"Received from" : "Barst frá",
"Date" : "Dagsetning",
@@ -237,26 +213,18 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Styrkur lykilorðs verður að vera að minnsta kosti: {{strength}}",
"Please give your new vault a name." : "Gefðu nýju lykilorðageymslunni nafn.",
"Repeat vault password" : "Endurtaktu lykilorðið",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Deilingarlyklarnir þínir munu verða með 1024 bita styrk, þetta er eitthvað sem þú getur breytt síðar í stillingunum þínum.",
"Create vault" : "Búa til lykilorðageymslu",
"Go back to vaults" : "Fara aftur í lykilorðageymslur",
"Please input the password for" : "Settu inn lykilorðið fyrir",
- "Set this vault as default." : "Setja þessa lykilorðageymslu sem sjálfgefna.",
- "Login automatically to this vault." : "Skrá sjálfvirkt inn í þessa lykilorðageymslu.",
- "Logout of this vault automatically after: " : "Skrá sjálfvirkt út úr þessari lykilorðageymslu eftir: ",
+ "Log into this vault automatically." : "Skrá sjálfvirkt inn í þessa lykilorðageymslu.",
"Decrypt vault" : "Afkóða lykilorðageymslu",
- "Seems you lost the vault password and you're unable to login." : "Það lítur út eins og þú hafir tapað lykilorðinu fyrir lykilorðageymsluna og getir ekki skráð þig inn.",
- "If you want this vault removed you can request removal of the vault here." : "Ef þú vilt að þessi lykilorðageymsla verði fjarlægð, geturðu beðið um það hér.",
- "An admin then accept to the request (or not)" : "Kerfisstjóri mun síðan samþykkja beiðnina (eða ekki)",
- "After an admin destroy's this vault, all credentials will be lost" : "Eftir að kerfisstjóri eyðir þessari lykilorðageymslu, munu öll auðkenni tapast",
- "Reason to request deletion (optional):" : "Ástæða fyrir beiðni um eyðingu (valfrjálst):",
+ "If you want this vault to be removed you can request that here." : "Ef þú vilt að þessi lykilorðageymsla verði fjarlægð, geturðu beðið um það hér.",
"Request vault destruction" : "Biðja um eyðingu á lykilorðageymslu",
"Yes, request an admin to destroy this vault" : "Já, biðja kerfisstjóra að eyða þessari lykilorðageymslu",
"Cancel destruction request" : "Hætta við beiðni um eyðileggingu",
"Vault destruction requested" : "Beðið um eyðingu á lykilorðageymslu",
"Request removed" : "Beiðni fjarlægð",
"Destruction request pending" : "Beiðni um eyðileggingu er í biðröð",
- "Warning! Adding credentials over http can be insecure!" : "Aðvörun! Að bæta auðkennum við yfir http getur verið óöruggt!",
"Logged in to {{vault_name}}" : "Skráður inn í {{vault_name}}",
"Change vault" : "Skipta um lykilorðageymslu",
"Deleted credentials" : "Eydd auðkenni",
@@ -264,8 +232,6 @@ OC.L10N.register(
"Donate" : "Styrkja",
"Someone has shared a credential with you." : "Einhver hefur deilt auðkennum með þér.",
"Click here to request it" : "Smelltu hér til að biðja um það",
- "Loading..." : "Hleð...",
- "Awwhh.... credential not found. Maybe it expired" : "Æjæjæ... auðkenni fundust ekki. Kannski þau séu útrunnin",
"Error while saving field" : "Villa kom upp við að vista gagnasvið",
"A Passman item has been created, modified or deleted" : "Passman atriði hefur verið búið til, breytt eða eytt",
"A Passman item has expired" : "Passman atriði er útrunnið",
@@ -295,17 +261,17 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "\"%s deildi »%s« með þér. Smelltu hér til að samþykkja",
"%s has declined your share request for \"%s\"." : "%s hafnaði beiðni þinni um deilingu á \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s samþykkti beiðni þína um deilingu á \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Gat ekki náð í upplýsingar um útgáfu",
"Passman Settings" : "Stillingar Passman",
- "Github version:" : "Útgáfa Github:",
- "A newer version of passman is available" : "Ný útgáfa Passman er tiltæk",
+ "A newer version of Passman is available" : "Nýrri útgáfa Passman er tiltæk",
"Password sharing" : "Deiling lykilorða",
"Credential mover" : "Tilfærsla auðkenna",
"Vault destruction requests" : "Beiðnir um eyðingu á lykilorðageymslum",
"Check for new versions" : "Athuga með nýjar útgáfur",
"Enable HTTPS check" : "Virkja prófun á HTTPS",
"Disable context menu" : "Gera samhengisvalmynd óvirka",
- "Disable javascript debugger" : "Gera JavaScript aflúsara óvirkann",
+ "Disable JavaScript debugger" : "Gera JavaScript aflúsara óvirkann",
"Allow users on this server to share passwords with a link" : "Leyfa notendum á þessum þjóni að deila lykilorðum með tengli",
"Allow users on this server to share passwords with other users" : "Leyfa notendum á þessum þjóni að deila lykilorðum með öðrum notendum",
"Move credentials from one account to another" : "Flytja auðkenni frá einum aðgangi til annars",
diff --git a/l10n/is.json b/l10n/is.json
index 67586fdc..cc8ee441 100644
--- a/l10n/is.json
+++ b/l10n/is.json
@@ -5,22 +5,16 @@
"Passwords do not match" : "Lykilorðin stemma ekki",
"General" : "Almennt",
"Custom Fields" : "Sérsniðnir reitir",
- "Please fill in a label!" : "Fylltu út skýringu!",
- "Please fill in a value!" : "Fylltu út gildi!",
"Error loading file" : "Villa við að hlaða inn skrá",
- "An error happened during decryption" : "Villa kom upp við afkóðun",
"Credential created!" : "Bjó til auðkenni!",
"Credential deleted" : "Eyddi auðkennum",
"Credential updated" : "Uppfærði auðkenni",
"Credential recovered" : "Endurheimti auðkenni",
"Credential destroyed" : "Eyðilagði auðkenni",
- "Error downloading file, you probably don't have enough permissions" : "Villa við að sækja skrá, þú hefur líklega ekki nægar aðgangsheimildir",
"Invalid QR code" : "Ógildur QR-kóði",
"Starting export" : "Hef útflutning",
"Decrypting credentials" : "Afkóða auðkenni",
"Done" : "Lokið",
- "File read successfully!" : "Tókst að lesa skrána!",
- "Follow the following steps to import your file" : "Fylgdu eftirfarandi þrepum til að flytja inn skrána þína",
"Credential has no label, skipping" : "Auðkennið er ekki með neina skýringu, sleppi því",
"Adding {{credential}}" : "Bæti við {{credential}}",
"Added {{credential}}" : "Bætti við {{credential}}",
@@ -28,29 +22,22 @@
"Parsed {{num}} credentials, starting to import" : "Þáttaði {{num}} auðkenni, hef innflutning",
"Importing" : "Innflutningur",
"Start import" : "Hefja innflutning",
- "Select csv file" : "Veldu csv-skrá",
- "Parsed {{rows}} lines from csv file" : "Þáttaði {{rows}} línur úr csv-skrá",
+ "Select CSV file" : "Veldu CSV-skrá",
+ "Parsed {{rows}} lines from CSV file" : "Þáttaði {{rows}} línur úr CSV-skrá",
"Skip first row" : "Sleppti fyrstu röð",
"You need to assign the label field before you can start the import." : "Þú þarft að setja inn skýringu á gagnasviðið áður en þú getur hafið innflutning.",
- "First 5 lines of the csv are shown." : "Fyrstu5 línur csv-skrárinnar eru sýndar.",
"Assign the proper fields to each column." : "Úthlutaðu réttum gagnasviðum á hvern dálk.",
- "Example imported credential" : "Dæmi um innflutt auðkenni",
- "Missing an importer? Try it with the generic csv importer." : "Vantar innflutningsskriftu? Prófaðu með almennu CSV-innflutningsskriftunni.",
+ "Missing an importer? Try it with the generic CSV importer." : "Vantar innflutningsskriftu? Prófaðu með almennu CSV-innflutningsskriftunni.",
"Go back to importers." : "Fara aftur í innflutningsskriftur.",
"Revision deleted" : "Útgáfu eytt",
"Revision restored" : "Útgáfa endurheimt",
- "Save in passman" : "Vista í Passman",
"Settings saved" : "Stillingar vistaðar",
"General settings" : "Almennar stillingar",
- "Password Audit" : "Athugun á lykilorði",
"Password settings" : "Stillingar lykilorðs",
"Import credentials" : "Flytja inn auðkenni",
"Export credentials" : "Flytja út auðkenni",
"Sharing" : "Deiling",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Ertu viss um að þú viljir fara? Þetta mun skemma öll auðkennin þín",
"Your old password is incorrect!" : "Gamla lykilorðið þitt er ekki rétt!",
- "New passwords do not match!" : "Nýju lykilorðin stemma ekki!",
- "Please login with your new vault password" : "Skráðu þig inn í lykilorðageymslu með nýja lykilorðinu",
"Share with users and groups" : "Deila með notendum og hópum",
"Share link" : "Deila tengli",
"Are you sure you want to leave? This will corrupt this credential" : "Ertu viss um að þú viljir fara? Þetta mun skemma þessi auðkenni",
@@ -70,7 +57,6 @@
"Complete" : "Fullklárað",
"Username" : "Notandanafn",
"Repeat password" : "Endurtaktu lykilorð",
- "Add Tag" : "Bæta við merki",
"Field label" : "Skýring gagnasviðs",
"Field value" : "Gildi gagnasviðs",
"Choose a file" : "Veldu skrá",
@@ -88,8 +74,6 @@
"Current OTP settings" : "Núverandi ESL-stillingar",
"Issuer" : "Útgefandi",
"Secret" : "Leyndarmál",
- "Expire date" : "Rennur út",
- "No expire date set" : "Engin lokadagsetning sett",
"Renew interval" : "Millibil endurnýjunar",
"Disabled" : "Óvirkt",
"Day(s)" : "dag(a)",
@@ -114,7 +98,6 @@
"Change vault key" : "Breyta lykli á lykilorðageymslu",
"Old vault password" : "Eldra lykilorð lykilorðageymslu",
"New vault password" : "Nýtt lykilorð lykilorðageymslu",
- "New vault password repeat" : "Endurtaka nýja lykilorðið",
"Please wait your vault is being updated, do not leave this page." : "Bíddu á meðan lykilorðageymslan þín er uppfærð, ekki fara af þessari síðu.",
"Processing" : "Í vinnslu",
"Total progress" : "Heildarframvinda",
@@ -128,7 +111,6 @@
"Vault password" : "Lykilorð lykilorðageymslu",
"This process is irreversible" : "Þetta ferli er ekki hægt að afturkalla",
"Delete my precious passwords" : "Eyða dýrmætu lykilorðunum mínum",
- "Deleting {{password}}..." : "Eyði {{password}}...",
"Yes, delete my precious passwords" : "Já, eyða dýrmætu lykilorðunum mínum",
"Import type" : "Tegund innflutnings",
"Import" : "Flytja inn",
@@ -140,14 +122,14 @@
"Save keys" : "Vista lykla",
"Generate sharing keys" : "Útbúa deilingarlykla",
"Generating sharing keys" : "Útbý deilingarlykla",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Lykilorðatólið mun skanna lykilorðið þitt, reikna meðaltímann sem tæki að ráða það, og birta skýringar ef það er neðan við ákveðin mörk",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Lykilorðatólið mun skanna lykilorðið þitt, reikna meðaltímann sem tæki að ráða það, og birta lista yfir það sem er neðan við ákveðin mörk",
"Minimum password stength" : "Lágmarksstyrkur lykilorðs",
- "Passman scanned your passwords, and here is the result." : "Passman skannaði lykilorðin þín, hér eru niðurstöðurnar.",
- "A total of {{scan_result}} weak credentials." : "Alls {{scan_result}} veik auðkenni.",
+ "Start scan" : "Hefja skönnun",
+ "Result" : "Niðurstöður",
+ "A total of {{scan_result}} weak credentials were found." : "Alls fundust {{scan_result}} veik auðkenni.",
"Score" : "Einkunn",
"Action" : "Aðgerð",
- "Search users or groups..." : "Leita að notendum eða hópum...",
- "Missing users? Only users that have vaults are shown." : "Vantar notendur? A'eins eru birtir notendur sem hafa lykilorðageymslur.",
+ "Missing users? Only users that have vaults are shown." : "Vantar notendur? Aðeins eru birtir notendur sem hafa lykilorðageymslur.",
"Cyphering" : "Dulkóðun",
"Uploading" : "Sendi inn ",
"User" : "Notandi",
@@ -161,7 +143,6 @@
"Enable link sharing" : "Virkja deilingu með tengli",
"Share until date" : "Deila þangað til",
"Expire after views" : "Rennur út eftir n skoðanir",
- "Click share first" : "Smelltu fyrst á sameign",
"Show files" : "Sýna skrár",
"Details" : "Nánar",
"Hide details" : "Fela nánari upplýsingar",
@@ -201,16 +182,13 @@
"Share credential {{credential}}" : "Deila auðkennum {{credential}}",
"Unshare" : "Hætta deilingu",
"Showing deleted since" : "Sýni eytt síðan",
- "All time" : "alltaf",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Birti {{number_filtered}} af {{credential_number}} auðkennum",
- "Search credential..." : "Leita að auðkennum...",
"Account" : "Aðgangur",
"Password" : "Lykilorð",
"OTP" : "ESL (eins-skiptis-leyniorð)",
"E-mail" : "Tölvupóstur",
"URL" : "Slóð (URL)",
"Notes" : "Minnispunktar",
- "Expire time" : "Tími þegar rennur út",
"Changed" : "Breytt",
"Created" : "Búið til",
"Edit" : "Breyta",
@@ -220,8 +198,6 @@
"Destroy" : "Eyðileggja",
"Use regex" : "Nota reglulega segð",
"You have incoming share requests." : "Þú hefur fengið beiðnir um deilingu.",
- "If you want to put the credential in a other vault," : "Ef þú vilt geyma auðkennin í annarri lykilorðageymslu,",
- "logout of this vault and login to the vault you want the shared credential in." : "skráðu þig út úr þessari lykilorðageymslu og skráðu þig inn í þá sem þú vilt geyma sameiginlegu auðkennin í.",
"Permissions" : "Heimildir",
"Received from" : "Barst frá",
"Date" : "Dagsetning",
@@ -235,26 +211,18 @@
"Password strength must be at least: {{strength}}" : "Styrkur lykilorðs verður að vera að minnsta kosti: {{strength}}",
"Please give your new vault a name." : "Gefðu nýju lykilorðageymslunni nafn.",
"Repeat vault password" : "Endurtaktu lykilorðið",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Deilingarlyklarnir þínir munu verða með 1024 bita styrk, þetta er eitthvað sem þú getur breytt síðar í stillingunum þínum.",
"Create vault" : "Búa til lykilorðageymslu",
"Go back to vaults" : "Fara aftur í lykilorðageymslur",
"Please input the password for" : "Settu inn lykilorðið fyrir",
- "Set this vault as default." : "Setja þessa lykilorðageymslu sem sjálfgefna.",
- "Login automatically to this vault." : "Skrá sjálfvirkt inn í þessa lykilorðageymslu.",
- "Logout of this vault automatically after: " : "Skrá sjálfvirkt út úr þessari lykilorðageymslu eftir: ",
+ "Log into this vault automatically." : "Skrá sjálfvirkt inn í þessa lykilorðageymslu.",
"Decrypt vault" : "Afkóða lykilorðageymslu",
- "Seems you lost the vault password and you're unable to login." : "Það lítur út eins og þú hafir tapað lykilorðinu fyrir lykilorðageymsluna og getir ekki skráð þig inn.",
- "If you want this vault removed you can request removal of the vault here." : "Ef þú vilt að þessi lykilorðageymsla verði fjarlægð, geturðu beðið um það hér.",
- "An admin then accept to the request (or not)" : "Kerfisstjóri mun síðan samþykkja beiðnina (eða ekki)",
- "After an admin destroy's this vault, all credentials will be lost" : "Eftir að kerfisstjóri eyðir þessari lykilorðageymslu, munu öll auðkenni tapast",
- "Reason to request deletion (optional):" : "Ástæða fyrir beiðni um eyðingu (valfrjálst):",
+ "If you want this vault to be removed you can request that here." : "Ef þú vilt að þessi lykilorðageymsla verði fjarlægð, geturðu beðið um það hér.",
"Request vault destruction" : "Biðja um eyðingu á lykilorðageymslu",
"Yes, request an admin to destroy this vault" : "Já, biðja kerfisstjóra að eyða þessari lykilorðageymslu",
"Cancel destruction request" : "Hætta við beiðni um eyðileggingu",
"Vault destruction requested" : "Beðið um eyðingu á lykilorðageymslu",
"Request removed" : "Beiðni fjarlægð",
"Destruction request pending" : "Beiðni um eyðileggingu er í biðröð",
- "Warning! Adding credentials over http can be insecure!" : "Aðvörun! Að bæta auðkennum við yfir http getur verið óöruggt!",
"Logged in to {{vault_name}}" : "Skráður inn í {{vault_name}}",
"Change vault" : "Skipta um lykilorðageymslu",
"Deleted credentials" : "Eydd auðkenni",
@@ -262,8 +230,6 @@
"Donate" : "Styrkja",
"Someone has shared a credential with you." : "Einhver hefur deilt auðkennum með þér.",
"Click here to request it" : "Smelltu hér til að biðja um það",
- "Loading..." : "Hleð...",
- "Awwhh.... credential not found. Maybe it expired" : "Æjæjæ... auðkenni fundust ekki. Kannski þau séu útrunnin",
"Error while saving field" : "Villa kom upp við að vista gagnasvið",
"A Passman item has been created, modified or deleted" : "Passman atriði hefur verið búið til, breytt eða eytt",
"A Passman item has expired" : "Passman atriði er útrunnið",
@@ -293,17 +259,17 @@
"%s shared \"%s\" with you. Click here to accept" : "\"%s deildi »%s« með þér. Smelltu hér til að samþykkja",
"%s has declined your share request for \"%s\"." : "%s hafnaði beiðni þinni um deilingu á \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s samþykkti beiðni þína um deilingu á \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Gat ekki náð í upplýsingar um útgáfu",
"Passman Settings" : "Stillingar Passman",
- "Github version:" : "Útgáfa Github:",
- "A newer version of passman is available" : "Ný útgáfa Passman er tiltæk",
+ "A newer version of Passman is available" : "Nýrri útgáfa Passman er tiltæk",
"Password sharing" : "Deiling lykilorða",
"Credential mover" : "Tilfærsla auðkenna",
"Vault destruction requests" : "Beiðnir um eyðingu á lykilorðageymslum",
"Check for new versions" : "Athuga með nýjar útgáfur",
"Enable HTTPS check" : "Virkja prófun á HTTPS",
"Disable context menu" : "Gera samhengisvalmynd óvirka",
- "Disable javascript debugger" : "Gera JavaScript aflúsara óvirkann",
+ "Disable JavaScript debugger" : "Gera JavaScript aflúsara óvirkann",
"Allow users on this server to share passwords with a link" : "Leyfa notendum á þessum þjóni að deila lykilorðum með tengli",
"Allow users on this server to share passwords with other users" : "Leyfa notendum á þessum þjóni að deila lykilorðum með öðrum notendum",
"Move credentials from one account to another" : "Flytja auðkenni frá einum aðgangi til annars",
diff --git a/l10n/it.js b/l10n/it.js
index c5ca591b..76284125 100644
--- a/l10n/it.js
+++ b/l10n/it.js
@@ -7,22 +7,16 @@ OC.L10N.register(
"Passwords do not match" : "Le password non corrispondono",
"General" : "Generale",
"Custom Fields" : "Campi personalizzati",
- "Please fill in a label!" : "Aggiungi un'etichetta!",
- "Please fill in a value!" : "Aggiungi un valore!",
"Error loading file" : "Errore durante il caricamento del file",
- "An error happened during decryption" : "Si è verificato un errore durante la decifratura",
"Credential created!" : "Credenziali create!",
"Credential deleted" : "Credenziali eliminate",
"Credential updated" : "Credenziali aggiornate",
"Credential recovered" : "Credenziali ripristinate",
"Credential destroyed" : "Credenziali distrutte",
- "Error downloading file, you probably don't have enough permissions" : "Errore durante lo scaricamento del file, probabilmente non disponi dei permessi necessari",
"Invalid QR code" : "Codice QR non valido",
"Starting export" : "Avvio esportazione",
"Decrypting credentials" : "Decifratura delle credenziali",
"Done" : "Fine",
- "File read successfully!" : "File letto correttamente!",
- "Follow the following steps to import your file" : "Segui i passaggi per importare il tuo file",
"Credential has no label, skipping" : "Credenziali senza etichetta, ignorate",
"Adding {{credential}}" : "Aggiunta di {{credential}}",
"Added {{credential}}" : "Aggiunte {{credential}}",
@@ -30,29 +24,20 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Elaborate {{num}} credenziali, avvio dell'importazione",
"Importing" : "Importazione in corso",
"Start import" : "Avvia importazione",
- "Select csv file" : "Seleziona file csv",
- "Parsed {{rows}} lines from csv file" : "Elaborate {{rows}} righe dal file csv",
+ "Select CSV file" : "Seleziona file CSV",
"Skip first row" : "Salta la prima riga",
"You need to assign the label field before you can start the import." : "Devi assegnare il campo etichetta prima di avviare l'importazione.",
- "First 5 lines of the csv are shown." : "Vengono mostrate le prime 5 linee del csv.",
"Assign the proper fields to each column." : "Assegna i campi corretti a ogni colonna.",
- "Example imported credential" : "Esempio di importazione dati di accesso",
- "Missing an importer? Try it with the generic csv importer." : "Manca un importatore? Prova con l'importatore generico.",
"Go back to importers." : "Torna agli importatori.",
"Revision deleted" : "Revisione eliminata",
"Revision restored" : "Revisione ripristinata",
- "Save in passman" : "Salva in passman",
"Settings saved" : "Impostazioni salvate",
"General settings" : "Impostazioni generali",
- "Password Audit" : "Verifica password",
"Password settings" : "Impostazioni password",
"Import credentials" : "Importa credenziali",
"Export credentials" : "Esporta credenziali",
"Sharing" : "Condivisione",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Sei sicuro di voler uscire? Ciò danneggerà TUTTE le tue credenziali",
"Your old password is incorrect!" : "La tua vecchia password non è corretta!",
- "New passwords do not match!" : "La nuova password non corrisponde!",
- "Please login with your new vault password" : "Accedi con la tua nuova password della cassaforte",
"Share with users and groups" : "Condividi con utenti e gruppi",
"Share link" : "Condividi collegamento",
"Are you sure you want to leave? This will corrupt this credential" : "Sei sicuro di voler uscire? Ciò danneggerà questo credenziali",
@@ -72,7 +57,6 @@ OC.L10N.register(
"Complete" : "Completato",
"Username" : "Nome utente",
"Repeat password" : "Ripeti la password",
- "Add Tag" : "Aggiungi etichetta",
"Field label" : "Etichetta campo",
"Field value" : "Valore campo",
"Choose a file" : "Scegli un file",
@@ -90,8 +74,6 @@ OC.L10N.register(
"Current OTP settings" : "Impostazioni OTP correnti",
"Issuer" : "Emittente",
"Secret" : "Segreto",
- "Expire date" : "Data di scadenza",
- "No expire date set" : "Nessuna data di scadenza impostata",
"Renew interval" : "Intervallo di aggiornamento",
"Disabled" : "Disabilitato",
"Day(s)" : "Giorno(i)",
@@ -116,7 +98,6 @@ OC.L10N.register(
"Change vault key" : "Modifica chiave della cassaforte",
"Old vault password" : "Vecchia password della cassaforte",
"New vault password" : "Nuova password della cassaforte",
- "New vault password repeat" : "Ripeti la nuova password della cassaforte",
"Please wait your vault is being updated, do not leave this page." : "Attendi l'aggiornamento della tua cassaforte, non abbandonare questa pagina.",
"Processing" : "Elaborazione",
"Total progress" : "Avanzamento totale",
@@ -130,7 +111,6 @@ OC.L10N.register(
"Vault password" : "Password della cassaforte",
"This process is irreversible" : "Questo processo è irreversibile",
"Delete my precious passwords" : "Elimina le mie preziose password",
- "Deleting {{password}}..." : "Eliminazione di {{password}}...",
"Yes, delete my precious passwords" : "Sì, elimina le mie preziose password",
"Import type" : "Importa tipo",
"Import" : "Importa",
@@ -142,13 +122,11 @@ OC.L10N.register(
"Save keys" : "Salva chiavi",
"Generate sharing keys" : "Genera chiavi di condivisione",
"Generating sharing keys" : "Generazione chiavi di condivisione",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Lo strumento delle password analizzerà la tua password, calcolerà il tempo medio per decifrarla e, se sotto la soglia, lo segnalerà.",
"Minimum password stength" : "Robustezza minima della password",
- "Passman scanned your passwords, and here is the result." : "Passman ha analizzato le tue password, ed ecco il risultato.",
- "A total of {{scan_result}} weak credentials." : "Un totale di {{scan_result}} credenziali deboli.",
+ "Start scan" : "Avvia scansione",
+ "Result" : "Risultato",
"Score" : "Punteggio",
"Action" : "Azione",
- "Search users or groups..." : "Cerca utente o gruppo ...",
"Missing users? Only users that have vaults are shown." : "Utenti mancanti? Solo gli utenti che hanno una cassaforte saranno mostrati.",
"Cyphering" : "Cifratura",
"Uploading" : "Caricamento",
@@ -163,7 +141,6 @@ OC.L10N.register(
"Enable link sharing" : "Abilita condivisione tramite collegamento",
"Share until date" : "Condividi fino alla data",
"Expire after views" : "Scadenza dopo viste",
- "Click share first" : "Fai clic per condividi prima",
"Show files" : "Mostra i file",
"Details" : "Dettagli",
"Hide details" : "Nascondi dettagli",
@@ -192,16 +169,13 @@ OC.L10N.register(
"Settings" : "Impostazioni",
"Share credential {{credential}}" : "Condividi credenziali {{credential}}",
"Unshare" : "Rimuovi condivisione",
- "All time" : "Sempre",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Visualizzazione di {{number_filtered}} di {{credential_number}} credenziali",
- "Search credential..." : "Cerca credenziali...",
"Account" : "Account",
"Password" : "Password",
"OTP" : "OTP",
"E-mail" : "Email",
"URL" : "URL",
"Notes" : "Note",
- "Expire time" : "Data di scadenza",
"Changed" : "Modificate",
"Created" : "Create",
"Edit" : "Modifica",
@@ -211,8 +185,6 @@ OC.L10N.register(
"Destroy" : "Distruggi",
"Use regex" : "Utilizza espressione regolare",
"You have incoming share requests." : "Hai ricevuto delle richieste di condivisione.",
- "If you want to put the credential in a other vault," : "Se vuoi mettere le credenziali in un altra cassaforte,",
- "logout of this vault and login to the vault you want the shared credential in." : "esci da questa cassaforte e accedi alla cassaforte con la quale vuoi condividere le credenziali.",
"Permissions" : "Permessi",
"Received from" : "Ricevute da",
"Date" : "Data",
@@ -226,26 +198,16 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "La robustezza della password deve essere almeno: {{strength}}",
"Please give your new vault a name." : "Dai un nome alla tua nuova cassaforte.",
"Repeat vault password" : "Ripeti la password della cassaforte",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "La tua chiave di condivisione avrà una lunghezza di 1024 bit, che potrai modificare successivamente nelle impostazioni.",
"Create vault" : "Crea cassaforte",
"Go back to vaults" : "Torna alle casseforti",
"Please input the password for" : "Digita la password per",
- "Set this vault as default." : "Imposta questa cassaforte come predefinita.",
- "Login automatically to this vault." : "Accedi automaticamente a questa cassaforte.",
- "Logout of this vault automatically after: " : "Esci da questa cassaforte automaticamente dopo:",
"Decrypt vault" : "Decifra cassaforte",
- "Seems you lost the vault password and you're unable to login." : "Sembra che tu abbia smarrito la password della cassaforte e non sia in grado di effettuare l'accesso.",
- "If you want this vault removed you can request removal of the vault here." : "Se desideri che questa cassaforte sia rimossa, puoi richiedere qui la rimozione della cassaforte.",
- "An admin then accept to the request (or not)" : "Un amministratore accetta quindi la richiesta (o no)",
- "After an admin destroy's this vault, all credentials will be lost" : "Una volta che un amministratore avrà distrutto questa cassaforte, tutte le credenziali saranno perse",
- "Reason to request deletion (optional):" : "Motivo della richiesta di eliminazione (facoltativo):",
"Request vault destruction" : "Richiedi la distruzione della cassaforte",
"Yes, request an admin to destroy this vault" : "Sì, richiede a un amministratore di distruggere questa cassaforte",
"Cancel destruction request" : "Annulla richiesta di distruzione",
"Vault destruction requested" : "Distruzione della cassaforte richiesta",
"Request removed" : "Richiesta annullata",
"Destruction request pending" : "Richiesta di distruzione in attesa",
- "Warning! Adding credentials over http can be insecure!" : "Avviso! L'aggiunta di credenziali su http può essere insicura!",
"Logged in to {{vault_name}}" : "Accesso effettuato a {{vault_name}}",
"Change vault" : "Cambia cassaforte",
"Deleted credentials" : "Credenziali eliminate",
@@ -253,8 +215,6 @@ OC.L10N.register(
"Donate" : "Donazione",
"Someone has shared a credential with you." : "Qualcuno ha condiviso delle credenziali con te.",
"Click here to request it" : "Fai clic qui per richiederle",
- "Loading..." : "Caricamento in corso...",
- "Awwhh.... credential not found. Maybe it expired" : "Ops... credenziali non trovate. Potrebbero essere scadute",
"Error while saving field" : "Errore durante il salvataggio del campo",
"A Passman item has been created, modified or deleted" : "Un elemento Passman è stato creato, modificato o eliminato",
"A Passman item has expired" : "Un elemento Passman è scaduto",
@@ -284,16 +244,16 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s ha condiviso \"%s\" con te. Fai clic qui per accettare",
"%s has declined your share request for \"%s\"." : "%s ha rifiutato la tua richiesta di condivisione per \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s ha accettato la tua richiesta di condivisione per \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Impossibile ottenere le informazioni di versione",
"Passman Settings" : "Impostazioni di Passman",
- "Github version:" : "Versione di Github:",
- "A newer version of passman is available" : "Una nuova versione di Passman è disponibile",
+ "A newer version of Passman is available" : "Una nuova versione di Passman è disponibile",
"Password sharing" : "Condivisione password",
"Vault destruction requests" : "Richieste di distruzione della cassaforte",
"Check for new versions" : "Controlla la presenza di nuove versioni",
"Enable HTTPS check" : "Abilita controllo HTTPS",
"Disable context menu" : "Disabilita menu contestuale",
- "Disable javascript debugger" : "Disabilita debugger javascript",
+ "Disable JavaScript debugger" : "Disabilita debugger javascript",
"Allow users on this server to share passwords with a link" : "Consenti agli utenti su questo server di condividere le password tramite un collegamento",
"Allow users on this server to share passwords with other users" : "Consenti agli utenti su questo server di condividere le password con altri utenti",
"Move credentials from one account to another" : "Sposta le credenziali da un account a un altro",
diff --git a/l10n/it.json b/l10n/it.json
index e57a80a3..4b64e63c 100644
--- a/l10n/it.json
+++ b/l10n/it.json
@@ -5,22 +5,16 @@
"Passwords do not match" : "Le password non corrispondono",
"General" : "Generale",
"Custom Fields" : "Campi personalizzati",
- "Please fill in a label!" : "Aggiungi un'etichetta!",
- "Please fill in a value!" : "Aggiungi un valore!",
"Error loading file" : "Errore durante il caricamento del file",
- "An error happened during decryption" : "Si è verificato un errore durante la decifratura",
"Credential created!" : "Credenziali create!",
"Credential deleted" : "Credenziali eliminate",
"Credential updated" : "Credenziali aggiornate",
"Credential recovered" : "Credenziali ripristinate",
"Credential destroyed" : "Credenziali distrutte",
- "Error downloading file, you probably don't have enough permissions" : "Errore durante lo scaricamento del file, probabilmente non disponi dei permessi necessari",
"Invalid QR code" : "Codice QR non valido",
"Starting export" : "Avvio esportazione",
"Decrypting credentials" : "Decifratura delle credenziali",
"Done" : "Fine",
- "File read successfully!" : "File letto correttamente!",
- "Follow the following steps to import your file" : "Segui i passaggi per importare il tuo file",
"Credential has no label, skipping" : "Credenziali senza etichetta, ignorate",
"Adding {{credential}}" : "Aggiunta di {{credential}}",
"Added {{credential}}" : "Aggiunte {{credential}}",
@@ -28,29 +22,20 @@
"Parsed {{num}} credentials, starting to import" : "Elaborate {{num}} credenziali, avvio dell'importazione",
"Importing" : "Importazione in corso",
"Start import" : "Avvia importazione",
- "Select csv file" : "Seleziona file csv",
- "Parsed {{rows}} lines from csv file" : "Elaborate {{rows}} righe dal file csv",
+ "Select CSV file" : "Seleziona file CSV",
"Skip first row" : "Salta la prima riga",
"You need to assign the label field before you can start the import." : "Devi assegnare il campo etichetta prima di avviare l'importazione.",
- "First 5 lines of the csv are shown." : "Vengono mostrate le prime 5 linee del csv.",
"Assign the proper fields to each column." : "Assegna i campi corretti a ogni colonna.",
- "Example imported credential" : "Esempio di importazione dati di accesso",
- "Missing an importer? Try it with the generic csv importer." : "Manca un importatore? Prova con l'importatore generico.",
"Go back to importers." : "Torna agli importatori.",
"Revision deleted" : "Revisione eliminata",
"Revision restored" : "Revisione ripristinata",
- "Save in passman" : "Salva in passman",
"Settings saved" : "Impostazioni salvate",
"General settings" : "Impostazioni generali",
- "Password Audit" : "Verifica password",
"Password settings" : "Impostazioni password",
"Import credentials" : "Importa credenziali",
"Export credentials" : "Esporta credenziali",
"Sharing" : "Condivisione",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Sei sicuro di voler uscire? Ciò danneggerà TUTTE le tue credenziali",
"Your old password is incorrect!" : "La tua vecchia password non è corretta!",
- "New passwords do not match!" : "La nuova password non corrisponde!",
- "Please login with your new vault password" : "Accedi con la tua nuova password della cassaforte",
"Share with users and groups" : "Condividi con utenti e gruppi",
"Share link" : "Condividi collegamento",
"Are you sure you want to leave? This will corrupt this credential" : "Sei sicuro di voler uscire? Ciò danneggerà questo credenziali",
@@ -70,7 +55,6 @@
"Complete" : "Completato",
"Username" : "Nome utente",
"Repeat password" : "Ripeti la password",
- "Add Tag" : "Aggiungi etichetta",
"Field label" : "Etichetta campo",
"Field value" : "Valore campo",
"Choose a file" : "Scegli un file",
@@ -88,8 +72,6 @@
"Current OTP settings" : "Impostazioni OTP correnti",
"Issuer" : "Emittente",
"Secret" : "Segreto",
- "Expire date" : "Data di scadenza",
- "No expire date set" : "Nessuna data di scadenza impostata",
"Renew interval" : "Intervallo di aggiornamento",
"Disabled" : "Disabilitato",
"Day(s)" : "Giorno(i)",
@@ -114,7 +96,6 @@
"Change vault key" : "Modifica chiave della cassaforte",
"Old vault password" : "Vecchia password della cassaforte",
"New vault password" : "Nuova password della cassaforte",
- "New vault password repeat" : "Ripeti la nuova password della cassaforte",
"Please wait your vault is being updated, do not leave this page." : "Attendi l'aggiornamento della tua cassaforte, non abbandonare questa pagina.",
"Processing" : "Elaborazione",
"Total progress" : "Avanzamento totale",
@@ -128,7 +109,6 @@
"Vault password" : "Password della cassaforte",
"This process is irreversible" : "Questo processo è irreversibile",
"Delete my precious passwords" : "Elimina le mie preziose password",
- "Deleting {{password}}..." : "Eliminazione di {{password}}...",
"Yes, delete my precious passwords" : "Sì, elimina le mie preziose password",
"Import type" : "Importa tipo",
"Import" : "Importa",
@@ -140,13 +120,11 @@
"Save keys" : "Salva chiavi",
"Generate sharing keys" : "Genera chiavi di condivisione",
"Generating sharing keys" : "Generazione chiavi di condivisione",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Lo strumento delle password analizzerà la tua password, calcolerà il tempo medio per decifrarla e, se sotto la soglia, lo segnalerà.",
"Minimum password stength" : "Robustezza minima della password",
- "Passman scanned your passwords, and here is the result." : "Passman ha analizzato le tue password, ed ecco il risultato.",
- "A total of {{scan_result}} weak credentials." : "Un totale di {{scan_result}} credenziali deboli.",
+ "Start scan" : "Avvia scansione",
+ "Result" : "Risultato",
"Score" : "Punteggio",
"Action" : "Azione",
- "Search users or groups..." : "Cerca utente o gruppo ...",
"Missing users? Only users that have vaults are shown." : "Utenti mancanti? Solo gli utenti che hanno una cassaforte saranno mostrati.",
"Cyphering" : "Cifratura",
"Uploading" : "Caricamento",
@@ -161,7 +139,6 @@
"Enable link sharing" : "Abilita condivisione tramite collegamento",
"Share until date" : "Condividi fino alla data",
"Expire after views" : "Scadenza dopo viste",
- "Click share first" : "Fai clic per condividi prima",
"Show files" : "Mostra i file",
"Details" : "Dettagli",
"Hide details" : "Nascondi dettagli",
@@ -190,16 +167,13 @@
"Settings" : "Impostazioni",
"Share credential {{credential}}" : "Condividi credenziali {{credential}}",
"Unshare" : "Rimuovi condivisione",
- "All time" : "Sempre",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Visualizzazione di {{number_filtered}} di {{credential_number}} credenziali",
- "Search credential..." : "Cerca credenziali...",
"Account" : "Account",
"Password" : "Password",
"OTP" : "OTP",
"E-mail" : "Email",
"URL" : "URL",
"Notes" : "Note",
- "Expire time" : "Data di scadenza",
"Changed" : "Modificate",
"Created" : "Create",
"Edit" : "Modifica",
@@ -209,8 +183,6 @@
"Destroy" : "Distruggi",
"Use regex" : "Utilizza espressione regolare",
"You have incoming share requests." : "Hai ricevuto delle richieste di condivisione.",
- "If you want to put the credential in a other vault," : "Se vuoi mettere le credenziali in un altra cassaforte,",
- "logout of this vault and login to the vault you want the shared credential in." : "esci da questa cassaforte e accedi alla cassaforte con la quale vuoi condividere le credenziali.",
"Permissions" : "Permessi",
"Received from" : "Ricevute da",
"Date" : "Data",
@@ -224,26 +196,16 @@
"Password strength must be at least: {{strength}}" : "La robustezza della password deve essere almeno: {{strength}}",
"Please give your new vault a name." : "Dai un nome alla tua nuova cassaforte.",
"Repeat vault password" : "Ripeti la password della cassaforte",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "La tua chiave di condivisione avrà una lunghezza di 1024 bit, che potrai modificare successivamente nelle impostazioni.",
"Create vault" : "Crea cassaforte",
"Go back to vaults" : "Torna alle casseforti",
"Please input the password for" : "Digita la password per",
- "Set this vault as default." : "Imposta questa cassaforte come predefinita.",
- "Login automatically to this vault." : "Accedi automaticamente a questa cassaforte.",
- "Logout of this vault automatically after: " : "Esci da questa cassaforte automaticamente dopo:",
"Decrypt vault" : "Decifra cassaforte",
- "Seems you lost the vault password and you're unable to login." : "Sembra che tu abbia smarrito la password della cassaforte e non sia in grado di effettuare l'accesso.",
- "If you want this vault removed you can request removal of the vault here." : "Se desideri che questa cassaforte sia rimossa, puoi richiedere qui la rimozione della cassaforte.",
- "An admin then accept to the request (or not)" : "Un amministratore accetta quindi la richiesta (o no)",
- "After an admin destroy's this vault, all credentials will be lost" : "Una volta che un amministratore avrà distrutto questa cassaforte, tutte le credenziali saranno perse",
- "Reason to request deletion (optional):" : "Motivo della richiesta di eliminazione (facoltativo):",
"Request vault destruction" : "Richiedi la distruzione della cassaforte",
"Yes, request an admin to destroy this vault" : "Sì, richiede a un amministratore di distruggere questa cassaforte",
"Cancel destruction request" : "Annulla richiesta di distruzione",
"Vault destruction requested" : "Distruzione della cassaforte richiesta",
"Request removed" : "Richiesta annullata",
"Destruction request pending" : "Richiesta di distruzione in attesa",
- "Warning! Adding credentials over http can be insecure!" : "Avviso! L'aggiunta di credenziali su http può essere insicura!",
"Logged in to {{vault_name}}" : "Accesso effettuato a {{vault_name}}",
"Change vault" : "Cambia cassaforte",
"Deleted credentials" : "Credenziali eliminate",
@@ -251,8 +213,6 @@
"Donate" : "Donazione",
"Someone has shared a credential with you." : "Qualcuno ha condiviso delle credenziali con te.",
"Click here to request it" : "Fai clic qui per richiederle",
- "Loading..." : "Caricamento in corso...",
- "Awwhh.... credential not found. Maybe it expired" : "Ops... credenziali non trovate. Potrebbero essere scadute",
"Error while saving field" : "Errore durante il salvataggio del campo",
"A Passman item has been created, modified or deleted" : "Un elemento Passman è stato creato, modificato o eliminato",
"A Passman item has expired" : "Un elemento Passman è scaduto",
@@ -282,16 +242,16 @@
"%s shared \"%s\" with you. Click here to accept" : "%s ha condiviso \"%s\" con te. Fai clic qui per accettare",
"%s has declined your share request for \"%s\"." : "%s ha rifiutato la tua richiesta di condivisione per \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s ha accettato la tua richiesta di condivisione per \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Impossibile ottenere le informazioni di versione",
"Passman Settings" : "Impostazioni di Passman",
- "Github version:" : "Versione di Github:",
- "A newer version of passman is available" : "Una nuova versione di Passman è disponibile",
+ "A newer version of Passman is available" : "Una nuova versione di Passman è disponibile",
"Password sharing" : "Condivisione password",
"Vault destruction requests" : "Richieste di distruzione della cassaforte",
"Check for new versions" : "Controlla la presenza di nuove versioni",
"Enable HTTPS check" : "Abilita controllo HTTPS",
"Disable context menu" : "Disabilita menu contestuale",
- "Disable javascript debugger" : "Disabilita debugger javascript",
+ "Disable JavaScript debugger" : "Disabilita debugger javascript",
"Allow users on this server to share passwords with a link" : "Consenti agli utenti su questo server di condividere le password tramite un collegamento",
"Allow users on this server to share passwords with other users" : "Consenti agli utenti su questo server di condividere le password con altri utenti",
"Move credentials from one account to another" : "Sposta le credenziali da un account a un altro",
diff --git a/l10n/lt_LT.js b/l10n/lt_LT.js
index 01cff126..2f28af74 100644
--- a/l10n/lt_LT.js
+++ b/l10n/lt_LT.js
@@ -2,15 +2,48 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Slaptažodžiai",
+ "Incorrect vault password!" : "Neteisingas saugyklos slaptažodis!",
"Passwords do not match" : "Slaptažodžiai nesutampa",
- "Error downloading file, you probably don't have enough permissions" : "Klaida, atsisiunčiant failą. Jūs, tikriausiai, neturite pakankamai leidimų",
+ "General" : "Bendras",
+ "Custom Fields" : "Nestandartiniai laukai",
+ "Error loading file" : "Klaida įkeliant failą",
+ "Credential created!" : "Prisijungimo duomenys sukurti",
+ "Credential deleted" : "Prisijungimo duomenys ištrinti",
+ "Credential updated" : "Prisijungimo duomenys atnaujinti",
+ "Credential recovered" : "Prisijungimo duomenys atkurti",
+ "Credential destroyed" : "Prisijungimo duomenys sunaikinti",
"Invalid QR code" : "Neteisingas QR kodas",
+ "Starting export" : "Pradedamas eksportas",
+ "Decrypting credentials" : "Dekriptuojami prisijungimo duomenys",
"Done" : "Atlikta",
+ "Credential has no label, skipping" : "Prisijungimo duomenys neturi žymeklio, praleidžiama",
+ "Adding {{credential}}" : "Pridedama {{prisijungimo duomenys}}",
+ "Added {{credential}}" : "Pridėta {{prisijungimo duomenys}}",
+ "Skipping credential, missing label on line {{line}}" : "Prisijungimo duomenys praleidžiami, nėra žymeklio ant eilutės {{eilutė}}",
+ "Parsed {{num}} credentials, starting to import" : "Prisijungimo duomenys patikrinti, pradedamas importas",
+ "Importing" : "Importuojama",
+ "Start import" : "Pradėti importą",
+ "Select CSV file" : "Pasirinkti CSV failą",
+ "Parsed {{rows}} lines from CSV file" : "Tikrinama {{eilutės}} eilutės iš CSV failo",
+ "Skip first row" : "Praleisti pirmą eilutę",
+ "You need to assign the label field before you can start the import." : "Privalote priskirti pavadinimo laukelį prieš pradėdami importą",
+ "Assign the proper fields to each column." : "Priskirkite tinkamus laukelius kiekvienai kolonai",
+ "Missing an importer? Try it with the generic CSV importer." : "Trūksta importuotojo? Išbandykit bendrą CSV importuotoją.",
+ "Go back to importers." : "Grįžti prie importuotojų",
+ "Revision deleted" : "Revizija ištrinta",
+ "Revision restored" : "Revizija atkurta",
"Settings saved" : "Nustatymai įrašyti",
"General settings" : "Bendri nustatymai",
"Password settings" : "Slaptažodžio nustatymai",
+ "Import credentials" : "Importuoti prisijungimo duomenis",
+ "Export credentials" : "Eksportuoti prisijungimo duomenis",
+ "Sharing" : "Bendrinimas",
"Your old password is incorrect!" : "Jūsų senas slaptažodis yra neteisingas!",
- "New passwords do not match!" : "Naujieji slaptažodžiai nesutampa!",
+ "Share with users and groups" : "Bendrintis su vartotojais ir jų grupėmis",
+ "Share link" : "Pasidalinti nuoroda",
+ "Are you sure you want to leave? This will corrupt this credential" : "Ar tikrai norite išeiti? Tai pakenks jūsų prisijungimo duomenims",
+ "Credential unshared" : "Prisijungimo duomenys nebendrinami",
+ "Credential shared" : "Prisijungimo duomenys bendrinami",
"Saved!" : "Įrašyta!",
"Poor" : "Prastas",
"Weak" : "Silpnas",
@@ -19,16 +52,21 @@ OC.L10N.register(
"Toggle visibility" : "Perjungti matomumą",
"Copy to clipboard" : "Kopijuoti į iškarpinę",
"Copied to clipboard!" : "Nukopijuota į iškarpinę!",
+ "Generate password" : "Generuoti slaptažodį",
"Copy password to clipboard" : "Kopijuoti slaptažodį į iškarpinę",
"Password copied to clipboard!" : "Slaptažodis nukopijuotas į iškarpinę!",
+ "Complete" : "Baigti",
"Username" : "Naudotojo vardas",
- "Add Tag" : "Pridėti žymę",
+ "Repeat password" : "Pakartoti slaptažodį",
+ "Field label" : "Laukelio pavadinimas",
+ "Field value" : "Laukelio vertė",
"Choose a file" : "Pasirinkti failą",
"Text" : "Tekstas",
"File" : "Failas",
"Add" : "Pridėti",
"Value" : "Reikšmė",
"Type" : "Tipas",
+ "Actions" : "Veiksmai",
"Empty" : "Tuščias",
"Filename" : "Failo pavadinimas",
"Upload date" : "Įkėlimo data",
@@ -41,7 +79,6 @@ OC.L10N.register(
"Change" : "Keisti",
"Processing" : "Apdorojama",
"Version" : "Versija",
- "Deleting {{password}}..." : "Ištrinama {{password}}...",
"Import" : "Importuoti",
"Private Key" : "Privatusis raktas",
"Public key" : "Viešasis raktas",
@@ -65,8 +102,8 @@ OC.L10N.register(
"Accept" : "Priimti",
"Decline" : "Atmesti",
"Never" : "Niekada",
+ "Request removed" : "Užklausa pašalinta",
"Logout" : "Atsijungti",
- "Loading..." : "Įkeliama...",
"You created %1$s" : "Jūs sukūrėte %1$s",
"You updated %1$s" : "Jūs atnaujinote %1$s",
"%3$s has renamed %1$s to %2$s" : "%3$s pervadino %1$s į %2$s",
@@ -74,9 +111,8 @@ OC.L10N.register(
"%1$s has been deleted by %2$s" : "%2$s ištrynė %1$s",
"You deleted %1$s" : "Jūs ištrynėte %1$s",
"You permanently deleted %1$s" : "Jūs visiems laikams ištrynėte %1$s",
+ "Remind me later" : "Priminti vėliau",
"Ignore" : "Nepaisyti",
- "Github version:" : "Github versija:",
- "Disable javascript debugger" : "Išjungti javascript derintuvę",
"Reason" : "Priežastis",
"Connection to server lost" : "Ryšys su serveriu nutrūko",
"Problem loading page, reloading in 5 seconds" : "Problemos, įkeliant puslapį, po 5 sekundžių įkeliama iš naujo",
diff --git a/l10n/lt_LT.json b/l10n/lt_LT.json
index 89a804ac..e6bad519 100644
--- a/l10n/lt_LT.json
+++ b/l10n/lt_LT.json
@@ -1,14 +1,47 @@
{ "translations": {
"Passwords" : "Slaptažodžiai",
+ "Incorrect vault password!" : "Neteisingas saugyklos slaptažodis!",
"Passwords do not match" : "Slaptažodžiai nesutampa",
- "Error downloading file, you probably don't have enough permissions" : "Klaida, atsisiunčiant failą. Jūs, tikriausiai, neturite pakankamai leidimų",
+ "General" : "Bendras",
+ "Custom Fields" : "Nestandartiniai laukai",
+ "Error loading file" : "Klaida įkeliant failą",
+ "Credential created!" : "Prisijungimo duomenys sukurti",
+ "Credential deleted" : "Prisijungimo duomenys ištrinti",
+ "Credential updated" : "Prisijungimo duomenys atnaujinti",
+ "Credential recovered" : "Prisijungimo duomenys atkurti",
+ "Credential destroyed" : "Prisijungimo duomenys sunaikinti",
"Invalid QR code" : "Neteisingas QR kodas",
+ "Starting export" : "Pradedamas eksportas",
+ "Decrypting credentials" : "Dekriptuojami prisijungimo duomenys",
"Done" : "Atlikta",
+ "Credential has no label, skipping" : "Prisijungimo duomenys neturi žymeklio, praleidžiama",
+ "Adding {{credential}}" : "Pridedama {{prisijungimo duomenys}}",
+ "Added {{credential}}" : "Pridėta {{prisijungimo duomenys}}",
+ "Skipping credential, missing label on line {{line}}" : "Prisijungimo duomenys praleidžiami, nėra žymeklio ant eilutės {{eilutė}}",
+ "Parsed {{num}} credentials, starting to import" : "Prisijungimo duomenys patikrinti, pradedamas importas",
+ "Importing" : "Importuojama",
+ "Start import" : "Pradėti importą",
+ "Select CSV file" : "Pasirinkti CSV failą",
+ "Parsed {{rows}} lines from CSV file" : "Tikrinama {{eilutės}} eilutės iš CSV failo",
+ "Skip first row" : "Praleisti pirmą eilutę",
+ "You need to assign the label field before you can start the import." : "Privalote priskirti pavadinimo laukelį prieš pradėdami importą",
+ "Assign the proper fields to each column." : "Priskirkite tinkamus laukelius kiekvienai kolonai",
+ "Missing an importer? Try it with the generic CSV importer." : "Trūksta importuotojo? Išbandykit bendrą CSV importuotoją.",
+ "Go back to importers." : "Grįžti prie importuotojų",
+ "Revision deleted" : "Revizija ištrinta",
+ "Revision restored" : "Revizija atkurta",
"Settings saved" : "Nustatymai įrašyti",
"General settings" : "Bendri nustatymai",
"Password settings" : "Slaptažodžio nustatymai",
+ "Import credentials" : "Importuoti prisijungimo duomenis",
+ "Export credentials" : "Eksportuoti prisijungimo duomenis",
+ "Sharing" : "Bendrinimas",
"Your old password is incorrect!" : "Jūsų senas slaptažodis yra neteisingas!",
- "New passwords do not match!" : "Naujieji slaptažodžiai nesutampa!",
+ "Share with users and groups" : "Bendrintis su vartotojais ir jų grupėmis",
+ "Share link" : "Pasidalinti nuoroda",
+ "Are you sure you want to leave? This will corrupt this credential" : "Ar tikrai norite išeiti? Tai pakenks jūsų prisijungimo duomenims",
+ "Credential unshared" : "Prisijungimo duomenys nebendrinami",
+ "Credential shared" : "Prisijungimo duomenys bendrinami",
"Saved!" : "Įrašyta!",
"Poor" : "Prastas",
"Weak" : "Silpnas",
@@ -17,16 +50,21 @@
"Toggle visibility" : "Perjungti matomumą",
"Copy to clipboard" : "Kopijuoti į iškarpinę",
"Copied to clipboard!" : "Nukopijuota į iškarpinę!",
+ "Generate password" : "Generuoti slaptažodį",
"Copy password to clipboard" : "Kopijuoti slaptažodį į iškarpinę",
"Password copied to clipboard!" : "Slaptažodis nukopijuotas į iškarpinę!",
+ "Complete" : "Baigti",
"Username" : "Naudotojo vardas",
- "Add Tag" : "Pridėti žymę",
+ "Repeat password" : "Pakartoti slaptažodį",
+ "Field label" : "Laukelio pavadinimas",
+ "Field value" : "Laukelio vertė",
"Choose a file" : "Pasirinkti failą",
"Text" : "Tekstas",
"File" : "Failas",
"Add" : "Pridėti",
"Value" : "Reikšmė",
"Type" : "Tipas",
+ "Actions" : "Veiksmai",
"Empty" : "Tuščias",
"Filename" : "Failo pavadinimas",
"Upload date" : "Įkėlimo data",
@@ -39,7 +77,6 @@
"Change" : "Keisti",
"Processing" : "Apdorojama",
"Version" : "Versija",
- "Deleting {{password}}..." : "Ištrinama {{password}}...",
"Import" : "Importuoti",
"Private Key" : "Privatusis raktas",
"Public key" : "Viešasis raktas",
@@ -63,8 +100,8 @@
"Accept" : "Priimti",
"Decline" : "Atmesti",
"Never" : "Niekada",
+ "Request removed" : "Užklausa pašalinta",
"Logout" : "Atsijungti",
- "Loading..." : "Įkeliama...",
"You created %1$s" : "Jūs sukūrėte %1$s",
"You updated %1$s" : "Jūs atnaujinote %1$s",
"%3$s has renamed %1$s to %2$s" : "%3$s pervadino %1$s į %2$s",
@@ -72,9 +109,8 @@
"%1$s has been deleted by %2$s" : "%2$s ištrynė %1$s",
"You deleted %1$s" : "Jūs ištrynėte %1$s",
"You permanently deleted %1$s" : "Jūs visiems laikams ištrynėte %1$s",
+ "Remind me later" : "Priminti vėliau",
"Ignore" : "Nepaisyti",
- "Github version:" : "Github versija:",
- "Disable javascript debugger" : "Išjungti javascript derintuvę",
"Reason" : "Priežastis",
"Connection to server lost" : "Ryšys su serveriu nutrūko",
"Problem loading page, reloading in 5 seconds" : "Problemos, įkeliant puslapį, po 5 sekundžių įkeliama iš naujo",
diff --git a/l10n/lv.js b/l10n/lv.js
index a65c05ca..8de5c76e 100644
--- a/l10n/lv.js
+++ b/l10n/lv.js
@@ -7,29 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Paroles nesakrīt",
"General" : "Vispārīgi",
"Custom Fields" : "Pielāgotie lauki",
- "Please fill in a label!" : "Lūdzu, aizpildiet etiķeti!",
- "Please fill in a value!" : "Lūdzu, aizpildiet vērtību!",
"Error loading file" : "Kļūda, ielādējot failu",
- "An error happened during decryption" : "Atšifrēšanas laikā radās kļūda",
"Credential created!" : "Akreditācijas izveidota!",
"Credential deleted" : "Akreditācijas dati izdzēsti",
"Credential updated" : "Akreditācijas dati atjaunināti",
"Credential recovered" : "Akreditācijas dati atjaunoti",
"Credential destroyed" : "Akreditācijas dati iznīcināti",
- "Error downloading file, you probably don't have enough permissions" : "Kļūda, lejupielādējot failu, iespējams, jums nav pietiekamu atļauju.",
"Invalid QR code" : "Nepareizs QR kods",
"Starting export" : "Eksportēšanas uzsākšana",
"Done" : "Pabeigts",
- "File read successfully!" : "Faila lasīšana veiksmīga!",
"Adding {{credential}}" : "Pievienošana {{credential}}",
"Added {{credential}}" : "Pievienots {{credential}}",
"Settings saved" : "Iestatījumi saglabāti",
"General settings" : "Vispārīgie iestatījumi",
- "Password Audit" : "Paroles kontrole",
"Password settings" : "Paroles iestatījumi",
"Sharing" : "Koplietošana",
"Your old password is incorrect!" : "Vecā parole ir nepareiza!",
- "New passwords do not match!" : "Jaunās paroles nesakrīt!",
"Share with users and groups" : "Koplietot ar lietotājiem vai grupām",
"Share link" : "Koplietot saiti",
"Saved!" : "Saglabāts!",
@@ -43,7 +36,6 @@ OC.L10N.register(
"Complete" : "Pabeigta",
"Username" : "Lietotājvārds",
"Repeat password" : "Atkārtojiet paroli",
- "Add Tag" : "Pievienot atzīmi",
"Field label" : "Lauka nosaukums",
"Field value" : "Lauka vērtība",
"Choose a file" : "Izvēlieties failu",
@@ -59,8 +51,6 @@ OC.L10N.register(
"Current OTP settings" : "Pašreizējāie OTP iestatījumi",
"Issuer" : "Izdevējs",
"Secret" : "Noslēpums",
- "Expire date" : "Derīguma datums",
- "No expire date set" : "Nav norādīts termiņa beigu datuma",
"Disabled" : "Atspējots",
"Day(s)" : "Diena(s)",
"Week(s)" : "Nedēļa(s)",
@@ -80,7 +70,6 @@ OC.L10N.register(
"Version" : "Versija",
"Bookmarklet" : "Grāmatzīmes",
"Save your passwords with 1 click!" : "Saglabājiet paroles ar 1 klikšķi!",
- "Deleting {{password}}..." : "Dzēšana {{password}}...",
"Import type" : "Importa tips",
"Import" : "Importēt",
"Upload progress" : "Augšupielādes norise",
@@ -92,7 +81,6 @@ OC.L10N.register(
"Minimum password stength" : "Minimālais paroles stiprums",
"Score" : "Vērtība",
"Action" : "Darbība",
- "Search users or groups..." : "Meklēt lietotājus un grupas...",
"Uploading" : "Augšupielāde",
"User" : "Lietotājs",
"Read" : "Lasīt",
@@ -100,7 +88,6 @@ OC.L10N.register(
"Files" : "Faili",
"Enable link sharing" : "Iespējot saites kopīgošana",
"Share until date" : "Koplietot līdz datumam",
- "Click share first" : "Vispirms atzīmē koplietojamo ",
"Show files" : "Rādīt failus",
"Details" : "Detaļas",
"Hide details" : "Slēpt detaļas",
@@ -118,14 +105,12 @@ OC.L10N.register(
"Save" : "Saglabāt",
"Cancel" : "Atcelt",
"Settings" : "Iestatījumi",
- "All time" : "Visu laiku",
"Account" : "Konts",
"Password" : "Parole",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Piezīmes",
- "Expire time" : "Derīguma laiks",
"Changed" : "Mainīts",
"Created" : "Izveidots",
"Edit" : "Rediģēt",
@@ -147,8 +132,6 @@ OC.L10N.register(
"Logout" : "Atteikties",
"Donate" : "Ziedot",
"Click here to request it" : "Noklikšķiniet šeit, lai pieprasītu",
- "Loading..." : "Notiek ielāde...",
- "Awwhh.... credential not found. Maybe it expired" : "Akreditācijas dati nav atrasti. Varbūt tam beidzies derīguma termiņš",
"Error while saving field" : "Kļūda, saglabājot lauku",
"You created %1$s" : "Tu izveidoji %1$s",
"You updated %1$s" : "Tu atjaunināji %1$s",
@@ -165,12 +148,9 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s koplietots \"%s\" ar tevi. Noklikšķiniet šeit, lai akceptētu",
"Unable to get version info" : "Nevar iegūt versijas informāciju",
"Passman Settings" : "Passman iestatījumi",
- "Github version:" : "Github versija:",
- "A newer version of passman is available" : "Passman jaunākā versija ir pieejama",
"Check for new versions" : "Pārbaudīt, vai nav jaunas versijas",
"Enable HTTPS check" : "Iespējot HTTPS pārbaudi",
"Disable context menu" : "Atspējot konteksta izvēlni",
- "Disable javascript debugger" : "Atspējot JavaScript atkļūdotāju",
"Allow users on this server to share passwords with a link" : "Atļaut lietotājiem serverī dalīties ar parolēm, izmantojot saites",
"Allow users on this server to share passwords with other users" : "Atļaut lietotājiem serverī dalīties ar parolēm, ar citiem lietotājiem",
"Source account" : "Avota konts",
diff --git a/l10n/lv.json b/l10n/lv.json
index d0cbe293..16f5f82b 100644
--- a/l10n/lv.json
+++ b/l10n/lv.json
@@ -5,29 +5,22 @@
"Passwords do not match" : "Paroles nesakrīt",
"General" : "Vispārīgi",
"Custom Fields" : "Pielāgotie lauki",
- "Please fill in a label!" : "Lūdzu, aizpildiet etiķeti!",
- "Please fill in a value!" : "Lūdzu, aizpildiet vērtību!",
"Error loading file" : "Kļūda, ielādējot failu",
- "An error happened during decryption" : "Atšifrēšanas laikā radās kļūda",
"Credential created!" : "Akreditācijas izveidota!",
"Credential deleted" : "Akreditācijas dati izdzēsti",
"Credential updated" : "Akreditācijas dati atjaunināti",
"Credential recovered" : "Akreditācijas dati atjaunoti",
"Credential destroyed" : "Akreditācijas dati iznīcināti",
- "Error downloading file, you probably don't have enough permissions" : "Kļūda, lejupielādējot failu, iespējams, jums nav pietiekamu atļauju.",
"Invalid QR code" : "Nepareizs QR kods",
"Starting export" : "Eksportēšanas uzsākšana",
"Done" : "Pabeigts",
- "File read successfully!" : "Faila lasīšana veiksmīga!",
"Adding {{credential}}" : "Pievienošana {{credential}}",
"Added {{credential}}" : "Pievienots {{credential}}",
"Settings saved" : "Iestatījumi saglabāti",
"General settings" : "Vispārīgie iestatījumi",
- "Password Audit" : "Paroles kontrole",
"Password settings" : "Paroles iestatījumi",
"Sharing" : "Koplietošana",
"Your old password is incorrect!" : "Vecā parole ir nepareiza!",
- "New passwords do not match!" : "Jaunās paroles nesakrīt!",
"Share with users and groups" : "Koplietot ar lietotājiem vai grupām",
"Share link" : "Koplietot saiti",
"Saved!" : "Saglabāts!",
@@ -41,7 +34,6 @@
"Complete" : "Pabeigta",
"Username" : "Lietotājvārds",
"Repeat password" : "Atkārtojiet paroli",
- "Add Tag" : "Pievienot atzīmi",
"Field label" : "Lauka nosaukums",
"Field value" : "Lauka vērtība",
"Choose a file" : "Izvēlieties failu",
@@ -57,8 +49,6 @@
"Current OTP settings" : "Pašreizējāie OTP iestatījumi",
"Issuer" : "Izdevējs",
"Secret" : "Noslēpums",
- "Expire date" : "Derīguma datums",
- "No expire date set" : "Nav norādīts termiņa beigu datuma",
"Disabled" : "Atspējots",
"Day(s)" : "Diena(s)",
"Week(s)" : "Nedēļa(s)",
@@ -78,7 +68,6 @@
"Version" : "Versija",
"Bookmarklet" : "Grāmatzīmes",
"Save your passwords with 1 click!" : "Saglabājiet paroles ar 1 klikšķi!",
- "Deleting {{password}}..." : "Dzēšana {{password}}...",
"Import type" : "Importa tips",
"Import" : "Importēt",
"Upload progress" : "Augšupielādes norise",
@@ -90,7 +79,6 @@
"Minimum password stength" : "Minimālais paroles stiprums",
"Score" : "Vērtība",
"Action" : "Darbība",
- "Search users or groups..." : "Meklēt lietotājus un grupas...",
"Uploading" : "Augšupielāde",
"User" : "Lietotājs",
"Read" : "Lasīt",
@@ -98,7 +86,6 @@
"Files" : "Faili",
"Enable link sharing" : "Iespējot saites kopīgošana",
"Share until date" : "Koplietot līdz datumam",
- "Click share first" : "Vispirms atzīmē koplietojamo ",
"Show files" : "Rādīt failus",
"Details" : "Detaļas",
"Hide details" : "Slēpt detaļas",
@@ -116,14 +103,12 @@
"Save" : "Saglabāt",
"Cancel" : "Atcelt",
"Settings" : "Iestatījumi",
- "All time" : "Visu laiku",
"Account" : "Konts",
"Password" : "Parole",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Piezīmes",
- "Expire time" : "Derīguma laiks",
"Changed" : "Mainīts",
"Created" : "Izveidots",
"Edit" : "Rediģēt",
@@ -145,8 +130,6 @@
"Logout" : "Atteikties",
"Donate" : "Ziedot",
"Click here to request it" : "Noklikšķiniet šeit, lai pieprasītu",
- "Loading..." : "Notiek ielāde...",
- "Awwhh.... credential not found. Maybe it expired" : "Akreditācijas dati nav atrasti. Varbūt tam beidzies derīguma termiņš",
"Error while saving field" : "Kļūda, saglabājot lauku",
"You created %1$s" : "Tu izveidoji %1$s",
"You updated %1$s" : "Tu atjaunināji %1$s",
@@ -163,12 +146,9 @@
"%s shared \"%s\" with you. Click here to accept" : "%s koplietots \"%s\" ar tevi. Noklikšķiniet šeit, lai akceptētu",
"Unable to get version info" : "Nevar iegūt versijas informāciju",
"Passman Settings" : "Passman iestatījumi",
- "Github version:" : "Github versija:",
- "A newer version of passman is available" : "Passman jaunākā versija ir pieejama",
"Check for new versions" : "Pārbaudīt, vai nav jaunas versijas",
"Enable HTTPS check" : "Iespējot HTTPS pārbaudi",
"Disable context menu" : "Atspējot konteksta izvēlni",
- "Disable javascript debugger" : "Atspējot JavaScript atkļūdotāju",
"Allow users on this server to share passwords with a link" : "Atļaut lietotājiem serverī dalīties ar parolēm, izmantojot saites",
"Allow users on this server to share passwords with other users" : "Atļaut lietotājiem serverī dalīties ar parolēm, ar citiem lietotājiem",
"Source account" : "Avota konts",
diff --git a/l10n/nb.js b/l10n/nb.js
index 6f55d928..2565bd17 100644
--- a/l10n/nb.js
+++ b/l10n/nb.js
@@ -4,25 +4,25 @@ OC.L10N.register(
"Passwords" : "Passord",
"Generating sharing keys ( %step / 2)" : "Oppretter delingsnøkler ( %step / 2)",
"Incorrect vault password!" : "Feil hvelv-passord!",
- "Passwords do not match" : "Passordene passer ikke",
+ "Passwords do not match" : "Passordene samsvarer ikke",
"General" : "Generelt",
- "Custom Fields" : "Egenvalgte felter",
- "Please fill in a label!" : "Fyll inn en merkelapp!",
- "Please fill in a value!" : "Vennligst oppgi en verdi!",
+ "Custom Fields" : "Brukervalgte felter",
+ "Please fill in a label." : "Fyll inn en etikett.",
+ "Please fill in a value." : "Fyll inn en verdi.",
"Error loading file" : "Feil ved lasting av fil",
- "An error happened during decryption" : "En feil oppstod under dekryptering",
+ "An error occurred during decryption" : "En feil oppstod under dekryptering",
"Credential created!" : "Legitimasjonen ble laget",
"Credential deleted" : "Legitimasjonen ble slettet",
"Credential updated" : "Legitimasjonen ble oppdatert",
"Credential recovered" : "Legitimasjonen ble gjenopprettet",
"Credential destroyed" : "Legitimasjonen ble destruert",
- "Error downloading file, you probably don't have enough permissions" : "Kunne ikke laste ned fil, du har sannsynligvis ikke nok rettigheter",
- "Invalid QR code" : "Ugyldig QR kode",
+ "Error downloading file, you probably don't have sufficient permissions" : "Kunne ikke laste ned fil, du har sannsynligvis ikke nok rettigheter",
+ "Invalid QR code" : "Ugyldig QR-kode",
"Starting export" : "Starter eksport",
"Decrypting credentials" : "Dekrypterer legitimasjon",
"Done" : "Ferdig",
- "File read successfully!" : "Fil lest",
- "Follow the following steps to import your file" : "Følg følgende steg for å importere fila di",
+ "File read successfully." : "Fil lest.",
+ "Proceed with the following steps to import your file" : "Fortsett med følgende steg for å importere fila di",
"Credential has no label, skipping" : "Påloggingsdetaljer mangler etikett, hopper over",
"Adding {{credential}}" : "Legger til {{credential}}",
"Added {{credential}}" : "{{credential}} lagt til",
@@ -30,27 +30,34 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Tolket {{num}} påloggingsdetaljer, begynner importering",
"Importing" : "Importerer",
"Start import" : "Start importering",
- "Select csv file" : "Velg CSV-fil",
- "Parsed {{rows}} lines from csv file" : "Tolket {{rows}} linjer fra CSV-fil",
+ "Select CSV file" : "Velg CSV-fil",
+ "Parsed {{rows}} lines from CSV file" : "Tolket {{rows}} linjer fra CSV-fil",
"Skip first row" : "Hopp over første rad",
+ "You need to assign the label field before you can start the import." : "Du må tildele et etikettfelt før du kan starte importen.",
+ "The first 5 lines of the CSV are shown." : "De første fem linjene av CSV-en vises.",
+ "Assign the proper fields to each column." : "Tildel de riktige feltene til hver kolonne.",
+ "Example of imported credential" : "Eksempel på importert påloggingsdetalj",
+ "Missing an importer? Try it with the generic CSV importer." : "Manglende importør? Prøv med en generisk CSV-importør.",
"Go back to importers." : "Gå tilbake til importører.",
"Revision deleted" : "Revisjonen slettet",
"Revision restored" : "Revisjonen er gjenopprettet",
- "Save in passman" : "Lagre i passman",
+ "Save in Passman" : "Lagre i Passman",
"Settings saved" : "Innstillinger lagret",
"General settings" : "Generelle innstillinger",
- "Password Audit" : "Passordgjennomsyn",
- "Password settings" : "Passord innstillinger",
+ "Password audit" : "Passordgjennomsyn",
+ "Password settings" : "Passordinnstillinger",
"Import credentials" : "Importer legitimasjon",
"Export credentials" : "Eksporter påloggingsdetaljer",
"Sharing" : "Deling",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Er du sikker på at du ønsker å forlate? Dette vil ødelegge alle dine påloggingsdetaljer",
"Your old password is incorrect!" : "Ditt gamle passord er feil!",
- "New passwords do not match!" : "De nye passordene er ikke like!",
- "Please login with your new vault password" : "Logg inn med ditt nye hvelv-passord",
+ "New password does not match!" : "Det nye passordet samsvarer ikke!",
+ "Please log in with your new vault password" : "Logg inn med ditt nye hvelv-passord",
"Share with users and groups" : "Del med brukere og grupper",
- "Share link" : "Deling lenke",
+ "Share link" : "Delingslenke",
"Are you sure you want to leave? This will corrupt this credential" : "Er du sikker på at du ønsker å forlate? Dette vil skade disse påloggingsdetaljene",
"Credential unshared" : "Deling av legitimasjon trukket tilbake",
+ "Credential shared" : "Påloggingsdetalj delt",
"Saved!" : "Lagret!",
"Poor" : "Dårlig",
"Weak" : "Svak",
@@ -65,7 +72,7 @@ OC.L10N.register(
"Complete" : "Ferdig",
"Username" : "Brukernavn",
"Repeat password" : "Gjenta passord",
- "Add Tag" : "Legg til merkelapp",
+ "Add tag" : "Legg til merkelapp",
"Field label" : "Feltetikett",
"Field value" : "Feltverdi",
"Choose a file" : "Velg fil",
@@ -83,8 +90,8 @@ OC.L10N.register(
"Current OTP settings" : "Nåværende OTP-innstillinger",
"Issuer" : "Utsteder",
"Secret" : "Hemmelighet",
- "Expire date" : "Utløpsdato",
- "No expire date set" : "Ingen utløpsdato er satt",
+ "Expiration date" : "Utløpsdato",
+ "No expiration date set" : "Ingen utløpsdato satt",
"Renew interval" : "Fornyingsinterval",
"Disabled" : "Inaktiv",
"Day(s)" : "Dag(er)",
@@ -100,7 +107,7 @@ OC.L10N.register(
"Use special characters" : "Bruk spesialtegn",
"Avoid ambiguous characters" : "Unngå tvetydige tegn",
"Require every character type" : "Krever hver tegntype",
- "Export type" : "Eksport type",
+ "Export type" : "Eksporttype",
"Export" : "Eksporter",
"Enter vault password to confirm export." : "Skriv inn hvelv-passord for å bekrefte eksportering.",
"Rename vault" : "Gi hvelv nytt navn",
@@ -109,18 +116,21 @@ OC.L10N.register(
"Change vault key" : "Endre hvelv-nøkkel",
"Old vault password" : "Gammelt hvelv-passord",
"New vault password" : "Nytt hvelv-passord",
- "New vault password repeat" : "Gjenta nytt hvelv-passord",
+ "Repeat new vault password" : "Gjenta nytt hvelv-passord",
"Please wait your vault is being updated, do not leave this page." : "Vent mens ditt hvelv blir oppdatert, ikke forlat denne siden.",
"Processing" : "Prosesserer",
"Total progress" : "Total fremgang",
"About Passman" : "Om Passman",
"Version" : "Versjon",
"Donate to support development" : "Doner for å støtte utviklingen",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "Lagre passordene dine med ett klikk!",
+ "Drag below button to your bookmark toolbar." : "Dra knappen nedenfor til din bokmerkeverktøyslinje.",
"Delete vault" : "Slett hvelv",
"Vault password" : "Hvelv-passord",
"This process is irreversible" : "Denne prosessen er irreversibel ",
"Delete my precious passwords" : "Slett mine dyrebare passord",
- "Deleting {{password}}..." : "Sletter {{password}}…",
+ "Deleting {{password}}…" : "Sletter {{password}}…",
"Yes, delete my precious passwords" : "Ja, slett mine dyrebare passord",
"Import type" : "Importtype",
"Import" : "Import",
@@ -132,14 +142,20 @@ OC.L10N.register(
"Save keys" : "Lagre nøkler",
"Generate sharing keys" : "Opprett delingsnøkler",
"Generating sharing keys" : "Oppretter delingsnøkler",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Passordverktøyet vil skanne passordet ditt, kalkulere gjennomsnittlig tid for knekking og liste dem som er under terskelen",
"Minimum password stength" : "Minimums passordstyrke",
- "Passman scanned your passwords, and here is the result." : "Passman skannet passordene dine, og her er resultatet:",
+ "Start scan" : "Start skanning",
+ "Result" : "Resultat",
+ "A total of {{scan_result}} weak credentials were found." : "Fant {{scan_result}} svake identitetsdetaljer.",
"Score" : "Poengsum",
"Action" : "Handling",
- "Search users or groups..." : "Søk etter brukere eller grupper…",
+ "Search users or groups…" : "Søk etter brukere eller grupper…",
"Missing users? Only users that have vaults are shown." : "Manglende brukere? Bare brukere som har hvelv blir vist.",
+ "Cyphering" : "Chiffrerer",
"Uploading" : "Laster opp",
"User" : "Bruker",
+ "Crypto time" : "Krypteringstid",
+ "Total time spent cyphering" : "Tid brukt på chiffrering",
"Read" : "Les",
"Write" : "Skriv",
"Files" : "Filer",
@@ -148,27 +164,35 @@ OC.L10N.register(
"Enable link sharing" : "Skru på deling av lenker",
"Share until date" : "Del til dato",
"Expire after views" : "Utløper etter antall visninger",
- "Click share first" : "Klikk \"del\" først",
+ "Click Share first" : "Klikk \"Del\" først:",
"Show files" : "Vis filer",
"Details" : "Detaljer",
"Hide details" : "Skjul detaljer",
"Password score" : "Passord-poengsum",
"Cracking times" : "Løsningstider",
"100 / hour" : "100 / time",
+ "Throttled online attack" : "Begrenset nettbasert angrep",
"10 / second" : "10 / sekund",
+ "Unthrottled online attack" : "Ubegrenset nettbasert angrep",
"10k / second" : "10k / sekund",
"Offline attack, slow hash, many cores" : "Frakoblet angrep, treg sjekksummering, mange kjerner",
"10B / second" : "10B / sekund",
"Offline attack, fast hash, many cores" : "Frakoblet angrep, rask sjekksummering, mange kjerner",
+ "Match sequence" : "Samsvar sekvens",
+ "See match sequence" : "Se samsvarende sekvens",
"Pattern" : "Mønster",
+ "Matched word" : "Samsvart ord",
"Dictionary name" : "Ordboknavn",
"Rank" : "Rangering",
"Reversed" : "Tilbakestilt",
"Guesses" : "Gjettinger",
"Base guesses" : "Basis gjettinger",
- "Uppercase variations" : "Storbokstav variasjoner",
+ "Uppercase variations" : "Variasjoner med store bokstaver",
"l33t-variations" : "l33t-varianter",
+ "Showing revisions of" : "Viser utgaver av",
+ "Revision of" : "Revisjon av",
"by" : "av",
+ "No revisions found." : "Ingen revisjoner funner.",
"Label" : "Etikett",
"Restore revision" : "Gjenopprett revisjonen",
"Delete revision" : "Slett revisjonen",
@@ -179,25 +203,28 @@ OC.L10N.register(
"Settings" : "Innstillinger",
"Share credential {{credential}}" : "Del legitimasjon {{credential}}",
"Unshare" : "Avslutt deling",
- "Showing deleted since" : "Vis slettede siden",
- "All time" : "Alle tider",
+ "Showing deleted since" : "Viser slettede siden",
+ "Beginning" : "Begynnelsen",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Viser {{number_filtered}} av {{credential_number}} identitetsdetaljer",
+ "Search for credential…" : "Søk etter påloggingsdetalj…",
"Account" : "Konto",
"Password" : "Passord",
"OTP" : "Éngangspassord (OTP)",
"E-mail" : "E-post",
"URL" : "URL",
"Notes" : "Notater",
- "Expire time" : "Utløpsdato",
+ "Expiry time" : "Utløpstid",
"Changed" : "Endret",
"Created" : "Opprettet",
- "Edit" : "Endre",
+ "Edit" : "Rediger",
"Delete" : "Slett",
"Share" : "Deling",
"Recover" : "Gjenopprett",
"Destroy" : "Ødelegge",
- "Use regex" : "Bruk regex",
- "If you want to put the credential in a other vault," : "Hvis du ønsker å putte identitetsdeltajene i et annet hvelv,",
- "logout of this vault and login to the vault you want the shared credential in." : "logg ut av dette hvelvet og logg inn i det hvelvet du ønsker å legge identitetsdetaljene i.",
+ "Use regex" : "Bruk regulære uttrykk",
+ "You have incoming share requests." : "Du har innkommende delingsforespørsler.",
+ "If you want to put the credential in another vault," : "Hvis du ønsker å putte identitetsdeltaljen i et annet hvelv,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "logg ut av dette hvelvet og logg inn i det hvelvet du ønsker å legge identitetsdetaljene i.",
"Permissions" : "Rettigheter",
"Received from" : "Mottatt fra",
"Date" : "Dato",
@@ -211,32 +238,35 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Passordstyrken må være minst: {{strength}}",
"Please give your new vault a name." : "Velg et nytt navn for hvelvet.",
"Repeat vault password" : "Gjenta hvelv-passord",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Dine delingsnøkler vil ha en styrke på 1024 bit, som du kan endre senere i innstillingene.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Dine delingsnøkkel vil ha en styrke på 1024 bit, som du kan endre senere i Innstillinger.",
"Create vault" : "Opprett hvelv",
"Go back to vaults" : "Gå tilbake til hvelv",
"Please input the password for" : "Skriv inn passordet for",
- "Set this vault as default." : "Set dette hvelvet som forvalg.",
- "Login automatically to this vault." : "Logg inn automatisk i dette hvelvet.",
- "Logout of this vault automatically after: " : "Logg ut av dette hvelvet etter:",
+ "Set this vault as the default." : "Sett dette hvelvet som forvalg.",
+ "Log into this vault automatically." : "Logg inn i dette hvelvet automatisk.",
+ "Log out of this vault automatically after: " : "Logg ut av dette hvelvet automatisk etter:",
"Decrypt vault" : "Dekrypter hvelv",
- "Seems you lost the vault password and you're unable to login." : "Det later til at du har mistet hvelv-passordet og ikke kan logge inn.",
- "If you want this vault removed you can request removal of the vault here." : "Hvis du ønsker dette hvelvet fjernet kan du forespørre fjerning av det her.",
- "After an admin destroy's this vault, all credentials will be lost" : "Etter at en administrator sletter dette hvelvet, vil alle identitetsdetaljene i det gå tapt",
- "Reason to request deletion (optional):" : "Grunn til å forespørre sletting (valgfritt):",
+ "Seems you lost the vault password and you're unable to log in." : "Det later til at du har mistet hvelv-passordet og ikke kan logge inn.",
+ "If you want this vault to be removed you can request that here." : "Hvis du ønsker dette hvelvet fjernet kan du forespørre det her.",
+ "An admin then accepts or declines the request" : "En administrator godtar eller avslår forespørselen",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Etter at en administrator ødelegger dette hvelvet, vil alle identitetsdetaljer i det gå tapt",
+ "Reason for requesting deletion (optional):" : "Grunn til forespørring av sletting (valgfritt):",
"Request vault destruction" : "Forespør ødeleggelse av hvelvet",
"Yes, request an admin to destroy this vault" : "Ja, forespør en administrator om å ødelegge dette hvelvet",
"Cancel destruction request" : "Avbryt ødeleggelsesforespørsel",
"Vault destruction requested" : "Hvelv-ødeleggelse forespurt",
"Request removed" : "Forespørsel fjernet",
"Destruction request pending" : "Ødeleggelsesforespørsel på vent",
+ "Warning! Adding credentials over HTTP is insecure!" : "Advarsel! Å legge til identitetsdetaljer over HTTP er usikkert!",
"Logged in to {{vault_name}}" : "Logget inn på {{vault_name}}",
- "Change vault" : "Endre hvelv",
+ "Change vault" : "Bytt hvelv",
"Deleted credentials" : "Slett påloggingsdetaljer",
"Logout" : "Logg ut",
"Donate" : "Doner",
"Someone has shared a credential with you." : "Noen har delt en påloggingsinformasjon med deg.",
"Click here to request it" : "Klikk her for å forespørre det",
- "Loading..." : "Laster...",
+ "Loading…" : "Laster…",
+ "Awwhh… credential not found. Maybe it expired" : "Huffda… innloggingsdetaljen ble ikke funnet. Kanskje den har utløpt",
"Error while saving field" : "Feil under lagring av felt",
"A Passman item has been created, modified or deleted" : "Et Passman element er opprettet, endret eller slettet",
"A Passman item has expired" : "Et Passman element er utløpt",
@@ -266,17 +296,18 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s delte \"%s\" med deg. Klikk her for å akseptere",
"%s has declined your share request for \"%s\"." : "%s har avvist din forespørsel om å dele \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s har akseptert din forespørsel om å dele \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Kunne ikke hente versjonsinfo",
"Passman Settings" : "Passman-innstillinger",
- "Github version:" : "Github versjon:",
- "A newer version of passman is available" : "En nyere versjon av Passman er tilgjengelig",
+ "GitHub version:" : "GitHub-versjon:",
+ "A newer version of Passman is available" : "En nyere versjon av Passman er tilgjengelig",
"Password sharing" : "Passorddeling",
"Credential mover" : "Legitimasjonsflytter",
"Vault destruction requests" : "Hvelv-ødeleggelsesforespørsler",
"Check for new versions" : "Se etter nye versjoner",
- "Enable HTTPS check" : "Aktiver HTTPS kontroll",
+ "Enable HTTPS check" : "Aktiver HTTPS-kontroll",
"Disable context menu" : "Skru av bindeleddsmeny",
- "Disable javascript debugger" : "Skru av JavaScript-feilretter",
+ "Disable JavaScript debugger" : "Skru av JavaScript-feilsøkingsprogram",
"Allow users on this server to share passwords with a link" : "Tillat brukere på denne tjeneren å dele passord med en lenke",
"Allow users on this server to share passwords with other users" : "Tillat brukere på denne tjeneren å dele passord med andre brukere",
"Move credentials from one account to another" : "Flytt påloggingsinformasjon fra en konto til en annen",
diff --git a/l10n/nb.json b/l10n/nb.json
index 0f72f3ba..0e281d18 100644
--- a/l10n/nb.json
+++ b/l10n/nb.json
@@ -2,25 +2,25 @@
"Passwords" : "Passord",
"Generating sharing keys ( %step / 2)" : "Oppretter delingsnøkler ( %step / 2)",
"Incorrect vault password!" : "Feil hvelv-passord!",
- "Passwords do not match" : "Passordene passer ikke",
+ "Passwords do not match" : "Passordene samsvarer ikke",
"General" : "Generelt",
- "Custom Fields" : "Egenvalgte felter",
- "Please fill in a label!" : "Fyll inn en merkelapp!",
- "Please fill in a value!" : "Vennligst oppgi en verdi!",
+ "Custom Fields" : "Brukervalgte felter",
+ "Please fill in a label." : "Fyll inn en etikett.",
+ "Please fill in a value." : "Fyll inn en verdi.",
"Error loading file" : "Feil ved lasting av fil",
- "An error happened during decryption" : "En feil oppstod under dekryptering",
+ "An error occurred during decryption" : "En feil oppstod under dekryptering",
"Credential created!" : "Legitimasjonen ble laget",
"Credential deleted" : "Legitimasjonen ble slettet",
"Credential updated" : "Legitimasjonen ble oppdatert",
"Credential recovered" : "Legitimasjonen ble gjenopprettet",
"Credential destroyed" : "Legitimasjonen ble destruert",
- "Error downloading file, you probably don't have enough permissions" : "Kunne ikke laste ned fil, du har sannsynligvis ikke nok rettigheter",
- "Invalid QR code" : "Ugyldig QR kode",
+ "Error downloading file, you probably don't have sufficient permissions" : "Kunne ikke laste ned fil, du har sannsynligvis ikke nok rettigheter",
+ "Invalid QR code" : "Ugyldig QR-kode",
"Starting export" : "Starter eksport",
"Decrypting credentials" : "Dekrypterer legitimasjon",
"Done" : "Ferdig",
- "File read successfully!" : "Fil lest",
- "Follow the following steps to import your file" : "Følg følgende steg for å importere fila di",
+ "File read successfully." : "Fil lest.",
+ "Proceed with the following steps to import your file" : "Fortsett med følgende steg for å importere fila di",
"Credential has no label, skipping" : "Påloggingsdetaljer mangler etikett, hopper over",
"Adding {{credential}}" : "Legger til {{credential}}",
"Added {{credential}}" : "{{credential}} lagt til",
@@ -28,27 +28,34 @@
"Parsed {{num}} credentials, starting to import" : "Tolket {{num}} påloggingsdetaljer, begynner importering",
"Importing" : "Importerer",
"Start import" : "Start importering",
- "Select csv file" : "Velg CSV-fil",
- "Parsed {{rows}} lines from csv file" : "Tolket {{rows}} linjer fra CSV-fil",
+ "Select CSV file" : "Velg CSV-fil",
+ "Parsed {{rows}} lines from CSV file" : "Tolket {{rows}} linjer fra CSV-fil",
"Skip first row" : "Hopp over første rad",
+ "You need to assign the label field before you can start the import." : "Du må tildele et etikettfelt før du kan starte importen.",
+ "The first 5 lines of the CSV are shown." : "De første fem linjene av CSV-en vises.",
+ "Assign the proper fields to each column." : "Tildel de riktige feltene til hver kolonne.",
+ "Example of imported credential" : "Eksempel på importert påloggingsdetalj",
+ "Missing an importer? Try it with the generic CSV importer." : "Manglende importør? Prøv med en generisk CSV-importør.",
"Go back to importers." : "Gå tilbake til importører.",
"Revision deleted" : "Revisjonen slettet",
"Revision restored" : "Revisjonen er gjenopprettet",
- "Save in passman" : "Lagre i passman",
+ "Save in Passman" : "Lagre i Passman",
"Settings saved" : "Innstillinger lagret",
"General settings" : "Generelle innstillinger",
- "Password Audit" : "Passordgjennomsyn",
- "Password settings" : "Passord innstillinger",
+ "Password audit" : "Passordgjennomsyn",
+ "Password settings" : "Passordinnstillinger",
"Import credentials" : "Importer legitimasjon",
"Export credentials" : "Eksporter påloggingsdetaljer",
"Sharing" : "Deling",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Er du sikker på at du ønsker å forlate? Dette vil ødelegge alle dine påloggingsdetaljer",
"Your old password is incorrect!" : "Ditt gamle passord er feil!",
- "New passwords do not match!" : "De nye passordene er ikke like!",
- "Please login with your new vault password" : "Logg inn med ditt nye hvelv-passord",
+ "New password does not match!" : "Det nye passordet samsvarer ikke!",
+ "Please log in with your new vault password" : "Logg inn med ditt nye hvelv-passord",
"Share with users and groups" : "Del med brukere og grupper",
- "Share link" : "Deling lenke",
+ "Share link" : "Delingslenke",
"Are you sure you want to leave? This will corrupt this credential" : "Er du sikker på at du ønsker å forlate? Dette vil skade disse påloggingsdetaljene",
"Credential unshared" : "Deling av legitimasjon trukket tilbake",
+ "Credential shared" : "Påloggingsdetalj delt",
"Saved!" : "Lagret!",
"Poor" : "Dårlig",
"Weak" : "Svak",
@@ -63,7 +70,7 @@
"Complete" : "Ferdig",
"Username" : "Brukernavn",
"Repeat password" : "Gjenta passord",
- "Add Tag" : "Legg til merkelapp",
+ "Add tag" : "Legg til merkelapp",
"Field label" : "Feltetikett",
"Field value" : "Feltverdi",
"Choose a file" : "Velg fil",
@@ -81,8 +88,8 @@
"Current OTP settings" : "Nåværende OTP-innstillinger",
"Issuer" : "Utsteder",
"Secret" : "Hemmelighet",
- "Expire date" : "Utløpsdato",
- "No expire date set" : "Ingen utløpsdato er satt",
+ "Expiration date" : "Utløpsdato",
+ "No expiration date set" : "Ingen utløpsdato satt",
"Renew interval" : "Fornyingsinterval",
"Disabled" : "Inaktiv",
"Day(s)" : "Dag(er)",
@@ -98,7 +105,7 @@
"Use special characters" : "Bruk spesialtegn",
"Avoid ambiguous characters" : "Unngå tvetydige tegn",
"Require every character type" : "Krever hver tegntype",
- "Export type" : "Eksport type",
+ "Export type" : "Eksporttype",
"Export" : "Eksporter",
"Enter vault password to confirm export." : "Skriv inn hvelv-passord for å bekrefte eksportering.",
"Rename vault" : "Gi hvelv nytt navn",
@@ -107,18 +114,21 @@
"Change vault key" : "Endre hvelv-nøkkel",
"Old vault password" : "Gammelt hvelv-passord",
"New vault password" : "Nytt hvelv-passord",
- "New vault password repeat" : "Gjenta nytt hvelv-passord",
+ "Repeat new vault password" : "Gjenta nytt hvelv-passord",
"Please wait your vault is being updated, do not leave this page." : "Vent mens ditt hvelv blir oppdatert, ikke forlat denne siden.",
"Processing" : "Prosesserer",
"Total progress" : "Total fremgang",
"About Passman" : "Om Passman",
"Version" : "Versjon",
"Donate to support development" : "Doner for å støtte utviklingen",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "Lagre passordene dine med ett klikk!",
+ "Drag below button to your bookmark toolbar." : "Dra knappen nedenfor til din bokmerkeverktøyslinje.",
"Delete vault" : "Slett hvelv",
"Vault password" : "Hvelv-passord",
"This process is irreversible" : "Denne prosessen er irreversibel ",
"Delete my precious passwords" : "Slett mine dyrebare passord",
- "Deleting {{password}}..." : "Sletter {{password}}…",
+ "Deleting {{password}}…" : "Sletter {{password}}…",
"Yes, delete my precious passwords" : "Ja, slett mine dyrebare passord",
"Import type" : "Importtype",
"Import" : "Import",
@@ -130,14 +140,20 @@
"Save keys" : "Lagre nøkler",
"Generate sharing keys" : "Opprett delingsnøkler",
"Generating sharing keys" : "Oppretter delingsnøkler",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Passordverktøyet vil skanne passordet ditt, kalkulere gjennomsnittlig tid for knekking og liste dem som er under terskelen",
"Minimum password stength" : "Minimums passordstyrke",
- "Passman scanned your passwords, and here is the result." : "Passman skannet passordene dine, og her er resultatet:",
+ "Start scan" : "Start skanning",
+ "Result" : "Resultat",
+ "A total of {{scan_result}} weak credentials were found." : "Fant {{scan_result}} svake identitetsdetaljer.",
"Score" : "Poengsum",
"Action" : "Handling",
- "Search users or groups..." : "Søk etter brukere eller grupper…",
+ "Search users or groups…" : "Søk etter brukere eller grupper…",
"Missing users? Only users that have vaults are shown." : "Manglende brukere? Bare brukere som har hvelv blir vist.",
+ "Cyphering" : "Chiffrerer",
"Uploading" : "Laster opp",
"User" : "Bruker",
+ "Crypto time" : "Krypteringstid",
+ "Total time spent cyphering" : "Tid brukt på chiffrering",
"Read" : "Les",
"Write" : "Skriv",
"Files" : "Filer",
@@ -146,27 +162,35 @@
"Enable link sharing" : "Skru på deling av lenker",
"Share until date" : "Del til dato",
"Expire after views" : "Utløper etter antall visninger",
- "Click share first" : "Klikk \"del\" først",
+ "Click Share first" : "Klikk \"Del\" først:",
"Show files" : "Vis filer",
"Details" : "Detaljer",
"Hide details" : "Skjul detaljer",
"Password score" : "Passord-poengsum",
"Cracking times" : "Løsningstider",
"100 / hour" : "100 / time",
+ "Throttled online attack" : "Begrenset nettbasert angrep",
"10 / second" : "10 / sekund",
+ "Unthrottled online attack" : "Ubegrenset nettbasert angrep",
"10k / second" : "10k / sekund",
"Offline attack, slow hash, many cores" : "Frakoblet angrep, treg sjekksummering, mange kjerner",
"10B / second" : "10B / sekund",
"Offline attack, fast hash, many cores" : "Frakoblet angrep, rask sjekksummering, mange kjerner",
+ "Match sequence" : "Samsvar sekvens",
+ "See match sequence" : "Se samsvarende sekvens",
"Pattern" : "Mønster",
+ "Matched word" : "Samsvart ord",
"Dictionary name" : "Ordboknavn",
"Rank" : "Rangering",
"Reversed" : "Tilbakestilt",
"Guesses" : "Gjettinger",
"Base guesses" : "Basis gjettinger",
- "Uppercase variations" : "Storbokstav variasjoner",
+ "Uppercase variations" : "Variasjoner med store bokstaver",
"l33t-variations" : "l33t-varianter",
+ "Showing revisions of" : "Viser utgaver av",
+ "Revision of" : "Revisjon av",
"by" : "av",
+ "No revisions found." : "Ingen revisjoner funner.",
"Label" : "Etikett",
"Restore revision" : "Gjenopprett revisjonen",
"Delete revision" : "Slett revisjonen",
@@ -177,25 +201,28 @@
"Settings" : "Innstillinger",
"Share credential {{credential}}" : "Del legitimasjon {{credential}}",
"Unshare" : "Avslutt deling",
- "Showing deleted since" : "Vis slettede siden",
- "All time" : "Alle tider",
+ "Showing deleted since" : "Viser slettede siden",
+ "Beginning" : "Begynnelsen",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Viser {{number_filtered}} av {{credential_number}} identitetsdetaljer",
+ "Search for credential…" : "Søk etter påloggingsdetalj…",
"Account" : "Konto",
"Password" : "Passord",
"OTP" : "Éngangspassord (OTP)",
"E-mail" : "E-post",
"URL" : "URL",
"Notes" : "Notater",
- "Expire time" : "Utløpsdato",
+ "Expiry time" : "Utløpstid",
"Changed" : "Endret",
"Created" : "Opprettet",
- "Edit" : "Endre",
+ "Edit" : "Rediger",
"Delete" : "Slett",
"Share" : "Deling",
"Recover" : "Gjenopprett",
"Destroy" : "Ødelegge",
- "Use regex" : "Bruk regex",
- "If you want to put the credential in a other vault," : "Hvis du ønsker å putte identitetsdeltajene i et annet hvelv,",
- "logout of this vault and login to the vault you want the shared credential in." : "logg ut av dette hvelvet og logg inn i det hvelvet du ønsker å legge identitetsdetaljene i.",
+ "Use regex" : "Bruk regulære uttrykk",
+ "You have incoming share requests." : "Du har innkommende delingsforespørsler.",
+ "If you want to put the credential in another vault," : "Hvis du ønsker å putte identitetsdeltaljen i et annet hvelv,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "logg ut av dette hvelvet og logg inn i det hvelvet du ønsker å legge identitetsdetaljene i.",
"Permissions" : "Rettigheter",
"Received from" : "Mottatt fra",
"Date" : "Dato",
@@ -209,32 +236,35 @@
"Password strength must be at least: {{strength}}" : "Passordstyrken må være minst: {{strength}}",
"Please give your new vault a name." : "Velg et nytt navn for hvelvet.",
"Repeat vault password" : "Gjenta hvelv-passord",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Dine delingsnøkler vil ha en styrke på 1024 bit, som du kan endre senere i innstillingene.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Dine delingsnøkkel vil ha en styrke på 1024 bit, som du kan endre senere i Innstillinger.",
"Create vault" : "Opprett hvelv",
"Go back to vaults" : "Gå tilbake til hvelv",
"Please input the password for" : "Skriv inn passordet for",
- "Set this vault as default." : "Set dette hvelvet som forvalg.",
- "Login automatically to this vault." : "Logg inn automatisk i dette hvelvet.",
- "Logout of this vault automatically after: " : "Logg ut av dette hvelvet etter:",
+ "Set this vault as the default." : "Sett dette hvelvet som forvalg.",
+ "Log into this vault automatically." : "Logg inn i dette hvelvet automatisk.",
+ "Log out of this vault automatically after: " : "Logg ut av dette hvelvet automatisk etter:",
"Decrypt vault" : "Dekrypter hvelv",
- "Seems you lost the vault password and you're unable to login." : "Det later til at du har mistet hvelv-passordet og ikke kan logge inn.",
- "If you want this vault removed you can request removal of the vault here." : "Hvis du ønsker dette hvelvet fjernet kan du forespørre fjerning av det her.",
- "After an admin destroy's this vault, all credentials will be lost" : "Etter at en administrator sletter dette hvelvet, vil alle identitetsdetaljene i det gå tapt",
- "Reason to request deletion (optional):" : "Grunn til å forespørre sletting (valgfritt):",
+ "Seems you lost the vault password and you're unable to log in." : "Det later til at du har mistet hvelv-passordet og ikke kan logge inn.",
+ "If you want this vault to be removed you can request that here." : "Hvis du ønsker dette hvelvet fjernet kan du forespørre det her.",
+ "An admin then accepts or declines the request" : "En administrator godtar eller avslår forespørselen",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Etter at en administrator ødelegger dette hvelvet, vil alle identitetsdetaljer i det gå tapt",
+ "Reason for requesting deletion (optional):" : "Grunn til forespørring av sletting (valgfritt):",
"Request vault destruction" : "Forespør ødeleggelse av hvelvet",
"Yes, request an admin to destroy this vault" : "Ja, forespør en administrator om å ødelegge dette hvelvet",
"Cancel destruction request" : "Avbryt ødeleggelsesforespørsel",
"Vault destruction requested" : "Hvelv-ødeleggelse forespurt",
"Request removed" : "Forespørsel fjernet",
"Destruction request pending" : "Ødeleggelsesforespørsel på vent",
+ "Warning! Adding credentials over HTTP is insecure!" : "Advarsel! Å legge til identitetsdetaljer over HTTP er usikkert!",
"Logged in to {{vault_name}}" : "Logget inn på {{vault_name}}",
- "Change vault" : "Endre hvelv",
+ "Change vault" : "Bytt hvelv",
"Deleted credentials" : "Slett påloggingsdetaljer",
"Logout" : "Logg ut",
"Donate" : "Doner",
"Someone has shared a credential with you." : "Noen har delt en påloggingsinformasjon med deg.",
"Click here to request it" : "Klikk her for å forespørre det",
- "Loading..." : "Laster...",
+ "Loading…" : "Laster…",
+ "Awwhh… credential not found. Maybe it expired" : "Huffda… innloggingsdetaljen ble ikke funnet. Kanskje den har utløpt",
"Error while saving field" : "Feil under lagring av felt",
"A Passman item has been created, modified or deleted" : "Et Passman element er opprettet, endret eller slettet",
"A Passman item has expired" : "Et Passman element er utløpt",
@@ -264,17 +294,18 @@
"%s shared \"%s\" with you. Click here to accept" : "%s delte \"%s\" med deg. Klikk her for å akseptere",
"%s has declined your share request for \"%s\"." : "%s har avvist din forespørsel om å dele \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s har akseptert din forespørsel om å dele \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Kunne ikke hente versjonsinfo",
"Passman Settings" : "Passman-innstillinger",
- "Github version:" : "Github versjon:",
- "A newer version of passman is available" : "En nyere versjon av Passman er tilgjengelig",
+ "GitHub version:" : "GitHub-versjon:",
+ "A newer version of Passman is available" : "En nyere versjon av Passman er tilgjengelig",
"Password sharing" : "Passorddeling",
"Credential mover" : "Legitimasjonsflytter",
"Vault destruction requests" : "Hvelv-ødeleggelsesforespørsler",
"Check for new versions" : "Se etter nye versjoner",
- "Enable HTTPS check" : "Aktiver HTTPS kontroll",
+ "Enable HTTPS check" : "Aktiver HTTPS-kontroll",
"Disable context menu" : "Skru av bindeleddsmeny",
- "Disable javascript debugger" : "Skru av JavaScript-feilretter",
+ "Disable JavaScript debugger" : "Skru av JavaScript-feilsøkingsprogram",
"Allow users on this server to share passwords with a link" : "Tillat brukere på denne tjeneren å dele passord med en lenke",
"Allow users on this server to share passwords with other users" : "Tillat brukere på denne tjeneren å dele passord med andre brukere",
"Move credentials from one account to another" : "Flytt påloggingsinformasjon fra en konto til en annen",
diff --git a/l10n/nl.js b/l10n/nl.js
index d1dd0ea9..2c656ea6 100644
--- a/l10n/nl.js
+++ b/l10n/nl.js
@@ -7,22 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Wachtwoorden komen niet overeen.",
"General" : "Algemeen",
"Custom Fields" : "Maatwerk velden",
- "Please fill in a label!" : "Voeg een label toe!",
- "Please fill in a value!" : "Geef een waarde op!",
+ "Please fill in a label." : "Voeg een label toe.",
+ "Please fill in a value." : "Voeg een waarde toe.",
"Error loading file" : "Fout bij laden bestand",
- "An error happened during decryption" : "Er trad een fout op bij ontsleutelen",
+ "An error occurred during decryption" : "Er trad een fout op bij ontsleutelen",
"Credential created!" : "Inloggegevens aangemaakt!",
"Credential deleted" : "Inloggegevens verwijderd",
"Credential updated" : "Inloggegevens bijgewerkt",
"Credential recovered" : "Inloggegevens hersteld",
"Credential destroyed" : "Inloggegevens vernietigd",
- "Error downloading file, you probably don't have enough permissions" : "Fout bij downloaden bestand, je hebt waarschijnlijk niet genoeg rechten",
+ "Error downloading file, you probably don't have sufficient permissions" : "Fout bij downloaden bestand, je hebt waarschijnlijk niet genoeg rechten",
"Invalid QR code" : "Ongeldige QR code",
"Starting export" : "Starten export",
"Decrypting credentials" : "Ontsleutelen inloggegevens",
"Done" : "Gereed",
- "File read successfully!" : "Bestand succesvol gelezen!",
- "Follow the following steps to import your file" : "Volg de volgende stappen om je bestand te importeren",
+ "File read successfully." : "Bestand succesvol gelezen.",
+ "Proceed with the following steps to import your file" : "Ga verder met de volgende stappen om je bestand te importeren",
"Credential has no label, skipping" : "Inloggegeven zonder label, sla over",
"Adding {{credential}}" : "Toevoegen {{credential}}",
"Added {{credential}}" : "Toegevoegd {{credential}}",
@@ -30,29 +30,29 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Geïnterpreteerd {{num}} inloggegevens, beginnen met import",
"Importing" : "Importeren",
"Start import" : "Start import",
- "Select csv file" : "Selecteer csv-bestand",
- "Parsed {{rows}} lines from csv file" : "Inlezen {{rows}} regels van csv-bestand",
+ "Select CSV file" : "Selecteer CSV-bestand",
+ "Parsed {{rows}} lines from CSV file" : "Ingelezen {{rows}} regels van CSV-bestand",
"Skip first row" : "Eerste regel overslaan",
"You need to assign the label field before you can start the import." : "Je moet het labelveld opgeven, voordat je de import kunt starten.",
- "First 5 lines of the csv are shown." : "De eerste 5 regels van de csv worden getoond.",
+ "The first 5 lines of the CSV are shown." : "De eerste 5 regels van de CSV worden weergegeven.",
"Assign the proper fields to each column." : "Geef de juiste veldnamen op voor elke kolom.",
- "Example imported credential" : "Voorbeeld geïmporteerde inloggegevens",
- "Missing an importer? Try it with the generic csv importer." : "Mis je een importer? Probeer het met een generieke csv-importer.",
+ "Example of imported credential" : "Voorbeeld van geïmporteerde inloggegevens",
+ "Missing an importer? Try it with the generic CSV importer." : "Mis je een importer? Probeer het met een generieke CSV-importer.",
"Go back to importers." : "Terug naar importeerders.",
"Revision deleted" : "Revisie verwijderd",
"Revision restored" : "Revisie hersteld",
- "Save in passman" : "Bewaren in Passman",
+ "Save in Passman" : "Bewaren in Passman",
"Settings saved" : "Instellingen bewaard",
"General settings" : "Algemene instellingen",
- "Password Audit" : "Wachtwoord audit",
+ "Password audit" : "Wachtwoord controleren",
"Password settings" : "Wachtwoordinstellingen",
"Import credentials" : "Importeren inloggegevens",
"Export credentials" : "Exporteren inloggegevens",
"Sharing" : "Delen",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Weet je zeker dat je wilt stoppen? Dit ZAL alle inloggegevens kapot maken",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Weet je zeker dat je wilt stoppen? Dit zal alle inloggegevens kapot maken",
"Your old password is incorrect!" : "Je oude wachtwoord is onjuist!",
- "New passwords do not match!" : "Nieuwe wachtwoorden komen niet overeen!",
- "Please login with your new vault password" : "Login met je nieuwe kluiswachtwoord",
+ "New password does not match!" : "Nieuwe wachtwoord komt niet overeen!",
+ "Please log in with your new vault password" : "Login met je nieuwe kluiswachtwoord",
"Share with users and groups" : "Delen met gebruikers en groepen",
"Share link" : "Delen link",
"Are you sure you want to leave? This will corrupt this credential" : "Weet je zeker dat je wilt stoppen? Dit zal het inloggegeven kapot maken",
@@ -72,7 +72,7 @@ OC.L10N.register(
"Complete" : "Afgerond",
"Username" : "Gebruikersnaam",
"Repeat password" : "Herhaal wachtwoord",
- "Add Tag" : "Toevoegen tag",
+ "Add tag" : "Tag toevoegen",
"Field label" : "Veldlabel",
"Field value" : "Veldwaarde",
"Choose a file" : "Kies een bestand",
@@ -90,8 +90,8 @@ OC.L10N.register(
"Current OTP settings" : "Huidige OTP instellingen",
"Issuer" : "Uitgever",
"Secret" : "Geheim",
- "Expire date" : "Vervaldatum",
- "No expire date set" : "Geen vervaldatum ingesteld",
+ "Expiration date" : "Vervaldatum",
+ "No expiration date set" : "Geen vervaldatum ingesteld",
"Renew interval" : "Vernieuw interval",
"Disabled" : "Uitgeschakeld",
"Day(s)" : "Dag(en)",
@@ -116,7 +116,7 @@ OC.L10N.register(
"Change vault key" : "Wijzigen kluissleutel",
"Old vault password" : "Oude kluiswachtwoord",
"New vault password" : "Nieuw kluiswachtwoord",
- "New vault password repeat" : "Nieuw kluiswachtwoord opnieuw",
+ "Repeat new vault password" : "Herhaal nieuw kluiswachtwoord",
"Please wait your vault is being updated, do not leave this page." : "Wacht totdat je kluis is bijgewerkt, verlaat deze pagina niet.",
"Processing" : "Verwerken",
"Total progress" : "Totale voortgang",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Vault password" : "Kluiswachtwoord",
"This process is irreversible" : "Dit proces is niet omkeerbaar.",
"Delete my precious passwords" : "Verwijder mijn eerdere wachtwoorden",
- "Deleting {{password}}..." : "Verwijderen {{password}}...",
+ "Deleting {{password}}…" : "Verwijderen {{password}}…",
"Yes, delete my precious passwords" : "Ja, verwijder mijn eerdere wachtwoorden",
"Import type" : "Import type",
"Import" : "Importeren",
@@ -142,13 +142,14 @@ OC.L10N.register(
"Save keys" : "Opslaan sleutels",
"Generate sharing keys" : "Genereren sleutels om te delen",
"Generating sharing keys" : "Genereren sleutels om te delen",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Het wachtwoord hulpje scant je wachtwoord, berekent de gemiddelde kraaktijd en, als onvoldoende, toont het",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Het wachtwoord hulpje scant je wachtwoord, berekent de gemiddelde kraaktijd en toont de zwakke wachtwoorden",
"Minimum password stength" : "Minimale wachtwoordsterkte",
- "Passman scanned your passwords, and here is the result." : "Passman scande je wachtwoorden en hier is het resultaat.",
- "A total of {{scan_result}} weak credentials." : "Totaal {{scan_result}} zwakke wachtwoorden.",
+ "Start scan" : "Start scan",
+ "Result" : "Resultaat",
+ "A total of {{scan_result}} weak credentials were found." : "Totaal {{scan_result}} zwakke wachtwoorden gevonden.",
"Score" : "Score",
"Action" : "Actie",
- "Search users or groups..." : "Zoeken gebruikers of groepen ...",
+ "Search users or groups…" : "Zoek gebruikers of groepen...",
"Missing users? Only users that have vaults are shown." : "Mis je gebruikers? Alleen gebruikers in de kluis worden getoond.",
"Cyphering" : "Versleutelen",
"Uploading" : "Uploaden",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Inschakelen delen link",
"Share until date" : "Delen tot datum",
"Expire after views" : "Vervallen na bezichtiging",
- "Click share first" : "Klik eerst delen",
+ "Click Share first" : "Klik eerst op Delen",
"Show files" : "Tonen bestanden",
"Details" : "Details",
"Hide details" : "Verbergen details",
@@ -203,16 +204,16 @@ OC.L10N.register(
"Share credential {{credential}}" : "Delen inloggegeven {{credential}}",
"Unshare" : "Stop met delen",
"Showing deleted since" : "Tonen verwijderd sinds",
- "All time" : "Altijd",
+ "Beginning" : "Beginnen",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Tonen {{number_filtered}} van {{credential_number}} inloggegevens",
- "Search credential..." : "Zoeken inloggegevens...",
+ "Search for credential…" : "Zoek naar inloggegevens...",
"Account" : "Account",
"Password" : "Wachtwoord",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Notities",
- "Expire time" : "Vervaldatum",
+ "Expiry time" : "Vervaltijd",
"Changed" : "Gewijzigd",
"Created" : "Aangemaakt",
"Edit" : "Bewerken",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Vernietigen",
"Use regex" : "Gebruiken regex",
"You have incoming share requests." : "Je hebt binnengekomen deelverzoeken.",
- "If you want to put the credential in a other vault," : "Als je de inloggegevens in een andere kluis wilt,",
- "logout of this vault and login to the vault you want the shared credential in." : "log dan uit van deze kluis en login in de kluis waar je de gedeelde inloggegevens wilt bewaren.",
+ "If you want to put the credential in another vault," : "Als je de inloggegevens in een andere kluis wilt stoppen,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Log uit van deze kluis en login in de kluis waar je de gedeelde inloggegevens wilt bewaren.",
"Permissions" : "Permissies",
"Received from" : "Ontvangen van",
"Date" : "Datum",
@@ -237,26 +238,26 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Wachtwoordsterkte minimale waarde: {{strength}}",
"Please give your new vault a name." : "Voer de naam van je nieuwe kluis in.",
"Repeat vault password" : "Herhaal kluiswachtwoord",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "De deelsleutels hebben een sterkte van 1024 bit; dit kun je later in instellingen wijzigen.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "De deelsleutels zal een sterkte van 1024 bit hebben. Later is dit te wijzigen bij de instellingen.",
"Create vault" : "Creëren kluis",
"Go back to vaults" : "Terug naar kluizen",
"Please input the password for" : "Voer het wachtwoord in voor",
- "Set this vault as default." : "Stel deze kluis als standaard in.",
- "Login automatically to this vault." : "Log automatisch in in deze kluis.",
- "Logout of this vault automatically after: " : "Automatisch van deze kluis uitloggen na:",
+ "Set this vault as the default." : "Stel is als standaard kluis.",
+ "Log into this vault automatically." : "Automatisch in deze kluis uitloggen.",
+ "Log out of this vault automatically after: " : "Automatisch van deze kluis uitloggen na:",
"Decrypt vault" : "Ontsleutel kluis",
- "Seems you lost the vault password and you're unable to login." : "Het lijkt erop dat je het kluiswachtwoord kwijt bent en de niet meer in kunt loggen.",
- "If you want this vault removed you can request removal of the vault here." : "Als je deze kluis verwijderd wilt hebben, kun je de vernietiging van de kluis hier aanvragen.",
- "An admin then accept to the request (or not)" : "Een beheerder accepteert dan deze aanvraag (of niet)",
- "After an admin destroy's this vault, all credentials will be lost" : "Nadat een beheerde deze kluis heeft vernietigd, zijn de inloggegevens verwijderd",
- "Reason to request deletion (optional):" : "Reden voor aanvraag vernietiging (optioneel):",
+ "Seems you lost the vault password and you're unable to log in." : "Het lijkt erop dat je het kluiswachtwoord kwijt bent en niet meer kan inloggen.",
+ "If you want this vault to be removed you can request that here." : "Als je deze kluis verwijderd wilt hebben, kun je de vernietiging van de kluis hier aanvragen.",
+ "An admin then accepts or declines the request" : "Een beheerder zal dan deze aanvraag accepteren of afwijzen",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Nadat een beheerde deze kluis vernietigd zijn alle inloggegevens verloren",
+ "Reason for requesting deletion (optional):" : "Reden voor aanvraag vernietiging (optioneel):",
"Request vault destruction" : "Aanvragen kluisvernietiging",
"Yes, request an admin to destroy this vault" : "Ja, vraag een beheerder om deze kluis te vernietigen",
"Cancel destruction request" : "Annuleren vernietigingsaanvraag",
"Vault destruction requested" : "Kluisvernietiging aangevraagd",
"Request removed" : "Aanvraag verwijderd",
"Destruction request pending" : "Vernietigingsaanvragen in behandeling",
- "Warning! Adding credentials over http can be insecure!" : "Waarschuwing! Toevoegen van inloggegevens over http is riskant!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Waarschuwing! Het toevoegen van inloggegevens over HTTP is niet veilig!",
"Logged in to {{vault_name}}" : "Ingelogd in {{vault_name}}",
"Change vault" : "Wijzigen kluis",
"Deleted credentials" : "Verwijderde inloggegevens",
@@ -264,8 +265,8 @@ OC.L10N.register(
"Donate" : "Doneren",
"Someone has shared a credential with you." : "Iemand heeft een inloggegeven met je gedeeld.",
"Click here to request it" : "Klik hier om het aan te vragen",
- "Loading..." : "Laden...",
- "Awwhh.... credential not found. Maybe it expired" : "Uhmmm.... inloggegeven niet gevonden. Misschien verlopen",
+ "Loading…" : "Laden...",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh… inloggegevens niet gevonden. Misschien verliepen ze.",
"Error while saving field" : "Fout bij opslaan veld",
"A Passman item has been created, modified or deleted" : "Er is een Passman object gemaakt, gewijzigd of verwijderd",
"A Passman item has expired" : "Er is een Passman object vervallen",
@@ -295,17 +296,18 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s deelde \"%s\" met je. Klik hier om te accepteren",
"%s has declined your share request for \"%s\"." : "%s weigerde je aanvraag om \"%s\" te delen.",
"%s has accepted your share request for \"%s\"." : "%s accepteerde je aanvraag om \"%s\" te delen.",
+ "Passman" : "Passman",
"Unable to get version info" : "Kon de versieinformatie niet ophalen",
"Passman Settings" : "Passman instellingen",
- "Github version:" : "Github versie:",
- "A newer version of passman is available" : "Er is een meer recente versie van passman beschikbaar",
+ "GitHub version:" : "Github versie:",
+ "A newer version of Passman is available" : "Er is een meer recente versie van passman beschikbaar",
"Password sharing" : "Wachtwoord delen",
"Credential mover" : "Inloggegevens verplaatser",
"Vault destruction requests" : "Kluisvernietigingsaanvragen",
"Check for new versions" : "Controleren op nieuwe versies",
"Enable HTTPS check" : "Inschakelen HTTPS controle",
"Disable context menu" : "Deactiveren contextmenu",
- "Disable javascript debugger" : "Uitschakelen javascript debugger",
+ "Disable JavaScript debugger" : "Uitschakelen JavaScript debugger",
"Allow users on this server to share passwords with a link" : "Toestaan dat gebruikers op deze server wachtwoorden delen via een link",
"Allow users on this server to share passwords with other users" : "Toestaan dat gebruikers op deze server wachtwoorden met andere gebruikers delen",
"Move credentials from one account to another" : "Verplaats inloggegevens van het ene account naar een ander",
diff --git a/l10n/nl.json b/l10n/nl.json
index 15f97be7..e882de52 100644
--- a/l10n/nl.json
+++ b/l10n/nl.json
@@ -5,22 +5,22 @@
"Passwords do not match" : "Wachtwoorden komen niet overeen.",
"General" : "Algemeen",
"Custom Fields" : "Maatwerk velden",
- "Please fill in a label!" : "Voeg een label toe!",
- "Please fill in a value!" : "Geef een waarde op!",
+ "Please fill in a label." : "Voeg een label toe.",
+ "Please fill in a value." : "Voeg een waarde toe.",
"Error loading file" : "Fout bij laden bestand",
- "An error happened during decryption" : "Er trad een fout op bij ontsleutelen",
+ "An error occurred during decryption" : "Er trad een fout op bij ontsleutelen",
"Credential created!" : "Inloggegevens aangemaakt!",
"Credential deleted" : "Inloggegevens verwijderd",
"Credential updated" : "Inloggegevens bijgewerkt",
"Credential recovered" : "Inloggegevens hersteld",
"Credential destroyed" : "Inloggegevens vernietigd",
- "Error downloading file, you probably don't have enough permissions" : "Fout bij downloaden bestand, je hebt waarschijnlijk niet genoeg rechten",
+ "Error downloading file, you probably don't have sufficient permissions" : "Fout bij downloaden bestand, je hebt waarschijnlijk niet genoeg rechten",
"Invalid QR code" : "Ongeldige QR code",
"Starting export" : "Starten export",
"Decrypting credentials" : "Ontsleutelen inloggegevens",
"Done" : "Gereed",
- "File read successfully!" : "Bestand succesvol gelezen!",
- "Follow the following steps to import your file" : "Volg de volgende stappen om je bestand te importeren",
+ "File read successfully." : "Bestand succesvol gelezen.",
+ "Proceed with the following steps to import your file" : "Ga verder met de volgende stappen om je bestand te importeren",
"Credential has no label, skipping" : "Inloggegeven zonder label, sla over",
"Adding {{credential}}" : "Toevoegen {{credential}}",
"Added {{credential}}" : "Toegevoegd {{credential}}",
@@ -28,29 +28,29 @@
"Parsed {{num}} credentials, starting to import" : "Geïnterpreteerd {{num}} inloggegevens, beginnen met import",
"Importing" : "Importeren",
"Start import" : "Start import",
- "Select csv file" : "Selecteer csv-bestand",
- "Parsed {{rows}} lines from csv file" : "Inlezen {{rows}} regels van csv-bestand",
+ "Select CSV file" : "Selecteer CSV-bestand",
+ "Parsed {{rows}} lines from CSV file" : "Ingelezen {{rows}} regels van CSV-bestand",
"Skip first row" : "Eerste regel overslaan",
"You need to assign the label field before you can start the import." : "Je moet het labelveld opgeven, voordat je de import kunt starten.",
- "First 5 lines of the csv are shown." : "De eerste 5 regels van de csv worden getoond.",
+ "The first 5 lines of the CSV are shown." : "De eerste 5 regels van de CSV worden weergegeven.",
"Assign the proper fields to each column." : "Geef de juiste veldnamen op voor elke kolom.",
- "Example imported credential" : "Voorbeeld geïmporteerde inloggegevens",
- "Missing an importer? Try it with the generic csv importer." : "Mis je een importer? Probeer het met een generieke csv-importer.",
+ "Example of imported credential" : "Voorbeeld van geïmporteerde inloggegevens",
+ "Missing an importer? Try it with the generic CSV importer." : "Mis je een importer? Probeer het met een generieke CSV-importer.",
"Go back to importers." : "Terug naar importeerders.",
"Revision deleted" : "Revisie verwijderd",
"Revision restored" : "Revisie hersteld",
- "Save in passman" : "Bewaren in Passman",
+ "Save in Passman" : "Bewaren in Passman",
"Settings saved" : "Instellingen bewaard",
"General settings" : "Algemene instellingen",
- "Password Audit" : "Wachtwoord audit",
+ "Password audit" : "Wachtwoord controleren",
"Password settings" : "Wachtwoordinstellingen",
"Import credentials" : "Importeren inloggegevens",
"Export credentials" : "Exporteren inloggegevens",
"Sharing" : "Delen",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Weet je zeker dat je wilt stoppen? Dit ZAL alle inloggegevens kapot maken",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Weet je zeker dat je wilt stoppen? Dit zal alle inloggegevens kapot maken",
"Your old password is incorrect!" : "Je oude wachtwoord is onjuist!",
- "New passwords do not match!" : "Nieuwe wachtwoorden komen niet overeen!",
- "Please login with your new vault password" : "Login met je nieuwe kluiswachtwoord",
+ "New password does not match!" : "Nieuwe wachtwoord komt niet overeen!",
+ "Please log in with your new vault password" : "Login met je nieuwe kluiswachtwoord",
"Share with users and groups" : "Delen met gebruikers en groepen",
"Share link" : "Delen link",
"Are you sure you want to leave? This will corrupt this credential" : "Weet je zeker dat je wilt stoppen? Dit zal het inloggegeven kapot maken",
@@ -70,7 +70,7 @@
"Complete" : "Afgerond",
"Username" : "Gebruikersnaam",
"Repeat password" : "Herhaal wachtwoord",
- "Add Tag" : "Toevoegen tag",
+ "Add tag" : "Tag toevoegen",
"Field label" : "Veldlabel",
"Field value" : "Veldwaarde",
"Choose a file" : "Kies een bestand",
@@ -88,8 +88,8 @@
"Current OTP settings" : "Huidige OTP instellingen",
"Issuer" : "Uitgever",
"Secret" : "Geheim",
- "Expire date" : "Vervaldatum",
- "No expire date set" : "Geen vervaldatum ingesteld",
+ "Expiration date" : "Vervaldatum",
+ "No expiration date set" : "Geen vervaldatum ingesteld",
"Renew interval" : "Vernieuw interval",
"Disabled" : "Uitgeschakeld",
"Day(s)" : "Dag(en)",
@@ -114,7 +114,7 @@
"Change vault key" : "Wijzigen kluissleutel",
"Old vault password" : "Oude kluiswachtwoord",
"New vault password" : "Nieuw kluiswachtwoord",
- "New vault password repeat" : "Nieuw kluiswachtwoord opnieuw",
+ "Repeat new vault password" : "Herhaal nieuw kluiswachtwoord",
"Please wait your vault is being updated, do not leave this page." : "Wacht totdat je kluis is bijgewerkt, verlaat deze pagina niet.",
"Processing" : "Verwerken",
"Total progress" : "Totale voortgang",
@@ -128,7 +128,7 @@
"Vault password" : "Kluiswachtwoord",
"This process is irreversible" : "Dit proces is niet omkeerbaar.",
"Delete my precious passwords" : "Verwijder mijn eerdere wachtwoorden",
- "Deleting {{password}}..." : "Verwijderen {{password}}...",
+ "Deleting {{password}}…" : "Verwijderen {{password}}…",
"Yes, delete my precious passwords" : "Ja, verwijder mijn eerdere wachtwoorden",
"Import type" : "Import type",
"Import" : "Importeren",
@@ -140,13 +140,14 @@
"Save keys" : "Opslaan sleutels",
"Generate sharing keys" : "Genereren sleutels om te delen",
"Generating sharing keys" : "Genereren sleutels om te delen",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Het wachtwoord hulpje scant je wachtwoord, berekent de gemiddelde kraaktijd en, als onvoldoende, toont het",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Het wachtwoord hulpje scant je wachtwoord, berekent de gemiddelde kraaktijd en toont de zwakke wachtwoorden",
"Minimum password stength" : "Minimale wachtwoordsterkte",
- "Passman scanned your passwords, and here is the result." : "Passman scande je wachtwoorden en hier is het resultaat.",
- "A total of {{scan_result}} weak credentials." : "Totaal {{scan_result}} zwakke wachtwoorden.",
+ "Start scan" : "Start scan",
+ "Result" : "Resultaat",
+ "A total of {{scan_result}} weak credentials were found." : "Totaal {{scan_result}} zwakke wachtwoorden gevonden.",
"Score" : "Score",
"Action" : "Actie",
- "Search users or groups..." : "Zoeken gebruikers of groepen ...",
+ "Search users or groups…" : "Zoek gebruikers of groepen...",
"Missing users? Only users that have vaults are shown." : "Mis je gebruikers? Alleen gebruikers in de kluis worden getoond.",
"Cyphering" : "Versleutelen",
"Uploading" : "Uploaden",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Inschakelen delen link",
"Share until date" : "Delen tot datum",
"Expire after views" : "Vervallen na bezichtiging",
- "Click share first" : "Klik eerst delen",
+ "Click Share first" : "Klik eerst op Delen",
"Show files" : "Tonen bestanden",
"Details" : "Details",
"Hide details" : "Verbergen details",
@@ -201,16 +202,16 @@
"Share credential {{credential}}" : "Delen inloggegeven {{credential}}",
"Unshare" : "Stop met delen",
"Showing deleted since" : "Tonen verwijderd sinds",
- "All time" : "Altijd",
+ "Beginning" : "Beginnen",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Tonen {{number_filtered}} van {{credential_number}} inloggegevens",
- "Search credential..." : "Zoeken inloggegevens...",
+ "Search for credential…" : "Zoek naar inloggegevens...",
"Account" : "Account",
"Password" : "Wachtwoord",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Notities",
- "Expire time" : "Vervaldatum",
+ "Expiry time" : "Vervaltijd",
"Changed" : "Gewijzigd",
"Created" : "Aangemaakt",
"Edit" : "Bewerken",
@@ -220,8 +221,8 @@
"Destroy" : "Vernietigen",
"Use regex" : "Gebruiken regex",
"You have incoming share requests." : "Je hebt binnengekomen deelverzoeken.",
- "If you want to put the credential in a other vault," : "Als je de inloggegevens in een andere kluis wilt,",
- "logout of this vault and login to the vault you want the shared credential in." : "log dan uit van deze kluis en login in de kluis waar je de gedeelde inloggegevens wilt bewaren.",
+ "If you want to put the credential in another vault," : "Als je de inloggegevens in een andere kluis wilt stoppen,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Log uit van deze kluis en login in de kluis waar je de gedeelde inloggegevens wilt bewaren.",
"Permissions" : "Permissies",
"Received from" : "Ontvangen van",
"Date" : "Datum",
@@ -235,26 +236,26 @@
"Password strength must be at least: {{strength}}" : "Wachtwoordsterkte minimale waarde: {{strength}}",
"Please give your new vault a name." : "Voer de naam van je nieuwe kluis in.",
"Repeat vault password" : "Herhaal kluiswachtwoord",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "De deelsleutels hebben een sterkte van 1024 bit; dit kun je later in instellingen wijzigen.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "De deelsleutels zal een sterkte van 1024 bit hebben. Later is dit te wijzigen bij de instellingen.",
"Create vault" : "Creëren kluis",
"Go back to vaults" : "Terug naar kluizen",
"Please input the password for" : "Voer het wachtwoord in voor",
- "Set this vault as default." : "Stel deze kluis als standaard in.",
- "Login automatically to this vault." : "Log automatisch in in deze kluis.",
- "Logout of this vault automatically after: " : "Automatisch van deze kluis uitloggen na:",
+ "Set this vault as the default." : "Stel is als standaard kluis.",
+ "Log into this vault automatically." : "Automatisch in deze kluis uitloggen.",
+ "Log out of this vault automatically after: " : "Automatisch van deze kluis uitloggen na:",
"Decrypt vault" : "Ontsleutel kluis",
- "Seems you lost the vault password and you're unable to login." : "Het lijkt erop dat je het kluiswachtwoord kwijt bent en de niet meer in kunt loggen.",
- "If you want this vault removed you can request removal of the vault here." : "Als je deze kluis verwijderd wilt hebben, kun je de vernietiging van de kluis hier aanvragen.",
- "An admin then accept to the request (or not)" : "Een beheerder accepteert dan deze aanvraag (of niet)",
- "After an admin destroy's this vault, all credentials will be lost" : "Nadat een beheerde deze kluis heeft vernietigd, zijn de inloggegevens verwijderd",
- "Reason to request deletion (optional):" : "Reden voor aanvraag vernietiging (optioneel):",
+ "Seems you lost the vault password and you're unable to log in." : "Het lijkt erop dat je het kluiswachtwoord kwijt bent en niet meer kan inloggen.",
+ "If you want this vault to be removed you can request that here." : "Als je deze kluis verwijderd wilt hebben, kun je de vernietiging van de kluis hier aanvragen.",
+ "An admin then accepts or declines the request" : "Een beheerder zal dan deze aanvraag accepteren of afwijzen",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Nadat een beheerde deze kluis vernietigd zijn alle inloggegevens verloren",
+ "Reason for requesting deletion (optional):" : "Reden voor aanvraag vernietiging (optioneel):",
"Request vault destruction" : "Aanvragen kluisvernietiging",
"Yes, request an admin to destroy this vault" : "Ja, vraag een beheerder om deze kluis te vernietigen",
"Cancel destruction request" : "Annuleren vernietigingsaanvraag",
"Vault destruction requested" : "Kluisvernietiging aangevraagd",
"Request removed" : "Aanvraag verwijderd",
"Destruction request pending" : "Vernietigingsaanvragen in behandeling",
- "Warning! Adding credentials over http can be insecure!" : "Waarschuwing! Toevoegen van inloggegevens over http is riskant!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Waarschuwing! Het toevoegen van inloggegevens over HTTP is niet veilig!",
"Logged in to {{vault_name}}" : "Ingelogd in {{vault_name}}",
"Change vault" : "Wijzigen kluis",
"Deleted credentials" : "Verwijderde inloggegevens",
@@ -262,8 +263,8 @@
"Donate" : "Doneren",
"Someone has shared a credential with you." : "Iemand heeft een inloggegeven met je gedeeld.",
"Click here to request it" : "Klik hier om het aan te vragen",
- "Loading..." : "Laden...",
- "Awwhh.... credential not found. Maybe it expired" : "Uhmmm.... inloggegeven niet gevonden. Misschien verlopen",
+ "Loading…" : "Laden...",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh… inloggegevens niet gevonden. Misschien verliepen ze.",
"Error while saving field" : "Fout bij opslaan veld",
"A Passman item has been created, modified or deleted" : "Er is een Passman object gemaakt, gewijzigd of verwijderd",
"A Passman item has expired" : "Er is een Passman object vervallen",
@@ -293,17 +294,18 @@
"%s shared \"%s\" with you. Click here to accept" : "%s deelde \"%s\" met je. Klik hier om te accepteren",
"%s has declined your share request for \"%s\"." : "%s weigerde je aanvraag om \"%s\" te delen.",
"%s has accepted your share request for \"%s\"." : "%s accepteerde je aanvraag om \"%s\" te delen.",
+ "Passman" : "Passman",
"Unable to get version info" : "Kon de versieinformatie niet ophalen",
"Passman Settings" : "Passman instellingen",
- "Github version:" : "Github versie:",
- "A newer version of passman is available" : "Er is een meer recente versie van passman beschikbaar",
+ "GitHub version:" : "Github versie:",
+ "A newer version of Passman is available" : "Er is een meer recente versie van passman beschikbaar",
"Password sharing" : "Wachtwoord delen",
"Credential mover" : "Inloggegevens verplaatser",
"Vault destruction requests" : "Kluisvernietigingsaanvragen",
"Check for new versions" : "Controleren op nieuwe versies",
"Enable HTTPS check" : "Inschakelen HTTPS controle",
"Disable context menu" : "Deactiveren contextmenu",
- "Disable javascript debugger" : "Uitschakelen javascript debugger",
+ "Disable JavaScript debugger" : "Uitschakelen JavaScript debugger",
"Allow users on this server to share passwords with a link" : "Toestaan dat gebruikers op deze server wachtwoorden delen via een link",
"Allow users on this server to share passwords with other users" : "Toestaan dat gebruikers op deze server wachtwoorden met andere gebruikers delen",
"Move credentials from one account to another" : "Verplaats inloggegevens van het ene account naar een ander",
diff --git a/l10n/pl.js b/l10n/pl.js
index 183f28bd..548e6c62 100644
--- a/l10n/pl.js
+++ b/l10n/pl.js
@@ -3,26 +3,26 @@ OC.L10N.register(
{
"Passwords" : "Hasła",
"Generating sharing keys ( %step / 2)" : "Tworzenie kluczy współdzielonych ( %step / 2)",
- "Incorrect vault password!" : "Złe hasło krypty!",
+ "Incorrect vault password!" : "Nieprawidłowe hasło sejfu!",
"Passwords do not match" : "Hasła nie pasują",
"General" : "Ogólne",
"Custom Fields" : "Pola niestandardowe",
- "Please fill in a label!" : "Proszę wypełnić etykietę!",
- "Please fill in a value!" : "Proszę wypełnić kryptę!",
+ "Please fill in a label." : "Proszę wypełnić etykietę.",
+ "Please fill in a value." : "Proszę wypełnić wartość.",
"Error loading file" : "Błąd ładowania pliku",
- "An error happened during decryption" : "Podczas odszyfrowywania nastąpił błąd",
- "Credential created!" : "Poświadczenie stworzone!",
+ "An error occurred during decryption" : "Podczas odszyfrowywania nastąpił błąd",
+ "Credential created!" : "Poświadczenie utworzone!",
"Credential deleted" : "Poświadczenie skasowane",
"Credential updated" : "Poświadczenie zaktualizowane",
"Credential recovered" : "Poświadczenie odzyskane",
"Credential destroyed" : "Poświadczenie zniszczone",
- "Error downloading file, you probably don't have enough permissions" : "Błąd ściągania pliku, prawdopodobnie nie masz wystarczających uprawnień",
+ "Error downloading file, you probably don't have sufficient permissions" : "Błąd ściągania pliku, prawdopodobnie nie masz wystarczających uprawnień",
"Invalid QR code" : "Błędny kod QR",
"Starting export" : "Zaczynam eksport",
"Decrypting credentials" : "Odszyfrowywanie poświadczeń",
"Done" : "Zrobione",
- "File read successfully!" : "Prawidłowy odczyt pliku!",
- "Follow the following steps to import your file" : "Podążaj za kolejnymi krokami w celu zaimportowania pliku",
+ "File read successfully." : "Prawidłowy odczyt pliku.",
+ "Proceed with the following steps to import your file" : "Podążaj za kolejnymi krokami w celu zaimportowania pliku",
"Credential has no label, skipping" : "Poświadczenie nie ma etykiety, pomijam",
"Adding {{credential}}" : "Dodawanie {{credential}}",
"Added {{credential}}" : "Dodano {{credential}}",
@@ -30,29 +30,29 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Zanalizowano {{num}} poświadczeń, rozpoczynanie importu",
"Importing" : "Importuję",
"Start import" : "Start importu",
- "Select csv file" : "Wybierz plik csv",
- "Parsed {{rows}} lines from csv file" : "Zanalizowano {{rows}} linii z pliku csv",
+ "Select CSV file" : "Wybierz plik CSV",
+ "Parsed {{rows}} lines from CSV file" : "Przeanalizowano {{rows}} linii z pliku CSV",
"Skip first row" : "Pomiń pierwszy wiersz",
"You need to assign the label field before you can start the import." : "Zanim zaczniesz import musisz przypisać etykietę pola.",
- "First 5 lines of the csv are shown." : "Pokazanych jest pierwszych 5 linii pliku csv.",
+ "The first 5 lines of the CSV are shown." : "Wyświetlono pierwsze 5 linii pliku CSV.",
"Assign the proper fields to each column." : "Przypisz właściwe pola każdej kolumnie.",
- "Example imported credential" : "Przykładowe zaimportowane poświadczenia",
- "Missing an importer? Try it with the generic csv importer." : "Brak mechanizmu importującego? Spróbuj użyć ogólnego mechanizmu importującego csv.",
+ "Example of imported credential" : "Przykładowe zaimportowane poświadczenia",
+ "Missing an importer? Try it with the generic CSV importer." : "Brakuje jakiegoś importera? Spróbuj z domyślnym importerem CSV.",
"Go back to importers." : "Wróć do mechanizmów importujących.",
"Revision deleted" : "Rewizja skasowana",
"Revision restored" : "Rewizja przywrócona",
- "Save in passman" : "Zapisz w passmanie",
+ "Save in Passman" : "Zapisz w Passman",
"Settings saved" : "Ustawienia zapisano",
"General settings" : "Ustawienia główne",
- "Password Audit" : "Audyt hasła",
+ "Password audit" : "Audyt hasła",
"Password settings" : "Ustawienia hasła",
"Import credentials" : "Import poświadczeń",
"Export credentials" : "Eksport poświadczeń",
"Sharing" : "Współdzielenie",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Na pewno chcesz wyjść? To USZKODZI twoje poświadczenia",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Na pewno chcesz wyjść? To skasuje wszystkie twoje poświadczenia",
"Your old password is incorrect!" : "Twoje stare hasło jest nieprawidłowe",
- "New passwords do not match!" : "Nowe hasła nie pasują do siebie",
- "Please login with your new vault password" : "Proszę się zalogować swoim nowym hasłem do krypty",
+ "New password does not match!" : "Nowe hasła nie pasują do siebie",
+ "Please log in with your new vault password" : "Zaloguj się do sejfu używając nowego hasła",
"Share with users and groups" : "Udostępnij użytkownikom i grupom",
"Share link" : "Łącze udostępniania",
"Are you sure you want to leave? This will corrupt this credential" : "Na pewno chcesz wyjść? To uszkodzi twoje poświadczenia",
@@ -63,7 +63,7 @@ OC.L10N.register(
"Weak" : "Słabe",
"Good" : "Dobre",
"Strong" : "Silne",
- "Toggle visibility" : "Włącz widoczność",
+ "Toggle visibility" : "Pokaż hasło",
"Copy to clipboard" : "Skopiuj do schowka",
"Copied to clipboard!" : "Skopiowano do schowka!",
"Generate password" : "Wygeneruj hasło",
@@ -72,7 +72,7 @@ OC.L10N.register(
"Complete" : "Zakończ",
"Username" : "Nazwa użytkownika",
"Repeat password" : "Powtórz hasło",
- "Add Tag" : "Dodaj tag",
+ "Add tag" : "Dodaj tag",
"Field label" : "Pole etykiety",
"Field value" : "Pole wartości",
"Choose a file" : "Wybierz plik",
@@ -90,10 +90,10 @@ OC.L10N.register(
"Current OTP settings" : "Obecne ustawienia OTP",
"Issuer" : "Zgłaszający",
"Secret" : "Sekret",
- "Expire date" : "Data wygaśnięcia",
- "No expire date set" : "Brak daty wygasnięcia",
+ "Expiration date" : "Data wygaśnięcia",
+ "No expiration date set" : "Nie ustawiono daty wygaśnięcia",
"Renew interval" : "Interwał odnowienia",
- "Disabled" : "Wyłączono",
+ "Disabled" : "Nieaktywne",
"Day(s)" : "Dzień(-ni)",
"Week(s)" : "Tydzień(-dnie)",
"Month(s)" : "Miesiąc(-ce)",
@@ -109,15 +109,15 @@ OC.L10N.register(
"Require every character type" : "Wymagaj każdego typu znaku",
"Export type" : "Typ eksportu",
"Export" : "Eksport",
- "Enter vault password to confirm export." : "Potwierdź hasło schowka w celu potwierdzenia eksportu.",
- "Rename vault" : "Zmień nazwę krypty",
- "New vault name" : "Nowa nazwa krypty",
+ "Enter vault password to confirm export." : "Wprowadź hasło aby potwierdzić eksport sejfu.",
+ "Rename vault" : "Zmień nazwę sejfu",
+ "New vault name" : "Nowa nazwa sejfu",
"Change" : "Zmień",
"Change vault key" : "Zmień wartość klucza",
- "Old vault password" : "Stare hasło krypty",
- "New vault password" : "Nowa hasło krypty",
- "New vault password repeat" : "Powtórz nowe hasło krypty",
- "Please wait your vault is being updated, do not leave this page." : "Proszę poczekać aż krypta zostanie zaktualizowana, nie opuszczaj tej strony.",
+ "Old vault password" : "Stare hasło sejfu",
+ "New vault password" : "Nowe hasło sejfu",
+ "Repeat new vault password" : "Powtórz nowe hasło sejfu",
+ "Please wait your vault is being updated, do not leave this page." : "Proszę poczekać aż sejf zostanie zaktualizowany, nie opuszczaj tej strony.",
"Processing" : "Przetwarzam",
"Total progress" : "Postęp całowity",
"About Passman" : "O Passmanie",
@@ -126,11 +126,10 @@ OC.L10N.register(
"Bookmarklet" : "Skryptozakładka",
"Save your passwords with 1 click!" : "Zapisz swoje hasło jednym kliknięciem!",
"Drag below button to your bookmark toolbar." : "Przesuń poniższy przycisk na pasek zakładek.",
- "Delete vault" : "Usuń kryptę",
- "Vault password" : "Hasło krypty",
+ "Delete vault" : "Usuń sejf",
+ "Vault password" : "Hasło sejfu",
"This process is irreversible" : "Ten proces jest nieodwracalny",
"Delete my precious passwords" : "Skasuj moje cenne hasła",
- "Deleting {{password}}..." : "Kasuję {{password}}...",
"Yes, delete my precious passwords" : "Tak, skasuj moje cenne hasła",
"Import type" : "Typ importu",
"Import" : "Import",
@@ -142,14 +141,14 @@ OC.L10N.register(
"Save keys" : "Zapisz klucze",
"Generate sharing keys" : "Generuj klucze współdzielone",
"Generating sharing keys" : "Generowanie klucze współdzielone",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Narzędzie do haseł zeskanuje twoje hasło, obliczy średni czas potrzebny do złamania i, jeśli będzie poniżej progu, pokaże im",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Narzędzie przeskanuje Twoje hasła, obliczy czas potrzebny do ich złamania i wyświetli te, które znajdą się poniżej założonego progu",
"Minimum password stength" : "Minimalna siła hasła",
- "Passman scanned your passwords, and here is the result." : "Passman zeskanował twoje hasła i oto wynik:",
- "A total of {{scan_result}} weak credentials." : "W sumie {{scan_result}} mają słabe poświadczenia",
+ "Start scan" : "Rozpocznij skanowanie",
+ "Result" : "Wynik",
+ "A total of {{scan_result}} weak credentials were found." : "Znaleziono {{scan_result}} słabych uprawnień.",
"Score" : "Punktacja",
"Action" : "Akcja",
- "Search users or groups..." : "Szukaj użytkowników lub grup...",
- "Missing users? Only users that have vaults are shown." : "Brakujący użytkownicy? Tylko użytkownicy, którzy posiadają schowki zostali pokazani.",
+ "Missing users? Only users that have vaults are shown." : "Brakuje użytkowników? Zostali pokazani tylko użytkownicy posiadający sejfy.",
"Cyphering" : "Szyfrowanie",
"Uploading" : "Wysyłanie",
"User" : "Użytkownik",
@@ -163,7 +162,6 @@ OC.L10N.register(
"Enable link sharing" : "Włącz link udostępniania",
"Share until date" : "Udostępniaj do daty",
"Expire after views" : "Wygaś po oglądaniu",
- "Click share first" : "Kliknij najpierw udostępnianie",
"Show files" : "Pokaż pliki",
"Details" : "Szczegóły",
"Hide details" : "Ukryj szczegóły",
@@ -188,7 +186,7 @@ OC.L10N.register(
"Base guesses" : "Odgadnięte podstawy",
"Uppercase variations" : "Wariacje wielkich liter",
"l33t-variations" : "Wariacje l33t",
- "Showing revisions of" : "Pokaż rewizję z",
+ "Showing revisions of" : "Rewizje",
"Revision of" : "Rewizja z",
"by" : "przez",
"No revisions found." : "Nie znaleziono rewizji",
@@ -196,23 +194,20 @@ OC.L10N.register(
"Restore revision" : "Przywróć rewizję",
"Delete revision" : "Usuń rewizję",
"Edit credential" : "Edytuj poświadczenie",
- "Create new credential" : "Stwórz nowe poświadczenie",
+ "Create new credential" : "Utwórz nowe poświadczenie",
"Save" : "Zapisz",
"Cancel" : "Anuluj",
"Settings" : "Ustawienia",
"Share credential {{credential}}" : "Udostępnij poświadczenie {{credential}}",
"Unshare" : "Cofnij udostępnienie",
"Showing deleted since" : "Pokazuję skasowane od",
- "All time" : "Przez cały czas",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Pokazuję {{number_filtered}} z {{credential_number}} poświadczeń",
- "Search credential..." : "Szukaj poświadczeń...",
"Account" : "Konto",
"Password" : "Hasło",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Notatki",
- "Expire time" : "Czas wygaśnięcia",
"Changed" : "Zmieniono",
"Created" : "Utworzono",
"Edit" : "Edytuj",
@@ -222,50 +217,38 @@ OC.L10N.register(
"Destroy" : "Zniszcz",
"Use regex" : "Użyj wyrażeń regularnych",
"You have incoming share requests." : "Masz nowe żądania udostępniania.",
- "If you want to put the credential in a other vault," : "Jeśli chcesz zapisać poświadczenie w innej krypcie,",
- "logout of this vault and login to the vault you want the shared credential in." : "wyloguj się z tej krypty i zaloguj do krypty, do której chcesz zapisać poświadczenie",
"Permissions" : "Uprawnienia",
"Received from" : "Otrzymane od",
"Date" : "Data",
"Accept" : "Akceptuj",
"Decline" : "Odrzuć",
"You have {{session_time}} left before logout." : "Do wylogowania pozostało ci {{session_time}}",
- "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Twój schowek został zablokowany na {{time}} ponieaż został wykonanych {{tries}} nieprawidłowych prób zalogowania.",
- "Last accessed" : "Ostatnio dostępny",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Twój sejf został zablokowany na {{time}} ponieaż zostało wykonanych {{tries}} nieprawidłowych prób zalogowania.",
+ "Last accessed" : "Ostatnio używany",
"Never" : "Nigdy",
- "No vaults found, why not create one?" : "Nie znaleziono żadnej krypty, dlaczego by jakiejś nie stworzyć?",
+ "No vaults found, why not create one?" : "Nie znaleziono żadnego sejfu. Dlaczego by jakiegoś nie stworzyć?",
"Password strength must be at least: {{strength}}" : "Siła hasła musi być przynajmniej: {{strength}}",
- "Please give your new vault a name." : "Proszę nadaj nowej krypcie nazwę.",
- "Repeat vault password" : "Powtórz hasło krypty",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Twoje klucze udostępniania będą miały siłę 1024 bitów, co możesz potem zmienić w ustawieniach",
- "Create vault" : "Utwórz kryptę",
- "Go back to vaults" : "Wróć do krypt",
+ "Please give your new vault a name." : "Proszę nadaj nazwę nowemu sejfowi.",
+ "Repeat vault password" : "Powtórz hasło sejfu",
+ "Create vault" : "Utwórz nowy sejf",
+ "Go back to vaults" : "Wróć do sejfów",
"Please input the password for" : "Proszę wprowadzić hasło do",
- "Set this vault as default." : "Ustaw tę kryptę jako domyślną.",
- "Login automatically to this vault." : "Zaloguj automatycznie do tej krypty.",
- "Logout of this vault automatically after: " : "Wyloguj automatycznie z tej krypty po:",
- "Decrypt vault" : "Odszyfruj kryptę",
- "Seems you lost the vault password and you're unable to login." : "Wygląda na to, że zgubiłeś/-aś hasło krypty i nie jesteś w stanie się zalogować.",
- "If you want this vault removed you can request removal of the vault here." : "Jeśli chcesz usunąć tę kryptę możesz tutaj poprosić o jej usunięcie.",
- "An admin then accept to the request (or not)" : "Wtedy administrator zaakceptuje (lub nie) twoją prośbę",
- "After an admin destroy's this vault, all credentials will be lost" : "Kiedy administrator zniszczy tę kryptę wszystkie poświadczenia zostaną utracone",
- "Reason to request deletion (optional):" : "Powód prośby usunięcia (opcjonalnie):",
- "Request vault destruction" : "Poproś o zniszczenie krypty",
- "Yes, request an admin to destroy this vault" : "Tak, poprosiłeś/-aś administratora o zniszczenie tej krypty",
+ "Log into this vault automatically." : "Automatycznie zaloguj do tego sejfu.",
+ "Decrypt vault" : "Odszyfruj sejf",
+ "If you want this vault to be removed you can request that here." : "Jeżeli chcesz usunąć ten sejf możesz to zgłosić tutaj.",
+ "Request vault destruction" : "Poproś o zniszczenie sejfu",
+ "Yes, request an admin to destroy this vault" : "Tak, poproś administratora o zniszczenie tego sejfu",
"Cancel destruction request" : "Anuluj prośbę o zniszczenie",
- "Vault destruction requested" : "Prośba o zniszczenie krypty została złożona",
+ "Vault destruction requested" : "Prośba o zniszczenie sejfu została wysłana",
"Request removed" : "Prośba została usunięta",
- "Destruction request pending" : "Oczekujące prośby o zniszczenie",
- "Warning! Adding credentials over http can be insecure!" : "Uwaga! Dodawanie poświadczeń przez nieszyfrowane połączenie (http) może być niebezpieczne!",
+ "Destruction request pending" : "Oczekuje na zniszczenie",
"Logged in to {{vault_name}}" : "Zalogowano do {{vault_name}}",
- "Change vault" : "Zmień kryptę",
+ "Change vault" : "Zmień sejf",
"Deleted credentials" : "Usunięte poświadczenia",
"Logout" : "Wyloguj",
"Donate" : "Dotuj",
"Someone has shared a credential with you." : "Ktoś udostępnił ci poświadczenia",
"Click here to request it" : "Kliknij to, aby zażądać tego",
- "Loading..." : "Ładuję...",
- "Awwhh.... credential not found. Maybe it expired" : "Ach... Poświadczeń nie znaleziono. Może wygasły?",
"Error while saving field" : "Błąd podczas zapisywania pola",
"A Passman item has been created, modified or deleted" : "Pozycja Passmana została utworzona, zmodyfikowana lub skasowana",
"A Passman item has expired" : "Pozycja Passmana wygasła",
@@ -287,7 +270,7 @@ OC.L10N.register(
"You permanently deleted %1$s" : "Trwale usunięto %1$s",
"The password of %1$s has expired, renew it now." : "Hasło %1$s wygasło, odnów je teraz.",
"%1$s has been shared with %2$s" : "%1$s udostępniono dla %2$s",
- "You received a share request for %1$s from %2$s" : "Otrzymałeś(-łaś) prośbę udostępnienia %1$s od %2$s",
+ "You received a share request for %1$s from %2$s" : "Użytkownik %2$s poprosił Cię o udstępnienie %1$s",
"%s has been shared with a link" : "%s został udostępniony łączem",
"Your credential \"%s\" expired, click here to update the credential." : "Twoje poświadczenie \"%s\" wygasła, kliknij tu, aby je zaktualizować.",
"Remind me later" : "Przypomnij mi później",
@@ -295,24 +278,24 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s udostępnił ci \"%s\". Kliknij, aby zaakceptować",
"%s has declined your share request for \"%s\"." : "%s odrzucił twoją prośbę o udostępnienie \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s zaakceptował twoją prośbę o udostępnienie \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Nie mogę uzyskać informacji o wersji",
"Passman Settings" : "Ustawienia Passmana",
- "Github version:" : "Wersja Github:",
- "A newer version of passman is available" : "Nowsza wersja Passmana jest dostępna",
+ "A newer version of Passman is available" : "Nowsza wersja aplikacji Passman jest dostępna",
"Password sharing" : "Współdzielenie hasła",
"Credential mover" : "Przenoszenie poświadczeń",
- "Vault destruction requests" : "Prośby o zniszczenie krypty",
- "Check for new versions" : "Sprawdź czy jest nowsza wersja",
+ "Vault destruction requests" : "Prośby o zniszczenie sejfu",
+ "Check for new versions" : "Sprawdzaj czy jest nowsza wersja",
"Enable HTTPS check" : "Włącz sprawdzenie HTTPS",
"Disable context menu" : "Wyłącz menu kontekstowe",
- "Disable javascript debugger" : "Wyłącz debugger JavaScript",
+ "Disable JavaScript debugger" : "Wyłącz debugger JavaScript",
"Allow users on this server to share passwords with a link" : "Zezwól użytkownikom tego serwera na udostępnianie haseł łączem",
"Allow users on this server to share passwords with other users" : "Zezwól użytkownikom tego serwera na udostępnianie haseł innym użytkownikom",
- "Move credentials from one account to another" : "Przesuń poświadczenia z jednego konta na drugie",
+ "Move credentials from one account to another" : "Przenieś poświadczenia pomiędzy kontami",
"Source account" : "Konto źródłowe",
"Destination account" : "Konto docelowe",
"Credentials moved!" : "Poświadczenia przeniesiono!",
- "Requests to destroy vault" : "Prośby o zniszczenie krypty",
+ "Requests to destroy vault" : "Prośby o zniszczenie sejfu",
"Request ID" : "Identyfikator prośby",
"Requested by" : "Prośba złożona przez",
"Reason" : "Powód",
@@ -322,4 +305,4 @@ OC.L10N.register(
"Dismiss" : "Odrzuć",
"seconds ago" : "sekund temu"
},
-"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
+"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/l10n/pl.json b/l10n/pl.json
index dd68da21..5f30fbee 100644
--- a/l10n/pl.json
+++ b/l10n/pl.json
@@ -1,26 +1,26 @@
{ "translations": {
"Passwords" : "Hasła",
"Generating sharing keys ( %step / 2)" : "Tworzenie kluczy współdzielonych ( %step / 2)",
- "Incorrect vault password!" : "Złe hasło krypty!",
+ "Incorrect vault password!" : "Nieprawidłowe hasło sejfu!",
"Passwords do not match" : "Hasła nie pasują",
"General" : "Ogólne",
"Custom Fields" : "Pola niestandardowe",
- "Please fill in a label!" : "Proszę wypełnić etykietę!",
- "Please fill in a value!" : "Proszę wypełnić kryptę!",
+ "Please fill in a label." : "Proszę wypełnić etykietę.",
+ "Please fill in a value." : "Proszę wypełnić wartość.",
"Error loading file" : "Błąd ładowania pliku",
- "An error happened during decryption" : "Podczas odszyfrowywania nastąpił błąd",
- "Credential created!" : "Poświadczenie stworzone!",
+ "An error occurred during decryption" : "Podczas odszyfrowywania nastąpił błąd",
+ "Credential created!" : "Poświadczenie utworzone!",
"Credential deleted" : "Poświadczenie skasowane",
"Credential updated" : "Poświadczenie zaktualizowane",
"Credential recovered" : "Poświadczenie odzyskane",
"Credential destroyed" : "Poświadczenie zniszczone",
- "Error downloading file, you probably don't have enough permissions" : "Błąd ściągania pliku, prawdopodobnie nie masz wystarczających uprawnień",
+ "Error downloading file, you probably don't have sufficient permissions" : "Błąd ściągania pliku, prawdopodobnie nie masz wystarczających uprawnień",
"Invalid QR code" : "Błędny kod QR",
"Starting export" : "Zaczynam eksport",
"Decrypting credentials" : "Odszyfrowywanie poświadczeń",
"Done" : "Zrobione",
- "File read successfully!" : "Prawidłowy odczyt pliku!",
- "Follow the following steps to import your file" : "Podążaj za kolejnymi krokami w celu zaimportowania pliku",
+ "File read successfully." : "Prawidłowy odczyt pliku.",
+ "Proceed with the following steps to import your file" : "Podążaj za kolejnymi krokami w celu zaimportowania pliku",
"Credential has no label, skipping" : "Poświadczenie nie ma etykiety, pomijam",
"Adding {{credential}}" : "Dodawanie {{credential}}",
"Added {{credential}}" : "Dodano {{credential}}",
@@ -28,29 +28,29 @@
"Parsed {{num}} credentials, starting to import" : "Zanalizowano {{num}} poświadczeń, rozpoczynanie importu",
"Importing" : "Importuję",
"Start import" : "Start importu",
- "Select csv file" : "Wybierz plik csv",
- "Parsed {{rows}} lines from csv file" : "Zanalizowano {{rows}} linii z pliku csv",
+ "Select CSV file" : "Wybierz plik CSV",
+ "Parsed {{rows}} lines from CSV file" : "Przeanalizowano {{rows}} linii z pliku CSV",
"Skip first row" : "Pomiń pierwszy wiersz",
"You need to assign the label field before you can start the import." : "Zanim zaczniesz import musisz przypisać etykietę pola.",
- "First 5 lines of the csv are shown." : "Pokazanych jest pierwszych 5 linii pliku csv.",
+ "The first 5 lines of the CSV are shown." : "Wyświetlono pierwsze 5 linii pliku CSV.",
"Assign the proper fields to each column." : "Przypisz właściwe pola każdej kolumnie.",
- "Example imported credential" : "Przykładowe zaimportowane poświadczenia",
- "Missing an importer? Try it with the generic csv importer." : "Brak mechanizmu importującego? Spróbuj użyć ogólnego mechanizmu importującego csv.",
+ "Example of imported credential" : "Przykładowe zaimportowane poświadczenia",
+ "Missing an importer? Try it with the generic CSV importer." : "Brakuje jakiegoś importera? Spróbuj z domyślnym importerem CSV.",
"Go back to importers." : "Wróć do mechanizmów importujących.",
"Revision deleted" : "Rewizja skasowana",
"Revision restored" : "Rewizja przywrócona",
- "Save in passman" : "Zapisz w passmanie",
+ "Save in Passman" : "Zapisz w Passman",
"Settings saved" : "Ustawienia zapisano",
"General settings" : "Ustawienia główne",
- "Password Audit" : "Audyt hasła",
+ "Password audit" : "Audyt hasła",
"Password settings" : "Ustawienia hasła",
"Import credentials" : "Import poświadczeń",
"Export credentials" : "Eksport poświadczeń",
"Sharing" : "Współdzielenie",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Na pewno chcesz wyjść? To USZKODZI twoje poświadczenia",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Na pewno chcesz wyjść? To skasuje wszystkie twoje poświadczenia",
"Your old password is incorrect!" : "Twoje stare hasło jest nieprawidłowe",
- "New passwords do not match!" : "Nowe hasła nie pasują do siebie",
- "Please login with your new vault password" : "Proszę się zalogować swoim nowym hasłem do krypty",
+ "New password does not match!" : "Nowe hasła nie pasują do siebie",
+ "Please log in with your new vault password" : "Zaloguj się do sejfu używając nowego hasła",
"Share with users and groups" : "Udostępnij użytkownikom i grupom",
"Share link" : "Łącze udostępniania",
"Are you sure you want to leave? This will corrupt this credential" : "Na pewno chcesz wyjść? To uszkodzi twoje poświadczenia",
@@ -61,7 +61,7 @@
"Weak" : "Słabe",
"Good" : "Dobre",
"Strong" : "Silne",
- "Toggle visibility" : "Włącz widoczność",
+ "Toggle visibility" : "Pokaż hasło",
"Copy to clipboard" : "Skopiuj do schowka",
"Copied to clipboard!" : "Skopiowano do schowka!",
"Generate password" : "Wygeneruj hasło",
@@ -70,7 +70,7 @@
"Complete" : "Zakończ",
"Username" : "Nazwa użytkownika",
"Repeat password" : "Powtórz hasło",
- "Add Tag" : "Dodaj tag",
+ "Add tag" : "Dodaj tag",
"Field label" : "Pole etykiety",
"Field value" : "Pole wartości",
"Choose a file" : "Wybierz plik",
@@ -88,10 +88,10 @@
"Current OTP settings" : "Obecne ustawienia OTP",
"Issuer" : "Zgłaszający",
"Secret" : "Sekret",
- "Expire date" : "Data wygaśnięcia",
- "No expire date set" : "Brak daty wygasnięcia",
+ "Expiration date" : "Data wygaśnięcia",
+ "No expiration date set" : "Nie ustawiono daty wygaśnięcia",
"Renew interval" : "Interwał odnowienia",
- "Disabled" : "Wyłączono",
+ "Disabled" : "Nieaktywne",
"Day(s)" : "Dzień(-ni)",
"Week(s)" : "Tydzień(-dnie)",
"Month(s)" : "Miesiąc(-ce)",
@@ -107,15 +107,15 @@
"Require every character type" : "Wymagaj każdego typu znaku",
"Export type" : "Typ eksportu",
"Export" : "Eksport",
- "Enter vault password to confirm export." : "Potwierdź hasło schowka w celu potwierdzenia eksportu.",
- "Rename vault" : "Zmień nazwę krypty",
- "New vault name" : "Nowa nazwa krypty",
+ "Enter vault password to confirm export." : "Wprowadź hasło aby potwierdzić eksport sejfu.",
+ "Rename vault" : "Zmień nazwę sejfu",
+ "New vault name" : "Nowa nazwa sejfu",
"Change" : "Zmień",
"Change vault key" : "Zmień wartość klucza",
- "Old vault password" : "Stare hasło krypty",
- "New vault password" : "Nowa hasło krypty",
- "New vault password repeat" : "Powtórz nowe hasło krypty",
- "Please wait your vault is being updated, do not leave this page." : "Proszę poczekać aż krypta zostanie zaktualizowana, nie opuszczaj tej strony.",
+ "Old vault password" : "Stare hasło sejfu",
+ "New vault password" : "Nowe hasło sejfu",
+ "Repeat new vault password" : "Powtórz nowe hasło sejfu",
+ "Please wait your vault is being updated, do not leave this page." : "Proszę poczekać aż sejf zostanie zaktualizowany, nie opuszczaj tej strony.",
"Processing" : "Przetwarzam",
"Total progress" : "Postęp całowity",
"About Passman" : "O Passmanie",
@@ -124,11 +124,10 @@
"Bookmarklet" : "Skryptozakładka",
"Save your passwords with 1 click!" : "Zapisz swoje hasło jednym kliknięciem!",
"Drag below button to your bookmark toolbar." : "Przesuń poniższy przycisk na pasek zakładek.",
- "Delete vault" : "Usuń kryptę",
- "Vault password" : "Hasło krypty",
+ "Delete vault" : "Usuń sejf",
+ "Vault password" : "Hasło sejfu",
"This process is irreversible" : "Ten proces jest nieodwracalny",
"Delete my precious passwords" : "Skasuj moje cenne hasła",
- "Deleting {{password}}..." : "Kasuję {{password}}...",
"Yes, delete my precious passwords" : "Tak, skasuj moje cenne hasła",
"Import type" : "Typ importu",
"Import" : "Import",
@@ -140,14 +139,14 @@
"Save keys" : "Zapisz klucze",
"Generate sharing keys" : "Generuj klucze współdzielone",
"Generating sharing keys" : "Generowanie klucze współdzielone",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Narzędzie do haseł zeskanuje twoje hasło, obliczy średni czas potrzebny do złamania i, jeśli będzie poniżej progu, pokaże im",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Narzędzie przeskanuje Twoje hasła, obliczy czas potrzebny do ich złamania i wyświetli te, które znajdą się poniżej założonego progu",
"Minimum password stength" : "Minimalna siła hasła",
- "Passman scanned your passwords, and here is the result." : "Passman zeskanował twoje hasła i oto wynik:",
- "A total of {{scan_result}} weak credentials." : "W sumie {{scan_result}} mają słabe poświadczenia",
+ "Start scan" : "Rozpocznij skanowanie",
+ "Result" : "Wynik",
+ "A total of {{scan_result}} weak credentials were found." : "Znaleziono {{scan_result}} słabych uprawnień.",
"Score" : "Punktacja",
"Action" : "Akcja",
- "Search users or groups..." : "Szukaj użytkowników lub grup...",
- "Missing users? Only users that have vaults are shown." : "Brakujący użytkownicy? Tylko użytkownicy, którzy posiadają schowki zostali pokazani.",
+ "Missing users? Only users that have vaults are shown." : "Brakuje użytkowników? Zostali pokazani tylko użytkownicy posiadający sejfy.",
"Cyphering" : "Szyfrowanie",
"Uploading" : "Wysyłanie",
"User" : "Użytkownik",
@@ -161,7 +160,6 @@
"Enable link sharing" : "Włącz link udostępniania",
"Share until date" : "Udostępniaj do daty",
"Expire after views" : "Wygaś po oglądaniu",
- "Click share first" : "Kliknij najpierw udostępnianie",
"Show files" : "Pokaż pliki",
"Details" : "Szczegóły",
"Hide details" : "Ukryj szczegóły",
@@ -186,7 +184,7 @@
"Base guesses" : "Odgadnięte podstawy",
"Uppercase variations" : "Wariacje wielkich liter",
"l33t-variations" : "Wariacje l33t",
- "Showing revisions of" : "Pokaż rewizję z",
+ "Showing revisions of" : "Rewizje",
"Revision of" : "Rewizja z",
"by" : "przez",
"No revisions found." : "Nie znaleziono rewizji",
@@ -194,23 +192,20 @@
"Restore revision" : "Przywróć rewizję",
"Delete revision" : "Usuń rewizję",
"Edit credential" : "Edytuj poświadczenie",
- "Create new credential" : "Stwórz nowe poświadczenie",
+ "Create new credential" : "Utwórz nowe poświadczenie",
"Save" : "Zapisz",
"Cancel" : "Anuluj",
"Settings" : "Ustawienia",
"Share credential {{credential}}" : "Udostępnij poświadczenie {{credential}}",
"Unshare" : "Cofnij udostępnienie",
"Showing deleted since" : "Pokazuję skasowane od",
- "All time" : "Przez cały czas",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Pokazuję {{number_filtered}} z {{credential_number}} poświadczeń",
- "Search credential..." : "Szukaj poświadczeń...",
"Account" : "Konto",
"Password" : "Hasło",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Notatki",
- "Expire time" : "Czas wygaśnięcia",
"Changed" : "Zmieniono",
"Created" : "Utworzono",
"Edit" : "Edytuj",
@@ -220,50 +215,38 @@
"Destroy" : "Zniszcz",
"Use regex" : "Użyj wyrażeń regularnych",
"You have incoming share requests." : "Masz nowe żądania udostępniania.",
- "If you want to put the credential in a other vault," : "Jeśli chcesz zapisać poświadczenie w innej krypcie,",
- "logout of this vault and login to the vault you want the shared credential in." : "wyloguj się z tej krypty i zaloguj do krypty, do której chcesz zapisać poświadczenie",
"Permissions" : "Uprawnienia",
"Received from" : "Otrzymane od",
"Date" : "Data",
"Accept" : "Akceptuj",
"Decline" : "Odrzuć",
"You have {{session_time}} left before logout." : "Do wylogowania pozostało ci {{session_time}}",
- "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Twój schowek został zablokowany na {{time}} ponieaż został wykonanych {{tries}} nieprawidłowych prób zalogowania.",
- "Last accessed" : "Ostatnio dostępny",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Twój sejf został zablokowany na {{time}} ponieaż zostało wykonanych {{tries}} nieprawidłowych prób zalogowania.",
+ "Last accessed" : "Ostatnio używany",
"Never" : "Nigdy",
- "No vaults found, why not create one?" : "Nie znaleziono żadnej krypty, dlaczego by jakiejś nie stworzyć?",
+ "No vaults found, why not create one?" : "Nie znaleziono żadnego sejfu. Dlaczego by jakiegoś nie stworzyć?",
"Password strength must be at least: {{strength}}" : "Siła hasła musi być przynajmniej: {{strength}}",
- "Please give your new vault a name." : "Proszę nadaj nowej krypcie nazwę.",
- "Repeat vault password" : "Powtórz hasło krypty",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Twoje klucze udostępniania będą miały siłę 1024 bitów, co możesz potem zmienić w ustawieniach",
- "Create vault" : "Utwórz kryptę",
- "Go back to vaults" : "Wróć do krypt",
+ "Please give your new vault a name." : "Proszę nadaj nazwę nowemu sejfowi.",
+ "Repeat vault password" : "Powtórz hasło sejfu",
+ "Create vault" : "Utwórz nowy sejf",
+ "Go back to vaults" : "Wróć do sejfów",
"Please input the password for" : "Proszę wprowadzić hasło do",
- "Set this vault as default." : "Ustaw tę kryptę jako domyślną.",
- "Login automatically to this vault." : "Zaloguj automatycznie do tej krypty.",
- "Logout of this vault automatically after: " : "Wyloguj automatycznie z tej krypty po:",
- "Decrypt vault" : "Odszyfruj kryptę",
- "Seems you lost the vault password and you're unable to login." : "Wygląda na to, że zgubiłeś/-aś hasło krypty i nie jesteś w stanie się zalogować.",
- "If you want this vault removed you can request removal of the vault here." : "Jeśli chcesz usunąć tę kryptę możesz tutaj poprosić o jej usunięcie.",
- "An admin then accept to the request (or not)" : "Wtedy administrator zaakceptuje (lub nie) twoją prośbę",
- "After an admin destroy's this vault, all credentials will be lost" : "Kiedy administrator zniszczy tę kryptę wszystkie poświadczenia zostaną utracone",
- "Reason to request deletion (optional):" : "Powód prośby usunięcia (opcjonalnie):",
- "Request vault destruction" : "Poproś o zniszczenie krypty",
- "Yes, request an admin to destroy this vault" : "Tak, poprosiłeś/-aś administratora o zniszczenie tej krypty",
+ "Log into this vault automatically." : "Automatycznie zaloguj do tego sejfu.",
+ "Decrypt vault" : "Odszyfruj sejf",
+ "If you want this vault to be removed you can request that here." : "Jeżeli chcesz usunąć ten sejf możesz to zgłosić tutaj.",
+ "Request vault destruction" : "Poproś o zniszczenie sejfu",
+ "Yes, request an admin to destroy this vault" : "Tak, poproś administratora o zniszczenie tego sejfu",
"Cancel destruction request" : "Anuluj prośbę o zniszczenie",
- "Vault destruction requested" : "Prośba o zniszczenie krypty została złożona",
+ "Vault destruction requested" : "Prośba o zniszczenie sejfu została wysłana",
"Request removed" : "Prośba została usunięta",
- "Destruction request pending" : "Oczekujące prośby o zniszczenie",
- "Warning! Adding credentials over http can be insecure!" : "Uwaga! Dodawanie poświadczeń przez nieszyfrowane połączenie (http) może być niebezpieczne!",
+ "Destruction request pending" : "Oczekuje na zniszczenie",
"Logged in to {{vault_name}}" : "Zalogowano do {{vault_name}}",
- "Change vault" : "Zmień kryptę",
+ "Change vault" : "Zmień sejf",
"Deleted credentials" : "Usunięte poświadczenia",
"Logout" : "Wyloguj",
"Donate" : "Dotuj",
"Someone has shared a credential with you." : "Ktoś udostępnił ci poświadczenia",
"Click here to request it" : "Kliknij to, aby zażądać tego",
- "Loading..." : "Ładuję...",
- "Awwhh.... credential not found. Maybe it expired" : "Ach... Poświadczeń nie znaleziono. Może wygasły?",
"Error while saving field" : "Błąd podczas zapisywania pola",
"A Passman item has been created, modified or deleted" : "Pozycja Passmana została utworzona, zmodyfikowana lub skasowana",
"A Passman item has expired" : "Pozycja Passmana wygasła",
@@ -285,7 +268,7 @@
"You permanently deleted %1$s" : "Trwale usunięto %1$s",
"The password of %1$s has expired, renew it now." : "Hasło %1$s wygasło, odnów je teraz.",
"%1$s has been shared with %2$s" : "%1$s udostępniono dla %2$s",
- "You received a share request for %1$s from %2$s" : "Otrzymałeś(-łaś) prośbę udostępnienia %1$s od %2$s",
+ "You received a share request for %1$s from %2$s" : "Użytkownik %2$s poprosił Cię o udstępnienie %1$s",
"%s has been shared with a link" : "%s został udostępniony łączem",
"Your credential \"%s\" expired, click here to update the credential." : "Twoje poświadczenie \"%s\" wygasła, kliknij tu, aby je zaktualizować.",
"Remind me later" : "Przypomnij mi później",
@@ -293,24 +276,24 @@
"%s shared \"%s\" with you. Click here to accept" : "%s udostępnił ci \"%s\". Kliknij, aby zaakceptować",
"%s has declined your share request for \"%s\"." : "%s odrzucił twoją prośbę o udostępnienie \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s zaakceptował twoją prośbę o udostępnienie \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Nie mogę uzyskać informacji o wersji",
"Passman Settings" : "Ustawienia Passmana",
- "Github version:" : "Wersja Github:",
- "A newer version of passman is available" : "Nowsza wersja Passmana jest dostępna",
+ "A newer version of Passman is available" : "Nowsza wersja aplikacji Passman jest dostępna",
"Password sharing" : "Współdzielenie hasła",
"Credential mover" : "Przenoszenie poświadczeń",
- "Vault destruction requests" : "Prośby o zniszczenie krypty",
- "Check for new versions" : "Sprawdź czy jest nowsza wersja",
+ "Vault destruction requests" : "Prośby o zniszczenie sejfu",
+ "Check for new versions" : "Sprawdzaj czy jest nowsza wersja",
"Enable HTTPS check" : "Włącz sprawdzenie HTTPS",
"Disable context menu" : "Wyłącz menu kontekstowe",
- "Disable javascript debugger" : "Wyłącz debugger JavaScript",
+ "Disable JavaScript debugger" : "Wyłącz debugger JavaScript",
"Allow users on this server to share passwords with a link" : "Zezwól użytkownikom tego serwera na udostępnianie haseł łączem",
"Allow users on this server to share passwords with other users" : "Zezwól użytkownikom tego serwera na udostępnianie haseł innym użytkownikom",
- "Move credentials from one account to another" : "Przesuń poświadczenia z jednego konta na drugie",
+ "Move credentials from one account to another" : "Przenieś poświadczenia pomiędzy kontami",
"Source account" : "Konto źródłowe",
"Destination account" : "Konto docelowe",
"Credentials moved!" : "Poświadczenia przeniesiono!",
- "Requests to destroy vault" : "Prośby o zniszczenie krypty",
+ "Requests to destroy vault" : "Prośby o zniszczenie sejfu",
"Request ID" : "Identyfikator prośby",
"Requested by" : "Prośba złożona przez",
"Reason" : "Powód",
@@ -319,5 +302,5 @@
"Saving..." : "Zapisywanie...",
"Dismiss" : "Odrzuć",
"seconds ago" : "sekund temu"
-},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
+},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js
index 41ebe232..fb2cd752 100644
--- a/l10n/pt_BR.js
+++ b/l10n/pt_BR.js
@@ -7,52 +7,52 @@ OC.L10N.register(
"Passwords do not match" : "As senhas não coincidem",
"General" : "Geral",
"Custom Fields" : "Campos personalizados",
- "Please fill in a label!" : "Preencha a etiqueta!",
- "Please fill in a value!" : "Preencha o valor!",
+ "Please fill in a label." : "Por favor, preencha uma etiqueta.",
+ "Please fill in a value." : "Por favor, preencha um valor.",
"Error loading file" : "Erro ao carregar o arquivo",
- "An error happened during decryption" : "Ocorreu um erro durante a descriptografia",
+ "An error occurred during decryption" : "Um erro ocorreu durante a descriptografia",
"Credential created!" : "Credencial criada!",
"Credential deleted" : "Credential excluída",
"Credential updated" : "Credencial atualizada",
"Credential recovered" : "Credencial recuperada",
"Credential destroyed" : "Credencial destruida",
- "Error downloading file, you probably don't have enough permissions" : "Erro ao baixar o arquivo, você provavelmente não tem permissões suficientes",
+ "Error downloading file, you probably don't have sufficient permissions" : "Erro ao baixar o arquivo, você provavelmente não possui permissões suficientes",
"Invalid QR code" : "Código QR inválido",
"Starting export" : "Iniciando a exportação",
"Decrypting credentials" : "Credenciais de descriptografia",
"Done" : "Concluído",
- "File read successfully!" : "Arquivo lido!",
- "Follow the following steps to import your file" : "Siga as etapas a seguir para importar o arquivo",
+ "File read successfully." : "Arquivo lido com sucesso.",
+ "Proceed with the following steps to import your file" : "Prossiga com as seguintes etapas para importar seu arquivo",
"Credential has no label, skipping" : "Credencial não tem etiqueta, ignorando",
"Adding {{credential}}" : "Adicionando {{credential}}",
"Added {{credential}}" : "Adicionada {{credential}} ",
- "Skipping credential, missing label on line {{line}}" : "Ignorando credencial, falta rótulo online {{line}}",
+ "Skipping credential, missing label on line {{line}}" : "Ignorando credencial, falta etiqueta online {{line}}",
"Parsed {{num}} credentials, starting to import" : "Credenciais {{num}} analisadas, começando a importar",
"Importing" : "Importando",
"Start import" : "Iniciar importação",
- "Select csv file" : "Selecionar arquivo csv",
- "Parsed {{rows}} lines from csv file" : "Analisadas {{rows}} linhas do arquivo csv",
+ "Select CSV file" : "Selecione um arquivo CSV",
+ "Parsed {{rows}} lines from CSV file" : "{{rows}} linhas analisadas do arquivo CSV",
"Skip first row" : "Ignorar a primeira linha",
"You need to assign the label field before you can start the import." : "É necessário atribuir o campo de etiqueta para poder iniciar a importação.",
- "First 5 lines of the csv are shown." : "As primeiras 5 linhas do csv são mostradas.",
+ "The first 5 lines of the CSV are shown." : "As primeiras 5 linhas do CSV são mostradas.",
"Assign the proper fields to each column." : "Atribua os campos apropriados a cada coluna.",
- "Example imported credential" : "Exemplo de credencial importada",
- "Missing an importer? Try it with the generic csv importer." : "Falta um importador? Experimente com o importador csv genérico.",
+ "Example of imported credential" : "Exemplo de credencial importada",
+ "Missing an importer? Try it with the generic CSV importer." : "Não tem um importador? Experimente o importador CSV genérico.",
"Go back to importers." : "Volte para importadores.",
"Revision deleted" : "Revisão excluída",
"Revision restored" : "Revisão restaurada",
- "Save in passman" : "Salvar em passman",
+ "Save in Passman" : "Salvar em Passman",
"Settings saved" : "Configurações salvas",
"General settings" : "Configurações Gerais",
- "Password Audit" : "Auditoria de senha",
+ "Password audit" : "Auditoria de senha",
"Password settings" : "Configurações de senha",
"Import credentials" : "Importar credenciais",
"Export credentials" : "Exportar credenciais",
"Sharing" : "Compartilhando",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Você tem certeza de que quer sair? Isso VAI corromper todas as suas credenciais",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Você tem certeza de que quer sair? Isso irá destruir todas as suas credenciais",
"Your old password is incorrect!" : "Sua senha antiga está incorreta!",
- "New passwords do not match!" : "As novas senhas não coincidem!",
- "Please login with your new vault password" : "Faça login com sua nova senha de cofre",
+ "New password does not match!" : "Nova senha não confere!",
+ "Please log in with your new vault password" : "Faça o login com sua nova senha do cofre",
"Share with users and groups" : "Compartilhar com usuários e grupos",
"Share link" : "Compartilhar link",
"Are you sure you want to leave? This will corrupt this credential" : "Você tem certeza de que quer sair? Isso vai corromper essa credencial",
@@ -71,8 +71,8 @@ OC.L10N.register(
"Password copied to clipboard!" : "Senha copiada para a área de transferência!",
"Complete" : "Completo",
"Username" : "Nome do usuário",
- "Repeat password" : "Repita a senha",
- "Add Tag" : "Adicionar etiqueta",
+ "Repeat password" : "Repetir a senha",
+ "Add tag" : "Adicionar rótulo",
"Field label" : "Campo etiqueta",
"Field value" : "Campo valor",
"Choose a file" : "Escolher um arquivo",
@@ -90,8 +90,8 @@ OC.L10N.register(
"Current OTP settings" : "Configurações OTP atuais",
"Issuer" : "Emissor",
"Secret" : "Segredo",
- "Expire date" : "Data de expiração",
- "No expire date set" : "Nenhuma data de expiração definida",
+ "Expiration date" : "Data de expiração",
+ "No expiration date set" : "Não há data de expiração definida",
"Renew interval" : "Intervalo de renovação",
"Disabled" : "Desativado",
"Day(s)" : "Dia(s)",
@@ -100,7 +100,7 @@ OC.L10N.register(
"Year(s)" : "Ano(s)",
"Password generation settings" : "Configurações de geração de senha",
"Password length" : "Comprimento da senha",
- "Minimum amount of digits" : "Tamanho mínimo",
+ "Minimum amount of digits" : "Quantidade mínima de dígitos",
"Use uppercase letters" : "Usar letras maiúsculas",
"Use lowercase letters" : "Usar letras minúsculas",
"Use numbers" : "Usar números",
@@ -116,7 +116,7 @@ OC.L10N.register(
"Change vault key" : "Alterar a chave do cofre",
"Old vault password" : "Senha antiga do cofre",
"New vault password" : "Nova senha do cofre",
- "New vault password repeat" : "Repetição da nova senha do cofre",
+ "Repeat new vault password" : "Repita a nova senha do cofre",
"Please wait your vault is being updated, do not leave this page." : "Por favor espere até que seu cofre seja atualizado. Não saia desta página.",
"Processing" : "Processando",
"Total progress" : "Progresso total",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Vault password" : "Senha do cofre",
"This process is irreversible" : "Este processo é irreversível",
"Delete my precious passwords" : "Excluir minhas preciosas senhas",
- "Deleting {{password}}..." : "Excluindo {{password}}...",
+ "Deleting {{password}}…" : "Excluíndo {{password}}…",
"Yes, delete my precious passwords" : "Sim, exclua minhas preciosas senhas",
"Import type" : "Tipo de importação",
"Import" : "Importar",
@@ -142,13 +142,14 @@ OC.L10N.register(
"Save keys" : "Salvar chaves",
"Generate sharing keys" : "Gerar chaves de compartilhamento",
"Generating sharing keys" : "Gerando chaves de compartilhamento",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "A ferramenta de senha digitalizará sua senha, calculará o tempo médio de crack e, se estiver abaixo do limite, a mostrará",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "A ferramenta de senha irá escanear sua senha, calcular o tempo médio para quebrá-la e listar aquelas que estão abaixo do limiar",
"Minimum password stength" : "Força mínima da senha",
- "Passman scanned your passwords, and here is the result." : "O Passman digitalizou suas senhas e aqui está o resultado.",
- "A total of {{scan_result}} weak credentials." : "Um total de {{scan_result}} credenciais fracas.",
+ "Start scan" : "Iniciar escaneamento",
+ "Result" : "Resultado",
+ "A total of {{scan_result}} weak credentials were found." : "{{scan_result}} credenciais fracas foram encontradas.",
"Score" : "Pontuação",
"Action" : "Ação",
- "Search users or groups..." : "Pesquisar usuários ou grupos...",
+ "Search users or groups…" : "Procurar usuários ou grupos...",
"Missing users? Only users that have vaults are shown." : "Usuários ausentes? Somente os usuários que têm cofres são mostrados.",
"Cyphering" : "Cifrando",
"Uploading" : "Enviando",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Ativar o compartilhamento de links",
"Share until date" : "Compartilhar até a data",
"Expire after views" : "Expirar após visualizações",
- "Click share first" : "Clique em compartilhar primeiro",
+ "Click Share first" : "Clique em Compartilhar primeiro",
"Show files" : "Mostrar arquivos",
"Details" : "Detalhes",
"Hide details" : "Ocultar detalhes",
@@ -180,7 +181,7 @@ OC.L10N.register(
"Match sequence" : "Sequência de correspondência",
"See match sequence" : "Ver sequência de correspondência",
"Pattern" : "Padrão",
- "Matched word" : "Palavra combinada",
+ "Matched word" : "Palavra correspondente",
"Dictionary name" : "Nome do dicionário",
"Rank" : "Classificação",
"Reversed" : "Invertido",
@@ -203,16 +204,16 @@ OC.L10N.register(
"Share credential {{credential}}" : "Compartilhar credencial {{credential}} ",
"Unshare" : "Descompartilhar",
"Showing deleted since" : "Mostrar excluídos desde",
- "All time" : "Todo o tempo",
+ "Beginning" : "Início",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciais",
- "Search credential..." : "Pesquisar credenciais",
+ "Search for credential…" : "Procurar por credenciais...",
"Account" : "Conta",
"Password" : "Senha",
"OTP" : "OTP",
- "E-mail" : "Email",
+ "E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Anotações",
- "Expire time" : "Data de expiração",
+ "Expiry time" : "Tempo para expiração",
"Changed" : "Alterado",
"Created" : "Criado",
"Edit" : "Editar",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Destruir",
"Use regex" : "Usar regex",
"You have incoming share requests." : "Você tem solicitações de compartilhamento.",
- "If you want to put the credential in a other vault," : "Se você quiser colocar a credencial em um outro cofre,",
- "logout of this vault and login to the vault you want the shared credential in." : "efetue o logout deste cofre e faça login no cofre ao qual você deseja que a credencial seja compartilhada.",
+ "If you want to put the credential in another vault," : "Se você quiser colocar a credencial em outro cofre,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Saia deste cofre e entre no qual deseja a credencial compartilhada.",
"Permissions" : "Permissões",
"Received from" : "Recebido de",
"Date" : "Data",
@@ -237,26 +238,26 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "A força da senha deve ser pelo menos: {{strength}}",
"Please give your new vault a name." : "Por favor, dê um nome ao seu novo cofre.",
"Repeat vault password" : "Repita a senha do cofre",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Sua chave de compartilhamento terá um grau de 1024 bits, que você pode alterar mais tarde nas configurações.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Sua chave de compartilhamento terá uma força de 1024 bits, que você pode alterar em Configurações mais tarde.",
"Create vault" : "Criar cofre",
"Go back to vaults" : "Voltar para os cofres",
"Please input the password for" : "Por favor entre uma senha para",
- "Set this vault as default." : "Configure esse cofre como padrão.",
- "Login automatically to this vault." : "Entrar automaticamente neste cofre.",
- "Logout of this vault automatically after: " : "Efetue o logout desta solicitação logo após:",
+ "Set this vault as the default." : "Defina este cofre como padrão.",
+ "Log into this vault automatically." : "Entre neste cofre automaticamente.",
+ "Log out of this vault automatically after: " : "Saia desse cofre automaticamente após:",
"Decrypt vault" : "Descriptografar o cofre",
- "Seems you lost the vault password and you're unable to login." : "Parece que você perdeu a senha do cofre e não consegue fazer login.",
- "If you want this vault removed you can request removal of the vault here." : "Se você quiser excluir esse cofre, você pode solicitar a exclusão aqui.",
- "An admin then accept to the request (or not)" : "Um administrador então aceita o pedido (ou não)",
- "After an admin destroy's this vault, all credentials will be lost" : "Depois que um administrador destruir este cofre, todas as credenciais serão perdidas",
- "Reason to request deletion (optional):" : "Motivo para solicitar a exclusão (opcional):",
+ "Seems you lost the vault password and you're unable to log in." : "Parece que você perdeu a senha do cofre e não consegue fazer login.",
+ "If you want this vault to be removed you can request that here." : "Se quiser que este cofre seja excluído, pode solicitar isso aqui.",
+ "An admin then accepts or declines the request" : "Um administrador então aceita ou declina o pedido",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Depois que um administrador destruir este cofre, todas as credenciais dele serão perdidas",
+ "Reason for requesting deletion (optional):" : "Razão para solicitar a exclusão (opcional):",
"Request vault destruction" : "Solicitar a destruição do cofre",
"Yes, request an admin to destroy this vault" : "Sim, solicitar a um administrador para destruir este cofre",
"Cancel destruction request" : "Cancelar solicitação de destruição",
"Vault destruction requested" : "Destruição do cofre solicitada",
"Request removed" : "Solicitação excluída",
"Destruction request pending" : "Solicitação de destruição pendente",
- "Warning! Adding credentials over http can be insecure!" : "Atenção! Adicionar credenciais sobre http pode ser inseguro!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Atenção! Adicionar credenciais sobre HTTP é inseguro!",
"Logged in to {{vault_name}}" : "Logou em {{vault_name}}",
"Change vault" : "Alterar cofre",
"Deleted credentials" : "Credenciais excluídas",
@@ -264,8 +265,8 @@ OC.L10N.register(
"Donate" : "Doar",
"Someone has shared a credential with you." : "Alguém compartilhou uma credencial com você.",
"Click here to request it" : "Clique aqui para solicitá-lo",
- "Loading..." : "Carregando...",
- "Awwhh.... credential not found. Maybe it expired" : "Awwhh... credencial não encontrada. Talvez tenha expirado",
+ "Loading…" : "Carregando...",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh ... credencial não encontrada. Talvez tenha expirado",
"Error while saving field" : "Erro ao salvar o campo",
"A Passman item has been created, modified or deleted" : "Um item Passman foi criado, modificado ou excluído",
"A Passman item has expired" : "Um item Passman expirou",
@@ -295,17 +296,18 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s compartilhou \"%s\" com você. Clique aqui para aceitar",
"%s has declined your share request for \"%s\"." : "%s recusou sua solicitação de compartilhamento de \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s aceitou sua solicitação de compartilhamento para \"%s\".",
- "Unable to get version info" : "Não é possível obter informações sobre a versão",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Não foi possível obter informações sobre a versão",
"Passman Settings" : "Configurações do Passman",
- "Github version:" : "Versão Github:",
- "A newer version of passman is available" : "Uma versão mais recente do passman está disponível",
+ "GitHub version:" : "Versão GitHub:",
+ "A newer version of Passman is available" : "Uma nova versão do Passman está disponível",
"Password sharing" : "Compartilhamento de senha",
"Credential mover" : "Movimentação de credenciais",
"Vault destruction requests" : "Solicitações de destruição de cofres",
"Check for new versions" : "Verificar novas versões",
"Enable HTTPS check" : "Ativar verificação HTTPS",
"Disable context menu" : "Desativar menu de contexto",
- "Disable javascript debugger" : "Desativar o depurador javascript",
+ "Disable JavaScript debugger" : "Desabilitar a depuração JavaScript",
"Allow users on this server to share passwords with a link" : "Permitir que usuários neste servidor compartilhem senhas com um link",
"Allow users on this server to share passwords with other users" : "Permitir que usuários neste servidor compartilhem senhas com outros usuários",
"Move credentials from one account to another" : "Mover credenciais de uma conta para outra",
@@ -313,12 +315,12 @@ OC.L10N.register(
"Destination account" : "Conta de destino",
"Credentials moved!" : "Credenciais movidas!",
"Requests to destroy vault" : "Pedidos para destruir cofre",
- "Request ID" : "Requisitar ID",
+ "Request ID" : "Solicitar ID",
"Requested by" : "Requerido por",
"Reason" : "Razão",
"Connection to server lost" : "Conexão perdida com o servidor",
"Problem loading page, reloading in 5 seconds" : "Problema ao carregar a página, recarregando em 5 segundos",
- "Saving..." : "Pesquisando...",
+ "Saving..." : "Salvando...",
"Dismiss" : "Descartar",
"seconds ago" : "segundos atras"
},
diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json
index 6ba6466e..ca0a038e 100644
--- a/l10n/pt_BR.json
+++ b/l10n/pt_BR.json
@@ -5,52 +5,52 @@
"Passwords do not match" : "As senhas não coincidem",
"General" : "Geral",
"Custom Fields" : "Campos personalizados",
- "Please fill in a label!" : "Preencha a etiqueta!",
- "Please fill in a value!" : "Preencha o valor!",
+ "Please fill in a label." : "Por favor, preencha uma etiqueta.",
+ "Please fill in a value." : "Por favor, preencha um valor.",
"Error loading file" : "Erro ao carregar o arquivo",
- "An error happened during decryption" : "Ocorreu um erro durante a descriptografia",
+ "An error occurred during decryption" : "Um erro ocorreu durante a descriptografia",
"Credential created!" : "Credencial criada!",
"Credential deleted" : "Credential excluída",
"Credential updated" : "Credencial atualizada",
"Credential recovered" : "Credencial recuperada",
"Credential destroyed" : "Credencial destruida",
- "Error downloading file, you probably don't have enough permissions" : "Erro ao baixar o arquivo, você provavelmente não tem permissões suficientes",
+ "Error downloading file, you probably don't have sufficient permissions" : "Erro ao baixar o arquivo, você provavelmente não possui permissões suficientes",
"Invalid QR code" : "Código QR inválido",
"Starting export" : "Iniciando a exportação",
"Decrypting credentials" : "Credenciais de descriptografia",
"Done" : "Concluído",
- "File read successfully!" : "Arquivo lido!",
- "Follow the following steps to import your file" : "Siga as etapas a seguir para importar o arquivo",
+ "File read successfully." : "Arquivo lido com sucesso.",
+ "Proceed with the following steps to import your file" : "Prossiga com as seguintes etapas para importar seu arquivo",
"Credential has no label, skipping" : "Credencial não tem etiqueta, ignorando",
"Adding {{credential}}" : "Adicionando {{credential}}",
"Added {{credential}}" : "Adicionada {{credential}} ",
- "Skipping credential, missing label on line {{line}}" : "Ignorando credencial, falta rótulo online {{line}}",
+ "Skipping credential, missing label on line {{line}}" : "Ignorando credencial, falta etiqueta online {{line}}",
"Parsed {{num}} credentials, starting to import" : "Credenciais {{num}} analisadas, começando a importar",
"Importing" : "Importando",
"Start import" : "Iniciar importação",
- "Select csv file" : "Selecionar arquivo csv",
- "Parsed {{rows}} lines from csv file" : "Analisadas {{rows}} linhas do arquivo csv",
+ "Select CSV file" : "Selecione um arquivo CSV",
+ "Parsed {{rows}} lines from CSV file" : "{{rows}} linhas analisadas do arquivo CSV",
"Skip first row" : "Ignorar a primeira linha",
"You need to assign the label field before you can start the import." : "É necessário atribuir o campo de etiqueta para poder iniciar a importação.",
- "First 5 lines of the csv are shown." : "As primeiras 5 linhas do csv são mostradas.",
+ "The first 5 lines of the CSV are shown." : "As primeiras 5 linhas do CSV são mostradas.",
"Assign the proper fields to each column." : "Atribua os campos apropriados a cada coluna.",
- "Example imported credential" : "Exemplo de credencial importada",
- "Missing an importer? Try it with the generic csv importer." : "Falta um importador? Experimente com o importador csv genérico.",
+ "Example of imported credential" : "Exemplo de credencial importada",
+ "Missing an importer? Try it with the generic CSV importer." : "Não tem um importador? Experimente o importador CSV genérico.",
"Go back to importers." : "Volte para importadores.",
"Revision deleted" : "Revisão excluída",
"Revision restored" : "Revisão restaurada",
- "Save in passman" : "Salvar em passman",
+ "Save in Passman" : "Salvar em Passman",
"Settings saved" : "Configurações salvas",
"General settings" : "Configurações Gerais",
- "Password Audit" : "Auditoria de senha",
+ "Password audit" : "Auditoria de senha",
"Password settings" : "Configurações de senha",
"Import credentials" : "Importar credenciais",
"Export credentials" : "Exportar credenciais",
"Sharing" : "Compartilhando",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Você tem certeza de que quer sair? Isso VAI corromper todas as suas credenciais",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Você tem certeza de que quer sair? Isso irá destruir todas as suas credenciais",
"Your old password is incorrect!" : "Sua senha antiga está incorreta!",
- "New passwords do not match!" : "As novas senhas não coincidem!",
- "Please login with your new vault password" : "Faça login com sua nova senha de cofre",
+ "New password does not match!" : "Nova senha não confere!",
+ "Please log in with your new vault password" : "Faça o login com sua nova senha do cofre",
"Share with users and groups" : "Compartilhar com usuários e grupos",
"Share link" : "Compartilhar link",
"Are you sure you want to leave? This will corrupt this credential" : "Você tem certeza de que quer sair? Isso vai corromper essa credencial",
@@ -69,8 +69,8 @@
"Password copied to clipboard!" : "Senha copiada para a área de transferência!",
"Complete" : "Completo",
"Username" : "Nome do usuário",
- "Repeat password" : "Repita a senha",
- "Add Tag" : "Adicionar etiqueta",
+ "Repeat password" : "Repetir a senha",
+ "Add tag" : "Adicionar rótulo",
"Field label" : "Campo etiqueta",
"Field value" : "Campo valor",
"Choose a file" : "Escolher um arquivo",
@@ -88,8 +88,8 @@
"Current OTP settings" : "Configurações OTP atuais",
"Issuer" : "Emissor",
"Secret" : "Segredo",
- "Expire date" : "Data de expiração",
- "No expire date set" : "Nenhuma data de expiração definida",
+ "Expiration date" : "Data de expiração",
+ "No expiration date set" : "Não há data de expiração definida",
"Renew interval" : "Intervalo de renovação",
"Disabled" : "Desativado",
"Day(s)" : "Dia(s)",
@@ -98,7 +98,7 @@
"Year(s)" : "Ano(s)",
"Password generation settings" : "Configurações de geração de senha",
"Password length" : "Comprimento da senha",
- "Minimum amount of digits" : "Tamanho mínimo",
+ "Minimum amount of digits" : "Quantidade mínima de dígitos",
"Use uppercase letters" : "Usar letras maiúsculas",
"Use lowercase letters" : "Usar letras minúsculas",
"Use numbers" : "Usar números",
@@ -114,7 +114,7 @@
"Change vault key" : "Alterar a chave do cofre",
"Old vault password" : "Senha antiga do cofre",
"New vault password" : "Nova senha do cofre",
- "New vault password repeat" : "Repetição da nova senha do cofre",
+ "Repeat new vault password" : "Repita a nova senha do cofre",
"Please wait your vault is being updated, do not leave this page." : "Por favor espere até que seu cofre seja atualizado. Não saia desta página.",
"Processing" : "Processando",
"Total progress" : "Progresso total",
@@ -128,7 +128,7 @@
"Vault password" : "Senha do cofre",
"This process is irreversible" : "Este processo é irreversível",
"Delete my precious passwords" : "Excluir minhas preciosas senhas",
- "Deleting {{password}}..." : "Excluindo {{password}}...",
+ "Deleting {{password}}…" : "Excluíndo {{password}}…",
"Yes, delete my precious passwords" : "Sim, exclua minhas preciosas senhas",
"Import type" : "Tipo de importação",
"Import" : "Importar",
@@ -140,13 +140,14 @@
"Save keys" : "Salvar chaves",
"Generate sharing keys" : "Gerar chaves de compartilhamento",
"Generating sharing keys" : "Gerando chaves de compartilhamento",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "A ferramenta de senha digitalizará sua senha, calculará o tempo médio de crack e, se estiver abaixo do limite, a mostrará",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "A ferramenta de senha irá escanear sua senha, calcular o tempo médio para quebrá-la e listar aquelas que estão abaixo do limiar",
"Minimum password stength" : "Força mínima da senha",
- "Passman scanned your passwords, and here is the result." : "O Passman digitalizou suas senhas e aqui está o resultado.",
- "A total of {{scan_result}} weak credentials." : "Um total de {{scan_result}} credenciais fracas.",
+ "Start scan" : "Iniciar escaneamento",
+ "Result" : "Resultado",
+ "A total of {{scan_result}} weak credentials were found." : "{{scan_result}} credenciais fracas foram encontradas.",
"Score" : "Pontuação",
"Action" : "Ação",
- "Search users or groups..." : "Pesquisar usuários ou grupos...",
+ "Search users or groups…" : "Procurar usuários ou grupos...",
"Missing users? Only users that have vaults are shown." : "Usuários ausentes? Somente os usuários que têm cofres são mostrados.",
"Cyphering" : "Cifrando",
"Uploading" : "Enviando",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Ativar o compartilhamento de links",
"Share until date" : "Compartilhar até a data",
"Expire after views" : "Expirar após visualizações",
- "Click share first" : "Clique em compartilhar primeiro",
+ "Click Share first" : "Clique em Compartilhar primeiro",
"Show files" : "Mostrar arquivos",
"Details" : "Detalhes",
"Hide details" : "Ocultar detalhes",
@@ -178,7 +179,7 @@
"Match sequence" : "Sequência de correspondência",
"See match sequence" : "Ver sequência de correspondência",
"Pattern" : "Padrão",
- "Matched word" : "Palavra combinada",
+ "Matched word" : "Palavra correspondente",
"Dictionary name" : "Nome do dicionário",
"Rank" : "Classificação",
"Reversed" : "Invertido",
@@ -201,16 +202,16 @@
"Share credential {{credential}}" : "Compartilhar credencial {{credential}} ",
"Unshare" : "Descompartilhar",
"Showing deleted since" : "Mostrar excluídos desde",
- "All time" : "Todo o tempo",
+ "Beginning" : "Início",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciais",
- "Search credential..." : "Pesquisar credenciais",
+ "Search for credential…" : "Procurar por credenciais...",
"Account" : "Conta",
"Password" : "Senha",
"OTP" : "OTP",
- "E-mail" : "Email",
+ "E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "Anotações",
- "Expire time" : "Data de expiração",
+ "Expiry time" : "Tempo para expiração",
"Changed" : "Alterado",
"Created" : "Criado",
"Edit" : "Editar",
@@ -220,8 +221,8 @@
"Destroy" : "Destruir",
"Use regex" : "Usar regex",
"You have incoming share requests." : "Você tem solicitações de compartilhamento.",
- "If you want to put the credential in a other vault," : "Se você quiser colocar a credencial em um outro cofre,",
- "logout of this vault and login to the vault you want the shared credential in." : "efetue o logout deste cofre e faça login no cofre ao qual você deseja que a credencial seja compartilhada.",
+ "If you want to put the credential in another vault," : "Se você quiser colocar a credencial em outro cofre,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "Saia deste cofre e entre no qual deseja a credencial compartilhada.",
"Permissions" : "Permissões",
"Received from" : "Recebido de",
"Date" : "Data",
@@ -235,26 +236,26 @@
"Password strength must be at least: {{strength}}" : "A força da senha deve ser pelo menos: {{strength}}",
"Please give your new vault a name." : "Por favor, dê um nome ao seu novo cofre.",
"Repeat vault password" : "Repita a senha do cofre",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Sua chave de compartilhamento terá um grau de 1024 bits, que você pode alterar mais tarde nas configurações.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Sua chave de compartilhamento terá uma força de 1024 bits, que você pode alterar em Configurações mais tarde.",
"Create vault" : "Criar cofre",
"Go back to vaults" : "Voltar para os cofres",
"Please input the password for" : "Por favor entre uma senha para",
- "Set this vault as default." : "Configure esse cofre como padrão.",
- "Login automatically to this vault." : "Entrar automaticamente neste cofre.",
- "Logout of this vault automatically after: " : "Efetue o logout desta solicitação logo após:",
+ "Set this vault as the default." : "Defina este cofre como padrão.",
+ "Log into this vault automatically." : "Entre neste cofre automaticamente.",
+ "Log out of this vault automatically after: " : "Saia desse cofre automaticamente após:",
"Decrypt vault" : "Descriptografar o cofre",
- "Seems you lost the vault password and you're unable to login." : "Parece que você perdeu a senha do cofre e não consegue fazer login.",
- "If you want this vault removed you can request removal of the vault here." : "Se você quiser excluir esse cofre, você pode solicitar a exclusão aqui.",
- "An admin then accept to the request (or not)" : "Um administrador então aceita o pedido (ou não)",
- "After an admin destroy's this vault, all credentials will be lost" : "Depois que um administrador destruir este cofre, todas as credenciais serão perdidas",
- "Reason to request deletion (optional):" : "Motivo para solicitar a exclusão (opcional):",
+ "Seems you lost the vault password and you're unable to log in." : "Parece que você perdeu a senha do cofre e não consegue fazer login.",
+ "If you want this vault to be removed you can request that here." : "Se quiser que este cofre seja excluído, pode solicitar isso aqui.",
+ "An admin then accepts or declines the request" : "Um administrador então aceita ou declina o pedido",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Depois que um administrador destruir este cofre, todas as credenciais dele serão perdidas",
+ "Reason for requesting deletion (optional):" : "Razão para solicitar a exclusão (opcional):",
"Request vault destruction" : "Solicitar a destruição do cofre",
"Yes, request an admin to destroy this vault" : "Sim, solicitar a um administrador para destruir este cofre",
"Cancel destruction request" : "Cancelar solicitação de destruição",
"Vault destruction requested" : "Destruição do cofre solicitada",
"Request removed" : "Solicitação excluída",
"Destruction request pending" : "Solicitação de destruição pendente",
- "Warning! Adding credentials over http can be insecure!" : "Atenção! Adicionar credenciais sobre http pode ser inseguro!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Atenção! Adicionar credenciais sobre HTTP é inseguro!",
"Logged in to {{vault_name}}" : "Logou em {{vault_name}}",
"Change vault" : "Alterar cofre",
"Deleted credentials" : "Credenciais excluídas",
@@ -262,8 +263,8 @@
"Donate" : "Doar",
"Someone has shared a credential with you." : "Alguém compartilhou uma credencial com você.",
"Click here to request it" : "Clique aqui para solicitá-lo",
- "Loading..." : "Carregando...",
- "Awwhh.... credential not found. Maybe it expired" : "Awwhh... credencial não encontrada. Talvez tenha expirado",
+ "Loading…" : "Carregando...",
+ "Awwhh… credential not found. Maybe it expired" : "Awwhh ... credencial não encontrada. Talvez tenha expirado",
"Error while saving field" : "Erro ao salvar o campo",
"A Passman item has been created, modified or deleted" : "Um item Passman foi criado, modificado ou excluído",
"A Passman item has expired" : "Um item Passman expirou",
@@ -293,17 +294,18 @@
"%s shared \"%s\" with you. Click here to accept" : "%s compartilhou \"%s\" com você. Clique aqui para aceitar",
"%s has declined your share request for \"%s\"." : "%s recusou sua solicitação de compartilhamento de \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s aceitou sua solicitação de compartilhamento para \"%s\".",
- "Unable to get version info" : "Não é possível obter informações sobre a versão",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Não foi possível obter informações sobre a versão",
"Passman Settings" : "Configurações do Passman",
- "Github version:" : "Versão Github:",
- "A newer version of passman is available" : "Uma versão mais recente do passman está disponível",
+ "GitHub version:" : "Versão GitHub:",
+ "A newer version of Passman is available" : "Uma nova versão do Passman está disponível",
"Password sharing" : "Compartilhamento de senha",
"Credential mover" : "Movimentação de credenciais",
"Vault destruction requests" : "Solicitações de destruição de cofres",
"Check for new versions" : "Verificar novas versões",
"Enable HTTPS check" : "Ativar verificação HTTPS",
"Disable context menu" : "Desativar menu de contexto",
- "Disable javascript debugger" : "Desativar o depurador javascript",
+ "Disable JavaScript debugger" : "Desabilitar a depuração JavaScript",
"Allow users on this server to share passwords with a link" : "Permitir que usuários neste servidor compartilhem senhas com um link",
"Allow users on this server to share passwords with other users" : "Permitir que usuários neste servidor compartilhem senhas com outros usuários",
"Move credentials from one account to another" : "Mover credenciais de uma conta para outra",
@@ -311,12 +313,12 @@
"Destination account" : "Conta de destino",
"Credentials moved!" : "Credenciais movidas!",
"Requests to destroy vault" : "Pedidos para destruir cofre",
- "Request ID" : "Requisitar ID",
+ "Request ID" : "Solicitar ID",
"Requested by" : "Requerido por",
"Reason" : "Razão",
"Connection to server lost" : "Conexão perdida com o servidor",
"Problem loading page, reloading in 5 seconds" : "Problema ao carregar a página, recarregando em 5 segundos",
- "Saving..." : "Pesquisando...",
+ "Saving..." : "Salvando...",
"Dismiss" : "Descartar",
"seconds ago" : "segundos atras"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
diff --git a/l10n/ru.js b/l10n/ru.js
index 27b3a367..7df191e3 100644
--- a/l10n/ru.js
+++ b/l10n/ru.js
@@ -7,22 +7,22 @@ OC.L10N.register(
"Passwords do not match" : "Пароли не совпадают",
"General" : "Основные",
"Custom Fields" : "Свои поля",
- "Please fill in a label!" : "Заполните название!",
- "Please fill in a value!" : "Заполните значение!",
+ "Please fill in a label." : "Заполните название",
+ "Please fill in a value." : "Заполните значение",
"Error loading file" : "Ошибка загрузки файла",
- "An error happened during decryption" : "Во время расшифровки произошла ошибка",
+ "An error occurred during decryption" : "Во время расшифровки произошла ошибка",
"Credential created!" : "Запись создана!",
"Credential deleted" : "Запись удалена",
"Credential updated" : "Запись обновлена",
"Credential recovered" : "Запись восстановлена",
"Credential destroyed" : "Учетные данные уничтожены",
- "Error downloading file, you probably don't have enough permissions" : "Ошибка скачивания файла, возможно у вас не достаточно прав доступа",
- "Invalid QR code" : "Неверный код QR",
+ "Error downloading file, you probably don't have sufficient permissions" : "Ошибка загрузки файла, возможно у вас не достаточно прав доступа",
+ "Invalid QR code" : "Неверный QR код",
"Starting export" : "Начинается экспорт",
"Decrypting credentials" : "Расшифровка записей",
"Done" : "Готово",
- "File read successfully!" : "Файл успешно прочитан!",
- "Follow the following steps to import your file" : "Для импорта файла выполните следующее",
+ "File read successfully." : "Файл успешно прочитан.",
+ "Proceed with the following steps to import your file" : "Для импорта файла выполните следующее",
"Credential has no label, skipping" : "У записи нет названия, пропускается",
"Adding {{credential}}" : "Добавляется {{credential}}",
"Added {{credential}}" : "Добавлено {{credential}}",
@@ -30,29 +30,29 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Разобрано {{num}} записей, начинается импорт",
"Importing" : "Импортируется",
"Start import" : "Начать импорт",
- "Select csv file" : "Выберите файл csv",
- "Parsed {{rows}} lines from csv file" : "Разобрано {{rows}} строк из файла csv",
+ "Select CSV file" : "Выберите файл CVS",
+ "Parsed {{rows}} lines from CSV file" : "Разобрано {{rows}} строк из файла CSV",
"Skip first row" : "Пропустить первую строку",
"You need to assign the label field before you can start the import." : "Перед началом импорта необходимо присвоить метку полю",
- "First 5 lines of the csv are shown." : "Показаны первые 5 строк из файла csv",
+ "The first 5 lines of the CSV are shown." : "Показаны первые 5 строк из файла CSV",
"Assign the proper fields to each column." : "Назначьте правильные поля каждому из столбцов",
- "Example imported credential" : "Пример импортированной записи",
- "Missing an importer? Try it with the generic csv importer." : "Нужный тип отсутствует в списке? Попробуйте иморт из csv.",
+ "Example of imported credential" : "Пример импортированной записи",
+ "Missing an importer? Try it with the generic CSV importer." : "Нужный тип отсутствует в списке? Попробуйте иморт из CSV.",
"Go back to importers." : "Вернуться к списку выбора.",
"Revision deleted" : "Версия удалена",
"Revision restored" : "Версия восстановлена",
- "Save in passman" : "Сохранить в passman",
+ "Save in Passman" : "Сохранить в Passman",
"Settings saved" : "Настройки сохранены",
"General settings" : "Основные настройки",
- "Password Audit" : "Аудит пароля",
+ "Password audit" : "Аудит пароля",
"Password settings" : "Настройки пароля",
"Import credentials" : "Импортировать записи",
"Export credentials" : "Экспортировать записи",
"Sharing" : "Общий доступ",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Уверены, что хотите выйти? Это повредит все ваши записи",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Действительно выйти? Это повредит все ваши записи",
"Your old password is incorrect!" : "Старый пароль неверен!",
- "New passwords do not match!" : "Новые пароли не совпадают",
- "Please login with your new vault password" : "Войдите в систему со своим новым паролем хранилища",
+ "New password does not match!" : "Новые пароли не совпадают!",
+ "Please log in with your new vault password" : "Войдите в систему используя новый пароль хранилища",
"Share with users and groups" : "Поделиться с пользователями и группами",
"Share link" : "Поделиться ссылкой",
"Are you sure you want to leave? This will corrupt this credential" : "Уверены, что хотите выйти? Это повредит текущую запись",
@@ -72,7 +72,7 @@ OC.L10N.register(
"Complete" : "Завершить",
"Username" : "Имя пользователя",
"Repeat password" : "Повторите пароль",
- "Add Tag" : "Добавить метку",
+ "Add tag" : "Добавить метку",
"Field label" : "Название поля",
"Field value" : "Значение поля",
"Choose a file" : "Выберите файл",
@@ -90,8 +90,8 @@ OC.L10N.register(
"Current OTP settings" : "Текущие настройки OPT",
"Issuer" : "Выпустил",
"Secret" : "Секрет",
- "Expire date" : "Дата истечения",
- "No expire date set" : "Дата истечения не установлена",
+ "Expiration date" : "Дата истечения",
+ "No expiration date set" : "Дата истечения не установлена",
"Renew interval" : "Интервал обновления",
"Disabled" : "Отключено",
"Day(s)" : "День(дней)",
@@ -116,7 +116,7 @@ OC.L10N.register(
"Change vault key" : "Изменить ключ хранилща",
"Old vault password" : "Старый пароль хранилища",
"New vault password" : "Новый пароль хранилища",
- "New vault password repeat" : "Повторите новый пароль",
+ "Repeat new vault password" : "Повторите пароль хранилища",
"Please wait your vault is being updated, do not leave this page." : "Подождите пока обновится хранилище. Не уходите с этой страницы.",
"Processing" : "Обрабатывется",
"Total progress" : "Общий ход выполнения",
@@ -130,7 +130,7 @@ OC.L10N.register(
"Vault password" : "Пароль хранилища",
"This process is irreversible" : "Эта операция необратима",
"Delete my precious passwords" : "Удалить мои драгоценные пароли",
- "Deleting {{password}}..." : "Удаляется {{password}}...",
+ "Deleting {{password}}…" : "Удаляется {{password}}...",
"Yes, delete my precious passwords" : "Да, удалить мои драгоценные пароли",
"Import type" : "Тип импорта",
"Import" : "Импорт",
@@ -142,13 +142,14 @@ OC.L10N.register(
"Save keys" : "Сохранить ключи",
"Generate sharing keys" : "Создать ключи общего доступа",
"Generating sharing keys" : "Ключи общего доступа создаются",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Инструмент паролей просканирует ваши пароли, вычислит среднее время для из взлома, и, если оно окажется ниже порогового значения, покажет их",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Инструмент паролей просканирует ваши пароли, вычислит среднее время для из взлома, и, если оно окажется ниже порогового значения, покажет их",
"Minimum password stength" : "Минимальная устойчивость пароля",
- "Passman scanned your passwords, and here is the result." : "Passman просканировал ваши пароли и вот результат.",
- "A total of {{scan_result}} weak credentials." : "Всего слабых записей из {{scan_result}}.",
+ "Start scan" : "Запустить сканирование",
+ "Result" : "Результат",
+ "A total of {{scan_result}} weak credentials were found." : "Найдено записей со слабым паролем: {{scan_result}} .",
"Score" : "Баллов",
"Action" : "Действие",
- "Search users or groups..." : "Поиск пользователя или групп...",
+ "Search users or groups…" : "Поиск пользователя или групп...",
"Missing users? Only users that have vaults are shown." : "Пользователи отсутствуют? Показаны только имеющие хранилища.",
"Cyphering" : "Вычисление",
"Uploading" : "Загрузка",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Разрешить обмен ссылками",
"Share until date" : "Поделиться до даты",
"Expire after views" : "Истекает после просмотров",
- "Click share first" : "Сначала щелкните по \"поделиться\"",
+ "Click Share first" : "Сначала нажмите на «поделиться»",
"Show files" : "Показать файлы",
"Details" : "Подробно",
"Hide details" : "Скрыть подробности",
@@ -203,16 +204,16 @@ OC.L10N.register(
"Share credential {{credential}}" : "Поделиться записью {{credential}}",
"Unshare" : "Закрыть доступ",
"Showing deleted since" : "Показываются удалённые после",
- "All time" : "За всё время",
+ "Beginning" : "Начинается",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Показывается {{number_filtered}} из {{credential_number}} записей",
- "Search credential..." : "Искать запись…",
+ "Search for credential…" : "Поиск записи…",
"Account" : "Аккаунт",
"Password" : "Пароль",
"OTP" : "OTP (одноразовый пароль)",
"E-mail" : "Эл. почта",
"URL" : "URL",
"Notes" : "Заметки",
- "Expire time" : "Срок действия",
+ "Expiry time" : "Время истечения",
"Changed" : "Изменено",
"Created" : "Создано",
"Edit" : "Редактировать",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Уничтожить",
"Use regex" : "Использовать регулярные выражения",
"You have incoming share requests." : "У вас входящий запрос на общий доступ.",
- "If you want to put the credential in a other vault," : "Если Вы хотите поместить учетные данные в другое хранилище,",
- "logout of this vault and login to the vault you want the shared credential in." : "выйдите из этого хранилища и войдите в хранилище, которое содержит общие реквизиты.",
+ "If you want to put the credential in another vault," : "Если Вы хотите поместить записи в другое хранилище,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "выйдите из этого хранилища и войдите в хранилище с которым вы хотите поделиться.",
"Permissions" : "Права доступа",
"Received from" : "Получено от",
"Date" : "Дата",
@@ -237,35 +238,35 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Устойчивать пароля должна быть не ниже: {{strength}}",
"Please give your new vault a name." : "Укажите имя нового хранилища.",
"Repeat vault password" : "Повторите пароль хранилища",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Ключ доступа будет иметь устойчивость 1024 бита, позже вы можете изменить ее в настройках.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Общий ключ будет иметь устойчивость 1024 бита, позже вы можете изменить её в настройках.",
"Create vault" : "Создать хранилище",
"Go back to vaults" : "Вернуться в хранилище",
"Please input the password for" : "Введите пароль для",
- "Set this vault as default." : "Установить текущее хранилище хранилищем по-умолчанию.",
- "Login automatically to this vault." : "Автоматически входить в это хранилище.",
- "Logout of this vault automatically after: " : "Автоматически выходить из этого хранилища через:",
+ "Set this vault as the default." : "Установить текущее хранилище по умолчанию.",
+ "Log into this vault automatically." : "Автоматически входить в это хранилище.",
+ "Log out of this vault automatically after: " : "Автоматически выходить из этого хранилища через:",
"Decrypt vault" : "Расшифровать хранилище",
- "Seems you lost the vault password and you're unable to login." : "Вероятно, вы утеряли пароль хранилища. Вход не возможен.",
- "If you want this vault removed you can request removal of the vault here." : "Если хотите удалить это хранилище, тут можно подать запрос на его удаление.",
- "An admin then accept to the request (or not)" : "После этого администратор рассмотрит Ваш запрос",
- "After an admin destroy's this vault, all credentials will be lost" : "После удаления хранилища администратором, все записи будет потеряны.",
- "Reason to request deletion (optional):" : "Причина запроса на удаление (необязательно):",
+ "Seems you lost the vault password and you're unable to log in." : "Вероятно, вы утеряли пароль хранилища. Вход не возможен.",
+ "If you want this vault to be removed you can request that here." : "Если вы хотите, чтобы это хранилище было удалено, вы можете запросить это здесь.",
+ "An admin then accepts or declines the request" : "После этого администратор примет или отклонит запрос",
+ "After an admin destroys this vault, all credentials in it will be lost" : "После удаления хранилища администратором, все записи внутри хранилища будет потеряны.",
+ "Reason for requesting deletion (optional):" : "Причина запроса на удаление (необязательно):",
"Request vault destruction" : "Запросить уничтожение хранилища",
"Yes, request an admin to destroy this vault" : "Да, запросить удаление этого хранилища администратором.",
"Cancel destruction request" : "Отменить запрос удаления",
"Vault destruction requested" : "Удаление хранилища запрошено",
"Request removed" : "Запрос удалён",
"Destruction request pending" : "Запрос на удаление в ожидании",
- "Warning! Adding credentials over http can be insecure!" : "Предупреждение! Добавление реквизитов с использованием протокола http может быть небезопасно!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Предупреждение! Добавление записей по HTTP небезопасно!",
"Logged in to {{vault_name}}" : "Вошли в {{vault_name}}",
"Change vault" : "Изменить хранилище",
"Deleted credentials" : "Удалённые реквизиты",
"Logout" : "Выйти",
"Donate" : "Пожертвовать",
"Someone has shared a credential with you." : "Кто-то поделился с вами записью.",
- "Click here to request it" : "Щелкните здесь для их получения.",
- "Loading..." : "Загрузка...",
- "Awwhh.... credential not found. Maybe it expired" : "Запись не найдена. Возможно, закончился срок её действия.",
+ "Click here to request it" : "Нажмите здесь для их получения.",
+ "Loading…" : "Загрузка...",
+ "Awwhh… credential not found. Maybe it expired" : "Запись не найдена. Возможно, закончился срок её действия.",
"Error while saving field" : "Ошибка при сохранении поля",
"A Passman item has been created, modified or deleted" : "Элемент Passman был создан, изменён или удалён",
"A Passman item has expired" : "У элемента Passman закончился срок действия",
@@ -289,23 +290,24 @@ OC.L10N.register(
"%1$s has been shared with %2$s" : "%1$s поделились с %2$s",
"You received a share request for %1$s from %2$s" : "Вы получили запрос на предоставление общего доступа к %1$s от %2$s",
"%s has been shared with a link" : "к %s был предоставлен общий доступ ссылкой",
- "Your credential \"%s\" expired, click here to update the credential." : "Истёк срок действия записи \"%s\", щелкните здесь для обновления.",
+ "Your credential \"%s\" expired, click here to update the credential." : "Истёк срок действия записи «%s», нажмите здесь для обновления.",
"Remind me later" : "Напомнить позже",
"Ignore" : "Пропустить",
- "%s shared \"%s\" with you. Click here to accept" : "%s предоставил вам доступ к \"%s\". Щёлкните здесь что бы принять.",
- "%s has declined your share request for \"%s\"." : "%s отклонил ваш запрос на предоставление общего доступа к \"%s\".",
- "%s has accepted your share request for \"%s\"." : "%s принял ваш запрос на предоставление общего доступа к \"%s\".",
+ "%s shared \"%s\" with you. Click here to accept" : "%s предоставил вам доступ к «%s». Нажмите здесь что бы принять.",
+ "%s has declined your share request for \"%s\"." : "%s отклонил ваш запрос на предоставление общего доступа к «%s».",
+ "%s has accepted your share request for \"%s\"." : "%s принял ваш запрос на предоставление общего доступа к «%s».",
+ "Passman" : "Passman",
"Unable to get version info" : "Невозможно получить информацию о версии",
"Passman Settings" : "Настройки Passman",
- "Github version:" : "Версия github:",
- "A newer version of passman is available" : "Доступна новая версия passman",
+ "GitHub version:" : "Версия GitHub:",
+ "A newer version of Passman is available" : "Доступна новая версия Passman",
"Password sharing" : "Общий доступ к паролями",
"Credential mover" : "Перемещение записей",
"Vault destruction requests" : "Запросы на удаление хранилищ",
"Check for new versions" : "Проверить наличие новых версий",
"Enable HTTPS check" : "Включить проверку HTTPS",
"Disable context menu" : "Отключить контекстное меню",
- "Disable javascript debugger" : "Отключите отладчик javascript ",
+ "Disable JavaScript debugger" : "Отключите отладчик JavaScript",
"Allow users on this server to share passwords with a link" : "Разрешить пользователям этого сервера делиться паролями посредством ссылки",
"Allow users on this server to share passwords with other users" : "Разрешить пользователям этого сервера делиться паролями с другими пользователями",
"Move credentials from one account to another" : "Перемещение записей между аккаунтами",
diff --git a/l10n/ru.json b/l10n/ru.json
index 3c6cb9f2..ad25e9a1 100644
--- a/l10n/ru.json
+++ b/l10n/ru.json
@@ -5,22 +5,22 @@
"Passwords do not match" : "Пароли не совпадают",
"General" : "Основные",
"Custom Fields" : "Свои поля",
- "Please fill in a label!" : "Заполните название!",
- "Please fill in a value!" : "Заполните значение!",
+ "Please fill in a label." : "Заполните название",
+ "Please fill in a value." : "Заполните значение",
"Error loading file" : "Ошибка загрузки файла",
- "An error happened during decryption" : "Во время расшифровки произошла ошибка",
+ "An error occurred during decryption" : "Во время расшифровки произошла ошибка",
"Credential created!" : "Запись создана!",
"Credential deleted" : "Запись удалена",
"Credential updated" : "Запись обновлена",
"Credential recovered" : "Запись восстановлена",
"Credential destroyed" : "Учетные данные уничтожены",
- "Error downloading file, you probably don't have enough permissions" : "Ошибка скачивания файла, возможно у вас не достаточно прав доступа",
- "Invalid QR code" : "Неверный код QR",
+ "Error downloading file, you probably don't have sufficient permissions" : "Ошибка загрузки файла, возможно у вас не достаточно прав доступа",
+ "Invalid QR code" : "Неверный QR код",
"Starting export" : "Начинается экспорт",
"Decrypting credentials" : "Расшифровка записей",
"Done" : "Готово",
- "File read successfully!" : "Файл успешно прочитан!",
- "Follow the following steps to import your file" : "Для импорта файла выполните следующее",
+ "File read successfully." : "Файл успешно прочитан.",
+ "Proceed with the following steps to import your file" : "Для импорта файла выполните следующее",
"Credential has no label, skipping" : "У записи нет названия, пропускается",
"Adding {{credential}}" : "Добавляется {{credential}}",
"Added {{credential}}" : "Добавлено {{credential}}",
@@ -28,29 +28,29 @@
"Parsed {{num}} credentials, starting to import" : "Разобрано {{num}} записей, начинается импорт",
"Importing" : "Импортируется",
"Start import" : "Начать импорт",
- "Select csv file" : "Выберите файл csv",
- "Parsed {{rows}} lines from csv file" : "Разобрано {{rows}} строк из файла csv",
+ "Select CSV file" : "Выберите файл CVS",
+ "Parsed {{rows}} lines from CSV file" : "Разобрано {{rows}} строк из файла CSV",
"Skip first row" : "Пропустить первую строку",
"You need to assign the label field before you can start the import." : "Перед началом импорта необходимо присвоить метку полю",
- "First 5 lines of the csv are shown." : "Показаны первые 5 строк из файла csv",
+ "The first 5 lines of the CSV are shown." : "Показаны первые 5 строк из файла CSV",
"Assign the proper fields to each column." : "Назначьте правильные поля каждому из столбцов",
- "Example imported credential" : "Пример импортированной записи",
- "Missing an importer? Try it with the generic csv importer." : "Нужный тип отсутствует в списке? Попробуйте иморт из csv.",
+ "Example of imported credential" : "Пример импортированной записи",
+ "Missing an importer? Try it with the generic CSV importer." : "Нужный тип отсутствует в списке? Попробуйте иморт из CSV.",
"Go back to importers." : "Вернуться к списку выбора.",
"Revision deleted" : "Версия удалена",
"Revision restored" : "Версия восстановлена",
- "Save in passman" : "Сохранить в passman",
+ "Save in Passman" : "Сохранить в Passman",
"Settings saved" : "Настройки сохранены",
"General settings" : "Основные настройки",
- "Password Audit" : "Аудит пароля",
+ "Password audit" : "Аудит пароля",
"Password settings" : "Настройки пароля",
"Import credentials" : "Импортировать записи",
"Export credentials" : "Экспортировать записи",
"Sharing" : "Общий доступ",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Уверены, что хотите выйти? Это повредит все ваши записи",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Действительно выйти? Это повредит все ваши записи",
"Your old password is incorrect!" : "Старый пароль неверен!",
- "New passwords do not match!" : "Новые пароли не совпадают",
- "Please login with your new vault password" : "Войдите в систему со своим новым паролем хранилища",
+ "New password does not match!" : "Новые пароли не совпадают!",
+ "Please log in with your new vault password" : "Войдите в систему используя новый пароль хранилища",
"Share with users and groups" : "Поделиться с пользователями и группами",
"Share link" : "Поделиться ссылкой",
"Are you sure you want to leave? This will corrupt this credential" : "Уверены, что хотите выйти? Это повредит текущую запись",
@@ -70,7 +70,7 @@
"Complete" : "Завершить",
"Username" : "Имя пользователя",
"Repeat password" : "Повторите пароль",
- "Add Tag" : "Добавить метку",
+ "Add tag" : "Добавить метку",
"Field label" : "Название поля",
"Field value" : "Значение поля",
"Choose a file" : "Выберите файл",
@@ -88,8 +88,8 @@
"Current OTP settings" : "Текущие настройки OPT",
"Issuer" : "Выпустил",
"Secret" : "Секрет",
- "Expire date" : "Дата истечения",
- "No expire date set" : "Дата истечения не установлена",
+ "Expiration date" : "Дата истечения",
+ "No expiration date set" : "Дата истечения не установлена",
"Renew interval" : "Интервал обновления",
"Disabled" : "Отключено",
"Day(s)" : "День(дней)",
@@ -114,7 +114,7 @@
"Change vault key" : "Изменить ключ хранилща",
"Old vault password" : "Старый пароль хранилища",
"New vault password" : "Новый пароль хранилища",
- "New vault password repeat" : "Повторите новый пароль",
+ "Repeat new vault password" : "Повторите пароль хранилища",
"Please wait your vault is being updated, do not leave this page." : "Подождите пока обновится хранилище. Не уходите с этой страницы.",
"Processing" : "Обрабатывется",
"Total progress" : "Общий ход выполнения",
@@ -128,7 +128,7 @@
"Vault password" : "Пароль хранилища",
"This process is irreversible" : "Эта операция необратима",
"Delete my precious passwords" : "Удалить мои драгоценные пароли",
- "Deleting {{password}}..." : "Удаляется {{password}}...",
+ "Deleting {{password}}…" : "Удаляется {{password}}...",
"Yes, delete my precious passwords" : "Да, удалить мои драгоценные пароли",
"Import type" : "Тип импорта",
"Import" : "Импорт",
@@ -140,13 +140,14 @@
"Save keys" : "Сохранить ключи",
"Generate sharing keys" : "Создать ключи общего доступа",
"Generating sharing keys" : "Ключи общего доступа создаются",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Инструмент паролей просканирует ваши пароли, вычислит среднее время для из взлома, и, если оно окажется ниже порогового значения, покажет их",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Инструмент паролей просканирует ваши пароли, вычислит среднее время для из взлома, и, если оно окажется ниже порогового значения, покажет их",
"Minimum password stength" : "Минимальная устойчивость пароля",
- "Passman scanned your passwords, and here is the result." : "Passman просканировал ваши пароли и вот результат.",
- "A total of {{scan_result}} weak credentials." : "Всего слабых записей из {{scan_result}}.",
+ "Start scan" : "Запустить сканирование",
+ "Result" : "Результат",
+ "A total of {{scan_result}} weak credentials were found." : "Найдено записей со слабым паролем: {{scan_result}} .",
"Score" : "Баллов",
"Action" : "Действие",
- "Search users or groups..." : "Поиск пользователя или групп...",
+ "Search users or groups…" : "Поиск пользователя или групп...",
"Missing users? Only users that have vaults are shown." : "Пользователи отсутствуют? Показаны только имеющие хранилища.",
"Cyphering" : "Вычисление",
"Uploading" : "Загрузка",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Разрешить обмен ссылками",
"Share until date" : "Поделиться до даты",
"Expire after views" : "Истекает после просмотров",
- "Click share first" : "Сначала щелкните по \"поделиться\"",
+ "Click Share first" : "Сначала нажмите на «поделиться»",
"Show files" : "Показать файлы",
"Details" : "Подробно",
"Hide details" : "Скрыть подробности",
@@ -201,16 +202,16 @@
"Share credential {{credential}}" : "Поделиться записью {{credential}}",
"Unshare" : "Закрыть доступ",
"Showing deleted since" : "Показываются удалённые после",
- "All time" : "За всё время",
+ "Beginning" : "Начинается",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Показывается {{number_filtered}} из {{credential_number}} записей",
- "Search credential..." : "Искать запись…",
+ "Search for credential…" : "Поиск записи…",
"Account" : "Аккаунт",
"Password" : "Пароль",
"OTP" : "OTP (одноразовый пароль)",
"E-mail" : "Эл. почта",
"URL" : "URL",
"Notes" : "Заметки",
- "Expire time" : "Срок действия",
+ "Expiry time" : "Время истечения",
"Changed" : "Изменено",
"Created" : "Создано",
"Edit" : "Редактировать",
@@ -220,8 +221,8 @@
"Destroy" : "Уничтожить",
"Use regex" : "Использовать регулярные выражения",
"You have incoming share requests." : "У вас входящий запрос на общий доступ.",
- "If you want to put the credential in a other vault," : "Если Вы хотите поместить учетные данные в другое хранилище,",
- "logout of this vault and login to the vault you want the shared credential in." : "выйдите из этого хранилища и войдите в хранилище, которое содержит общие реквизиты.",
+ "If you want to put the credential in another vault," : "Если Вы хотите поместить записи в другое хранилище,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "выйдите из этого хранилища и войдите в хранилище с которым вы хотите поделиться.",
"Permissions" : "Права доступа",
"Received from" : "Получено от",
"Date" : "Дата",
@@ -235,35 +236,35 @@
"Password strength must be at least: {{strength}}" : "Устойчивать пароля должна быть не ниже: {{strength}}",
"Please give your new vault a name." : "Укажите имя нового хранилища.",
"Repeat vault password" : "Повторите пароль хранилища",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Ключ доступа будет иметь устойчивость 1024 бита, позже вы можете изменить ее в настройках.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Общий ключ будет иметь устойчивость 1024 бита, позже вы можете изменить её в настройках.",
"Create vault" : "Создать хранилище",
"Go back to vaults" : "Вернуться в хранилище",
"Please input the password for" : "Введите пароль для",
- "Set this vault as default." : "Установить текущее хранилище хранилищем по-умолчанию.",
- "Login automatically to this vault." : "Автоматически входить в это хранилище.",
- "Logout of this vault automatically after: " : "Автоматически выходить из этого хранилища через:",
+ "Set this vault as the default." : "Установить текущее хранилище по умолчанию.",
+ "Log into this vault automatically." : "Автоматически входить в это хранилище.",
+ "Log out of this vault automatically after: " : "Автоматически выходить из этого хранилища через:",
"Decrypt vault" : "Расшифровать хранилище",
- "Seems you lost the vault password and you're unable to login." : "Вероятно, вы утеряли пароль хранилища. Вход не возможен.",
- "If you want this vault removed you can request removal of the vault here." : "Если хотите удалить это хранилище, тут можно подать запрос на его удаление.",
- "An admin then accept to the request (or not)" : "После этого администратор рассмотрит Ваш запрос",
- "After an admin destroy's this vault, all credentials will be lost" : "После удаления хранилища администратором, все записи будет потеряны.",
- "Reason to request deletion (optional):" : "Причина запроса на удаление (необязательно):",
+ "Seems you lost the vault password and you're unable to log in." : "Вероятно, вы утеряли пароль хранилища. Вход не возможен.",
+ "If you want this vault to be removed you can request that here." : "Если вы хотите, чтобы это хранилище было удалено, вы можете запросить это здесь.",
+ "An admin then accepts or declines the request" : "После этого администратор примет или отклонит запрос",
+ "After an admin destroys this vault, all credentials in it will be lost" : "После удаления хранилища администратором, все записи внутри хранилища будет потеряны.",
+ "Reason for requesting deletion (optional):" : "Причина запроса на удаление (необязательно):",
"Request vault destruction" : "Запросить уничтожение хранилища",
"Yes, request an admin to destroy this vault" : "Да, запросить удаление этого хранилища администратором.",
"Cancel destruction request" : "Отменить запрос удаления",
"Vault destruction requested" : "Удаление хранилища запрошено",
"Request removed" : "Запрос удалён",
"Destruction request pending" : "Запрос на удаление в ожидании",
- "Warning! Adding credentials over http can be insecure!" : "Предупреждение! Добавление реквизитов с использованием протокола http может быть небезопасно!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Предупреждение! Добавление записей по HTTP небезопасно!",
"Logged in to {{vault_name}}" : "Вошли в {{vault_name}}",
"Change vault" : "Изменить хранилище",
"Deleted credentials" : "Удалённые реквизиты",
"Logout" : "Выйти",
"Donate" : "Пожертвовать",
"Someone has shared a credential with you." : "Кто-то поделился с вами записью.",
- "Click here to request it" : "Щелкните здесь для их получения.",
- "Loading..." : "Загрузка...",
- "Awwhh.... credential not found. Maybe it expired" : "Запись не найдена. Возможно, закончился срок её действия.",
+ "Click here to request it" : "Нажмите здесь для их получения.",
+ "Loading…" : "Загрузка...",
+ "Awwhh… credential not found. Maybe it expired" : "Запись не найдена. Возможно, закончился срок её действия.",
"Error while saving field" : "Ошибка при сохранении поля",
"A Passman item has been created, modified or deleted" : "Элемент Passman был создан, изменён или удалён",
"A Passman item has expired" : "У элемента Passman закончился срок действия",
@@ -287,23 +288,24 @@
"%1$s has been shared with %2$s" : "%1$s поделились с %2$s",
"You received a share request for %1$s from %2$s" : "Вы получили запрос на предоставление общего доступа к %1$s от %2$s",
"%s has been shared with a link" : "к %s был предоставлен общий доступ ссылкой",
- "Your credential \"%s\" expired, click here to update the credential." : "Истёк срок действия записи \"%s\", щелкните здесь для обновления.",
+ "Your credential \"%s\" expired, click here to update the credential." : "Истёк срок действия записи «%s», нажмите здесь для обновления.",
"Remind me later" : "Напомнить позже",
"Ignore" : "Пропустить",
- "%s shared \"%s\" with you. Click here to accept" : "%s предоставил вам доступ к \"%s\". Щёлкните здесь что бы принять.",
- "%s has declined your share request for \"%s\"." : "%s отклонил ваш запрос на предоставление общего доступа к \"%s\".",
- "%s has accepted your share request for \"%s\"." : "%s принял ваш запрос на предоставление общего доступа к \"%s\".",
+ "%s shared \"%s\" with you. Click here to accept" : "%s предоставил вам доступ к «%s». Нажмите здесь что бы принять.",
+ "%s has declined your share request for \"%s\"." : "%s отклонил ваш запрос на предоставление общего доступа к «%s».",
+ "%s has accepted your share request for \"%s\"." : "%s принял ваш запрос на предоставление общего доступа к «%s».",
+ "Passman" : "Passman",
"Unable to get version info" : "Невозможно получить информацию о версии",
"Passman Settings" : "Настройки Passman",
- "Github version:" : "Версия github:",
- "A newer version of passman is available" : "Доступна новая версия passman",
+ "GitHub version:" : "Версия GitHub:",
+ "A newer version of Passman is available" : "Доступна новая версия Passman",
"Password sharing" : "Общий доступ к паролями",
"Credential mover" : "Перемещение записей",
"Vault destruction requests" : "Запросы на удаление хранилищ",
"Check for new versions" : "Проверить наличие новых версий",
"Enable HTTPS check" : "Включить проверку HTTPS",
"Disable context menu" : "Отключить контекстное меню",
- "Disable javascript debugger" : "Отключите отладчик javascript ",
+ "Disable JavaScript debugger" : "Отключите отладчик JavaScript",
"Allow users on this server to share passwords with a link" : "Разрешить пользователям этого сервера делиться паролями посредством ссылки",
"Allow users on this server to share passwords with other users" : "Разрешить пользователям этого сервера делиться паролями с другими пользователями",
"Move credentials from one account to another" : "Перемещение записей между аккаунтами",
diff --git a/l10n/sk.js b/l10n/sk.js
index fb096ce9..b51330fd 100644
--- a/l10n/sk.js
+++ b/l10n/sk.js
@@ -7,22 +7,16 @@ OC.L10N.register(
"Passwords do not match" : "Heslá sa nezhodujú",
"General" : "Všeobecné",
"Custom Fields" : "Vlastné polia",
- "Please fill in a label!" : "Zadajte prosím názov!",
- "Please fill in a value!" : "Zadajte prosím hodnotu!",
"Error loading file" : "Chyba pri načítaní súboru",
- "An error happened during decryption" : "Pri dešifrovaní sa stala chyba",
"Credential created!" : "Prihlasovací údaj bol vytvorený!",
"Credential deleted" : "Prihlasovací údaj bol zmazaný",
"Credential updated" : "Prihlasovací údaj bol aktualizovaný",
"Credential recovered" : "Prihlasovací údaj bol obnovený",
"Credential destroyed" : "Prihlasovací údaj bol zničený",
- "Error downloading file, you probably don't have enough permissions" : "Chyba pri sťahovaní súboru, pravdepodobne nemáte dostatočné oprávnenia",
"Invalid QR code" : "Neplatný QR kód",
"Starting export" : "Začína sa exportovať",
"Decrypting credentials" : "Dešifrovanie prihlasovacích údajov",
"Done" : "Hotovo",
- "File read successfully!" : "Súbor bol úspešne načítaný!",
- "Follow the following steps to import your file" : "Pre importovanie vášho súboru použite nasledujúce kroky",
"Credential has no label, skipping" : "Prihlasovacie údaje nemajú názov, preskakujem",
"Adding {{credential}}" : "Pridávam {{credential}}",
"Added {{credential}}" : "Pridaných {{credential}}",
@@ -31,14 +25,11 @@ OC.L10N.register(
"Revision restored" : "Revízia obnovená",
"Settings saved" : "Nastavenia uložené",
"General settings" : "Všeobecné nastavenia",
- "Password Audit" : "Audit hesla",
"Password settings" : "Nastavenia hesla",
"Import credentials" : "Importovať prihlasovacie údaje",
"Export credentials" : "Exportovať prihlasovacie údaje",
"Sharing" : "Sprístupnenie",
"Your old password is incorrect!" : "Vaše staré heslo nie je správne!",
- "New passwords do not match!" : "Nové heslá sa nezhodujú!",
- "Please login with your new vault password" : "Prihláste sa prosím s vaším novým heslom do trezora",
"Share with users and groups" : "Sprístupniť používateľom a skupinám",
"Share link" : "Sprístupniť odkaz",
"Credential unshared" : "Zrušené sprístupnenie prihlasovacích údajov",
@@ -57,7 +48,6 @@ OC.L10N.register(
"Complete" : "Dokončené",
"Username" : "Meno používateľa",
"Repeat password" : "Zopakujte heslo",
- "Add Tag" : "Pridať štítok",
"Field label" : "Názov poľa",
"Field value" : "Hodnota poľa",
"Choose a file" : "Vyberte súbor",
@@ -73,8 +63,6 @@ OC.L10N.register(
"Size" : "Veľkosť",
"Current OTP settings" : "Aktuálne OTP nastavenia",
"Issuer" : "Vydavateľ",
- "Expire date" : "Dátum expirácie",
- "No expire date set" : "Dátum expirácie nie je zadaný",
"Renew interval" : "Interval obnovenia",
"Disabled" : "Zakázaný",
"Password generation settings" : "Nastavenia vytvorenia hesla",
@@ -95,7 +83,6 @@ OC.L10N.register(
"Change vault key" : "Zmena kľúča do trezora",
"Old vault password" : "Staré heslo do trezora",
"New vault password" : "Nové heslo do trezora",
- "New vault password repeat" : "Zopakovať nové heslo do trezora",
"Please wait your vault is being updated, do not leave this page." : "Počkajte prosím kým sa trezor aktualizuje, neopúšťajte túto stránku.",
"Processing" : "Spracovávam",
"Total progress" : "Celkový priebeh",
@@ -115,7 +102,6 @@ OC.L10N.register(
"Minimum password stength" : "Minimálna sila hesla",
"Score" : "Skóre",
"Action" : "Akcia",
- "Search users or groups..." : "Vyhľadať používateľov alebo skupiny...",
"Cyphering" : "Šifrovanie",
"Uploading" : "Nahrávanie",
"User" : "Používateľ",
diff --git a/l10n/sk.json b/l10n/sk.json
index 6c96ebed..21e90835 100644
--- a/l10n/sk.json
+++ b/l10n/sk.json
@@ -5,22 +5,16 @@
"Passwords do not match" : "Heslá sa nezhodujú",
"General" : "Všeobecné",
"Custom Fields" : "Vlastné polia",
- "Please fill in a label!" : "Zadajte prosím názov!",
- "Please fill in a value!" : "Zadajte prosím hodnotu!",
"Error loading file" : "Chyba pri načítaní súboru",
- "An error happened during decryption" : "Pri dešifrovaní sa stala chyba",
"Credential created!" : "Prihlasovací údaj bol vytvorený!",
"Credential deleted" : "Prihlasovací údaj bol zmazaný",
"Credential updated" : "Prihlasovací údaj bol aktualizovaný",
"Credential recovered" : "Prihlasovací údaj bol obnovený",
"Credential destroyed" : "Prihlasovací údaj bol zničený",
- "Error downloading file, you probably don't have enough permissions" : "Chyba pri sťahovaní súboru, pravdepodobne nemáte dostatočné oprávnenia",
"Invalid QR code" : "Neplatný QR kód",
"Starting export" : "Začína sa exportovať",
"Decrypting credentials" : "Dešifrovanie prihlasovacích údajov",
"Done" : "Hotovo",
- "File read successfully!" : "Súbor bol úspešne načítaný!",
- "Follow the following steps to import your file" : "Pre importovanie vášho súboru použite nasledujúce kroky",
"Credential has no label, skipping" : "Prihlasovacie údaje nemajú názov, preskakujem",
"Adding {{credential}}" : "Pridávam {{credential}}",
"Added {{credential}}" : "Pridaných {{credential}}",
@@ -29,14 +23,11 @@
"Revision restored" : "Revízia obnovená",
"Settings saved" : "Nastavenia uložené",
"General settings" : "Všeobecné nastavenia",
- "Password Audit" : "Audit hesla",
"Password settings" : "Nastavenia hesla",
"Import credentials" : "Importovať prihlasovacie údaje",
"Export credentials" : "Exportovať prihlasovacie údaje",
"Sharing" : "Sprístupnenie",
"Your old password is incorrect!" : "Vaše staré heslo nie je správne!",
- "New passwords do not match!" : "Nové heslá sa nezhodujú!",
- "Please login with your new vault password" : "Prihláste sa prosím s vaším novým heslom do trezora",
"Share with users and groups" : "Sprístupniť používateľom a skupinám",
"Share link" : "Sprístupniť odkaz",
"Credential unshared" : "Zrušené sprístupnenie prihlasovacích údajov",
@@ -55,7 +46,6 @@
"Complete" : "Dokončené",
"Username" : "Meno používateľa",
"Repeat password" : "Zopakujte heslo",
- "Add Tag" : "Pridať štítok",
"Field label" : "Názov poľa",
"Field value" : "Hodnota poľa",
"Choose a file" : "Vyberte súbor",
@@ -71,8 +61,6 @@
"Size" : "Veľkosť",
"Current OTP settings" : "Aktuálne OTP nastavenia",
"Issuer" : "Vydavateľ",
- "Expire date" : "Dátum expirácie",
- "No expire date set" : "Dátum expirácie nie je zadaný",
"Renew interval" : "Interval obnovenia",
"Disabled" : "Zakázaný",
"Password generation settings" : "Nastavenia vytvorenia hesla",
@@ -93,7 +81,6 @@
"Change vault key" : "Zmena kľúča do trezora",
"Old vault password" : "Staré heslo do trezora",
"New vault password" : "Nové heslo do trezora",
- "New vault password repeat" : "Zopakovať nové heslo do trezora",
"Please wait your vault is being updated, do not leave this page." : "Počkajte prosím kým sa trezor aktualizuje, neopúšťajte túto stránku.",
"Processing" : "Spracovávam",
"Total progress" : "Celkový priebeh",
@@ -113,7 +100,6 @@
"Minimum password stength" : "Minimálna sila hesla",
"Score" : "Skóre",
"Action" : "Akcia",
- "Search users or groups..." : "Vyhľadať používateľov alebo skupiny...",
"Cyphering" : "Šifrovanie",
"Uploading" : "Nahrávanie",
"User" : "Používateľ",
diff --git a/l10n/sq.js b/l10n/sq.js
index b6ba12f5..a2a06f82 100644
--- a/l10n/sq.js
+++ b/l10n/sq.js
@@ -7,39 +7,35 @@ OC.L10N.register(
"Passwords do not match" : "Fjalëkalimet nuk përputhen",
"General" : "I Përgjithshëm",
"Custom Fields" : "Fusha të Personalizuar",
- "Please fill in a label!" : "Ju lutem plotësoni një etiketë!",
- "Please fill in a value!" : "Ju lutemi fusni një vlerë!",
"Error loading file" : "Gjabim gjatë ngarkimit të skedarit",
- "An error happened during decryption" : "Një gabim ndodhi gjatë dekodimit",
"Credential created!" : "Kredenciali u krijua!",
"Credential deleted" : "Kredenciali u fshi",
"Credential updated" : "Kredenciali u përditësua",
"Credential recovered" : "Kredenciali u rimor",
"Credential destroyed" : "Kredencial i shkatërruar",
- "Error downloading file, you probably don't have enough permissions" : "Gabim gjatë shkarkimit të skedarit, ju ndoshta nuk keni leje të mjaftueshme",
"Invalid QR code" : "Kod QR i pavlefshëm",
"Starting export" : "Duke filluar eksportimin",
"Decrypting credentials" : "Duke shifruar kredencialet",
"Done" : "U bë",
- "File read successfully!" : "Skedari u lexuar me sukses!",
"Credential has no label, skipping" : "Kredencialet nuk kan etiketë, anashkalohet",
"Adding {{credential}}" : "Duke shtuar {{credential}}",
"Added {{credential}}" : "Shtuar {{credential}}",
"Parsed {{num}} credentials, starting to import" : "Parsed {{num}} kredencialet, duke filluar importimin",
+ "Importing" : "Duke u importuar",
+ "Start import" : "Fillo importimin",
+ "Select CSV file" : "Zgjidh skedarin CSV",
+ "Skip first row" : "Kaloje rreshtin e parë",
"Revision deleted" : "Rishikimi u fshi",
"Revision restored" : "Rishikimi u Restaurua",
- "Save in passman" : "Ruaj ne Passman",
"Settings saved" : "Opsjonet u Ruajtën.",
"General settings" : "Opsjonet e Pergjithshme",
- "Password Audit" : "Fjalekalimi Revizjonit",
"Password settings" : "Opsjonet e Fjalëkalimit",
"Import credentials" : "Importo kredencialin",
"Export credentials" : "Eksporto kredencialin",
"Sharing" : "Shperndaj",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Jeni të sigurt që doni të largoheni? Kjo DO TË dëmtoj të gjithë kredencialet tuaja",
"Your old password is incorrect!" : "Fjalëkalimi juaj i vjetër është i pasakt!",
- "New passwords do not match!" : "Fjalëkalimet e reja nuk përputhen! ",
- "Please login with your new vault password" : "Ju lutem identifikohuni me fjalëkalimin tuaj të ri të kasafortës",
+ "New password does not match!" : "Fjalëkalimi i ri nuk përputhet!",
+ "Please log in with your new vault password" : "Ju lutem hyni me fjalëkalimin tuaj të ri të kasafortës",
"Share with users and groups" : "Ndaj me përdoruesit dhe grupet",
"Share link" : "Ndaj lidhje",
"Are you sure you want to leave? This will corrupt this credential" : "Jeni të sigurt që doni të largoheni? Kjo do tju demtoj Kredencialet",
@@ -47,6 +43,9 @@ OC.L10N.register(
"Credential shared" : "Kredencialet e shperndara",
"Saved!" : "U Ruajt!",
"Poor" : "I varfër",
+ "Weak" : "I dobët",
+ "Good" : "I mirë",
+ "Strong" : "I fortë",
"Toggle visibility" : "Shikim i Dyfisht",
"Copy to clipboard" : "Kopjo në dërrasë ",
"Copied to clipboard!" : "U kopjua në dërrasë",
@@ -56,7 +55,6 @@ OC.L10N.register(
"Complete" : "I Perfunduar",
"Username" : "Emri i Përdorusit",
"Repeat password" : "Përsërit Fjalëkalimin",
- "Add Tag" : "Shto etiketimin",
"Field label" : "Etiketa Fushës",
"Field value" : "Vlera Fushës",
"Choose a file" : "Zgjidh një Skedar",
@@ -73,8 +71,6 @@ OC.L10N.register(
"Current OTP settings" : "Opsionet aktuale të OTP-së ",
"Issuer" : "Lëshuesi",
"Secret" : "Sekret",
- "Expire date" : "Data e Skadencës",
- "No expire date set" : "Ska datë skadence të vendosur",
"Renew interval" : "Rinovo Intervalin",
"Disabled" : "I Çaktivizuar",
"Day(s)" : "Dite(-ët)",
@@ -98,7 +94,7 @@ OC.L10N.register(
"Change vault key" : "Ndrysho çelësin e kasafortes",
"Old vault password" : "Fjalëkalimi i vjetër i Kasafortës",
"New vault password" : "Fjalëkalimi i ri i Kasafortës",
- "New vault password repeat" : "Përsërit Fjalëkalimi i ri të Kasafortës ",
+ "Repeat new vault password" : "Përsërit fjalëkalimin e kasafortës së re",
"Please wait your vault is being updated, do not leave this page." : "Ju lutëm prisni, kasaforta juaj po përditësoht. Mos u largoni nga faqa",
"Processing" : "Në përpunim",
"Total progress" : "Përparimi Total",
@@ -108,6 +104,7 @@ OC.L10N.register(
"Bookmarklet" : "Libër Shënues",
"Save your passwords with 1 click!" : "Ruani fjalëkalimin tuaj me 1 të shtypur!",
"Drag below button to your bookmark toolbar." : "Rrëshqit butonin e mëposhtëm tek rreshti i veglave të punës",
+ "Yes, delete my precious passwords" : "Po, fshije fjalëkalimin tim të çmuar",
"Import type" : "Tipi Importit",
"Import" : "Import",
"Read progress" : "Lexo Përparimin",
@@ -118,13 +115,13 @@ OC.L10N.register(
"Save keys" : "Ruaj Çelësat",
"Generate sharing keys" : "Gjenero Çelësat e Shpërndarjes",
"Generating sharing keys" : "Çelësat e Shpërndarjes po Gjenerohen",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Vegla e Fjalëkalimit do te skanoj fjalëkalimin tuaj, do te llogarise kohën mesatare te zbërthimit, dhe në qoftë se ndodhet nën prag, do ta shfaq",
"Minimum password stength" : "Fuqia Minimale e Fjalëkalimit",
- "Passman scanned your passwords, and here is the result." : "Passman skanoj fjalëkalimin tuaj, dhe ja tek janë rezultatet",
- "A total of {{scan_result}} weak credentials." : "Një total i {{scan_result}} kredencialeve të dobët",
+ "Start scan" : "Fillo skanimin",
+ "Result" : "Rezultatet",
"Score" : "Rezultat",
"Action" : "Veprim",
- "Search users or groups..." : "Kërko përdorues ose grupe...",
+ "Search users or groups…" : "Kërko përdorues ose grup...",
+ "Missing users? Only users that have vaults are shown." : "Po mungojnë përdorues? Vetëm përdorues që kanë kasafortë janë shfaqur.",
"Cyphering" : "Duke u shifruar",
"Uploading" : "Duke u ngarkuar",
"User" : "Përdorues",
@@ -141,6 +138,8 @@ OC.L10N.register(
"Show files" : "Shfaq skedarët",
"Details" : "Detaje",
"Hide details" : "Fsheh detajet",
+ "Password score" : "Rezultati i fjalëkalimit",
+ "Cracking times" : "Herët e plasaritjes",
"100 / hour" : "100 / orë",
"10 / second" : "10 / sekondë",
"10k / second" : "10k / sekondë",
@@ -151,49 +150,135 @@ OC.L10N.register(
"Matched word" : "Fjala e përshtatur",
"Dictionary name" : "Emri i fjalorit",
"Rank" : "Kategoria",
+ "Reversed" : "Mbrapsht",
"Guesses" : "Supozimet",
"Base guesses" : "Bazo supozimet",
"Uppercase variations" : "Variantet me shkronja kapitale",
"l33t-variations" : "133t-variante",
+ "Showing revisions of" : "Shfaqja e rishikimeve të",
+ "Revision of" : "Rishikimi i",
"by" : "nga",
+ "No revisions found." : "Asnjë rishikim nuk u gjet.",
+ "Label" : "Etiketë",
+ "Restore revision" : "Rivendosni rishikimin",
+ "Edit credential" : "Ndrysho kredenciale",
"Create new credential" : "Krijo një kredencial të ri",
"Save" : "Ruaj",
"Cancel" : "Anuloni",
"Settings" : "Konfigurime",
"Share credential {{credential}}" : "Shpërnda kredencialin {{credential}}",
- "All time" : "Gjithë kohës",
- "Search credential..." : "Kërkoni kredencialin...",
+ "Unshare" : "Të pashpërndara",
+ "Showing deleted since" : "Duke shfaqur fshirjet që nga",
+ "Beginning" : "Fillimi",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : " Duke treguar {{numri_i_filtruar}} nga {{numri_i_kredencialit}} kredencialet",
+ "Search for credential…" : "Kërko për kredencial...",
"Account" : "Llogaria",
"Password" : "Fjalëkalimi",
+ "OTP" : "OTP",
"E-mail" : "E-Mail",
"URL" : "URL",
"Notes" : "Shënime",
- "Expire time" : "Koha e skadimit",
+ "Expiry time" : "Koha e skadimit",
"Changed" : "Ndryshuar",
"Created" : "U krijua",
"Edit" : "Përpunoni",
"Delete" : "Fshi",
"Share" : "Ndani me të tjerët",
+ "Recover" : "Shërim",
+ "Destroy" : "Shkatërro",
+ "Use regex" : "Përdor shprehje të rregullt",
+ "You have incoming share requests." : "Ju keni kërkesa hyrëse për shpërndarje",
+ "If you want to put the credential in another vault," : "Në qoftë se doni të vendosni kredencialin në një kasafortë tjetër,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "dil nga kjo kasafortë dhe hy në kasafortën në të cilën ju doni kredecialin e përbashkët.",
+ "Permissions" : "Lejet",
+ "Received from" : "Marrë nga",
"Date" : "Data",
"Accept" : "Prano",
+ "Decline" : "Rënie",
+ "You have {{session_time}} left before logout." : "Ju keni {{kohë_sesioni}} të mbetur para darljes.",
+ "Last accessed" : "I aksesuar së fundmi",
"Never" : "Asnjëherë",
+ "No vaults found, why not create one?" : "Asnjë kasafortë e gjetur, pse nuk krijoni një?",
+ "Password strength must be at least: {{strength}}" : "Fuqia e fjalëkalimit duhet të jetë të paktën: {{fuqi}}",
+ "Please give your new vault a name." : "Ju lutemi jepini kasafortës suaj një emër",
+ "Repeat vault password" : "Përsërit fjalëkalimin e kasafortës",
+ "Create vault" : "Krijo kasafortë",
+ "Go back to vaults" : "Shko prapa tek kasafortët",
+ "Please input the password for" : "Ju lutemi fusni fjalëkalimet për",
+ "Set this vault as the default." : "Vendos këtë kasafortë si të parapërzgjedhur.",
+ "Log into this vault automatically." : "Identifikohu në këtë kasafortë automatikisht.",
+ "Log out of this vault automatically after: " : "Dilni nga kjo kasafortë automatikisht pas:",
+ "Decrypt vault" : "Dikripto kasafortën",
+ "Seems you lost the vault password and you're unable to log in." : "Duket sikur ju keni humbur fjalëkalimin e kasafortës dhe ju nuk jeni në gjendje të hyni.",
+ "If you want this vault to be removed you can request that here." : "Nqs doni ",
+ "An admin then accepts or declines the request" : "Pastaj një administartor pranon ose refuzon kërkesën",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Pasi një administrator shkatërron kasafortën e tij, të gjitha kredencialet do të humbasin",
+ "Request vault destruction" : "Kërko shkatërrim kasaforte",
+ "Yes, request an admin to destroy this vault" : "Po, kërko një administrator për të shkatërruar këtë kasafortë",
+ "Cancel destruction request" : "Anulo kërkesën për shkatërrimin",
+ "Vault destruction requested" : "Shkatërrimi i kasafortësi i kërkuar",
+ "Request removed" : "Kërkesa u hoq",
+ "Destruction request pending" : "Kërkesa për shkatërrim në pritje",
+ "Warning! Adding credentials over HTTP is insecure!" : "Paralajmërim! Shtimi i kredencialeve me HTTP është i pasigurtë!",
+ "Logged in to {{vault_name}}" : "Hyrë ne {{emri_kasafortës}}",
+ "Change vault" : "Ndrysho kasafortë",
"Deleted credentials" : "Kredencialet e fshira",
"Logout" : "Dil",
"Donate" : "Dhuroni",
+ "Someone has shared a credential with you." : "Dikush ka ndarë me ty një kredencial",
"Click here to request it" : "Klikoni këtu për ta porositur atë",
- "Loading..." : "Po ngarkohet",
- "Awwhh.... credential not found. Maybe it expired" : "Awwhh... kredenciali nuk u gjet. Ndoshta i ka mbaruar afati",
+ "Loading…" : "Duke u ngarkuar...",
+ "Error while saving field" : "Gabim gjatë ruajtjes së fushës",
+ "A Passman item has been created, modified or deleted" : "Një artikull Passman-i është krijuar, modifikuar ose fshirë",
+ "A Passman item has expired" : "Një artikull Passman-i ka skaduar",
+ "A Passman item has been shared" : "Një artikull Passman-i është shpërndarë",
+ "A Passman item has been renamed" : "Një artikull Passman-i është riemëruar",
"%1$s has been created by %2$s" : "%1$s është krijuar nga %2$s",
"You created %1$s" : "Ju krijuat %1$s",
"%1$s has been updated by %2$s" : "%1$s është përditësuar nga %2$s",
"You updated %1$s" : "Ju përditësuat %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$ska korrigjuar %1$snë versionin e %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "Ju kthyhet%1$s prapa në versionin e %3$s",
"%3$s has renamed %1$s to %2$s" : "%3$s riemëroi %1$s në %2$s",
"You renamed %1$s to %2$s" : "Ju riemëruat %1$s në %2$s",
"%1$s has been deleted by %2$s" : "%1$s është fshirë nga %2$s",
"You deleted %1$s" : "Fshitë %1$s",
+ "%1$s has been recovered by %2$s" : "%1$sështë rimarrë nga %2$s",
+ "You recovered %1$s" : "Ju rimorët %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%1$sështë fshirë përgjithmon nga %2$s",
+ "You permanently deleted %1$s" : "Ju fshitë përgjithmon %1$s",
"The password of %1$s has expired, renew it now." : "Fjalëkalimi i %1$s skadoi, rinovojeni tani. ",
+ "%1$s has been shared with %2$s" : "%1$sështë ndar me %2$s",
+ "You received a share request for %1$s from %2$s" : "Ju morët një kërkesë për ndarje për %1$snga %2$s",
+ "%s has been shared with a link" : "%sështë ndar me një link",
"Your credential \"%s\" expired, click here to update the credential." : "Kredenciali juaj \"%s\" skadoi, klikoni këtu për të përditësuar kredencialin.",
"Remind me later" : "Kujtomë më vonë",
+ "Ignore" : "Injoro",
+ "%s shared \"%s\" with you. Click here to accept" : "%s ndau\"%s\" me ju. Kliko këtu pë ta pranuar",
+ "%s has declined your share request for \"%s\"." : "%s ka refuzuar të ndaj kërkesën për \"%s\".",
+ "%s has accepted your share request for \"%s\"." : "%ska pranuar kërkesën tuaj për shpërndarjen e \"%s\"",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Nuk ishim në gjëndje të merrnim informcion mbi versionin",
+ "Passman Settings" : "Konfigurimet e Passman",
+ "GitHub version:" : "Versioni GitHub:",
+ "A newer version of Passman is available" : "Një version i ri i Passman është i gatshëm",
+ "Password sharing" : "Ndarja e fjalëkalimeve",
+ "Credential mover" : "Lëvizësi i kredencialeve",
+ "Vault destruction requests" : "Kërkesa për shkatërrimin e kasafortës",
+ "Check for new versions" : "Kontrollo për versione të reja",
+ "Enable HTTPS check" : "Aktivizo kontrollin e HTTPS ",
+ "Disable context menu" : "Ç'aktivizo menun e kontekstit",
+ "Disable JavaScript debugger" : "Çaktivizo Zbuluesin e Gabimeve të JavaScript",
+ "Allow users on this server to share passwords with a link" : "Lejo përdoruesit në këtë server të ndajnë fjalëkalimet me një link",
+ "Allow users on this server to share passwords with other users" : "Lejo përdoruesit në këtë server të ndajn fjalëkalimet me përdoruesit e tjerë",
+ "Move credentials from one account to another" : "Lëvizi kredencialet nga një llogari te tjetra",
+ "Source account" : "Llogaria burim",
+ "Destination account" : "Llogaria destinacion",
+ "Credentials moved!" : "Kredencialet u lëvizën!",
+ "Requests to destroy vault" : "Kërkesa për të shkatërruar kasafortën",
+ "Request ID" : "Kërko ID",
+ "Requested by" : "U kërkua nga",
+ "Reason" : "Arsyeja",
"Connection to server lost" : "Lidhja me serverin u shkëput",
"Problem loading page, reloading in 5 seconds" : "Gabim në ngarkimin e faqes, do të ringarkohet pas 5 sekondash",
"Saving..." : "Po ruhet …",
diff --git a/l10n/sq.json b/l10n/sq.json
index ca55379a..dcdf7960 100644
--- a/l10n/sq.json
+++ b/l10n/sq.json
@@ -5,39 +5,35 @@
"Passwords do not match" : "Fjalëkalimet nuk përputhen",
"General" : "I Përgjithshëm",
"Custom Fields" : "Fusha të Personalizuar",
- "Please fill in a label!" : "Ju lutem plotësoni një etiketë!",
- "Please fill in a value!" : "Ju lutemi fusni një vlerë!",
"Error loading file" : "Gjabim gjatë ngarkimit të skedarit",
- "An error happened during decryption" : "Një gabim ndodhi gjatë dekodimit",
"Credential created!" : "Kredenciali u krijua!",
"Credential deleted" : "Kredenciali u fshi",
"Credential updated" : "Kredenciali u përditësua",
"Credential recovered" : "Kredenciali u rimor",
"Credential destroyed" : "Kredencial i shkatërruar",
- "Error downloading file, you probably don't have enough permissions" : "Gabim gjatë shkarkimit të skedarit, ju ndoshta nuk keni leje të mjaftueshme",
"Invalid QR code" : "Kod QR i pavlefshëm",
"Starting export" : "Duke filluar eksportimin",
"Decrypting credentials" : "Duke shifruar kredencialet",
"Done" : "U bë",
- "File read successfully!" : "Skedari u lexuar me sukses!",
"Credential has no label, skipping" : "Kredencialet nuk kan etiketë, anashkalohet",
"Adding {{credential}}" : "Duke shtuar {{credential}}",
"Added {{credential}}" : "Shtuar {{credential}}",
"Parsed {{num}} credentials, starting to import" : "Parsed {{num}} kredencialet, duke filluar importimin",
+ "Importing" : "Duke u importuar",
+ "Start import" : "Fillo importimin",
+ "Select CSV file" : "Zgjidh skedarin CSV",
+ "Skip first row" : "Kaloje rreshtin e parë",
"Revision deleted" : "Rishikimi u fshi",
"Revision restored" : "Rishikimi u Restaurua",
- "Save in passman" : "Ruaj ne Passman",
"Settings saved" : "Opsjonet u Ruajtën.",
"General settings" : "Opsjonet e Pergjithshme",
- "Password Audit" : "Fjalekalimi Revizjonit",
"Password settings" : "Opsjonet e Fjalëkalimit",
"Import credentials" : "Importo kredencialin",
"Export credentials" : "Eksporto kredencialin",
"Sharing" : "Shperndaj",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Jeni të sigurt që doni të largoheni? Kjo DO TË dëmtoj të gjithë kredencialet tuaja",
"Your old password is incorrect!" : "Fjalëkalimi juaj i vjetër është i pasakt!",
- "New passwords do not match!" : "Fjalëkalimet e reja nuk përputhen! ",
- "Please login with your new vault password" : "Ju lutem identifikohuni me fjalëkalimin tuaj të ri të kasafortës",
+ "New password does not match!" : "Fjalëkalimi i ri nuk përputhet!",
+ "Please log in with your new vault password" : "Ju lutem hyni me fjalëkalimin tuaj të ri të kasafortës",
"Share with users and groups" : "Ndaj me përdoruesit dhe grupet",
"Share link" : "Ndaj lidhje",
"Are you sure you want to leave? This will corrupt this credential" : "Jeni të sigurt që doni të largoheni? Kjo do tju demtoj Kredencialet",
@@ -45,6 +41,9 @@
"Credential shared" : "Kredencialet e shperndara",
"Saved!" : "U Ruajt!",
"Poor" : "I varfër",
+ "Weak" : "I dobët",
+ "Good" : "I mirë",
+ "Strong" : "I fortë",
"Toggle visibility" : "Shikim i Dyfisht",
"Copy to clipboard" : "Kopjo në dërrasë ",
"Copied to clipboard!" : "U kopjua në dërrasë",
@@ -54,7 +53,6 @@
"Complete" : "I Perfunduar",
"Username" : "Emri i Përdorusit",
"Repeat password" : "Përsërit Fjalëkalimin",
- "Add Tag" : "Shto etiketimin",
"Field label" : "Etiketa Fushës",
"Field value" : "Vlera Fushës",
"Choose a file" : "Zgjidh një Skedar",
@@ -71,8 +69,6 @@
"Current OTP settings" : "Opsionet aktuale të OTP-së ",
"Issuer" : "Lëshuesi",
"Secret" : "Sekret",
- "Expire date" : "Data e Skadencës",
- "No expire date set" : "Ska datë skadence të vendosur",
"Renew interval" : "Rinovo Intervalin",
"Disabled" : "I Çaktivizuar",
"Day(s)" : "Dite(-ët)",
@@ -96,7 +92,7 @@
"Change vault key" : "Ndrysho çelësin e kasafortes",
"Old vault password" : "Fjalëkalimi i vjetër i Kasafortës",
"New vault password" : "Fjalëkalimi i ri i Kasafortës",
- "New vault password repeat" : "Përsërit Fjalëkalimi i ri të Kasafortës ",
+ "Repeat new vault password" : "Përsërit fjalëkalimin e kasafortës së re",
"Please wait your vault is being updated, do not leave this page." : "Ju lutëm prisni, kasaforta juaj po përditësoht. Mos u largoni nga faqa",
"Processing" : "Në përpunim",
"Total progress" : "Përparimi Total",
@@ -106,6 +102,7 @@
"Bookmarklet" : "Libër Shënues",
"Save your passwords with 1 click!" : "Ruani fjalëkalimin tuaj me 1 të shtypur!",
"Drag below button to your bookmark toolbar." : "Rrëshqit butonin e mëposhtëm tek rreshti i veglave të punës",
+ "Yes, delete my precious passwords" : "Po, fshije fjalëkalimin tim të çmuar",
"Import type" : "Tipi Importit",
"Import" : "Import",
"Read progress" : "Lexo Përparimin",
@@ -116,13 +113,13 @@
"Save keys" : "Ruaj Çelësat",
"Generate sharing keys" : "Gjenero Çelësat e Shpërndarjes",
"Generating sharing keys" : "Çelësat e Shpërndarjes po Gjenerohen",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Vegla e Fjalëkalimit do te skanoj fjalëkalimin tuaj, do te llogarise kohën mesatare te zbërthimit, dhe në qoftë se ndodhet nën prag, do ta shfaq",
"Minimum password stength" : "Fuqia Minimale e Fjalëkalimit",
- "Passman scanned your passwords, and here is the result." : "Passman skanoj fjalëkalimin tuaj, dhe ja tek janë rezultatet",
- "A total of {{scan_result}} weak credentials." : "Një total i {{scan_result}} kredencialeve të dobët",
+ "Start scan" : "Fillo skanimin",
+ "Result" : "Rezultatet",
"Score" : "Rezultat",
"Action" : "Veprim",
- "Search users or groups..." : "Kërko përdorues ose grupe...",
+ "Search users or groups…" : "Kërko përdorues ose grup...",
+ "Missing users? Only users that have vaults are shown." : "Po mungojnë përdorues? Vetëm përdorues që kanë kasafortë janë shfaqur.",
"Cyphering" : "Duke u shifruar",
"Uploading" : "Duke u ngarkuar",
"User" : "Përdorues",
@@ -139,6 +136,8 @@
"Show files" : "Shfaq skedarët",
"Details" : "Detaje",
"Hide details" : "Fsheh detajet",
+ "Password score" : "Rezultati i fjalëkalimit",
+ "Cracking times" : "Herët e plasaritjes",
"100 / hour" : "100 / orë",
"10 / second" : "10 / sekondë",
"10k / second" : "10k / sekondë",
@@ -149,49 +148,135 @@
"Matched word" : "Fjala e përshtatur",
"Dictionary name" : "Emri i fjalorit",
"Rank" : "Kategoria",
+ "Reversed" : "Mbrapsht",
"Guesses" : "Supozimet",
"Base guesses" : "Bazo supozimet",
"Uppercase variations" : "Variantet me shkronja kapitale",
"l33t-variations" : "133t-variante",
+ "Showing revisions of" : "Shfaqja e rishikimeve të",
+ "Revision of" : "Rishikimi i",
"by" : "nga",
+ "No revisions found." : "Asnjë rishikim nuk u gjet.",
+ "Label" : "Etiketë",
+ "Restore revision" : "Rivendosni rishikimin",
+ "Edit credential" : "Ndrysho kredenciale",
"Create new credential" : "Krijo një kredencial të ri",
"Save" : "Ruaj",
"Cancel" : "Anuloni",
"Settings" : "Konfigurime",
"Share credential {{credential}}" : "Shpërnda kredencialin {{credential}}",
- "All time" : "Gjithë kohës",
- "Search credential..." : "Kërkoni kredencialin...",
+ "Unshare" : "Të pashpërndara",
+ "Showing deleted since" : "Duke shfaqur fshirjet që nga",
+ "Beginning" : "Fillimi",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : " Duke treguar {{numri_i_filtruar}} nga {{numri_i_kredencialit}} kredencialet",
+ "Search for credential…" : "Kërko për kredencial...",
"Account" : "Llogaria",
"Password" : "Fjalëkalimi",
+ "OTP" : "OTP",
"E-mail" : "E-Mail",
"URL" : "URL",
"Notes" : "Shënime",
- "Expire time" : "Koha e skadimit",
+ "Expiry time" : "Koha e skadimit",
"Changed" : "Ndryshuar",
"Created" : "U krijua",
"Edit" : "Përpunoni",
"Delete" : "Fshi",
"Share" : "Ndani me të tjerët",
+ "Recover" : "Shërim",
+ "Destroy" : "Shkatërro",
+ "Use regex" : "Përdor shprehje të rregullt",
+ "You have incoming share requests." : "Ju keni kërkesa hyrëse për shpërndarje",
+ "If you want to put the credential in another vault," : "Në qoftë se doni të vendosni kredencialin në një kasafortë tjetër,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "dil nga kjo kasafortë dhe hy në kasafortën në të cilën ju doni kredecialin e përbashkët.",
+ "Permissions" : "Lejet",
+ "Received from" : "Marrë nga",
"Date" : "Data",
"Accept" : "Prano",
+ "Decline" : "Rënie",
+ "You have {{session_time}} left before logout." : "Ju keni {{kohë_sesioni}} të mbetur para darljes.",
+ "Last accessed" : "I aksesuar së fundmi",
"Never" : "Asnjëherë",
+ "No vaults found, why not create one?" : "Asnjë kasafortë e gjetur, pse nuk krijoni një?",
+ "Password strength must be at least: {{strength}}" : "Fuqia e fjalëkalimit duhet të jetë të paktën: {{fuqi}}",
+ "Please give your new vault a name." : "Ju lutemi jepini kasafortës suaj një emër",
+ "Repeat vault password" : "Përsërit fjalëkalimin e kasafortës",
+ "Create vault" : "Krijo kasafortë",
+ "Go back to vaults" : "Shko prapa tek kasafortët",
+ "Please input the password for" : "Ju lutemi fusni fjalëkalimet për",
+ "Set this vault as the default." : "Vendos këtë kasafortë si të parapërzgjedhur.",
+ "Log into this vault automatically." : "Identifikohu në këtë kasafortë automatikisht.",
+ "Log out of this vault automatically after: " : "Dilni nga kjo kasafortë automatikisht pas:",
+ "Decrypt vault" : "Dikripto kasafortën",
+ "Seems you lost the vault password and you're unable to log in." : "Duket sikur ju keni humbur fjalëkalimin e kasafortës dhe ju nuk jeni në gjendje të hyni.",
+ "If you want this vault to be removed you can request that here." : "Nqs doni ",
+ "An admin then accepts or declines the request" : "Pastaj një administartor pranon ose refuzon kërkesën",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Pasi një administrator shkatërron kasafortën e tij, të gjitha kredencialet do të humbasin",
+ "Request vault destruction" : "Kërko shkatërrim kasaforte",
+ "Yes, request an admin to destroy this vault" : "Po, kërko një administrator për të shkatërruar këtë kasafortë",
+ "Cancel destruction request" : "Anulo kërkesën për shkatërrimin",
+ "Vault destruction requested" : "Shkatërrimi i kasafortësi i kërkuar",
+ "Request removed" : "Kërkesa u hoq",
+ "Destruction request pending" : "Kërkesa për shkatërrim në pritje",
+ "Warning! Adding credentials over HTTP is insecure!" : "Paralajmërim! Shtimi i kredencialeve me HTTP është i pasigurtë!",
+ "Logged in to {{vault_name}}" : "Hyrë ne {{emri_kasafortës}}",
+ "Change vault" : "Ndrysho kasafortë",
"Deleted credentials" : "Kredencialet e fshira",
"Logout" : "Dil",
"Donate" : "Dhuroni",
+ "Someone has shared a credential with you." : "Dikush ka ndarë me ty një kredencial",
"Click here to request it" : "Klikoni këtu për ta porositur atë",
- "Loading..." : "Po ngarkohet",
- "Awwhh.... credential not found. Maybe it expired" : "Awwhh... kredenciali nuk u gjet. Ndoshta i ka mbaruar afati",
+ "Loading…" : "Duke u ngarkuar...",
+ "Error while saving field" : "Gabim gjatë ruajtjes së fushës",
+ "A Passman item has been created, modified or deleted" : "Një artikull Passman-i është krijuar, modifikuar ose fshirë",
+ "A Passman item has expired" : "Një artikull Passman-i ka skaduar",
+ "A Passman item has been shared" : "Një artikull Passman-i është shpërndarë",
+ "A Passman item has been renamed" : "Një artikull Passman-i është riemëruar",
"%1$s has been created by %2$s" : "%1$s është krijuar nga %2$s",
"You created %1$s" : "Ju krijuat %1$s",
"%1$s has been updated by %2$s" : "%1$s është përditësuar nga %2$s",
"You updated %1$s" : "Ju përditësuat %1$s",
+ "%2$s has revised %1$s to the revision of %3$s" : "%2$ska korrigjuar %1$snë versionin e %3$s",
+ "You reverted %1$s back to the revision of %3$s" : "Ju kthyhet%1$s prapa në versionin e %3$s",
"%3$s has renamed %1$s to %2$s" : "%3$s riemëroi %1$s në %2$s",
"You renamed %1$s to %2$s" : "Ju riemëruat %1$s në %2$s",
"%1$s has been deleted by %2$s" : "%1$s është fshirë nga %2$s",
"You deleted %1$s" : "Fshitë %1$s",
+ "%1$s has been recovered by %2$s" : "%1$sështë rimarrë nga %2$s",
+ "You recovered %1$s" : "Ju rimorët %1$s",
+ "%1$s has been permanently deleted by %2$s" : "%1$sështë fshirë përgjithmon nga %2$s",
+ "You permanently deleted %1$s" : "Ju fshitë përgjithmon %1$s",
"The password of %1$s has expired, renew it now." : "Fjalëkalimi i %1$s skadoi, rinovojeni tani. ",
+ "%1$s has been shared with %2$s" : "%1$sështë ndar me %2$s",
+ "You received a share request for %1$s from %2$s" : "Ju morët një kërkesë për ndarje për %1$snga %2$s",
+ "%s has been shared with a link" : "%sështë ndar me një link",
"Your credential \"%s\" expired, click here to update the credential." : "Kredenciali juaj \"%s\" skadoi, klikoni këtu për të përditësuar kredencialin.",
"Remind me later" : "Kujtomë më vonë",
+ "Ignore" : "Injoro",
+ "%s shared \"%s\" with you. Click here to accept" : "%s ndau\"%s\" me ju. Kliko këtu pë ta pranuar",
+ "%s has declined your share request for \"%s\"." : "%s ka refuzuar të ndaj kërkesën për \"%s\".",
+ "%s has accepted your share request for \"%s\"." : "%ska pranuar kërkesën tuaj për shpërndarjen e \"%s\"",
+ "Passman" : "Passman",
+ "Unable to get version info" : "Nuk ishim në gjëndje të merrnim informcion mbi versionin",
+ "Passman Settings" : "Konfigurimet e Passman",
+ "GitHub version:" : "Versioni GitHub:",
+ "A newer version of Passman is available" : "Një version i ri i Passman është i gatshëm",
+ "Password sharing" : "Ndarja e fjalëkalimeve",
+ "Credential mover" : "Lëvizësi i kredencialeve",
+ "Vault destruction requests" : "Kërkesa për shkatërrimin e kasafortës",
+ "Check for new versions" : "Kontrollo për versione të reja",
+ "Enable HTTPS check" : "Aktivizo kontrollin e HTTPS ",
+ "Disable context menu" : "Ç'aktivizo menun e kontekstit",
+ "Disable JavaScript debugger" : "Çaktivizo Zbuluesin e Gabimeve të JavaScript",
+ "Allow users on this server to share passwords with a link" : "Lejo përdoruesit në këtë server të ndajnë fjalëkalimet me një link",
+ "Allow users on this server to share passwords with other users" : "Lejo përdoruesit në këtë server të ndajn fjalëkalimet me përdoruesit e tjerë",
+ "Move credentials from one account to another" : "Lëvizi kredencialet nga një llogari te tjetra",
+ "Source account" : "Llogaria burim",
+ "Destination account" : "Llogaria destinacion",
+ "Credentials moved!" : "Kredencialet u lëvizën!",
+ "Requests to destroy vault" : "Kërkesa për të shkatërruar kasafortën",
+ "Request ID" : "Kërko ID",
+ "Requested by" : "U kërkua nga",
+ "Reason" : "Arsyeja",
"Connection to server lost" : "Lidhja me serverin u shkëput",
"Problem loading page, reloading in 5 seconds" : "Gabim në ngarkimin e faqes, do të ringarkohet pas 5 sekondash",
"Saving..." : "Po ruhet …",
diff --git a/l10n/sv.js b/l10n/sv.js
index eb4cd294..1f38d2fa 100644
--- a/l10n/sv.js
+++ b/l10n/sv.js
@@ -7,22 +7,16 @@ OC.L10N.register(
"Passwords do not match" : "Lösenorden matchar inte",
"General" : "Allmänt",
"Custom Fields" : "Anpassade Fält",
- "Please fill in a label!" : "Fyll i en etikett!",
- "Please fill in a value!" : "Fyll i ett värde!",
"Error loading file" : "Fel vid inläsning av fil",
- "An error happened during decryption" : "Ett fel uppstod vid dekryptering",
"Credential created!" : "Uppgifter skapade!",
"Credential deleted" : "Uppgifterna borttagna",
"Credential updated" : "Uppgifterna uppdaterade",
"Credential recovered" : "Uppgifterna åtställda",
"Credential destroyed" : "Uppgifterna förstörda",
- "Error downloading file, you probably don't have enough permissions" : "Fel vid hämtning av filer, du har förmodligen inte tillräckliga behörigheter",
"Invalid QR code" : "Ogiltig QR-kod",
"Starting export" : "Påbörjar exportering",
"Decrypting credentials" : "Dekrypterar uppgifterna",
"Done" : "Klar",
- "File read successfully!" : "Inläsning av fil lyckades!",
- "Follow the following steps to import your file" : "Utför följande steg för att importera din fil",
"Credential has no label, skipping" : "Uppgifterna saknar etikett, skippar",
"Adding {{credential}}" : "Lägger till {{credential}}",
"Added {{credential}}" : "La till {{credential}}",
@@ -30,24 +24,20 @@ OC.L10N.register(
"Parsed {{num}} credentials, starting to import" : "Analyserade {{num}} uppgifter, börjar importera",
"Importing" : "Importerar",
"Start import" : "Påbörja importering",
- "Select csv file" : "Välj csv-fil",
+ "Select CSV file" : "Välj CSV-fil",
"Skip first row" : "Hoppa över första raden",
"You need to assign the label field before you can start the import." : "Du måste fylla i namnfältet innan du kan importera",
- "First 5 lines of the csv are shown." : "Första 5 raderna i csv-filen visas.",
+ "Assign the proper fields to each column." : "Ange rätt fält till varje kolumm.",
+ "Go back to importers." : "Gå tillbaka till importering.",
"Revision deleted" : "Granskning raderad",
"Revision restored" : "Granskning återställd",
- "Save in passman" : "Spara i passman",
"Settings saved" : "Inställningar sparade",
"General settings" : "Allmänna inställningar",
- "Password Audit" : "Lösenordsgranskning",
"Password settings" : "Lösenordsinställningar",
"Import credentials" : "Importera uppgifter",
"Export credentials" : "Exportera uppgifter",
"Sharing" : "Delar",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Är du säker på att du vill lämna? Detta kommer att förstöra alla dina uppgifter",
"Your old password is incorrect!" : "Ditt gamla lösenord är fel!",
- "New passwords do not match!" : "Nya lösenorden matchar inte!",
- "Please login with your new vault password" : "Logga in med ditt nya lösenord",
"Share with users and groups" : "Dela med användare och grupper",
"Share link" : "Dela länk",
"Are you sure you want to leave? This will corrupt this credential" : "Är du säker att du vill lämna? Detta kommer att fördärva uppgifterna",
@@ -67,7 +57,6 @@ OC.L10N.register(
"Complete" : "Färdigt",
"Username" : "Användarnamn",
"Repeat password" : "Repetera lösenord",
- "Add Tag" : "Lägg till Tagg",
"Field label" : "Fältetikett",
"Field value" : "Fältvärde",
"Choose a file" : "Välj en fil",
@@ -81,11 +70,10 @@ OC.L10N.register(
"Filename" : "Filnamn",
"Upload date" : "Uppladdningsdatum",
"Size" : "Storlek",
+ "Upload or enter your OTP secret" : "Ladda upp eller ange din OTP-hemlighet",
"Current OTP settings" : "Nuvarande OTP-inställningar",
"Issuer" : "Utfärdare",
"Secret" : "Hemlighet",
- "Expire date" : "Utgångsdatum",
- "No expire date set" : "Inget utgångsdatum inställt",
"Renew interval" : "Förnya intervall",
"Disabled" : "Inaktiverad",
"Day(s)" : "Dag(ar)",
@@ -110,7 +98,6 @@ OC.L10N.register(
"Change vault key" : "Ändra valv-nyckel",
"Old vault password" : "Gammalt valv-lösenord",
"New vault password" : "Nytt valv-lösenord",
- "New vault password repeat" : "Repetera nytt valv-lösenord",
"Please wait your vault is being updated, do not leave this page." : "Vänligen vänta, ditt valv håller på att uppdateras. Lämna inte denna sida!",
"Processing" : "Bearbetar",
"Total progress" : "Total framgång",
@@ -124,7 +111,6 @@ OC.L10N.register(
"Vault password" : "Valv-lösenord",
"This process is irreversible" : "Denna process kan inte återkallas",
"Delete my precious passwords" : "Radera mina lösenord",
- "Deleting {{password}}..." : "Raderar {{password}}...",
"Yes, delete my precious passwords" : "Ja, radera mina lösenord",
"Import type" : "Importeringstyp",
"Import" : "Importera",
@@ -136,13 +122,13 @@ OC.L10N.register(
"Save keys" : "Spara nycklar",
"Generate sharing keys" : "Generera delningsnycklar",
"Generating sharing keys" : "Genererar delningsnycklar",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Lösenordsverktyget kommer att skanna ditt lösenord och kalkylera hur lång tid det skulle ta att cracka det. Om det är lägre än vad som är godkänt så visas det.",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Lösenordsverktyget kommer att skanna ditt lösenord, räkna ut genomsnittstiden för att knäcka det och lista de som är under tröskeln",
"Minimum password stength" : "Minsta lösenordsstyrka",
- "Passman scanned your passwords, and here is the result." : "Passman har skannat dina lösenord och här är resultatet.",
- "A total of {{scan_result}} weak credentials." : "Totalt {{scan_result}} svaga uppgifter.",
+ "Start scan" : "Påbörja skanning",
+ "Result" : "Resultat",
+ "A total of {{scan_result}} weak credentials were found." : "Totalt {{scan_result}} svaga lösenord hittades.",
"Score" : "Poäng",
"Action" : "Action",
- "Search users or groups..." : "Sök användare och grupper...",
"Missing users? Only users that have vaults are shown." : "Saknas användare? Endast användare med valv visas.",
"Cyphering" : "Cyphering",
"Uploading" : "Laddar upp",
@@ -157,7 +143,6 @@ OC.L10N.register(
"Enable link sharing" : "Aktivera delningslänkar",
"Share until date" : "Dela till datum",
"Expire after views" : "Upphör efter antal visningar",
- "Click share first" : "Klicka dela först",
"Show files" : "Visa filer",
"Details" : "Detaljer",
"Hide details" : "Göm detaljer",
@@ -197,16 +182,13 @@ OC.L10N.register(
"Share credential {{credential}}" : "Dela uppgifter {{credential}}",
"Unshare" : "Ta bort delning",
"Showing deleted since" : "Visa raderade sedan",
- "All time" : "All tid",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Visar {{number_filtered}} av {{credential_number}} uppgifter",
- "Search credential..." : "Sök uppgifter...",
"Account" : "Konto",
"Password" : "Lösenord",
"OTP" : "Engångslösenord",
"E-mail" : "E-post",
"URL" : "URL",
"Notes" : "Anteckningar",
- "Expire time" : "Utgångsdatum",
"Changed" : "Ändrat",
"Created" : "Skapat",
"Edit" : "Redigera",
@@ -216,30 +198,31 @@ OC.L10N.register(
"Destroy" : "Förstör",
"Use regex" : "Använd reguljära uttryck",
"You have incoming share requests." : "Du har inkommande delningsförfrågningar",
- "If you want to put the credential in a other vault," : "Om du vill placera uppgifterna i ett annat valv,",
- "logout of this vault and login to the vault you want the shared credential in." : "Logga ut från det här valvet och logga in i det valvet du vill ha de delade uppgifterna i.",
"Permissions" : "Behörigheter",
"Received from" : "Mottaget från",
"Date" : "Datum",
"Accept" : "Acceptera",
"Decline" : "Neka",
"You have {{session_time}} left before logout." : "Du har {{session_time}} kvar innan du loggas ut automatiskt.",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Ditt valv har blivit låst i {{time}} pga {{tries}} misslyckade försök!",
"Last accessed" : "Senast öppnad",
"Never" : "Aldrig",
"No vaults found, why not create one?" : "Inga valv hittades, varför inte skapa ett?",
"Password strength must be at least: {{strength}}" : "Lösenordslängden måste vara minst: {{strength}}",
"Please give your new vault a name." : "Ge ditt nya valv ett namn",
"Repeat vault password" : "Repetera valv-lösenord",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Din delningsnycklar kommer att ha en styrka av 1024 bitar som du senare kan ändra i inställningar.",
"Create vault" : "Skapa valv",
"Go back to vaults" : "Gå tillbaka till valv",
"Please input the password for" : "Vänligen ange lösenordet för",
- "Set this vault as default." : "Sätt detta valv som standard.",
- "Login automatically to this vault." : "Logga in automatiskt till detta valv.",
- "Logout of this vault automatically after: " : "Logga ut från denna valv automatiskt efter:",
+ "Log into this vault automatically." : "Logga in i detta valv automatiskt.",
"Decrypt vault" : "Dekryptera valv",
+ "If you want this vault to be removed you can request that here." : "Om du vill att detta valv ska tas bort så kan du skicka en begäran om borttagning här.",
+ "Request vault destruction" : "Begär borttagning av valv",
+ "Yes, request an admin to destroy this vault" : "Ja, begär borttagning av detta valv",
+ "Cancel destruction request" : "Avbryt begäran om borttagning av valv",
+ "Vault destruction requested" : "Ny begäran om borttagning av valv",
"Request removed" : "Förfrågan borttagen",
- "Warning! Adding credentials over http can be insecure!" : "Varning! Att lägga till uppgifter över \"http\" kan vara osäkert!",
+ "Destruction request pending" : "Begäran om borttagning av valv väntar på svar",
"Logged in to {{vault_name}}" : "Inloggad på {{vault_name}}",
"Change vault" : "Byt valv",
"Deleted credentials" : "Radera uppgifter",
@@ -247,8 +230,6 @@ OC.L10N.register(
"Donate" : "Donera",
"Someone has shared a credential with you." : "Någon delade uppgifter med dig",
"Click here to request it" : "Klicka här för att begära det",
- "Loading..." : "Laddar...",
- "Awwhh.... credential not found. Maybe it expired" : "Uppgifterna kunde inte hittas. Har de möjligtvis utgått?",
"Error while saving field" : "Fel vid sparande av fält",
"A Passman item has been created, modified or deleted" : "Ett Passman-objekt har skapats, ändrats eller raderats",
"A Passman item has expired" : "Ett Passman-objekt har utgått",
@@ -278,11 +259,12 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s delade \"%s\" med dig. Klicka här för att acceptera",
"%s has declined your share request for \"%s\"." : "%s har nekat din delningsförfrågan av \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s har accepterad din delningsförfrågan av \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Det gick inte att hitta information om version",
"Passman Settings" : "Passman Inställningar",
- "Github version:" : "Github version:",
- "A newer version of passman is available" : "En nyare version av passman finns tillgänglig",
+ "A newer version of Passman is available" : "Ny nyare version av Passman finns tillgänglig",
"Password sharing" : "Lösenordsdelning",
+ "Credential mover" : "Förflyttning av uppgifter",
"Vault destruction requests" : "Förfrågningar om att radera valv",
"Check for new versions" : "Sök efter ny version",
"Enable HTTPS check" : "Aktivera HTTPS-kontroll",
diff --git a/l10n/sv.json b/l10n/sv.json
index 8f311f73..2ae04dcf 100644
--- a/l10n/sv.json
+++ b/l10n/sv.json
@@ -5,22 +5,16 @@
"Passwords do not match" : "Lösenorden matchar inte",
"General" : "Allmänt",
"Custom Fields" : "Anpassade Fält",
- "Please fill in a label!" : "Fyll i en etikett!",
- "Please fill in a value!" : "Fyll i ett värde!",
"Error loading file" : "Fel vid inläsning av fil",
- "An error happened during decryption" : "Ett fel uppstod vid dekryptering",
"Credential created!" : "Uppgifter skapade!",
"Credential deleted" : "Uppgifterna borttagna",
"Credential updated" : "Uppgifterna uppdaterade",
"Credential recovered" : "Uppgifterna åtställda",
"Credential destroyed" : "Uppgifterna förstörda",
- "Error downloading file, you probably don't have enough permissions" : "Fel vid hämtning av filer, du har förmodligen inte tillräckliga behörigheter",
"Invalid QR code" : "Ogiltig QR-kod",
"Starting export" : "Påbörjar exportering",
"Decrypting credentials" : "Dekrypterar uppgifterna",
"Done" : "Klar",
- "File read successfully!" : "Inläsning av fil lyckades!",
- "Follow the following steps to import your file" : "Utför följande steg för att importera din fil",
"Credential has no label, skipping" : "Uppgifterna saknar etikett, skippar",
"Adding {{credential}}" : "Lägger till {{credential}}",
"Added {{credential}}" : "La till {{credential}}",
@@ -28,24 +22,20 @@
"Parsed {{num}} credentials, starting to import" : "Analyserade {{num}} uppgifter, börjar importera",
"Importing" : "Importerar",
"Start import" : "Påbörja importering",
- "Select csv file" : "Välj csv-fil",
+ "Select CSV file" : "Välj CSV-fil",
"Skip first row" : "Hoppa över första raden",
"You need to assign the label field before you can start the import." : "Du måste fylla i namnfältet innan du kan importera",
- "First 5 lines of the csv are shown." : "Första 5 raderna i csv-filen visas.",
+ "Assign the proper fields to each column." : "Ange rätt fält till varje kolumm.",
+ "Go back to importers." : "Gå tillbaka till importering.",
"Revision deleted" : "Granskning raderad",
"Revision restored" : "Granskning återställd",
- "Save in passman" : "Spara i passman",
"Settings saved" : "Inställningar sparade",
"General settings" : "Allmänna inställningar",
- "Password Audit" : "Lösenordsgranskning",
"Password settings" : "Lösenordsinställningar",
"Import credentials" : "Importera uppgifter",
"Export credentials" : "Exportera uppgifter",
"Sharing" : "Delar",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Är du säker på att du vill lämna? Detta kommer att förstöra alla dina uppgifter",
"Your old password is incorrect!" : "Ditt gamla lösenord är fel!",
- "New passwords do not match!" : "Nya lösenorden matchar inte!",
- "Please login with your new vault password" : "Logga in med ditt nya lösenord",
"Share with users and groups" : "Dela med användare och grupper",
"Share link" : "Dela länk",
"Are you sure you want to leave? This will corrupt this credential" : "Är du säker att du vill lämna? Detta kommer att fördärva uppgifterna",
@@ -65,7 +55,6 @@
"Complete" : "Färdigt",
"Username" : "Användarnamn",
"Repeat password" : "Repetera lösenord",
- "Add Tag" : "Lägg till Tagg",
"Field label" : "Fältetikett",
"Field value" : "Fältvärde",
"Choose a file" : "Välj en fil",
@@ -79,11 +68,10 @@
"Filename" : "Filnamn",
"Upload date" : "Uppladdningsdatum",
"Size" : "Storlek",
+ "Upload or enter your OTP secret" : "Ladda upp eller ange din OTP-hemlighet",
"Current OTP settings" : "Nuvarande OTP-inställningar",
"Issuer" : "Utfärdare",
"Secret" : "Hemlighet",
- "Expire date" : "Utgångsdatum",
- "No expire date set" : "Inget utgångsdatum inställt",
"Renew interval" : "Förnya intervall",
"Disabled" : "Inaktiverad",
"Day(s)" : "Dag(ar)",
@@ -108,7 +96,6 @@
"Change vault key" : "Ändra valv-nyckel",
"Old vault password" : "Gammalt valv-lösenord",
"New vault password" : "Nytt valv-lösenord",
- "New vault password repeat" : "Repetera nytt valv-lösenord",
"Please wait your vault is being updated, do not leave this page." : "Vänligen vänta, ditt valv håller på att uppdateras. Lämna inte denna sida!",
"Processing" : "Bearbetar",
"Total progress" : "Total framgång",
@@ -122,7 +109,6 @@
"Vault password" : "Valv-lösenord",
"This process is irreversible" : "Denna process kan inte återkallas",
"Delete my precious passwords" : "Radera mina lösenord",
- "Deleting {{password}}..." : "Raderar {{password}}...",
"Yes, delete my precious passwords" : "Ja, radera mina lösenord",
"Import type" : "Importeringstyp",
"Import" : "Importera",
@@ -134,13 +120,13 @@
"Save keys" : "Spara nycklar",
"Generate sharing keys" : "Generera delningsnycklar",
"Generating sharing keys" : "Genererar delningsnycklar",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Lösenordsverktyget kommer att skanna ditt lösenord och kalkylera hur lång tid det skulle ta att cracka det. Om det är lägre än vad som är godkänt så visas det.",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Lösenordsverktyget kommer att skanna ditt lösenord, räkna ut genomsnittstiden för att knäcka det och lista de som är under tröskeln",
"Minimum password stength" : "Minsta lösenordsstyrka",
- "Passman scanned your passwords, and here is the result." : "Passman har skannat dina lösenord och här är resultatet.",
- "A total of {{scan_result}} weak credentials." : "Totalt {{scan_result}} svaga uppgifter.",
+ "Start scan" : "Påbörja skanning",
+ "Result" : "Resultat",
+ "A total of {{scan_result}} weak credentials were found." : "Totalt {{scan_result}} svaga lösenord hittades.",
"Score" : "Poäng",
"Action" : "Action",
- "Search users or groups..." : "Sök användare och grupper...",
"Missing users? Only users that have vaults are shown." : "Saknas användare? Endast användare med valv visas.",
"Cyphering" : "Cyphering",
"Uploading" : "Laddar upp",
@@ -155,7 +141,6 @@
"Enable link sharing" : "Aktivera delningslänkar",
"Share until date" : "Dela till datum",
"Expire after views" : "Upphör efter antal visningar",
- "Click share first" : "Klicka dela först",
"Show files" : "Visa filer",
"Details" : "Detaljer",
"Hide details" : "Göm detaljer",
@@ -195,16 +180,13 @@
"Share credential {{credential}}" : "Dela uppgifter {{credential}}",
"Unshare" : "Ta bort delning",
"Showing deleted since" : "Visa raderade sedan",
- "All time" : "All tid",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "Visar {{number_filtered}} av {{credential_number}} uppgifter",
- "Search credential..." : "Sök uppgifter...",
"Account" : "Konto",
"Password" : "Lösenord",
"OTP" : "Engångslösenord",
"E-mail" : "E-post",
"URL" : "URL",
"Notes" : "Anteckningar",
- "Expire time" : "Utgångsdatum",
"Changed" : "Ändrat",
"Created" : "Skapat",
"Edit" : "Redigera",
@@ -214,30 +196,31 @@
"Destroy" : "Förstör",
"Use regex" : "Använd reguljära uttryck",
"You have incoming share requests." : "Du har inkommande delningsförfrågningar",
- "If you want to put the credential in a other vault," : "Om du vill placera uppgifterna i ett annat valv,",
- "logout of this vault and login to the vault you want the shared credential in." : "Logga ut från det här valvet och logga in i det valvet du vill ha de delade uppgifterna i.",
"Permissions" : "Behörigheter",
"Received from" : "Mottaget från",
"Date" : "Datum",
"Accept" : "Acceptera",
"Decline" : "Neka",
"You have {{session_time}} left before logout." : "Du har {{session_time}} kvar innan du loggas ut automatiskt.",
+ "Your vault has been locked for {{time}} because of {{tries}} failed attempts!" : "Ditt valv har blivit låst i {{time}} pga {{tries}} misslyckade försök!",
"Last accessed" : "Senast öppnad",
"Never" : "Aldrig",
"No vaults found, why not create one?" : "Inga valv hittades, varför inte skapa ett?",
"Password strength must be at least: {{strength}}" : "Lösenordslängden måste vara minst: {{strength}}",
"Please give your new vault a name." : "Ge ditt nya valv ett namn",
"Repeat vault password" : "Repetera valv-lösenord",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Din delningsnycklar kommer att ha en styrka av 1024 bitar som du senare kan ändra i inställningar.",
"Create vault" : "Skapa valv",
"Go back to vaults" : "Gå tillbaka till valv",
"Please input the password for" : "Vänligen ange lösenordet för",
- "Set this vault as default." : "Sätt detta valv som standard.",
- "Login automatically to this vault." : "Logga in automatiskt till detta valv.",
- "Logout of this vault automatically after: " : "Logga ut från denna valv automatiskt efter:",
+ "Log into this vault automatically." : "Logga in i detta valv automatiskt.",
"Decrypt vault" : "Dekryptera valv",
+ "If you want this vault to be removed you can request that here." : "Om du vill att detta valv ska tas bort så kan du skicka en begäran om borttagning här.",
+ "Request vault destruction" : "Begär borttagning av valv",
+ "Yes, request an admin to destroy this vault" : "Ja, begär borttagning av detta valv",
+ "Cancel destruction request" : "Avbryt begäran om borttagning av valv",
+ "Vault destruction requested" : "Ny begäran om borttagning av valv",
"Request removed" : "Förfrågan borttagen",
- "Warning! Adding credentials over http can be insecure!" : "Varning! Att lägga till uppgifter över \"http\" kan vara osäkert!",
+ "Destruction request pending" : "Begäran om borttagning av valv väntar på svar",
"Logged in to {{vault_name}}" : "Inloggad på {{vault_name}}",
"Change vault" : "Byt valv",
"Deleted credentials" : "Radera uppgifter",
@@ -245,8 +228,6 @@
"Donate" : "Donera",
"Someone has shared a credential with you." : "Någon delade uppgifter med dig",
"Click here to request it" : "Klicka här för att begära det",
- "Loading..." : "Laddar...",
- "Awwhh.... credential not found. Maybe it expired" : "Uppgifterna kunde inte hittas. Har de möjligtvis utgått?",
"Error while saving field" : "Fel vid sparande av fält",
"A Passman item has been created, modified or deleted" : "Ett Passman-objekt har skapats, ändrats eller raderats",
"A Passman item has expired" : "Ett Passman-objekt har utgått",
@@ -276,11 +257,12 @@
"%s shared \"%s\" with you. Click here to accept" : "%s delade \"%s\" med dig. Klicka här för att acceptera",
"%s has declined your share request for \"%s\"." : "%s har nekat din delningsförfrågan av \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s har accepterad din delningsförfrågan av \"%s\".",
+ "Passman" : "Passman",
"Unable to get version info" : "Det gick inte att hitta information om version",
"Passman Settings" : "Passman Inställningar",
- "Github version:" : "Github version:",
- "A newer version of passman is available" : "En nyare version av passman finns tillgänglig",
+ "A newer version of Passman is available" : "Ny nyare version av Passman finns tillgänglig",
"Password sharing" : "Lösenordsdelning",
+ "Credential mover" : "Förflyttning av uppgifter",
"Vault destruction requests" : "Förfrågningar om att radera valv",
"Check for new versions" : "Sök efter ny version",
"Enable HTTPS check" : "Aktivera HTTPS-kontroll",
diff --git a/l10n/tr.js b/l10n/tr.js
index 889ddf5a..935b2089 100644
--- a/l10n/tr.js
+++ b/l10n/tr.js
@@ -3,56 +3,56 @@ OC.L10N.register(
{
"Passwords" : "Parolalar",
"Generating sharing keys ( %step / 2)" : "Paylaşım anahtarları oluşturuluyor ( %step / 2)",
- "Incorrect vault password!" : "Kasa parolası hatalı!",
+ "Incorrect vault password!" : "Kasa parolası yanlış!",
"Passwords do not match" : "Parola ile onayı aynı değil",
"General" : "Genel",
"Custom Fields" : "Özel Alanlar",
- "Please fill in a label!" : "Lütfen bir etiket yazın!",
- "Please fill in a value!" : "Lütfen bir değer yazın!",
+ "Please fill in a label." : "Lütfen bir etiket yazın.",
+ "Please fill in a value." : "Lütfen bir değer yazın.",
"Error loading file" : "Dosya yüklenirken sorun çıktı",
- "An error happened during decryption" : "Şifre çözülürken bir sorun çıktı",
+ "An error occurred during decryption" : "Şifre çözülürken bir sorun çıktı",
"Credential created!" : "Kimlik doğrulama bilgileri oluşturuldu!",
"Credential deleted" : "Kimlik doğrulama bilgileri silindi",
"Credential updated" : "Kimlik doğrulama bilgileri güncellendi",
"Credential recovered" : "Kimlik doğrulama bilgileri kurtarıldı",
"Credential destroyed" : "Kimlik doğrulama bilgileri yok edildi",
- "Error downloading file, you probably don't have enough permissions" : "Dosya indirilirken sorun çıktı. Büyük olasılıkla yeterli izniniz yok",
+ "Error downloading file, you probably don't have sufficient permissions" : "Dosya indirilirken sorun çıktı. Büyük olasılıkla yeterli izniniz yok",
"Invalid QR code" : "QR Kodu geçersiz",
- "Starting export" : "Verme işlemi başlatılıyor",
+ "Starting export" : "Dışa aktarma işlemi başlatılıyor",
"Decrypting credentials" : "Kimlik doğrulama bilgilerinin şifresi çözülüyor",
"Done" : "Tamam",
- "File read successfully!" : "Dosya okundu!",
- "Follow the following steps to import your file" : "Dosyanızı almak için şu adımları izleyin",
+ "File read successfully." : "Dosya okundu.",
+ "Proceed with the following steps to import your file" : "Dosyanızı içe aktarmak için şu adımları izleyin",
"Credential has no label, skipping" : "Kimlik doğrulama bilgilerinin etiketi olmadığından atlanıyor",
"Adding {{credential}}" : "{{credential}} ekleniyor",
"Added {{credential}}" : "{{credential}} eklendi",
"Skipping credential, missing label on line {{line}}" : "{{line}} satırındaki etiket eksik olduğundan, kimlik doğrulama bilgileri atlanıyor",
- "Parsed {{num}} credentials, starting to import" : "{{num}} kimlik doğrulama bilgisi işlendi. Alma işlemi başlatılıyor",
- "Importing" : "Alınıyor",
- "Start import" : "Alma işlemini başlat",
- "Select csv file" : "CSV dosyasını seçin",
- "Parsed {{rows}} lines from csv file" : "CSV dosyasındaki {{rows}} satır işlendi",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} kimlik doğrulama bilgisi işlendi. İçe aktarma işlemi başlatılıyor",
+ "Importing" : "İçe aktarılıyor",
+ "Start import" : "İçe aktarma işlemini başlat",
+ "Select CSV file" : "CSV dosyasını seçin",
+ "Parsed {{rows}} lines from CSV file" : "CSV dosyasındaki {{rows}} satır işlendi",
"Skip first row" : "İlk satır atlansın",
- "You need to assign the label field before you can start the import." : "Alma işlemini başlatmadan önce etiket alanını ilişkilendirmelisiniz.",
- "First 5 lines of the csv are shown." : "CSV dosyasının ilk 5 satırı görüntüleniyor.",
+ "You need to assign the label field before you can start the import." : "İçe aktarma işlemini başlatmadan önce etiket alanını ilişkilendirmelisiniz.",
+ "The first 5 lines of the CSV are shown." : "CSV dosyasının ilk 5 satırı görüntüleniyor.",
"Assign the proper fields to each column." : "Sütunlara aktarılacak alanları eşleştirin.",
- "Example imported credential" : "Örnek kimlik doğrulama bilgisi",
- "Missing an importer? Try it with the generic csv importer." : "Eksik bir alma uygulaması mı var? Genel CSV alma uygulamasını deneyin.",
- "Go back to importers." : "Alma uygulamalarına dön.",
+ "Example of imported credential" : "İçe aktarılacak kimlik doğrulama bilgisi örneği",
+ "Missing an importer? Try it with the generic CSV importer." : "Eksik bir içe aktarma uygulaması mı var? Genel CSV içe aktarma uygulamasını deneyin.",
+ "Go back to importers." : "İçe aktarma uygulamalarına dön.",
"Revision deleted" : "Sürüm silindi",
"Revision restored" : "Sürüm geri yüklendi",
- "Save in passman" : "Passman üzerine kaydet",
+ "Save in Passman" : "Passman üzerine kaydet",
"Settings saved" : "Ayarlar kaydedildi",
"General settings" : "Genel ayarlar",
- "Password Audit" : "Paralo Denetimi",
+ "Password audit" : "Paralo denetimi",
"Password settings" : "Parola ayarları",
- "Import credentials" : "Kimlik doğrulama bilgilerini al",
- "Export credentials" : "Kimlik doğrulama bilgilerini ver",
+ "Import credentials" : "Kimlik doğrulama bilgilerini içe aktar",
+ "Export credentials" : "Kimlik doğrulama bilgilerini dışa aktar",
"Sharing" : "Paylaşım",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Ayrılmak istediğinize emin misiniz? Tüm kimlik doğrulama bilgileriniz bozulacak.",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Ayrılmak istediğinize emin misiniz? Tüm kimlik doğrulama bilgileriniz bozulacak.",
"Your old password is incorrect!" : "Eski parolanız doğru değil!",
- "New passwords do not match!" : "Yeni parola ile onayı aynı değil!",
- "Please login with your new vault password" : "Lütfen yeni kasa parolanız ile oturum açın",
+ "New password does not match!" : "Yeni parola ile onayı aynı değil!",
+ "Please log in with your new vault password" : "Lütfen yeni kasa parolanız ile oturum açın",
"Share with users and groups" : "Kullanıcı ve gruplarla paylaş",
"Share link" : "Paylaşım bağlantısı",
"Are you sure you want to leave? This will corrupt this credential" : "Ayrılmak istediğinize emin misiniz? Bu kimlik doğrulama bilgisi bozulacak.",
@@ -72,7 +72,7 @@ OC.L10N.register(
"Complete" : "Tamam",
"Username" : "Kullanıcı Adı",
"Repeat password" : "Parola Onayı",
- "Add Tag" : "Etiket Ekle",
+ "Add tag" : "Etiket ekle",
"Field label" : "Alan Etiketi",
"Field value" : "Alan Değeri",
"Choose a file" : "Bir dosya seçin",
@@ -90,8 +90,8 @@ OC.L10N.register(
"Current OTP settings" : "Geçerli OTP ayarları",
"Issuer" : "Yayınlayan",
"Secret" : "Parola",
- "Expire date" : "Son kullanma tarihi",
- "No expire date set" : "Son kullanma tarihi belirtilmemiş",
+ "Expiration date" : "Son kullanma tarihi",
+ "No expiration date set" : "Son kullanma tarihi belirtilmemiş",
"Renew interval" : "Yenileme sıklığı",
"Disabled" : "Devre Dışı",
"Day(s)" : "Gün",
@@ -107,16 +107,16 @@ OC.L10N.register(
"Use special characters" : "Özel karakterler kullanılsın",
"Avoid ambiguous characters" : "Şüpheli karakterler kullanılmasın",
"Require every character type" : "Her karakter türü istensin",
- "Export type" : "Verme türü",
- "Export" : "Ver",
- "Enter vault password to confirm export." : "Verme işlemini onaylamak için kasa parolasını yazın.",
+ "Export type" : "Dışa aktarma türü",
+ "Export" : "Dışa Aktar",
+ "Enter vault password to confirm export." : "Dışa aktarma işlemini onaylamak için kasa parolasını yazın.",
"Rename vault" : "Kasayı yeniden adlandır",
"New vault name" : "Yeni kasa adı",
"Change" : "Değiştir",
"Change vault key" : "Kasa anahtarını değiştir",
"Old vault password" : "Eski kasa parolası",
"New vault password" : "Yeni kasa parolası",
- "New vault password repeat" : "Yeni kasa parolası onayı",
+ "Repeat new vault password" : "Kasa parolası onayı",
"Please wait your vault is being updated, do not leave this page." : "Lütfen kasanız güncellenirken bekleyin ve bu sayfadan ayrılmayın.",
"Processing" : "İşleniyor",
"Total progress" : "Toplam ilerleme",
@@ -130,10 +130,10 @@ OC.L10N.register(
"Vault password" : "Kasa parolası",
"This process is irreversible" : "Bu işlem geri alınamaz",
"Delete my precious passwords" : "Değerli parolalarımı sil",
- "Deleting {{password}}..." : "{{password}} siliniyor...",
+ "Deleting {{password}}…" : "{{password}} siliniyor...",
"Yes, delete my precious passwords" : "Evet, değerli parolalarımı sil",
- "Import type" : "Alma türü",
- "Import" : "Al",
+ "Import type" : "İçe aktarma türü",
+ "Import" : "İçe aktar",
"Read progress" : "Okuma ilerlemesi",
"Upload progress" : "Yükleme ilerlemesi",
"Private Key" : "Özel Anahtar",
@@ -142,13 +142,14 @@ OC.L10N.register(
"Save keys" : "Anahtarları kaydet",
"Generate sharing keys" : "Paylaşım anahtarlarını üret",
"Generating sharing keys" : "Paylaşım anahtarları üretiliyor",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Parola aracı parolanızı tarayarak, ortalama kırılma süresini hesaplar. Eşik değerinin altındaysa görüntülenir",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Parola aracı parolanızı tarayarak, ortalama kırılma süresini hesaplar. Eşik değerinin altındaysa görüntülenir",
"Minimum password stength" : "Paroladaki en az karakter sayısı",
- "Passman scanned your passwords, and here is the result." : "Passman parolalarınızı taradı. Sonuçlar şu şekilde.",
- "A total of {{scan_result}} weak credentials." : "Toplam {{scan_result}} parola zayıf.",
+ "Start scan" : "Taramayı Başlat",
+ "Result" : "Sonuç",
+ "A total of {{scan_result}} weak credentials were found." : "Toplam {{scan_result}} zayıf parola bulundu.",
"Score" : "Değerlendirme",
"Action" : "İşlem",
- "Search users or groups..." : "Kullanıcı ya da grup ara...",
+ "Search users or groups…" : "Kullanıcı ya da grup ara...",
"Missing users? Only users that have vaults are shown." : "Kullanıcılar eksik mi? Yalnız kasası olan kullanıcılar görüntüleniyor.",
"Cyphering" : "Şifreleme",
"Uploading" : "Yükleniyor",
@@ -163,7 +164,7 @@ OC.L10N.register(
"Enable link sharing" : "Bağlantı paylaşılabilsin",
"Share until date" : "Paylaşım bitiş tarihi",
"Expire after views" : "Şu kadar bakıldıktan sonra",
- "Click share first" : "Önce paylaş üzerine tıklayın",
+ "Click Share first" : "Önce Paylaş üzerine tıklayın",
"Show files" : "Dosyaları görüntüle",
"Details" : "Ayrıntılar",
"Hide details" : "Ayrıntıları gizle",
@@ -203,16 +204,16 @@ OC.L10N.register(
"Share credential {{credential}}" : "{{credential}} kimlik doğrulama bilgilerini paylaş",
"Unshare" : "Paylaşımdan Kaldır",
"Showing deleted since" : "Şu tarihten sonra silinenler görüntüleniyor",
- "All time" : "Tüm zamanlar",
+ "Beginning" : "Başlangıç",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} / {{credential_number}} kimlik doğrulama bilgisi görüntüleniyor",
- "Search credential..." : "Kimlik doğrulama bilgilerini ara...",
+ "Search for credential…" : "Kimlik doğrulama bilgisi ara...",
"Account" : "Hesap",
"Password" : "Parola",
"OTP" : "OTP",
"E-mail" : "E-posta",
"URL" : "Adres",
"Notes" : "Notlar",
- "Expire time" : "Son kullanma zamanı",
+ "Expiry time" : "Son kullanma zamanı",
"Changed" : "Değiştirilme",
"Created" : "Oluşturulma",
"Edit" : "Düzenle",
@@ -222,8 +223,8 @@ OC.L10N.register(
"Destroy" : "Yoket",
"Use regex" : "Kurallı ifade kullan",
"You have incoming share requests." : "Size gönderilmiş paylaşım istekleri var.",
- "If you want to put the credential in a other vault," : "Kimlik doğrulama bilgilerini başka bir kasaya koymak istiyorsanız,",
- "logout of this vault and login to the vault you want the shared credential in." : "bu kasadaki oturumunuzu kapatın ve kimlik doğrulama bilgilerini taşımak istediğiniz diğer kasada oturum açın .",
+ "If you want to put the credential in another vault," : "Kimlik doğrulama bilgilerini başka bir kasaya koymak istiyorsanız,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "bu kasadaki oturumunuzu kapatın ve kimlik doğrulama bilgilerini taşımak istediğiniz diğer kasada oturum açın .",
"Permissions" : "İzinler",
"Received from" : "Gönderen",
"Date" : "Tarih",
@@ -237,26 +238,26 @@ OC.L10N.register(
"Password strength must be at least: {{strength}}" : "Parola gücü en az {{strength}} olmalıdır",
"Please give your new vault a name." : "Lütfen yeni kasanıza bir ad verin.",
"Repeat vault password" : "Kasa parolası onayı",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Paylaşım anahtarlarınız 1024 bit gücünde olacak. Bu değeri daha sonra ayarlar bölümünden değiştirebilirsiniz.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Paylaşım anahtarlarınız 1024 bit gücünde olacak. Bu değeri daha sonra Ayarlar bölümünden değiştirebilirsiniz.",
"Create vault" : "Kasa oluştur",
"Go back to vaults" : "Kasalara geri dön",
"Please input the password for" : "Lütfen şu kasanın parolasını yazın",
- "Set this vault as default." : "Bu kasayı varsayılan yap.",
- "Login automatically to this vault." : "Otomatik olarak bu kasaya oturum açılsın.",
- "Logout of this vault automatically after: " : "Bu kasanın oturumu şu sürede otomatik olarak kapatılsın:",
+ "Set this vault as the default." : "Bu kasayı varsayılan olarak ata.",
+ "Log into this vault automatically." : "Bu kasaya otomatik olarak oturum açılsın.",
+ "Log out of this vault automatically after: " : "Bu kasanın oturumu şu sürede otomatik olarak kapatılsın:",
"Decrypt vault" : "Deponun şifresini çöz",
- "Seems you lost the vault password and you're unable to login." : "Depo parolanızı unutmuş ve oturum açamıyor gibi görünüyorsunuz.",
- "If you want this vault removed you can request removal of the vault here." : "Bu kasanın silinmesini istiyorsanız, buradan silme isteğinde bulunabilirsiniz.",
- "An admin then accept to the request (or not)" : "Bir yönetici isteğinizi kabul (ya da red) eder",
- "After an admin destroy's this vault, all credentials will be lost" : "Yönetici kasanızı sildiğinde tüm kimlik doğrulama bilgileriniz silinir",
- "Reason to request deletion (optional):" : "Silme isteği nedeni (isteğe bağlı):",
+ "Seems you lost the vault password and you're unable to log in." : "Kasa parolanızı unutmuş ve oturum açamıyor gibi görünüyorsunuz.",
+ "If you want this vault to be removed you can request that here." : "Bu kasanın silinmesini istiyorsanız, buradan silme isteğinde bulunabilirsiniz.",
+ "An admin then accepts or declines the request" : "Bir yönetici isteğinizi kabul ya da red eder",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Yönetici kasanızı sildiğinde içindeki tüm kimlik doğrulama bilgileri silinir",
+ "Reason for requesting deletion (optional):" : "Silme isteği nedeni (isteğe bağlı):",
"Request vault destruction" : "Kasa silme isteği",
"Yes, request an admin to destroy this vault" : "Evet, bir yönetici bu kasayı silsin",
"Cancel destruction request" : "Silme isteğini iptal et",
"Vault destruction requested" : "Kasa silme isteğinde bulunuldu",
"Request removed" : "İstek iptal edildi",
"Destruction request pending" : "Bekleyen silme isteği var",
- "Warning! Adding credentials over http can be insecure!" : "Uyarı! http üzerinden kimlik doğrulama bilgileri eklemek güvenli değildir!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Uyarı! HTTP üzerinden kimlik doğrulama bilgileri eklemek güvenli değildir!",
"Logged in to {{vault_name}}" : "{{vault_name}} kasasına oturum açıldı",
"Change vault" : "Kasayı değiştir",
"Deleted credentials" : "Silinmiş kimlik doğrulama bilgileri",
@@ -264,8 +265,8 @@ OC.L10N.register(
"Donate" : "Bağış Yapın",
"Someone has shared a credential with you." : "Sizinle bir kimlik doğrulama bilgisi paylaşıldı.",
"Click here to request it" : "İstekte bulunmak için buraya tıklayın",
- "Loading..." : "Yükleniyor...",
- "Awwhh.... credential not found. Maybe it expired" : "Kimlik doğrulama bilgileri bulunamadı. Süresi geçmiş olabilir",
+ "Loading…" : "Yükleniyor...",
+ "Awwhh… credential not found. Maybe it expired" : "Kimlik doğrulama bilgileri bulunamadı. Süresi geçmiş olabilir",
"Error while saving field" : "Alan kaydedilirken sorun çıktı",
"A Passman item has been created, modified or deleted" : "Bir Passman ögesi eklendi, değiştirildi ya da silindi",
"A Passman item has expired" : "Bir Passman ögesinin süresi doldu",
@@ -295,17 +296,18 @@ OC.L10N.register(
"%s shared \"%s\" with you. Click here to accept" : "%s sizinle \"%s\" ögesini paylaştı. Onaylamak için buraya tıklayın",
"%s has declined your share request for \"%s\"." : "%s, \"%s\" ögesini paylaşma isteğinizi reddetti.",
"%s has accepted your share request for \"%s\"." : "%s, \"%s\" ögesini paylaşma isteğinizi onayladı.",
+ "Passman" : "Passman",
"Unable to get version info" : "Sürüm bilgileri alınamadı",
"Passman Settings" : "Passman Ayarları",
- "Github version:" : "Github sürümü:",
- "A newer version of passman is available" : "Yeni bir Passman sürümü yayınlanmış",
+ "GitHub version:" : "GitHub sürümü:",
+ "A newer version of Passman is available" : "Yeni bir Passman sürümü yayınlanmış",
"Password sharing" : "Parola paylaşımı",
"Credential mover" : "Kimlik doğrulama bilgileri aktarıcı",
"Vault destruction requests" : "Kasa silme istekleri",
"Check for new versions" : "Yeni sürümler için tıklayın",
"Enable HTTPS check" : "HTTPS denetimi yapılsın",
"Disable context menu" : "Sağ tık menüsü devre dışı bırakılsın",
- "Disable javascript debugger" : "JavaScript hata ayıklaması devre dışı bırakılsın",
+ "Disable JavaScript debugger" : "JavaScript hata ayıklaması devre dışı bırakılsın",
"Allow users on this server to share passwords with a link" : "Bu sunucu üzerindeki kullanıcılar bağlantı ile parola paylaşabilsin",
"Allow users on this server to share passwords with other users" : "Bu sunucu üzerindeki kullanıcılar diğer kullanıcılar ile parola paylaşabilsin",
"Move credentials from one account to another" : "Kimlik doğrulama bilgilerini bir hesaptan diğerine aktar",
diff --git a/l10n/tr.json b/l10n/tr.json
index 71b6e06c..844b8956 100644
--- a/l10n/tr.json
+++ b/l10n/tr.json
@@ -1,56 +1,56 @@
{ "translations": {
"Passwords" : "Parolalar",
"Generating sharing keys ( %step / 2)" : "Paylaşım anahtarları oluşturuluyor ( %step / 2)",
- "Incorrect vault password!" : "Kasa parolası hatalı!",
+ "Incorrect vault password!" : "Kasa parolası yanlış!",
"Passwords do not match" : "Parola ile onayı aynı değil",
"General" : "Genel",
"Custom Fields" : "Özel Alanlar",
- "Please fill in a label!" : "Lütfen bir etiket yazın!",
- "Please fill in a value!" : "Lütfen bir değer yazın!",
+ "Please fill in a label." : "Lütfen bir etiket yazın.",
+ "Please fill in a value." : "Lütfen bir değer yazın.",
"Error loading file" : "Dosya yüklenirken sorun çıktı",
- "An error happened during decryption" : "Şifre çözülürken bir sorun çıktı",
+ "An error occurred during decryption" : "Şifre çözülürken bir sorun çıktı",
"Credential created!" : "Kimlik doğrulama bilgileri oluşturuldu!",
"Credential deleted" : "Kimlik doğrulama bilgileri silindi",
"Credential updated" : "Kimlik doğrulama bilgileri güncellendi",
"Credential recovered" : "Kimlik doğrulama bilgileri kurtarıldı",
"Credential destroyed" : "Kimlik doğrulama bilgileri yok edildi",
- "Error downloading file, you probably don't have enough permissions" : "Dosya indirilirken sorun çıktı. Büyük olasılıkla yeterli izniniz yok",
+ "Error downloading file, you probably don't have sufficient permissions" : "Dosya indirilirken sorun çıktı. Büyük olasılıkla yeterli izniniz yok",
"Invalid QR code" : "QR Kodu geçersiz",
- "Starting export" : "Verme işlemi başlatılıyor",
+ "Starting export" : "Dışa aktarma işlemi başlatılıyor",
"Decrypting credentials" : "Kimlik doğrulama bilgilerinin şifresi çözülüyor",
"Done" : "Tamam",
- "File read successfully!" : "Dosya okundu!",
- "Follow the following steps to import your file" : "Dosyanızı almak için şu adımları izleyin",
+ "File read successfully." : "Dosya okundu.",
+ "Proceed with the following steps to import your file" : "Dosyanızı içe aktarmak için şu adımları izleyin",
"Credential has no label, skipping" : "Kimlik doğrulama bilgilerinin etiketi olmadığından atlanıyor",
"Adding {{credential}}" : "{{credential}} ekleniyor",
"Added {{credential}}" : "{{credential}} eklendi",
"Skipping credential, missing label on line {{line}}" : "{{line}} satırındaki etiket eksik olduğundan, kimlik doğrulama bilgileri atlanıyor",
- "Parsed {{num}} credentials, starting to import" : "{{num}} kimlik doğrulama bilgisi işlendi. Alma işlemi başlatılıyor",
- "Importing" : "Alınıyor",
- "Start import" : "Alma işlemini başlat",
- "Select csv file" : "CSV dosyasını seçin",
- "Parsed {{rows}} lines from csv file" : "CSV dosyasındaki {{rows}} satır işlendi",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} kimlik doğrulama bilgisi işlendi. İçe aktarma işlemi başlatılıyor",
+ "Importing" : "İçe aktarılıyor",
+ "Start import" : "İçe aktarma işlemini başlat",
+ "Select CSV file" : "CSV dosyasını seçin",
+ "Parsed {{rows}} lines from CSV file" : "CSV dosyasındaki {{rows}} satır işlendi",
"Skip first row" : "İlk satır atlansın",
- "You need to assign the label field before you can start the import." : "Alma işlemini başlatmadan önce etiket alanını ilişkilendirmelisiniz.",
- "First 5 lines of the csv are shown." : "CSV dosyasının ilk 5 satırı görüntüleniyor.",
+ "You need to assign the label field before you can start the import." : "İçe aktarma işlemini başlatmadan önce etiket alanını ilişkilendirmelisiniz.",
+ "The first 5 lines of the CSV are shown." : "CSV dosyasının ilk 5 satırı görüntüleniyor.",
"Assign the proper fields to each column." : "Sütunlara aktarılacak alanları eşleştirin.",
- "Example imported credential" : "Örnek kimlik doğrulama bilgisi",
- "Missing an importer? Try it with the generic csv importer." : "Eksik bir alma uygulaması mı var? Genel CSV alma uygulamasını deneyin.",
- "Go back to importers." : "Alma uygulamalarına dön.",
+ "Example of imported credential" : "İçe aktarılacak kimlik doğrulama bilgisi örneği",
+ "Missing an importer? Try it with the generic CSV importer." : "Eksik bir içe aktarma uygulaması mı var? Genel CSV içe aktarma uygulamasını deneyin.",
+ "Go back to importers." : "İçe aktarma uygulamalarına dön.",
"Revision deleted" : "Sürüm silindi",
"Revision restored" : "Sürüm geri yüklendi",
- "Save in passman" : "Passman üzerine kaydet",
+ "Save in Passman" : "Passman üzerine kaydet",
"Settings saved" : "Ayarlar kaydedildi",
"General settings" : "Genel ayarlar",
- "Password Audit" : "Paralo Denetimi",
+ "Password audit" : "Paralo denetimi",
"Password settings" : "Parola ayarları",
- "Import credentials" : "Kimlik doğrulama bilgilerini al",
- "Export credentials" : "Kimlik doğrulama bilgilerini ver",
+ "Import credentials" : "Kimlik doğrulama bilgilerini içe aktar",
+ "Export credentials" : "Kimlik doğrulama bilgilerini dışa aktar",
"Sharing" : "Paylaşım",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "Ayrılmak istediğinize emin misiniz? Tüm kimlik doğrulama bilgileriniz bozulacak.",
+ "Are you sure you want to leave? This will destroy all your credentials" : "Ayrılmak istediğinize emin misiniz? Tüm kimlik doğrulama bilgileriniz bozulacak.",
"Your old password is incorrect!" : "Eski parolanız doğru değil!",
- "New passwords do not match!" : "Yeni parola ile onayı aynı değil!",
- "Please login with your new vault password" : "Lütfen yeni kasa parolanız ile oturum açın",
+ "New password does not match!" : "Yeni parola ile onayı aynı değil!",
+ "Please log in with your new vault password" : "Lütfen yeni kasa parolanız ile oturum açın",
"Share with users and groups" : "Kullanıcı ve gruplarla paylaş",
"Share link" : "Paylaşım bağlantısı",
"Are you sure you want to leave? This will corrupt this credential" : "Ayrılmak istediğinize emin misiniz? Bu kimlik doğrulama bilgisi bozulacak.",
@@ -70,7 +70,7 @@
"Complete" : "Tamam",
"Username" : "Kullanıcı Adı",
"Repeat password" : "Parola Onayı",
- "Add Tag" : "Etiket Ekle",
+ "Add tag" : "Etiket ekle",
"Field label" : "Alan Etiketi",
"Field value" : "Alan Değeri",
"Choose a file" : "Bir dosya seçin",
@@ -88,8 +88,8 @@
"Current OTP settings" : "Geçerli OTP ayarları",
"Issuer" : "Yayınlayan",
"Secret" : "Parola",
- "Expire date" : "Son kullanma tarihi",
- "No expire date set" : "Son kullanma tarihi belirtilmemiş",
+ "Expiration date" : "Son kullanma tarihi",
+ "No expiration date set" : "Son kullanma tarihi belirtilmemiş",
"Renew interval" : "Yenileme sıklığı",
"Disabled" : "Devre Dışı",
"Day(s)" : "Gün",
@@ -105,16 +105,16 @@
"Use special characters" : "Özel karakterler kullanılsın",
"Avoid ambiguous characters" : "Şüpheli karakterler kullanılmasın",
"Require every character type" : "Her karakter türü istensin",
- "Export type" : "Verme türü",
- "Export" : "Ver",
- "Enter vault password to confirm export." : "Verme işlemini onaylamak için kasa parolasını yazın.",
+ "Export type" : "Dışa aktarma türü",
+ "Export" : "Dışa Aktar",
+ "Enter vault password to confirm export." : "Dışa aktarma işlemini onaylamak için kasa parolasını yazın.",
"Rename vault" : "Kasayı yeniden adlandır",
"New vault name" : "Yeni kasa adı",
"Change" : "Değiştir",
"Change vault key" : "Kasa anahtarını değiştir",
"Old vault password" : "Eski kasa parolası",
"New vault password" : "Yeni kasa parolası",
- "New vault password repeat" : "Yeni kasa parolası onayı",
+ "Repeat new vault password" : "Kasa parolası onayı",
"Please wait your vault is being updated, do not leave this page." : "Lütfen kasanız güncellenirken bekleyin ve bu sayfadan ayrılmayın.",
"Processing" : "İşleniyor",
"Total progress" : "Toplam ilerleme",
@@ -128,10 +128,10 @@
"Vault password" : "Kasa parolası",
"This process is irreversible" : "Bu işlem geri alınamaz",
"Delete my precious passwords" : "Değerli parolalarımı sil",
- "Deleting {{password}}..." : "{{password}} siliniyor...",
+ "Deleting {{password}}…" : "{{password}} siliniyor...",
"Yes, delete my precious passwords" : "Evet, değerli parolalarımı sil",
- "Import type" : "Alma türü",
- "Import" : "Al",
+ "Import type" : "İçe aktarma türü",
+ "Import" : "İçe aktar",
"Read progress" : "Okuma ilerlemesi",
"Upload progress" : "Yükleme ilerlemesi",
"Private Key" : "Özel Anahtar",
@@ -140,13 +140,14 @@
"Save keys" : "Anahtarları kaydet",
"Generate sharing keys" : "Paylaşım anahtarlarını üret",
"Generating sharing keys" : "Paylaşım anahtarları üretiliyor",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Parola aracı parolanızı tarayarak, ortalama kırılma süresini hesaplar. Eşik değerinin altındaysa görüntülenir",
+ "The password tool will scan your password, calculate the average crack time and list those which are below the threshold" : "Parola aracı parolanızı tarayarak, ortalama kırılma süresini hesaplar. Eşik değerinin altındaysa görüntülenir",
"Minimum password stength" : "Paroladaki en az karakter sayısı",
- "Passman scanned your passwords, and here is the result." : "Passman parolalarınızı taradı. Sonuçlar şu şekilde.",
- "A total of {{scan_result}} weak credentials." : "Toplam {{scan_result}} parola zayıf.",
+ "Start scan" : "Taramayı Başlat",
+ "Result" : "Sonuç",
+ "A total of {{scan_result}} weak credentials were found." : "Toplam {{scan_result}} zayıf parola bulundu.",
"Score" : "Değerlendirme",
"Action" : "İşlem",
- "Search users or groups..." : "Kullanıcı ya da grup ara...",
+ "Search users or groups…" : "Kullanıcı ya da grup ara...",
"Missing users? Only users that have vaults are shown." : "Kullanıcılar eksik mi? Yalnız kasası olan kullanıcılar görüntüleniyor.",
"Cyphering" : "Şifreleme",
"Uploading" : "Yükleniyor",
@@ -161,7 +162,7 @@
"Enable link sharing" : "Bağlantı paylaşılabilsin",
"Share until date" : "Paylaşım bitiş tarihi",
"Expire after views" : "Şu kadar bakıldıktan sonra",
- "Click share first" : "Önce paylaş üzerine tıklayın",
+ "Click Share first" : "Önce Paylaş üzerine tıklayın",
"Show files" : "Dosyaları görüntüle",
"Details" : "Ayrıntılar",
"Hide details" : "Ayrıntıları gizle",
@@ -201,16 +202,16 @@
"Share credential {{credential}}" : "{{credential}} kimlik doğrulama bilgilerini paylaş",
"Unshare" : "Paylaşımdan Kaldır",
"Showing deleted since" : "Şu tarihten sonra silinenler görüntüleniyor",
- "All time" : "Tüm zamanlar",
+ "Beginning" : "Başlangıç",
"Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} / {{credential_number}} kimlik doğrulama bilgisi görüntüleniyor",
- "Search credential..." : "Kimlik doğrulama bilgilerini ara...",
+ "Search for credential…" : "Kimlik doğrulama bilgisi ara...",
"Account" : "Hesap",
"Password" : "Parola",
"OTP" : "OTP",
"E-mail" : "E-posta",
"URL" : "Adres",
"Notes" : "Notlar",
- "Expire time" : "Son kullanma zamanı",
+ "Expiry time" : "Son kullanma zamanı",
"Changed" : "Değiştirilme",
"Created" : "Oluşturulma",
"Edit" : "Düzenle",
@@ -220,8 +221,8 @@
"Destroy" : "Yoket",
"Use regex" : "Kurallı ifade kullan",
"You have incoming share requests." : "Size gönderilmiş paylaşım istekleri var.",
- "If you want to put the credential in a other vault," : "Kimlik doğrulama bilgilerini başka bir kasaya koymak istiyorsanız,",
- "logout of this vault and login to the vault you want the shared credential in." : "bu kasadaki oturumunuzu kapatın ve kimlik doğrulama bilgilerini taşımak istediğiniz diğer kasada oturum açın .",
+ "If you want to put the credential in another vault," : "Kimlik doğrulama bilgilerini başka bir kasaya koymak istiyorsanız,",
+ "log out of this vault and log in to the vault you want the shared credential in." : "bu kasadaki oturumunuzu kapatın ve kimlik doğrulama bilgilerini taşımak istediğiniz diğer kasada oturum açın .",
"Permissions" : "İzinler",
"Received from" : "Gönderen",
"Date" : "Tarih",
@@ -235,26 +236,26 @@
"Password strength must be at least: {{strength}}" : "Parola gücü en az {{strength}} olmalıdır",
"Please give your new vault a name." : "Lütfen yeni kasanıza bir ad verin.",
"Repeat vault password" : "Kasa parolası onayı",
- "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Paylaşım anahtarlarınız 1024 bit gücünde olacak. Bu değeri daha sonra ayarlar bölümünden değiştirebilirsiniz.",
+ "Your sharing key's will have a strength of 1024 bit, which you can change in Settings later ." : "Paylaşım anahtarlarınız 1024 bit gücünde olacak. Bu değeri daha sonra Ayarlar bölümünden değiştirebilirsiniz.",
"Create vault" : "Kasa oluştur",
"Go back to vaults" : "Kasalara geri dön",
"Please input the password for" : "Lütfen şu kasanın parolasını yazın",
- "Set this vault as default." : "Bu kasayı varsayılan yap.",
- "Login automatically to this vault." : "Otomatik olarak bu kasaya oturum açılsın.",
- "Logout of this vault automatically after: " : "Bu kasanın oturumu şu sürede otomatik olarak kapatılsın:",
+ "Set this vault as the default." : "Bu kasayı varsayılan olarak ata.",
+ "Log into this vault automatically." : "Bu kasaya otomatik olarak oturum açılsın.",
+ "Log out of this vault automatically after: " : "Bu kasanın oturumu şu sürede otomatik olarak kapatılsın:",
"Decrypt vault" : "Deponun şifresini çöz",
- "Seems you lost the vault password and you're unable to login." : "Depo parolanızı unutmuş ve oturum açamıyor gibi görünüyorsunuz.",
- "If you want this vault removed you can request removal of the vault here." : "Bu kasanın silinmesini istiyorsanız, buradan silme isteğinde bulunabilirsiniz.",
- "An admin then accept to the request (or not)" : "Bir yönetici isteğinizi kabul (ya da red) eder",
- "After an admin destroy's this vault, all credentials will be lost" : "Yönetici kasanızı sildiğinde tüm kimlik doğrulama bilgileriniz silinir",
- "Reason to request deletion (optional):" : "Silme isteği nedeni (isteğe bağlı):",
+ "Seems you lost the vault password and you're unable to log in." : "Kasa parolanızı unutmuş ve oturum açamıyor gibi görünüyorsunuz.",
+ "If you want this vault to be removed you can request that here." : "Bu kasanın silinmesini istiyorsanız, buradan silme isteğinde bulunabilirsiniz.",
+ "An admin then accepts or declines the request" : "Bir yönetici isteğinizi kabul ya da red eder",
+ "After an admin destroys this vault, all credentials in it will be lost" : "Yönetici kasanızı sildiğinde içindeki tüm kimlik doğrulama bilgileri silinir",
+ "Reason for requesting deletion (optional):" : "Silme isteği nedeni (isteğe bağlı):",
"Request vault destruction" : "Kasa silme isteği",
"Yes, request an admin to destroy this vault" : "Evet, bir yönetici bu kasayı silsin",
"Cancel destruction request" : "Silme isteğini iptal et",
"Vault destruction requested" : "Kasa silme isteğinde bulunuldu",
"Request removed" : "İstek iptal edildi",
"Destruction request pending" : "Bekleyen silme isteği var",
- "Warning! Adding credentials over http can be insecure!" : "Uyarı! http üzerinden kimlik doğrulama bilgileri eklemek güvenli değildir!",
+ "Warning! Adding credentials over HTTP is insecure!" : "Uyarı! HTTP üzerinden kimlik doğrulama bilgileri eklemek güvenli değildir!",
"Logged in to {{vault_name}}" : "{{vault_name}} kasasına oturum açıldı",
"Change vault" : "Kasayı değiştir",
"Deleted credentials" : "Silinmiş kimlik doğrulama bilgileri",
@@ -262,8 +263,8 @@
"Donate" : "Bağış Yapın",
"Someone has shared a credential with you." : "Sizinle bir kimlik doğrulama bilgisi paylaşıldı.",
"Click here to request it" : "İstekte bulunmak için buraya tıklayın",
- "Loading..." : "Yükleniyor...",
- "Awwhh.... credential not found. Maybe it expired" : "Kimlik doğrulama bilgileri bulunamadı. Süresi geçmiş olabilir",
+ "Loading…" : "Yükleniyor...",
+ "Awwhh… credential not found. Maybe it expired" : "Kimlik doğrulama bilgileri bulunamadı. Süresi geçmiş olabilir",
"Error while saving field" : "Alan kaydedilirken sorun çıktı",
"A Passman item has been created, modified or deleted" : "Bir Passman ögesi eklendi, değiştirildi ya da silindi",
"A Passman item has expired" : "Bir Passman ögesinin süresi doldu",
@@ -293,17 +294,18 @@
"%s shared \"%s\" with you. Click here to accept" : "%s sizinle \"%s\" ögesini paylaştı. Onaylamak için buraya tıklayın",
"%s has declined your share request for \"%s\"." : "%s, \"%s\" ögesini paylaşma isteğinizi reddetti.",
"%s has accepted your share request for \"%s\"." : "%s, \"%s\" ögesini paylaşma isteğinizi onayladı.",
+ "Passman" : "Passman",
"Unable to get version info" : "Sürüm bilgileri alınamadı",
"Passman Settings" : "Passman Ayarları",
- "Github version:" : "Github sürümü:",
- "A newer version of passman is available" : "Yeni bir Passman sürümü yayınlanmış",
+ "GitHub version:" : "GitHub sürümü:",
+ "A newer version of Passman is available" : "Yeni bir Passman sürümü yayınlanmış",
"Password sharing" : "Parola paylaşımı",
"Credential mover" : "Kimlik doğrulama bilgileri aktarıcı",
"Vault destruction requests" : "Kasa silme istekleri",
"Check for new versions" : "Yeni sürümler için tıklayın",
"Enable HTTPS check" : "HTTPS denetimi yapılsın",
"Disable context menu" : "Sağ tık menüsü devre dışı bırakılsın",
- "Disable javascript debugger" : "JavaScript hata ayıklaması devre dışı bırakılsın",
+ "Disable JavaScript debugger" : "JavaScript hata ayıklaması devre dışı bırakılsın",
"Allow users on this server to share passwords with a link" : "Bu sunucu üzerindeki kullanıcılar bağlantı ile parola paylaşabilsin",
"Allow users on this server to share passwords with other users" : "Bu sunucu üzerindeki kullanıcılar diğer kullanıcılar ile parola paylaşabilsin",
"Move credentials from one account to another" : "Kimlik doğrulama bilgilerini bir hesaptan diğerine aktar",
diff --git a/l10n/zh_CN.js b/l10n/zh_CN.js
index 22a10acc..a4dc8e3a 100644
--- a/l10n/zh_CN.js
+++ b/l10n/zh_CN.js
@@ -7,45 +7,34 @@ OC.L10N.register(
"Passwords do not match" : "密码不匹配",
"General" : "一般",
"Custom Fields" : "自定义字段",
- "Please fill in a label!" : "请填写一个标签!",
- "Please fill in a value!" : "请填写一个值! ",
"Error loading file" : "加载文件错误 ",
- "An error happened during decryption" : "解密过程中出错",
"Credential created!" : "创建凭证",
"Credential deleted" : "凭证删除",
"Credential updated" : "凭证更新",
"Credential recovered" : "凭证回收",
"Credential destroyed" : "凭证销毁",
- "Error downloading file, you probably don't have enough permissions" : "下载文件时出错,您可能没有足够的权限 ",
"Invalid QR code" : "无效的 QR 代码",
"Starting export" : "正在开始导出",
"Decrypting credentials" : "凭证解密",
"Done" : "完成",
- "File read successfully!" : "文件读取成功!",
- "Follow the following steps to import your file" : "按照下列步骤导入你的文件",
"Credential has no label, skipping" : "凭证没有标签,跳过",
"Adding {{credential}}" : "添加 {{credential}}",
"Added {{credential}}" : "已添加 {{credential}}",
"Parsed {{num}} credentials, starting to import" : "解析 {{num}} 个凭据,开始导入",
"Importing" : "正在导入",
"Start import" : "开始导入",
- "Select csv file" : "选择 csv 文件",
- "First 5 lines of the csv are shown." : "显示 csv 文件的前5行。",
+ "Select CSV file" : "选择 CSV 文件",
+ "Skip first row" : "跳转到第一行",
"Go back to importers." : "返回导入器。",
"Revision deleted" : "修订已删除",
"Revision restored" : "修订已恢复",
- "Save in passman" : "保存在passman",
"Settings saved" : "设置已保存",
"General settings" : "常规设置",
- "Password Audit" : "密码审核",
"Password settings" : "密码设置",
"Import credentials" : "导入凭据",
"Export credentials" : "导出凭据",
"Sharing" : "正在共享",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "您确认要离开吗?这将销毁您的所有凭证",
"Your old password is incorrect!" : "您的旧密码不正确!",
- "New passwords do not match!" : "新密码不匹配!",
- "Please login with your new vault password" : "请使用新的密码登录",
"Share with users and groups" : "与用户和组共享",
"Share link" : "分享链接",
"Are you sure you want to leave? This will corrupt this credential" : "您确认要离开吗?这将销毁这个凭证",
@@ -65,7 +54,7 @@ OC.L10N.register(
"Complete" : "完成",
"Username" : "用户名",
"Repeat password" : "重复密码",
- "Add Tag" : "添加标签",
+ "Add tag" : "添加标签",
"Field label" : "字段标签",
"Field value" : "字段值",
"Choose a file" : "选择一个文件",
@@ -83,8 +72,6 @@ OC.L10N.register(
"Current OTP settings" : "目前OTP设置 ",
"Issuer" : "发行者 ",
"Secret" : "密钥",
- "Expire date" : "过期日期",
- "No expire date set" : "未设置过期日期",
"Renew interval" : "更新间隔",
"Disabled" : "禁用",
"Day(s)" : "天(s)",
@@ -108,7 +95,6 @@ OC.L10N.register(
"Change vault key" : "更高保险箱密钥",
"Old vault password" : "旧的保险箱密码",
"New vault password" : "新的保险箱密码",
- "New vault password repeat" : "重复新的保险箱密码",
"Please wait your vault is being updated, do not leave this page." : "请耐心等待,您的保险箱正在更新,请不要离开此页面。",
"Processing" : "正在处理",
"Total progress" : "全部进度",
@@ -122,7 +108,6 @@ OC.L10N.register(
"Vault password" : "保险箱密码",
"This process is irreversible" : "操作不可逆",
"Delete my precious passwords" : "删除我的宝贵密码",
- "Deleting {{password}}..." : "正在删除 {{password}}...",
"Yes, delete my precious passwords" : "是的,删除我的宝贵密码 ",
"Import type" : "导入类型",
"Import" : "导入",
@@ -134,13 +119,11 @@ OC.L10N.register(
"Save keys" : "保存密码",
"Generate sharing keys" : "生成分享密码",
"Generating sharing keys" : "生成分享密码中",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "密码工具将检查您的密码,计算平均破解时间,如果低于阈值,则会显示它们.",
"Minimum password stength" : "最小密码长度",
- "Passman scanned your passwords, and here is the result." : "Passman 扫描了您的密码,结果如下。",
- "A total of {{scan_result}} weak credentials." : "共有 {{scan_result}} 弱凭证。",
+ "Start scan" : "开始扫描",
+ "Result" : "结果",
"Score" : "评分",
"Action" : "操作",
- "Search users or groups..." : "搜索用户或组...",
"Cyphering" : "计算中",
"Uploading" : "正在上传...",
"User" : "用户",
@@ -154,7 +137,6 @@ OC.L10N.register(
"Enable link sharing" : "启用链接分享",
"Share until date" : "分享截止日期",
"Expire after views" : "过期浏览次数",
- "Click share first" : "首先点击保存",
"Show files" : "显示文件",
"Details" : "详细信息",
"Hide details" : "隐藏详细信息",
@@ -194,15 +176,12 @@ OC.L10N.register(
"Share credential {{credential}}" : "分享凭证 {{credential}}",
"Unshare" : "取消共享",
"Showing deleted since" : "显示自从删除以来",
- "All time" : "所有时间",
- "Search credential..." : "搜索凭证...",
"Account" : "账户",
"Password" : "密码",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "说明",
- "Expire time" : "过期时间",
"Changed" : "已更改",
"Created" : "已创建",
"Edit" : "编辑",
@@ -220,11 +199,15 @@ OC.L10N.register(
"You have {{session_time}} left before logout." : "你剩 {{session_time}} 在注销前.",
"Last accessed" : "上次访问",
"Never" : "从不",
+ "Create vault" : "创建保险箱",
"Please input the password for" : "请输入密码为",
+ "Log into this vault automatically." : "自动登入保险箱",
+ "Decrypt vault" : "加密保险箱",
"Logged in to {{vault_name}}" : "计入日志到 {{vault_name}}",
+ "Change vault" : "更改保险箱",
+ "Deleted credentials" : "删除凭据",
"Logout" : "注销",
"Donate" : "捐助",
- "Loading..." : "加载中",
"Error while saving field" : "保存域错误",
"%1$s has been created by %2$s" : "%1$s 已经被创建通过 %2$s",
"You created %1$s" : "已创建 %1$s",
@@ -244,16 +227,15 @@ OC.L10N.register(
"%s has been shared with a link" : "%s 已被共享通过链接",
"Remind me later" : "以后提醒我 ",
"Ignore" : "忽略",
+ "Passman" : "Passman",
"Unable to get version info" : "无法获取版本信息 ",
"Passman Settings" : "Passman 设置",
- "Github version:" : "GitHub的版本: ",
- "A newer version of passman is available" : "新版本的 passman 是可用的 ",
"Check for new versions" : "检查新版本",
"Enable HTTPS check" : "启用HTTPS检查",
"Disable context menu" : "禁用上下文菜单 ",
- "Disable javascript debugger" : "禁用JavaScript调试器",
"Allow users on this server to share passwords with a link" : "允许此服务器上的用户通过链接共享密码 ",
"Allow users on this server to share passwords with other users" : "允许此服务器上的用户与其他用户共享密码 ",
+ "Request ID" : "请求 ID",
"Reason" : "原因",
"Connection to server lost" : "与服务器的连接断开",
"Problem loading page, reloading in 5 seconds" : "加载页面出现问题, 在 5 秒内重新加载",
diff --git a/l10n/zh_CN.json b/l10n/zh_CN.json
index 333cc59e..9bfe863d 100644
--- a/l10n/zh_CN.json
+++ b/l10n/zh_CN.json
@@ -5,45 +5,34 @@
"Passwords do not match" : "密码不匹配",
"General" : "一般",
"Custom Fields" : "自定义字段",
- "Please fill in a label!" : "请填写一个标签!",
- "Please fill in a value!" : "请填写一个值! ",
"Error loading file" : "加载文件错误 ",
- "An error happened during decryption" : "解密过程中出错",
"Credential created!" : "创建凭证",
"Credential deleted" : "凭证删除",
"Credential updated" : "凭证更新",
"Credential recovered" : "凭证回收",
"Credential destroyed" : "凭证销毁",
- "Error downloading file, you probably don't have enough permissions" : "下载文件时出错,您可能没有足够的权限 ",
"Invalid QR code" : "无效的 QR 代码",
"Starting export" : "正在开始导出",
"Decrypting credentials" : "凭证解密",
"Done" : "完成",
- "File read successfully!" : "文件读取成功!",
- "Follow the following steps to import your file" : "按照下列步骤导入你的文件",
"Credential has no label, skipping" : "凭证没有标签,跳过",
"Adding {{credential}}" : "添加 {{credential}}",
"Added {{credential}}" : "已添加 {{credential}}",
"Parsed {{num}} credentials, starting to import" : "解析 {{num}} 个凭据,开始导入",
"Importing" : "正在导入",
"Start import" : "开始导入",
- "Select csv file" : "选择 csv 文件",
- "First 5 lines of the csv are shown." : "显示 csv 文件的前5行。",
+ "Select CSV file" : "选择 CSV 文件",
+ "Skip first row" : "跳转到第一行",
"Go back to importers." : "返回导入器。",
"Revision deleted" : "修订已删除",
"Revision restored" : "修订已恢复",
- "Save in passman" : "保存在passman",
"Settings saved" : "设置已保存",
"General settings" : "常规设置",
- "Password Audit" : "密码审核",
"Password settings" : "密码设置",
"Import credentials" : "导入凭据",
"Export credentials" : "导出凭据",
"Sharing" : "正在共享",
- "Are you sure you want to leave? This WILL corrupt all your credentials" : "您确认要离开吗?这将销毁您的所有凭证",
"Your old password is incorrect!" : "您的旧密码不正确!",
- "New passwords do not match!" : "新密码不匹配!",
- "Please login with your new vault password" : "请使用新的密码登录",
"Share with users and groups" : "与用户和组共享",
"Share link" : "分享链接",
"Are you sure you want to leave? This will corrupt this credential" : "您确认要离开吗?这将销毁这个凭证",
@@ -63,7 +52,7 @@
"Complete" : "完成",
"Username" : "用户名",
"Repeat password" : "重复密码",
- "Add Tag" : "添加标签",
+ "Add tag" : "添加标签",
"Field label" : "字段标签",
"Field value" : "字段值",
"Choose a file" : "选择一个文件",
@@ -81,8 +70,6 @@
"Current OTP settings" : "目前OTP设置 ",
"Issuer" : "发行者 ",
"Secret" : "密钥",
- "Expire date" : "过期日期",
- "No expire date set" : "未设置过期日期",
"Renew interval" : "更新间隔",
"Disabled" : "禁用",
"Day(s)" : "天(s)",
@@ -106,7 +93,6 @@
"Change vault key" : "更高保险箱密钥",
"Old vault password" : "旧的保险箱密码",
"New vault password" : "新的保险箱密码",
- "New vault password repeat" : "重复新的保险箱密码",
"Please wait your vault is being updated, do not leave this page." : "请耐心等待,您的保险箱正在更新,请不要离开此页面。",
"Processing" : "正在处理",
"Total progress" : "全部进度",
@@ -120,7 +106,6 @@
"Vault password" : "保险箱密码",
"This process is irreversible" : "操作不可逆",
"Delete my precious passwords" : "删除我的宝贵密码",
- "Deleting {{password}}..." : "正在删除 {{password}}...",
"Yes, delete my precious passwords" : "是的,删除我的宝贵密码 ",
"Import type" : "导入类型",
"Import" : "导入",
@@ -132,13 +117,11 @@
"Save keys" : "保存密码",
"Generate sharing keys" : "生成分享密码",
"Generating sharing keys" : "生成分享密码中",
- "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "密码工具将检查您的密码,计算平均破解时间,如果低于阈值,则会显示它们.",
"Minimum password stength" : "最小密码长度",
- "Passman scanned your passwords, and here is the result." : "Passman 扫描了您的密码,结果如下。",
- "A total of {{scan_result}} weak credentials." : "共有 {{scan_result}} 弱凭证。",
+ "Start scan" : "开始扫描",
+ "Result" : "结果",
"Score" : "评分",
"Action" : "操作",
- "Search users or groups..." : "搜索用户或组...",
"Cyphering" : "计算中",
"Uploading" : "正在上传...",
"User" : "用户",
@@ -152,7 +135,6 @@
"Enable link sharing" : "启用链接分享",
"Share until date" : "分享截止日期",
"Expire after views" : "过期浏览次数",
- "Click share first" : "首先点击保存",
"Show files" : "显示文件",
"Details" : "详细信息",
"Hide details" : "隐藏详细信息",
@@ -192,15 +174,12 @@
"Share credential {{credential}}" : "分享凭证 {{credential}}",
"Unshare" : "取消共享",
"Showing deleted since" : "显示自从删除以来",
- "All time" : "所有时间",
- "Search credential..." : "搜索凭证...",
"Account" : "账户",
"Password" : "密码",
"OTP" : "OTP",
"E-mail" : "E-mail",
"URL" : "URL",
"Notes" : "说明",
- "Expire time" : "过期时间",
"Changed" : "已更改",
"Created" : "已创建",
"Edit" : "编辑",
@@ -218,11 +197,15 @@
"You have {{session_time}} left before logout." : "你剩 {{session_time}} 在注销前.",
"Last accessed" : "上次访问",
"Never" : "从不",
+ "Create vault" : "创建保险箱",
"Please input the password for" : "请输入密码为",
+ "Log into this vault automatically." : "自动登入保险箱",
+ "Decrypt vault" : "加密保险箱",
"Logged in to {{vault_name}}" : "计入日志到 {{vault_name}}",
+ "Change vault" : "更改保险箱",
+ "Deleted credentials" : "删除凭据",
"Logout" : "注销",
"Donate" : "捐助",
- "Loading..." : "加载中",
"Error while saving field" : "保存域错误",
"%1$s has been created by %2$s" : "%1$s 已经被创建通过 %2$s",
"You created %1$s" : "已创建 %1$s",
@@ -242,16 +225,15 @@
"%s has been shared with a link" : "%s 已被共享通过链接",
"Remind me later" : "以后提醒我 ",
"Ignore" : "忽略",
+ "Passman" : "Passman",
"Unable to get version info" : "无法获取版本信息 ",
"Passman Settings" : "Passman 设置",
- "Github version:" : "GitHub的版本: ",
- "A newer version of passman is available" : "新版本的 passman 是可用的 ",
"Check for new versions" : "检查新版本",
"Enable HTTPS check" : "启用HTTPS检查",
"Disable context menu" : "禁用上下文菜单 ",
- "Disable javascript debugger" : "禁用JavaScript调试器",
"Allow users on this server to share passwords with a link" : "允许此服务器上的用户通过链接共享密码 ",
"Allow users on this server to share passwords with other users" : "允许此服务器上的用户与其他用户共享密码 ",
+ "Request ID" : "请求 ID",
"Reason" : "原因",
"Connection to server lost" : "与服务器的连接断开",
"Problem loading page, reloading in 5 seconds" : "加载页面出现问题, 在 5 秒内重新加载",
diff --git a/launch_phpunit.sh.sample b/launch_phpunit.sh.sample
new file mode 100644
index 00000000..949113d7
--- /dev/null
+++ b/launch_phpunit.sh.sample
@@ -0,0 +1,8 @@
+#!/bin/bash
+# Setup your testing environment paths
+export SERVER_BASE_DIR=/var/www/html/
+export SERVER_CONFIG_DIR=/var/www/html/config/
+export SERVER_CONFIG_FILE=config.php
+
+# Launch the actual tests
+phpunit -v $@
diff --git a/lib/Service/CronService.php b/lib/Service/CronService.php
index ca114166..dba14371 100644
--- a/lib/Service/CronService.php
+++ b/lib/Service/CronService.php
@@ -48,7 +48,6 @@ class CronService {
public function expireCredentials() {
- $this->logger->info('Passman cron test', array('app' => 'passman'));
$expired_credentials = $this->credentialService->getExpiredCredentials($this->utils->getTime());
foreach($expired_credentials as $credential){
$link = ''; // @TODO create direct link to credential
@@ -68,4 +67,4 @@ class CronService {
}
}
}
-} \ No newline at end of file
+}
diff --git a/templates/part.admin.php b/templates/part.admin.php
index 2d728665..3b502527 100644
--- a/templates/part.admin.php
+++ b/templates/part.admin.php
@@ -47,7 +47,7 @@ $ciphers = openssl_get_cipher_methods();
<h2><?php p($l->t('Passman Settings')); ?></h2>
<?php
if ($checkVersion) {
- p($l->t('Github version:') . ' ' . $githubVersion);
+ p($l->t('GitHub version:') . ' ' . $githubVersion);
print '<br />';
} ?>
Local version: <?php p($localVersion); ?><br/>