1
0
mirror of https://github.com/bitwarden/web synced 2025-12-06 00:03:28 +00:00

Compare commits

...

31 Commits

Author SHA1 Message Date
Kyle Spearrin
1aa93e7737 New Crowdin translations (#277)
* New translations messages.json (Danish)

* New translations messages.json (Estonian)

* New translations messages.json (Finnish)

* New translations messages.json (Norwegian Bokmal)

* New translations messages.json (Russian)

* New translations messages.json (Slovak)

* New translations messages.json (Turkish)
2018-10-16 08:58:37 -04:00
Kyle Spearrin
a0864f5f67 update jslib 2018-10-16 08:57:19 -04:00
Kyle Spearrin
6e9f71f942 move getDomain to jslib 2018-10-13 23:26:38 -04:00
Kyle Spearrin
65211372df New Crowdin translations (#275)
* New translations messages.json (Chinese Simplified)

* New translations messages.json (Spanish)

* New translations messages.json (Russian)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Portuguese)

* New translations messages.json (Polish)

* New translations messages.json (Chinese Traditional)

* New translations messages.json (Italian)

* New translations messages.json (French)

* New translations messages.json (Estonian)

* New translations messages.json (Danish)

* New translations messages.json (Ukrainian)
2018-10-11 21:35:24 -04:00
Kyle Spearrin
2ca8d8817a update jslib 2018-10-11 20:59:55 -04:00
Kyle Spearrin
ec266ea657 update jslib 2018-10-10 17:52:29 -04:00
Kyle Spearrin
d117aa5139 update yubiKeyDesc for 5 series 2018-10-10 12:30:03 -04:00
Kyle Spearrin
4534b7d4dc Merge branch 'master' of github.com:bitwarden/web 2018-10-09 18:03:25 -04:00
Kyle Spearrin
707fe01d77 update signalr 2018-10-09 18:03:23 -04:00
Kyle Spearrin
0e09ba0dd5 New Crowdin translations (#273)
* New translations messages.json (Chinese Simplified)

* New translations messages.json (Korean)

* New translations messages.json (Swedish)

* New translations messages.json (Spanish)

* New translations messages.json (Slovak)

* New translations messages.json (Russian)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Portuguese)

* New translations messages.json (Polish)

* New translations messages.json (Norwegian Bokmal)

* New translations messages.json (Japanese)

* New translations messages.json (Chinese Traditional)

* New translations messages.json (Italian)

* New translations messages.json (Hungarian)

* New translations messages.json (German)

* New translations messages.json (French)

* New translations messages.json (Finnish)

* New translations messages.json (Estonian)

* New translations messages.json (Dutch)

* New translations messages.json (Danish)

* New translations messages.json (Czech)

* New translations messages.json (Ukrainian)
2018-10-09 16:07:41 -04:00
Kyle Spearrin
989560f23c renamed event to updated2fa 2018-10-09 16:01:00 -04:00
Kyle Spearrin
844a9f934f New Crowdin translations (#272)
* New translations messages.json (Chinese Simplified)

* New translations messages.json (Korean)

* New translations messages.json (Swedish)

* New translations messages.json (Spanish)

* New translations messages.json (Slovak)

* New translations messages.json (Russian)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Portuguese)

* New translations messages.json (Polish)

* New translations messages.json (Norwegian Bokmal)

* New translations messages.json (Japanese)

* New translations messages.json (Chinese Traditional)

* New translations messages.json (Italian)

* New translations messages.json (Hungarian)

* New translations messages.json (German)

* New translations messages.json (French)

* New translations messages.json (Finnish)

* New translations messages.json (Estonian)

* New translations messages.json (Dutch)

* New translations messages.json (Danish)

* New translations messages.json (Czech)

* New translations messages.json (Ukrainian)
2018-10-09 09:21:52 -04:00
Kyle Spearrin
b5348c593a bump version 2018-10-08 23:11:38 -04:00
Kyle Spearrin
7f809ba541 inline redios 2018-10-08 22:42:32 -04:00
Kyle Spearrin
f9058fcddc pass gen fixes. word sep option 2018-10-08 22:06:15 -04:00
Kyle Spearrin
05c9957fd2 passphrase cleanup 2018-10-08 17:55:07 -04:00
Martin Trigaux
675739d24f Adapt the interface to generate passphrase too (#267) 2018-10-08 17:27:25 -04:00
Kyle Spearrin
10be0867ad New Crowdin translations (#270)
* New translations messages.json (Chinese Simplified)

* New translations messages.json (Korean)

* New translations messages.json (Swedish)

* New translations messages.json (Spanish)

* New translations messages.json (Slovak)

* New translations messages.json (Russian)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Portuguese)

* New translations messages.json (Polish)

* New translations messages.json (Norwegian Bokmal)

* New translations messages.json (Japanese)

* New translations messages.json (Chinese Traditional)

* New translations messages.json (Italian)

* New translations messages.json (Hungarian)

* New translations messages.json (German)

* New translations messages.json (French)

* New translations messages.json (Finnish)

* New translations messages.json (Estonian)

* New translations messages.json (Dutch)

* New translations messages.json (Danish)

* New translations messages.json (Czech)

* New translations messages.json (Ukrainian)
2018-10-08 16:05:16 -04:00
Kyle Spearrin
d2a4b85bdd update passman instructions 2018-10-08 15:54:58 -04:00
ServiusHack
782061ac5e Add instructions for passman (#269) 2018-10-08 15:51:59 -04:00
Kyle Spearrin
8d98e9e6f9 add back proper isDev check 2018-10-08 14:26:10 -04:00
Kyle Spearrin
4aa75e9376 support for setup of multiple u2f keys 2018-10-08 14:23:30 -04:00
Kyle Spearrin
c6d6eecb43 update jslib 2018-10-05 13:57:41 -04:00
Kyle Spearrin
1d6d7b8aa8 dont await void methods 2018-10-04 11:58:19 -04:00
Kyle Spearrin
68ed8e51bd convert analytics and toaster to platform utils 2018-10-03 10:33:04 -04:00
Kyle Spearrin
d4dd962193 update jslib 2018-10-02 09:22:49 -04:00
Kyle Spearrin
7dfb70eb8e purge org vault 2018-09-25 09:12:24 -04:00
Kyle Spearrin
53675eeba7 stop prop on checkbox clicks 2018-09-24 17:45:35 -04:00
Kyle Spearrin
6399973bfa nojekyll 2018-09-22 16:04:09 -04:00
Kyle Spearrin
f1384f5dc1 passpack importer 2018-09-21 13:54:17 -04:00
Kyle Spearrin
027cad9e52 switch to webpack-dev-server 2018-09-18 11:59:03 -04:00
66 changed files with 6359 additions and 2696 deletions

2
jslib

Submodule jslib updated: 85587e0672...2f6426deb4

3011
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +1,24 @@
{
"name": "bitwarden-web",
"version": "2.3.0",
"version": "2.4.0",
"scripts": {
"sub:init": "git submodule update --init --recursive",
"sub:update": "git submodule update --remote",
"sub:pull": "git submodule foreach git pull",
"postinstall": "npm run sub:init",
"build": "gulp prebuild && webpack --config webpack.config.js",
"build:watch": "gulp prebuild && webpack-serve --config webpack.config.js",
"build:prod": "gulp prebuild && cross-env NODE_ENV=production webpack --config webpack.config.js",
"build:prod:watch": "gulp prebuild && cross-env NODE_ENV=production webpack-serve --config webpack.config.js",
"build:selfhost": "gulp prebuild && cross-env SELF_HOST=true webpack-serve --config webpack.config.js",
"build:selfhost:watch": "gulp prebuild && cross-env SELF_HOST=true webpack-serve --config webpack.config.js",
"build:selfhost:prod": "gulp prebuild && cross-env SELF_HOST=true NODE_ENV=production webpack --config webpack.config.js",
"build:selfhost:prod:watch": "gulp prebuild && cross-env SELF_HOST=true NODE_ENV=production webpack-serve --config webpack.config.js",
"build": "gulp prebuild && webpack",
"build:watch": "gulp prebuild && webpack-dev-server",
"build:prod": "gulp prebuild && cross-env NODE_ENV=production webpack",
"build:prod:watch": "gulp prebuild && cross-env NODE_ENV=production webpack-dev-server",
"build:selfhost": "gulp prebuild && cross-env SELF_HOST=true webpack-dev-server",
"build:selfhost:watch": "gulp prebuild && cross-env SELF_HOST=true webpack-dev-server",
"build:selfhost:prod": "gulp prebuild && cross-env SELF_HOST=true NODE_ENV=production webpack",
"build:selfhost:prod:watch": "gulp prebuild && cross-env SELF_HOST=true NODE_ENV=production webpack-dev-server",
"clean:l10n": "git push origin --delete l10n_master",
"dist": "npm run build:prod && gulp postdist",
"dist:selfhost": "npm run build:selfhost:prod && gulp postdist",
"deploy": "npm run dist && gh-pages -d build",
"deploy:dev": "npm run dist && gh-pages -d build -r git@github.com:kspearrin/bitwarden-web-dev.git",
"lint": "tslint src/**/*.ts || true",
"lint:fix": "tslint src/**/*.ts --fix"
},
@@ -52,7 +53,7 @@
"typescript": "^2.7.2",
"webpack": "^4.18.0",
"webpack-cli": "^3.1.0",
"webpack-serve": "^2.0.2"
"webpack-dev-server": "^3.1.8"
},
"dependencies": {
"@angular/animations": "6.1.7",
@@ -65,8 +66,8 @@
"@angular/platform-browser-dynamic": "6.1.7",
"@angular/router": "6.1.7",
"@angular/upgrade": "6.1.7",
"@aspnet/signalr": "1.0.3",
"@aspnet/signalr-protocol-msgpack": "1.0.3",
"@aspnet/signalr": "1.0.4",
"@aspnet/signalr-protocol-msgpack": "1.0.4",
"angular2-toaster": "6.1.0",
"angulartics2": "6.3.0",
"bootstrap": "4.1.3",

0
src/.nojekyll Normal file
View File

View File

@@ -1,11 +1,9 @@
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { ApiService } from 'jslib/abstractions/api.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { HintComponent as BaseHintComponent } from 'jslib/angular/components/hint.component';
@@ -14,9 +12,8 @@ import { HintComponent as BaseHintComponent } from 'jslib/angular/components/hin
templateUrl: 'hint.component.html',
})
export class HintComponent extends BaseHintComponent {
constructor(router: Router, analytics: Angulartics2,
toasterService: ToasterService, i18nService: I18nService,
apiService: ApiService) {
super(router, analytics, toasterService, i18nService, apiService);
constructor(router: Router, i18nService: I18nService,
apiService: ApiService, platformUtilsService: PlatformUtilsService) {
super(router, i18nService, apiService, platformUtilsService);
}
}

View File

@@ -4,9 +4,6 @@ import {
} from '@angular/core';
import { Router } from '@angular/router';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { CryptoService } from 'jslib/abstractions/crypto.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { MessagingService } from 'jslib/abstractions/messaging.service';
@@ -22,13 +19,11 @@ import { LockComponent as BaseLockComponent } from 'jslib/angular/components/loc
templateUrl: 'lock.component.html',
})
export class LockComponent extends BaseLockComponent implements OnInit {
constructor(router: Router, analytics: Angulartics2,
toasterService: ToasterService, i18nService: I18nService,
constructor(router: Router, i18nService: I18nService,
platformUtilsService: PlatformUtilsService, messagingService: MessagingService,
userService: UserService, cryptoService: CryptoService,
private routerService: RouterService) {
super(router, analytics, toasterService, i18nService, platformUtilsService,
messagingService, userService, cryptoService);
super(router, i18nService, platformUtilsService, messagingService, userService, cryptoService);
}
async ngOnInit() {

View File

@@ -4,11 +4,9 @@ import {
Router,
} from '@angular/router';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { AuthService } from 'jslib/abstractions/auth.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { StateService } from 'jslib/abstractions/state.service';
import { StorageService } from 'jslib/abstractions/storage.service';
@@ -20,10 +18,10 @@ import { LoginComponent as BaseLoginComponent } from 'jslib/angular/components/l
})
export class LoginComponent extends BaseLoginComponent {
constructor(authService: AuthService, router: Router,
analytics: Angulartics2, toasterService: ToasterService,
i18nService: I18nService, private route: ActivatedRoute,
storageService: StorageService, private stateService: StateService) {
super(authService, router, analytics, toasterService, i18nService, storageService);
storageService: StorageService, private stateService: StateService,
platformUtilsService: PlatformUtilsService) {
super(authService, router, platformUtilsService, i18nService, storageService);
this.onSuccessfulLoginNavigate = this.goAfterLogIn;
}

View File

@@ -4,9 +4,6 @@ import {
Router,
} from '@angular/router';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { ApiService } from 'jslib/abstractions/api.service';
import { AuthService } from 'jslib/abstractions/auth.service';
import { CryptoService } from 'jslib/abstractions/crypto.service';
@@ -25,11 +22,10 @@ export class RegisterComponent extends BaseRegisterComponent {
showTerms = true;
constructor(authService: AuthService, router: Router,
analytics: Angulartics2, toasterService: ToasterService,
i18nService: I18nService, cryptoService: CryptoService,
apiService: ApiService, private route: ActivatedRoute,
stateService: StateService, platformUtilsService: PlatformUtilsService) {
super(authService, router, analytics, toasterService, i18nService, cryptoService, apiService, stateService);
super(authService, router, i18nService, cryptoService, apiService, stateService, platformUtilsService);
this.showTerms = !platformUtilsService.isSelfHost();
}

View File

@@ -1,9 +1,6 @@
import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { AuthService } from 'jslib/abstractions/auth.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
@@ -18,8 +15,7 @@ import {
})
export class TwoFactorOptionsComponent extends BaseTwoFactorOptionsComponent {
constructor(authService: AuthService, router: Router,
analytics: Angulartics2, toasterService: ToasterService,
i18nService: I18nService, platformUtilsService: PlatformUtilsService) {
super(authService, router, analytics, toasterService, i18nService, platformUtilsService, window);
super(authService, router, i18nService, platformUtilsService, window);
}
}

View File

@@ -7,9 +7,6 @@ import {
import { Router } from '@angular/router';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { TwoFactorOptionsComponent } from './two-factor-options.component';
import { ModalComponent } from '../modal.component';
@@ -33,12 +30,10 @@ export class TwoFactorComponent extends BaseTwoFactorComponent {
@ViewChild('twoFactorOptions', { read: ViewContainerRef }) twoFactorOptionsModal: ViewContainerRef;
constructor(authService: AuthService, router: Router,
analytics: Angulartics2, toasterService: ToasterService,
i18nService: I18nService, apiService: ApiService,
platformUtilsService: PlatformUtilsService, private stateService: StateService,
environmentService: EnvironmentService, private componentFactoryResolver: ComponentFactoryResolver) {
super(authService, router, analytics, toasterService, i18nService, apiService,
platformUtilsService, window, environmentService);
super(authService, router, i18nService, apiService, platformUtilsService, window, environmentService);
this.onSuccessfulLoginNavigate = this.goAfterLogIn;
}

View File

@@ -3,7 +3,10 @@ import * as _swal from 'sweetalert';
import { SweetAlert } from 'sweetalert/typings/core';
import {
BodyOutputType,
Toast,
ToasterConfig,
ToasterContainerComponent,
ToasterService,
} from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
@@ -14,7 +17,9 @@ import {
NgZone,
OnDestroy,
OnInit,
SecurityContext,
} from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import {
NavigationEnd,
Router,
@@ -75,7 +80,7 @@ export class AppComponent implements OnDestroy, OnInit {
private platformUtilsService: PlatformUtilsService, private ngZone: NgZone,
private lockService: LockService, private storageService: StorageService,
private cryptoService: CryptoService, private collectionService: CollectionService,
private routerService: RouterService, private searchService: SearchService,
private sanitizer: DomSanitizer, private searchService: SearchService,
private notificationsService: NotificationsService) { }
ngOnInit() {
@@ -126,6 +131,15 @@ export class AppComponent implements OnDestroy, OnInit {
this.router.navigate(['settings/premium']);
}
break;
case 'showToast':
this.showToast(message);
break;
case 'analyticsEventTrack':
this.analytics.eventTrack.next({
action: message.action,
properties: { label: message.label },
});
break;
default:
break;
}
@@ -202,6 +216,33 @@ export class AppComponent implements OnDestroy, OnInit {
}, IdleTimeout);
}
private showToast(msg: any) {
const toast: Toast = {
type: msg.type,
title: msg.title,
};
if (typeof (msg.text) === 'string') {
toast.body = msg.text;
} else if (msg.text.length === 1) {
toast.body = msg.text[0];
} else {
let message = '';
msg.text.forEach((t: string) =>
message += ('<p>' + this.sanitizer.sanitize(SecurityContext.HTML, t) + '</p>'));
toast.body = message;
toast.bodyOutputType = BodyOutputType.TrustedHtml;
}
if (msg.options != null) {
if (msg.options.trustedHtml === true) {
toast.bodyOutputType = BodyOutputType.TrustedHtml;
}
if (msg.options.timeout != null && msg.options.timeout > 0) {
toast.timeout = msg.options.timeout;
}
}
this.toasterService.popAsync(toast);
}
private idleStateChanged() {
if (this.isIdle) {
this.notificationsService.disconnectFromInactivity();

View File

@@ -41,7 +41,7 @@
<tbody>
<tr *ngFor="let g of groups; let i = index">
<td class="table-list-checkbox" (click)="check(g)">
<input type="checkbox" [(ngModel)]="g.checked" name="Groups[{{i}}].Checked" [disabled]="g.accessAll">
<input type="checkbox" [(ngModel)]="g.checked" name="Groups[{{i}}].Checked" [disabled]="g.accessAll" appStopProp>
</td>
<td (click)="check(g)">
<span appStopProp>

View File

@@ -62,7 +62,7 @@
<tbody>
<tr *ngFor="let c of collections; let i = index">
<td class="table-list-checkbox" (click)="check(c)">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked" appStopProp>
</td>
<td (click)="check(c)">
<span appStopProp>{{c.name}}</span>

View File

@@ -86,7 +86,7 @@
<tbody>
<tr *ngFor="let c of collections; let i = index">
<td class="table-list-checkbox" (click)="check(c)">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked" appStopProp>
</td>
<td (click)="check(c)">
<span appStopProp>{{c.name}}</span>

View File

@@ -22,7 +22,7 @@
<tbody>
<tr *ngFor="let g of groups; let i = index">
<td class="table-list-checkbox" (click)="check(g)">
<input type="checkbox" [(ngModel)]="g.checked" name="Groups[{{i}}].Checked">
<input type="checkbox" [(ngModel)]="g.checked" name="Groups[{{i}}].Checked" appStopProp>
</td>
<td (click)="check(g)">
<span appStopProp>{{g.name}}</span>

View File

@@ -43,6 +43,8 @@
<div class="card-body">
<p>{{'dangerZoneDesc' | i18n}}</p>
<button type="button" class="btn btn-outline-danger" (click)="deleteOrganization()">{{'deleteOrganization' | i18n}}</button>
<button type="button" class="btn btn-outline-danger" (click)="purgeVault()">{{'purgeVault' | i18n}}</button>
</div>
</div>
<ng-template #deleteOrganizationTemplate></ng-template>
<ng-template #purgeOrganizationTemplate></ng-template>

View File

@@ -17,6 +17,7 @@ import { OrganizationUpdateRequest } from 'jslib/models/request/organizationUpda
import { OrganizationResponse } from 'jslib/models/response/organizationResponse';
import { ModalComponent } from '../../modal.component';
import { PurgeVaultComponent } from '../../settings/purge-vault.component';
import { DeleteOrganizationComponent } from './delete-organization.component';
@Component({
@@ -25,6 +26,7 @@ import { DeleteOrganizationComponent } from './delete-organization.component';
})
export class AccountComponent {
@ViewChild('deleteOrganizationTemplate', { read: ViewContainerRef }) deleteModalRef: ViewContainerRef;
@ViewChild('purgeOrganizationTemplate', { read: ViewContainerRef }) purgeModalRef: ViewContainerRef;
loading = true;
org: OrganizationResponse;
@@ -78,4 +80,19 @@ export class AccountComponent {
this.modal = null;
});
}
purgeVault() {
if (this.modal != null) {
this.modal.close();
}
const factory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent);
this.modal = this.purgeModalRef.createComponent(factory).instance;
const childComponent = this.modal.show<PurgeVaultComponent>(PurgeVaultComponent, this.purgeModalRef);
childComponent.organizationId = this.organizationId;
this.modal.onClosed.subscribe(async () => {
this.modal = null;
});
}
}

View File

@@ -1,6 +1,3 @@
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@@ -18,11 +15,10 @@ import { ExportComponent as BaseExportComponent } from '../../tools/export.compo
export class ExportComponent extends BaseExportComponent {
organizationId: string;
constructor(analytics: Angulartics2, toasterService: ToasterService,
cryptoService: CryptoService, i18nService: I18nService,
constructor(cryptoService: CryptoService, i18nService: I18nService,
platformUtilsService: PlatformUtilsService, exportService: ExportService,
private route: ActivatedRoute) {
super(analytics, toasterService, cryptoService, i18nService, platformUtilsService, exportService);
super(cryptoService, i18nService, platformUtilsService, exportService);
}
ngOnInit() {

View File

@@ -3,9 +3,6 @@ import {
OnInit,
} from '@angular/core';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { ApiService } from 'jslib/abstractions/api.service';
import { AuditService } from 'jslib/abstractions/audit.service';
import { CipherService } from 'jslib/abstractions/cipher.service';
@@ -35,14 +32,12 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit {
constructor(cipherService: CipherService, folderService: FolderService,
i18nService: I18nService, platformUtilsService: PlatformUtilsService,
analytics: Angulartics2, toasterService: ToasterService,
auditService: AuditService, stateService: StateService,
userService: UserService, totpService: TotpService,
passwordGenerationService: PasswordGenerationService, private apiService: ApiService,
messagingService: MessagingService) {
super(cipherService, folderService, i18nService, platformUtilsService, analytics,
toasterService, auditService, stateService, userService, totpService, passwordGenerationService,
messagingService);
super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,
userService, totpService, passwordGenerationService, messagingService);
}
protected async loadCipher() {

View File

@@ -1,8 +1,5 @@
import { Component } from '@angular/core';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { ApiService } from 'jslib/abstractions/api.service';
import { CipherService } from 'jslib/abstractions/cipher.service';
import { CryptoService } from 'jslib/abstractions/crypto.service';
@@ -23,12 +20,10 @@ import { AttachmentsComponent as BaseAttachmentsComponent } from '../../vault/at
export class AttachmentsComponent extends BaseAttachmentsComponent {
organization: Organization;
constructor(cipherService: CipherService, analytics: Angulartics2,
toasterService: ToasterService, i18nService: I18nService,
constructor(cipherService: CipherService, i18nService: I18nService,
cryptoService: CryptoService, userService: UserService,
platformUtilsService: PlatformUtilsService, private apiService: ApiService) {
super(cipherService, analytics, toasterService, i18nService, cryptoService, userService,
platformUtilsService);
super(cipherService, i18nService, cryptoService, userService, platformUtilsService);
}
protected async loadCipher() {

View File

@@ -47,8 +47,8 @@ export class EventService {
case EventType.User_ChangedPassword:
msg = this.i18nService.t('changedPassword');
break;
case EventType.User_Enabled2fa:
msg = this.i18nService.t('enabled2fa');
case EventType.User_Updated2fa:
msg = this.i18nService.t('enabledUpdated2fa');
break;
case EventType.User_Disabled2fa:
msg = this.i18nService.t('disabled2fa');
@@ -124,6 +124,9 @@ export class EventService {
case EventType.Organization_Updated:
msg = this.i18nService.t('editedOrgSettings');
break;
case EventType.Organization_PurgedVault:
msg = this.i18nService.t('purgedOrganizationVault');
break;
default:
break;
}

View File

@@ -83,7 +83,7 @@ const i18nService = new I18nService(window.navigator.language, 'locales');
const stateService = new StateService();
const broadcasterService = new BroadcasterService();
const messagingService = new BroadcasterMessagingService(broadcasterService);
const platformUtilsService = new WebPlatformUtilsService(i18nService);
const platformUtilsService = new WebPlatformUtilsService(i18nService, messagingService);
const storageService: StorageServiceAbstraction = new HtmlStorageService(platformUtilsService);
const secureStorageService: StorageServiceAbstraction = new MemoryStorageService();
const cryptoFunctionService: CryptoFunctionServiceAbstraction = new WebCryptoFunctionService(window,
@@ -98,7 +98,7 @@ const userService = new UserService(tokenService, storageService);
const settingsService = new SettingsService(userService, storageService);
export let searchService: SearchService = null;
const cipherService = new CipherService(cryptoService, userService, settingsService,
apiService, storageService, i18nService, platformUtilsService, () => searchService);
apiService, storageService, i18nService, () => searchService);
const folderService = new FolderService(cryptoService, userService, apiService, storageService,
i18nService, cipherService);
const collectionService = new CollectionService(cryptoService, userService, storageService, i18nService);
@@ -110,7 +110,7 @@ const syncService = new SyncService(userService, apiService, settingsService,
async (expired: boolean) => messagingService.send('logout', { expired: expired }));
const passwordGenerationService = new PasswordGenerationService(cryptoService, storageService);
const totpService = new TotpService(storageService, cryptoFunctionService);
const containerService = new ContainerService(cryptoService, platformUtilsService);
const containerService = new ContainerService(cryptoService);
const authService = new AuthService(cryptoService, apiService,
userService, tokenService, appIdService, i18nService, platformUtilsService, messagingService);
const exportService = new ExportService(folderService, cipherService, apiService);
@@ -134,7 +134,7 @@ export function initFactory(): Function {
environmentService.notificationsUrl = isDev ? 'http://localhost:61840' :
'https://notifications.bitwarden.com'; // window.location.origin + '/notifications';
}
await apiService.setUrls({
apiService.setUrls({
base: isDev ? null : window.location.origin,
api: isDev ? 'http://localhost:4000' : null,
identity: isDev ? 'http://localhost:33656' : null,
@@ -151,7 +151,7 @@ export function initFactory(): Function {
lockService.init(true);
const locale = await storageService.get<string>(ConstantsService.localeKey);
await i18nService.init(locale);
await authService.init();
authService.init();
const htmlEl = window.document.documentElement;
htmlEl.classList.add('locale_' + i18nService.translationLocale);
let theme = await storageService.get<string>(ConstantsService.themeKey);

View File

@@ -8,7 +8,7 @@
</button>
</div>
<div class="modal-body">
<p>{{'purgeVaultDesc' | i18n}}</p>
<p>{{(organizationId ? 'purgeOrgVaultDesc' : 'purgeVaultDesc') | i18n}}</p>
<app-callout type="warning">{{'purgeVaultWarning' | i18n}}</app-callout>
<label for="masterPassword">{{'masterPass' | i18n}}</label>
<input id="masterPassword" type="password" name="MasterPasswordHash" class="form-control" [(ngModel)]="masterPassword" required

View File

@@ -1,4 +1,7 @@
import { Component } from '@angular/core';
import {
Component,
Input,
} from '@angular/core';
import { Router } from '@angular/router';
import { ToasterService } from 'angular2-toaster';
@@ -15,6 +18,8 @@ import { PasswordVerificationRequest } from 'jslib/models/request/passwordVerifi
templateUrl: 'purge-vault.component.html',
})
export class PurgeVaultComponent {
@Input() organizationId?: string = null;
masterPassword: string;
formPromise: Promise<any>;
@@ -32,11 +37,17 @@ export class PurgeVaultComponent {
const request = new PasswordVerificationRequest();
request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);
try {
this.formPromise = this.apiService.postPurgeCiphers(request);
this.formPromise = this.apiService.postPurgeCiphers(request, this.organizationId);
await this.formPromise;
this.analytics.eventTrack.next({ action: 'Purged Vault' });
this.analytics.eventTrack.next({
action: this.organizationId != null ? 'Purged Organization Vault' : 'Purged Vault',
});
this.toasterService.popAsync('success', null, this.i18nService.t('vaultPurged'));
this.router.navigate(['vault']);
if (this.organizationId != null) {
this.router.navigate(['organizations', this.organizationId, 'vault']);
} else {
this.router.navigate(['vault']);
}
} catch { }
}
}

View File

@@ -1,5 +1,5 @@
<div class="modal fade">
<div class="modal-dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title">
@@ -23,43 +23,66 @@
<li>{{'twoFactorU2fSupportWeb' | i18n}}</li>
</ul>
</app-callout>
<ng-container *ngIf="!enabled">
<img src="../../images/two-factor/4.png" class="float-right ml-5" alt="">
<p>{{'twoFactorU2fAdd' | i18n}}:</p>
<ol>
<li>{{'twoFactorU2fPlugIn' | i18n}}</li>
<li>{{'twoFactorU2fTouchButton' | i18n}}</li>
</ol>
<hr>
<div class="text-center">
<ng-container *ngIf="u2fListening">
<p>
<i class="fa fa-spinner fa-spin fa-2x text-muted"></i>
</p>
{{'twoFactorU2fWaiting' | i18n}}...
</ng-container>
<ng-container *ngIf="u2fResponse">
<p>
<i class="fa fa-check-circle fa-2x text-success"></i>
</p>
{{'twoFactorU2fClickEnable' | i18n}}
</ng-container>
<ng-container *ngIf="u2fError">
<p>
<i class="fa fa-warning fa-2x text-danger"></i>
</p>
{{'twoFactorU2fProblemReading' | i18n}}
<img src="../../images/two-factor/4.png" class="float-right ml-5" alt="">
<ul class="fa-ul">
<li *ngFor="let k of keys; let i = index" #removeKeyBtn [appApiAction]="k.removePromise">
<i class="fa-li fa fa-key"></i>
<strong *ngIf="!k.configured || !k.name">{{'u2fkeyX' | i18n : i + 1}}</strong>
<strong *ngIf="k.configured && k.name">{{k.name}}</strong>
<i class="fa fa-fw" [ngClass]="{'fa-check text-success': !k.compromised, 'fa-exclamation-triangle text-warning': k.compromised}"
*ngIf="k.configured && !removeKeyBtn.loading" title="{{(k.compromised ? 'keyCompromised' : 'enabled') | i18n}}"></i>
<ng-container *ngIf="keysConfiguredCount > 1 && k.configured">
<i class="fa fa-spin fa-spinner text-muted fa-fw" title="{{'loading' | i18n}}" *ngIf="removeKeyBtn.loading"></i>
-
<a href="#" appStopClick (click)="remove(k)">{{'remove' | i18n}}</a>
</ng-container>
</li>
</ul>
<hr>
<p>{{'twoFactorU2fAdd' | i18n}}:</p>
<ol>
<li>{{'twoFactorU2fGiveName' | i18n}}</li>
<li>{{'twoFactorU2fPlugInReadKey' | i18n}}</li>
<li>{{'twoFactorU2fTouchButton' | i18n}}</li>
<li>{{'twoFactorU2fSaveForm' | i18n}}</li>
</ol>
<div class="row">
<div class="form-group col-6">
<label for="name">{{'name' | i18n}}</label>
<input id="name" type="text" name="Name" class="form-control" [(ngModel)]="name" [disabled]="!keyIdAvailable">
</div>
</div>
<button type="button" (click)="readKey()" class="btn btn-outline-secondary mr-2" [disabled]="readKeyBtn.loading || u2fListening || !keyIdAvailable"
#readKeyBtn [appApiAction]="challengePromise">
{{'readKey' | i18n}}
</button>
<ng-container *ngIf="readKeyBtn.loading">
<i class="fa fa-spinner fa-spin text-muted"></i>
</ng-container>
<ng-container *ngIf="!readKeyBtn.loading">
<ng-container *ngIf="u2fListening">
<i class="fa fa-spinner fa-spin text-muted"></i>
{{'twoFactorU2fWaiting' | i18n}}...
</ng-container>
<ng-container *ngIf="u2fResponse">
<i class="fa fa-check-circle text-success"></i>
{{'twoFactorU2fClickSave' | i18n}}
</ng-container>
<ng-container *ngIf="u2fError">
<i class="fa fa-warning text-danger"></i>
{{'twoFactorU2fProblemReadingTryAgain' | i18n}}
</ng-container>
</ng-container>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary" [disabled]="form.loading || (!enabled && !u2fResponse)">
<button type="submit" class="btn btn-primary" [disabled]="form.loading || !u2fResponse">
<i class="fa fa-spinner fa-spin" *ngIf="form.loading" title="{{'loading' | i18n}}"></i>
<ng-container *ngIf="!form.loading">
<span *ngIf="!enabled">{{'enable' | i18n}}</span>
<span *ngIf="enabled">{{'disable' | i18n}}</span>
</ng-container>
<span *ngIf="!form.loading">{{'save' | i18n}}</span>
</button>
<button #disableBtn type="button" class="btn btn-outline-secondary btn-submit" [appApiAction]="disablePromise"
[disabled]="disableBtn.loading" (click)="disable()" *ngIf="enabled">
<i class="fa fa-spinner fa-spin" title="{{'loading' | i18n}}"></i>
<span>{{'disableAllKeys' | i18n}}</span>
</button>
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{'close' | i18n}}</button>
</div>

View File

@@ -1,5 +1,6 @@
import {
Component,
NgZone,
OnDestroy,
OnInit,
} from '@angular/core';
@@ -12,6 +13,9 @@ import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { TwoFactorProviderType } from 'jslib/enums/twoFactorProviderType';
import { PasswordVerificationRequest } from 'jslib/models/request/passwordVerificationRequest';
import { UpdateTwoFactorU2fDeleteRequest } from 'jslib/models/request/updateTwoFactorU2fDeleteRequest';
import { UpdateTwoFactorU2fRequest } from 'jslib/models/request/updateTwoFactorU2fRequest';
import {
ChallengeResponse,
@@ -26,18 +30,21 @@ import { TwoFactorBaseComponent } from './two-factor-base.component';
})
export class TwoFactorU2fComponent extends TwoFactorBaseComponent implements OnInit, OnDestroy {
type = TwoFactorProviderType.U2f;
u2fChallenge: ChallengeResponse;
name: string;
keys: any[];
keyIdAvailable: number = null;
keysConfiguredCount = 0;
u2fError: boolean;
u2fListening: boolean;
u2fResponse: string;
challengePromise: Promise<ChallengeResponse>;
formPromise: Promise<any>;
private closed = false;
private u2fScript: HTMLScriptElement;
constructor(apiService: ApiService, i18nService: I18nService,
analytics: Angulartics2, toasterService: ToasterService,
platformUtilsService: PlatformUtilsService) {
platformUtilsService: PlatformUtilsService, private ngZone: NgZone) {
super(apiService, i18nService, analytics, toasterService, platformUtilsService);
this.u2fScript = window.document.createElement('script');
this.u2fScript.src = 'scripts/u2f.js';
@@ -49,28 +56,24 @@ export class TwoFactorU2fComponent extends TwoFactorBaseComponent implements OnI
}
ngOnDestroy() {
this.closed = true;
window.document.body.removeChild(this.u2fScript);
}
auth(authResponse: any) {
super.auth(authResponse);
this.processResponse(authResponse.response);
this.readDevice();
}
submit() {
if (this.enabled) {
return super.disable(this.formPromise);
} else {
return this.enable();
if (this.u2fResponse == null || this.keyIdAvailable == null) {
// Should never happen.
return Promise.reject();
}
}
protected enable() {
const request = new UpdateTwoFactorU2fRequest();
request.masterPasswordHash = this.masterPasswordHash;
request.deviceResponse = this.u2fResponse;
request.id = this.keyIdAvailable;
request.name = this.name;
return super.enable(async () => {
this.formPromise = this.apiService.putTwoFactorU2f(request);
@@ -79,38 +82,97 @@ export class TwoFactorU2fComponent extends TwoFactorBaseComponent implements OnI
});
}
private readDevice() {
if (this.closed || this.enabled) {
disable() {
return super.disable(this.formPromise);
}
async remove(key: any) {
if (this.keysConfiguredCount <= 1 || key.removePromise != null) {
return;
}
const name = key.name != null ? key.name : this.i18nService.t('u2fkeyX', key.id);
const confirmed = await this.platformUtilsService.showDialog(
this.i18nService.t('removeU2fConfirmation'), name,
this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');
if (!confirmed) {
return;
}
const request = new UpdateTwoFactorU2fDeleteRequest();
request.id = key.id;
request.masterPasswordHash = this.masterPasswordHash;
try {
key.removePromise = this.apiService.deleteTwoFactorU2f(request);
const response = await key.removePromise;
key.removePromise = null;
await this.processResponse(response);
} catch { }
}
async readKey() {
if (this.keyIdAvailable == null) {
return;
}
const request = new PasswordVerificationRequest();
request.masterPasswordHash = this.masterPasswordHash;
try {
this.challengePromise = this.apiService.getTwoFactorU2fChallenge(request);
const challenge = await this.challengePromise;
this.readDevice(challenge);
} catch { }
}
private readDevice(u2fChallenge: ChallengeResponse) {
// tslint:disable-next-line
console.log('listening for key...');
this.resetU2f(true);
(window as any).u2f.register(u2fChallenge.appId, [{
version: u2fChallenge.version,
challenge: u2fChallenge.challenge,
}], [], (data: any) => {
this.ngZone.run(() => {
this.u2fListening = false;
if (data.errorCode) {
this.u2fError = true;
// tslint:disable-next-line
console.log('error: ' + data.errorCode);
return;
}
this.u2fResponse = JSON.stringify(data);
});
}, 15);
}
private resetU2f(listening = false) {
this.u2fResponse = null;
this.u2fError = false;
this.u2fListening = true;
(window as any).u2f.register(this.u2fChallenge.appId, [{
version: this.u2fChallenge.version,
challenge: this.u2fChallenge.challenge,
}], [], (data: any) => {
this.u2fListening = false;
if (data.errorCode === 5) {
this.readDevice();
return;
} else if (data.errorCode) {
this.u2fError = true;
// tslint:disable-next-line
console.log('error: ' + data.errorCode);
return;
}
this.u2fResponse = JSON.stringify(data);
}, 10);
this.u2fListening = listening;
}
private processResponse(response: TwoFactorU2fResponse) {
this.u2fChallenge = response.challenge;
this.resetU2f();
this.keys = [];
this.keyIdAvailable = null;
this.name = null;
this.keysConfiguredCount = 0;
for (let i = 1; i <= 5; i++) {
if (response.keys != null) {
const key = response.keys.filter((k) => k.id === i);
if (key.length > 0) {
this.keysConfiguredCount++;
this.keys.push({
id: i, name: key[0].name,
configured: true,
compromised: key[0].compromised,
removePromise: null,
});
continue;
}
}
this.keys.push({ id: i, name: null, configured: false, compromised: false, removePromise: null });
if (this.keyIdAvailable == null) {
this.keyIdAvailable = i;
}
}
this.enabled = response.enabled;
}
}

View File

@@ -1,6 +1,3 @@
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { Component } from '@angular/core';
import { CryptoService } from 'jslib/abstractions/crypto.service';
@@ -15,16 +12,14 @@ import { ExportComponent as BaseExportComponent } from 'jslib/angular/components
templateUrl: 'export.component.html',
})
export class ExportComponent extends BaseExportComponent {
constructor(analytics: Angulartics2, toasterService: ToasterService,
cryptoService: CryptoService, i18nService: I18nService,
constructor(cryptoService: CryptoService, i18nService: I18nService,
platformUtilsService: PlatformUtilsService, exportService: ExportService) {
super(analytics, toasterService, cryptoService, i18nService, platformUtilsService,
exportService, window);
super(cryptoService, i18nService, platformUtilsService, exportService, window);
}
protected saved() {
super.saved();
this.masterPassword = null;
this.toasterService.popAsync('success', null, this.i18nService.t('exportSuccess'));
this.platformUtilsService.showToast('success', null, this.i18nService.t('exportSuccess'));
}
}

View File

@@ -153,6 +153,15 @@
check all of the fields, change the "Output format" to "CSV", and then click the "Start" button to save the CSV
file.
</ng-container>
<ng-container *ngIf="format === 'passpackcsv'">
Log into the Passpack website vault and navigate to "Settings" &rarr; "Export", then click the "Download" button to save
the CSV file.
</ng-container>
<ng-container *ngIf="format === 'passmanjson'">
Open your Passman vault and click on "Settings" in the bottom left corner. In the "Settings" window switch to the
"Export credentials" tab and choose "JSON" as the export type. Enter your vault's passphrase and click the "Export"
button to save the JSON file.
</ng-container>
</app-callout>
<div class="row">
<div class="col-6">

View File

@@ -129,7 +129,7 @@ export class ImportComponent implements OnInit {
reader.onload = (evt) => {
if (this.format === 'lastpasscsv' && file.type === 'text/html') {
const parser = new DOMParser();
const doc = parser.parseFromString(evt.target.result, 'text/html');
const doc = parser.parseFromString((evt.target as any).result, 'text/html');
const pre = doc.querySelector('pre');
if (pre != null) {
resolve(pre.textContent);
@@ -139,7 +139,7 @@ export class ImportComponent implements OnInit {
return;
}
resolve(evt.target.result);
resolve((evt.target as any).result);
};
reader.onerror = () => {
reject();

View File

@@ -1,6 +1,3 @@
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { Component } from '@angular/core';
import { I18nService } from 'jslib/abstractions/i18n.service';
@@ -16,9 +13,8 @@ import {
templateUrl: 'password-generator-history.component.html',
})
export class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHistoryComponent {
constructor(passwordGenerationService: PasswordGenerationService, analytics: Angulartics2,
platformUtilsService: PlatformUtilsService, i18nService: I18nService,
toasterService: ToasterService) {
super(passwordGenerationService, analytics, platformUtilsService, i18nService, toasterService, window);
constructor(passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService,
i18nService: I18nService) {
super(passwordGenerationService, platformUtilsService, i18nService, window);
}
}

View File

@@ -6,42 +6,69 @@
{{password}}
</div>
</div>
<div class="row">
<div class="form-group col-4">
<label for="length">{{'length' | i18n}}</label>
<input id="length" class="form-control" type="number" min="5" max="128" [(ngModel)]="options.length" (blur)="saveOptions()">
</div>
<div class="form-group col-4">
<label for="min-number">{{'minNumbers' | i18n}}</label>
<input id="min-number" class="form-control" type="number" min="0" max="9" (input)="saveOptions()" [(ngModel)]="options.minNumber">
</div>
<div class="form-group col-4">
<label for="min-special">{{'minSpecial' | i18n}}</label>
<input id="min-special" class="form-control" type="number" min="0" max="9" (input)="saveOptions()" [(ngModel)]="options.minSpecial">
</div>
</div>
<div class="form-group">
<div class="form-check">
<input id="uppercase" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="options.uppercase">
<label for="uppercase" class="form-check-label">A-Z</label>
<div class="form-check form-check-inline">
<input id="generate-password" name="type" value="password" class="form-check-input" type="radio" (change)="saveOptions()"
[(ngModel)]="options.type">
<label for="generate-password" class="form-check-label">{{'password' | i18n}}</label>
</div>
<div class="form-check">
<input id="lowercase" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="options.lowercase">
<label for="lowercase" class="form-check-label">a-z</label>
</div>
<div class="form-check">
<input id="numbers" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="options.number">
<label for="numbers" class="form-check-label">0-9</label>
</div>
<div class="form-check">
<input id="special" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="options.special">
<label for="special" class="form-check-label">!@#$%^&amp;*</label>
</div>
<div class="form-check">
<input id="ambiguous" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="avoidAmbiguous">
<label for="ambiguous" class="form-check-label">{{'ambiguous' | i18n}}</label>
<div class="form-check form-check-inline">
<input id="generate-passphrase" name="type" value="passphrase" class="form-check-input" type="radio" (change)="saveOptions()"
[(ngModel)]="options.type">
<label for="generate-passphrase" class="form-check-label">{{'passphrase' | i18n}}</label>
</div>
</div>
<div class="row" *ngIf="options.type === 'passphrase'">
<div class="form-group col-4">
<label for="num-words">{{'numWords' | i18n}}</label>
<input id="num-words" class="form-control" type="number" min="3" max="20" [(ngModel)]="options.numWords" (blur)="saveOptions()">
</div>
<div class="form-group col-4">
<label for="word-separator">{{'wordSeparator' | i18n}}</label>
<input id="word-separator" class="form-control" type="text" maxlength="1" [(ngModel)]="options.wordSeparator"
(blur)="saveOptions()">
</div>
</div>
<ng-container *ngIf="options.type === 'password'">
<div class="row">
<div class="form-group col-4">
<label for="length">{{'length' | i18n}}</label>
<input id="length" class="form-control" type="number" min="5" max="128" [(ngModel)]="options.length" (blur)="saveOptions()">
</div>
<div class="form-group col-4">
<label for="min-number">{{'minNumbers' | i18n}}</label>
<input id="min-number" class="form-control" type="number" min="0" max="9" (input)="saveOptions()"
[(ngModel)]="options.minNumber">
</div>
<div class="form-group col-4">
<label for="min-special">{{'minSpecial' | i18n}}</label>
<input id="min-special" class="form-control" type="number" min="0" max="9" (input)="saveOptions()"
[(ngModel)]="options.minSpecial">
</div>
</div>
<div class="form-group">
<div class="form-check">
<input id="uppercase" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="options.uppercase">
<label for="uppercase" class="form-check-label">A-Z</label>
</div>
<div class="form-check">
<input id="lowercase" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="options.lowercase">
<label for="lowercase" class="form-check-label">a-z</label>
</div>
<div class="form-check">
<input id="numbers" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="options.number">
<label for="numbers" class="form-check-label">0-9</label>
</div>
<div class="form-check">
<input id="special" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="options.special">
<label for="special" class="form-check-label">!@#$%^&amp;*</label>
</div>
<div class="form-check">
<input id="ambiguous" class="form-check-input" type="checkbox" (change)="saveOptions()" [(ngModel)]="avoidAmbiguous">
<label for="ambiguous" class="form-check-label">{{'ambiguous' | i18n}}</label>
</div>
</div>
</ng-container>
<div class="d-flex">
<div>
<button type="button" class="btn btn-primary" (click)="regenerate()">

View File

@@ -1,6 +1,3 @@
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import {
Component,
ComponentFactoryResolver,
@@ -28,10 +25,9 @@ export class PasswordGeneratorComponent extends BasePasswordGeneratorComponent {
private modal: ModalComponent = null;
constructor(passwordGenerationService: PasswordGenerationService, analytics: Angulartics2,
platformUtilsService: PlatformUtilsService, i18nService: I18nService,
toasterService: ToasterService, private componentFactoryResolver: ComponentFactoryResolver) {
super(passwordGenerationService, analytics, platformUtilsService, i18nService, toasterService, window);
constructor(passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService,
i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver) {
super(passwordGenerationService, platformUtilsService, i18nService, window);
}
history() {

View File

@@ -3,9 +3,6 @@ import {
OnInit,
} from '@angular/core';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { CipherType } from 'jslib/enums/cipherType';
import { AuditService } from 'jslib/abstractions/audit.service';
@@ -41,12 +38,10 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit {
constructor(cipherService: CipherService, folderService: FolderService,
i18nService: I18nService, platformUtilsService: PlatformUtilsService,
analytics: Angulartics2, toasterService: ToasterService,
auditService: AuditService, stateService: StateService,
protected userService: UserService, protected totpService: TotpService,
protected passwordGenerationService: PasswordGenerationService, protected messagingService: MessagingService) {
super(cipherService, folderService, i18nService, platformUtilsService, analytics,
toasterService, auditService, stateService);
super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService);
}
async ngOnInit() {
@@ -77,7 +72,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit {
return;
}
this.analytics.eventTrack.next({ action: 'Launched Login URI' });
this.platformUtilsService.eventTrack('Launched Login URI');
this.platformUtilsService.launchUri(uri.uri);
}
@@ -86,9 +81,9 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit {
return;
}
this.analytics.eventTrack.next({ action: 'Copied ' + aType });
this.platformUtilsService.eventTrack('Copied ' + aType);
this.platformUtilsService.copyToClipboard(value, { window: window });
this.toasterService.popAsync('info', null,
this.platformUtilsService.showToast('info', null,
this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey)));
}
@@ -157,5 +152,4 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit {
await this.totpUpdateCode();
}
}
}

View File

@@ -1,8 +1,5 @@
import { Component } from '@angular/core';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { CipherService } from 'jslib/abstractions/cipher.service';
import { CryptoService } from 'jslib/abstractions/crypto.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
@@ -16,11 +13,9 @@ import { AttachmentsComponent as BaseAttachmentsComponent } from 'jslib/angular/
templateUrl: 'attachments.component.html',
})
export class AttachmentsComponent extends BaseAttachmentsComponent {
constructor(cipherService: CipherService, analytics: Angulartics2,
toasterService: ToasterService, i18nService: I18nService,
constructor(cipherService: CipherService, i18nService: I18nService,
cryptoService: CryptoService, userService: UserService,
platformUtilsService: PlatformUtilsService) {
super(cipherService, analytics, toasterService, i18nService, cryptoService, userService,
platformUtilsService, window);
super(cipherService, i18nService, cryptoService, userService, platformUtilsService, window);
}
}

View File

@@ -36,7 +36,7 @@
<tbody>
<tr *ngFor="let c of collections; let i = index" (click)="check(c)">
<td class="table-list-checkbox">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked" appStopProp>
</td>
<td>
<span appStopProp>{{c.name}}</span>

View File

@@ -3,7 +3,7 @@
<tbody>
<tr *ngFor="let c of ciphers">
<td (click)="checkCipher(c)" class="table-list-checkbox" *ngIf="!organization">
<input type="checkbox" [(ngModel)]="c.checked">
<input type="checkbox" [(ngModel)]="c.checked" appStopProp>
</td>
<td (click)="checkCipher(c)" class="table-list-icon">
<app-vault-icon [cipher]="c"></app-vault-icon>

View File

@@ -30,7 +30,7 @@
<tbody>
<tr *ngFor="let c of collections; let i = index" (click)="check(c)">
<td class="table-list-checkbox">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked" appStopProp>
</td>
<td>
<span appStopProp>{{c.name}}</span>

View File

@@ -1,8 +1,5 @@
import { Component } from '@angular/core';
import { ToasterService } from 'angular2-toaster';
import { Angulartics2 } from 'angulartics2';
import { FolderService } from 'jslib/abstractions/folder.service';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
@@ -17,8 +14,7 @@ import {
})
export class FolderAddEditComponent extends BaseFolderAddEditComponent {
constructor(folderService: FolderService, i18nService: I18nService,
analytics: Angulartics2, toasterService: ToasterService,
platformUtilsService: PlatformUtilsService) {
super(folderService, i18nService, analytics, toasterService, platformUtilsService);
super(folderService, i18nService, platformUtilsService);
}
}

View File

@@ -39,7 +39,7 @@
<tbody>
<tr *ngFor="let c of collections; let i = index" (click)="check(c)">
<td class="table-list-checkbox">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked">
<input type="checkbox" [(ngModel)]="c.checked" name="Collection[{{i}}].Checked" appStopProp>
</td>
<td>
<span appStopProp>{{c.name}}</span>

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Heslo"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "Poznámky"
},
@@ -616,7 +619,7 @@
}
},
"enterVerificationCodeApp": {
"message": "Zadejte 6-místný kód z ověřovací aplikace."
"message": "Zadejte 6místný kód z ověřovací aplikace."
},
"enterVerificationCodeEmail": {
"message": "Zadejte 6místný kód z e-mailu, který byl zaslán na $EMAIL$.",
@@ -795,6 +798,12 @@
"length": {
"message": "Délka"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Historie hesel"
},
@@ -889,7 +898,7 @@
"message": "Nebezpečná zóna"
},
"dangerZoneDesc": {
"message": "Opatrně tyto akce se nedají vrátit!"
"message": "Opatrně. Tyto akce se nedají vrátit!"
},
"deauthorizeSessions": {
"message": "Zrušit autorizaci relací"
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Vymazat celý trezor"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Pokračujte níže ke smazání všech položek a složek ve vašem trezoru. Položky sdílené s organizací nebudou smazány."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Vymazání trezoru je trvalé. Tuto akci nelze vrátit zpět."
},
@@ -1002,7 +1017,7 @@
"message": "Doménová pravidla"
},
"domainRulesDesc": {
"message": "Pokud máte stejné přihlašovací údaje napříč různými doménami, můžete je označit jako \"ekvivalentní\". Bitwarden za vás již vytvořil seznam globálních domén."
"message": "Pokud máte stejné přihlašovací údaje napříč různými doménami, můžete je označit jako ekvivalentní. Bitwarden za vás již vytvořil seznam globálních domén."
},
"globalEqDomains": {
"message": "Globální ekvivalentní domény"
@@ -1023,7 +1038,7 @@
"message": "Přidat vlastní doménu"
},
"newCustomDomainDesc": {
"message": "Zadejte seznam domén oddělených čárkou. Povolené jsou pouze \"základní\" domény a proto nezadávejte subdomény. Například zadejte \"bitwarden.com\" místo \"vault.bitwarden.com\". Můžete také zadat \"androidapp:\/\/package.name\" pokud chcete přiřadit Android aplikaci k ostatním webovým doménám."
"message": "Zadejte seznam domén oddělených čárkou. Povolené jsou pouze základní domény. Nezadávejte subdomény. Například zadejte bitwarden.com“, nikoliv „vault.bitwarden.com. Můžete také zadat androidapp:\/\/package.name pokud chcete přiřadit Android aplikaci k ostatním webovým doménám."
},
"customDomainX": {
"message": "Vlastní doména $INDEX$",
@@ -1121,7 +1136,7 @@
"message": "Klíč"
},
"twoStepAuthenticatorEnterCode": {
"message": "Zadejte 6-místný kód z ověřovací aplikace"
"message": "Zadejte 6místný kód z ověřovací aplikace"
},
"twoStepAuthenticatorReaddDesc": {
"message": "V případě potřeby přidání do jiného zařízení, je níže zobrazen QR kód (nebo klíč) vyžadovaný ověřovací aplikací."
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Podpora NFC"
},
@@ -1199,7 +1223,7 @@
"message": "Zadejte e-mail, na který si přejete dostávat ověřovací kódy"
},
"twoFactorEmailEnterCode": {
"message": "Zadejte 6-místný kód zaslaný na e-mail"
"message": "Zadejte 6místný kód zaslaný na e-mail"
},
"sendEmail": {
"message": "Odeslat e-mail"
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Přidání bezpečnostního klíče FIDO U2F k vašemu účtu"
},
"twoFactorU2fPlugIn": {
"message": "Připojte bezpečnostní klíč do portu USB počítače."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "Pokud má bezpečnostní klíč tlačítko, zmáčkněte jej."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Z důvodu omezení různých platforem, nemůže být FIDO U2F použit ve všech aplikacích Bitwarden. Měli byste povolit jiný způsob dvoufázového přihlášení pro případy, kdy nelze FIDO U2F použít. Podporované platformy:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Čeká se na stisknutí tlačítka na bezpečnostním klíči"
},
"twoFactorU2fClickEnable": {
"message": "Klepněte níže na tlačítko \"Povolit\" pro povolení tohoto bezpečnostního klíče pro dvoufázové přihlášení."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "Došlo k potížím při čtení bezpečnostního klíče."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Váše kód pro obnovení dvoufázového přihlášení"
@@ -1245,7 +1284,7 @@
"message": "Hlášení o úniku dat"
},
"breachDesc": {
"message": "\"Únik\" je incident, při kterém se podařilo hackerům nelegální cestou získat údaje z webových stránek a následně je také zveřejnit. Zkontrolujte prosím kompromitovaná data (e-mailové adresy, hesla, kreditní karty, ...) a proveďte příslušná opatření (např. změňte heslo)."
"message": "Únik je incident, při kterém se podařilo hackerům nelegální cestou získat údaje z webových stránek a následně je také zveřejnit. Zkontrolujte prosím kompromitovaná data (e-mailové adresy, hesla, kreditní karty, ) a proveďte příslušná opatření (např. změňte heslo)."
},
"breachCheckUsernameEmail": {
"message": "Zkontrolujte všechna uživatelská jména nebo e-mailové adresy, které používáte."
@@ -1379,7 +1418,7 @@
"message": "Částka bude stržena okamžitě a poté opakovaně každý rok. Plán můžete kdykoli zrušit."
},
"paymentChargedWithTrial": {
"message": "Vybraný plán obsahuje bezplatnou 7denní zkušební dobu. Částka z vašeho účtu nebude stržena, dokud tato zkušební doba neuplyne. Stržení platby a fakturace bude následně probíhat opakovaně každý $ INTERVAL $. Plán můžete kdykoli zrušit.",
"message": "Vybraný plán obsahuje bezplatnou 7denní zkušební dobu. Částka z vašeho účtu nebude stržena, dokud tato zkušební doba neuplyne. Stržení platby a fakturace bude následně probíhat opakovaně každý $INTERVAL$. Plán můžete kdykoli zrušit.",
"placeholders": {
"interval": {
"content": "$1",
@@ -1457,7 +1496,7 @@
"message": "Odebrat uložiště"
},
"subscriptionStorage": {
"message": "Your subscription has a total of $MAX_STORAGE$ GB of encrypted file storage. You are currently using $USED_STORAGE$.",
"message": "Vaše předplatné zahrnuje celkem $MAX_STORAGE$ GB místa v šifrovaném úložišti. Aktuálně používáte $USED_STORAGE$.",
"placeholders": {
"max_storage": {
"content": "$1",
@@ -1689,7 +1728,7 @@
"message": "Create unlimited collections"
},
"gbEncryptedFileStorage": {
"message": "$SIZE$ encrypted file storage",
"message": "$SIZE$ šifrovaného úložiště",
"placeholders": {
"size": {
"content": "$1",
@@ -1719,7 +1758,7 @@
"message": "Přednostní zákaznická podpora"
},
"xDayFreeTrial": {
"message": "$COUNT$ day free trial, cancel anytime",
"message": "$COUNT$denní zkušební verze, možno kdykoliv zrušit",
"placeholders": {
"count": {
"content": "$1",
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Heslo účtu bylo změněno"
},
"enabled2fa": {
"message": "Dvoufázové přihlášení bylo povoleno"
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Dvoufázové přihlášení bylo zakázáno"
@@ -2118,7 +2157,7 @@
"message": "Invited user(s)."
},
"resendInvitation": {
"message": "Resend Invitation"
"message": "Znovu poslat pozvánku"
},
"hasBeenReinvited": {
"message": "$USER$ has been reinvited.",
@@ -2274,7 +2313,7 @@
"message": "Bank account has been verified."
},
"bankAccount": {
"message": "Bank Account"
"message": "Bankovní účet"
},
"amountX": {
"message": "Amount $COUNT$",
@@ -2287,17 +2326,17 @@
}
},
"routingNumber": {
"message": "Routing Number",
"message": "Směrovací číslo",
"description": "Bank account routing number"
},
"accountNumber": {
"message": "Account Number"
"message": "Číslo účtu"
},
"accountHolderName": {
"message": "Account Holder Name"
"message": "Jméno majitele účtu"
},
"bankAccountType": {
"message": "Account Type"
"message": "Typ účtu"
},
"bankAccountTypeCompany": {
"message": "Company (Business)"
@@ -2306,7 +2345,7 @@
"message": "Individual (Personal)"
},
"enterInstallationId": {
"message": "Enter your installation id"
"message": "Zadejte ID instalace"
},
"addSeats": {
"message": "Add Seats",
@@ -2350,7 +2389,7 @@
"message": "Key Updated"
},
"updateKeyTitle": {
"message": "Update Key"
"message": "Aktualizovat klíč"
},
"updateEncryptionKey": {
"message": "Aktualizovat šifrovací klíč"

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Adgangskode"
},
"passphrase": {
"message": "Adgangssætning"
},
"notes": {
"message": "Noter"
},
@@ -680,7 +683,7 @@
"message": "YubiKey OTP sikkerhedsnøgle"
},
"yubiKeyDesc": {
"message": "Brug en YubiKey til at få adgang til din konto. Virker med YubiKey 4, 4 Nano, 4C og NEO enheder."
"message": "Brug en YubiKey til at få adgang til din konto. Virker med YubiKey 4 serien, 5 serien og NEO enheder."
},
"duoDesc": {
"message": "Bekræft med Duo Security ved hjælp af Duo Mobile app, SMS, telefonopkald eller U2F sikkerhedsnøgle.",
@@ -795,6 +798,12 @@
"length": {
"message": "Længde"
},
"numWords": {
"message": "Antal ord"
},
"wordSeparator": {
"message": "Ordseparator"
},
"passwordHistory": {
"message": "Adgangskodehistorik"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Tøm boks"
},
"purgedOrganizationVault": {
"message": "Organisationsboks tømt."
},
"purgeVaultDesc": {
"message": "Fortsæt nedenfor for at slette alle elementer og mapper i din boks. Elementer, der tilhører en organisation du deler med, slettes ikke."
},
"purgeOrgVaultDesc": {
"message": "Fortsæt nedenfor for at slette alle elementer i organisationens boks."
},
"purgeVaultWarning": {
"message": "Tømning af din boks er permanent. Det kan ikke fortrydes."
},
@@ -1136,7 +1151,7 @@
"message": "Tilføj en ny YubiKey til din konto"
},
"twoFactorYubikeyPlugIn": {
"message": "Sæt YubiKey'en (NEO eller 4-serien) i din computers USB-port."
"message": "Sæt YubiKey'en i din computers USB-port."
},
"twoFactorYubikeySelectKey": {
"message": "Vælg det første tomme YubiKey-indtastningsfelt nedenfor."
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F nøgle $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC understøttelse"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Tilføj en FIDO U2F sikkerhedsnøgle til din konto"
},
"twoFactorU2fPlugIn": {
"message": "Sæt sikkerhedsnøglen i computerens USB-port."
"removeU2fConfirmation": {
"message": "Er du sikker på, at du vil fjerne denne sikkerhedsnøgle?"
},
"readKey": {
"message": "Læs nøgle"
},
"keyCompromised": {
"message": "Nøglen er kompromitteret."
},
"twoFactorU2fGiveName": {
"message": "Giv sikkerhedsnøglen et brugervenligt navn til at identificere den."
},
"twoFactorU2fPlugInReadKey": {
"message": "Sæt sikkerhedsnøglen i computerens USB-port, og klik på knappen \"Læs nøgle\"."
},
"twoFactorU2fTouchButton": {
"message": "Hvis sikkerhedsnøglen har en knap, skal du trykke på den."
},
"twoFactorU2fSaveForm": {
"message": "Gem formularen."
},
"twoFactorU2fWarning": {
"message": "På grund af platformbegrænsninger kan FIDO U2F ikke bruges på alle Bitwarden-applikationer. Du bør aktivere en anden to-trins login udbyder, så du kan få adgang til din konto, når FIDO U2F ikke kan benyttes. Understøttede platforme:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Venter på at du trykker på knappen på din sikkerhedsnøgle"
},
"twoFactorU2fClickEnable": {
"message": "Klik på knappen \"Aktivér\" nedenfor for at benytte denne sikkerhedsnøgle til to-trins-login."
"twoFactorU2fClickSave": {
"message": "Klik på \"Gem\" knappen nedenfor for at aktivere denne sikkerhedsnøgle til to-trins login."
},
"twoFactorU2fProblemReading": {
"message": "Der opstod et problem med at læse sikkerhedsnøglen."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Der opstod et problem med at læse sikkerhedsnøglen. Prøv igen."
},
"twoFactorRecoveryYourCode": {
"message": "Din Bitwarden to-trins-login gendannelseskode"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Ændrede konto kodeord."
},
"enabled2fa": {
"message": "Aktiverede to-trins-login."
"enabledUpdated2fa": {
"message": "Aktiverede\/opdaterede to-trins login."
},
"disabled2fa": {
"message": "Deaktiverede to-trins-login."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Passwort"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "Notizen"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Länge"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Kennwort-Historie"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Tresor leeren"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Gehen Sie wie folgt vor, um alle Einträge und Ordner in Ihrem Tresor zu löschen. Einträge, die zu einer Organisation gehören, die Sie mit anderen teilen, werden nicht gelöscht."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Die Leerung des Tresor ist permanent. Sie kann nicht rückgängig gemacht werden."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC-Unterstützung"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Fügen Sie Ihrem Konto einen FIDO U2F-Sicherheitsschlüssel hinzu"
},
"twoFactorU2fPlugIn": {
"message": "Stecken Sie den Sicherheitsschlüssel in USB-Port Ihres Computers."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "Wenn der Sicherheitsschlüssel eine Taste hat, drücken Sie die."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Aufgrund von Plattformbeschränkungen kann FIDO U2F nicht mit allen Bitwarden-Anwendungen verwendet werden. Sie sollten einen anderen Zwei-Faktor-Authentifizierungsanbieter aktivieren, damit Sie auf Ihr Konto zugreifen können, wenn FIDO U2F nicht verwendet werden kann. Unterstützte Plattformen sind:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Es wird darauf gewartet, dass Sie die Taste Ihres Sicherheitsschlüssels betätigen"
},
"twoFactorU2fClickEnable": {
"message": "Klicken Sie unten auf \"Aktivieren\", um diesen Sicherheitsschlüssel für die Zwei-Faktor-Anmeldung zu verwenden."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "Es gab ein Problem beim Lesen des Sicherheitsschlüssels."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Ihr Wiederherstellungsschlüssel für die Zwei-Faktor-Anmeldung in Bitwarden"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Benutzerpasswort geändert."
},
"enabled2fa": {
"message": "Zwei-Faktor-Anmeldung aktiviert."
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Zwei-Faktor-Anmeldung deaktiviert."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Password"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "Notes"
},
@@ -683,7 +686,7 @@
"message": "YubiKey OTP Security Key"
},
"yubiKeyDesc": {
"message": "Use a YubiKey to access your account. Works with YubiKey 4, 4 Nano, 4C, and NEO devices."
"message": "Use a YubiKey to access your account. Works with YubiKey 4 series, 5 series, and NEO devices."
},
"duoDesc": {
"message": "Verify with Duo Security using the Duo Mobile app, SMS, phone call, or U2F security key.",
@@ -798,6 +801,12 @@
"length": {
"message": "Length"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Password History"
},
@@ -909,9 +918,15 @@
"purgeVault": {
"message": "Purge Vault"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Proceed below to delete all items and folders in your vault. Items that belong to an organization that you share with will not be deleted."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Purging your vault is permanent. It cannot be undone."
},
@@ -1139,7 +1154,7 @@
"message": "Add a new YubiKey to your account"
},
"twoFactorYubikeyPlugIn": {
"message": "Plug the YubiKey (NEO or 4 series) into your computer's USB port."
"message": "Plug the YubiKey into your computer's USB port."
},
"twoFactorYubikeySelectKey": {
"message": "Select the first empty YubiKey input field below."
@@ -1168,6 +1183,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC Support"
},
@@ -1210,12 +1234,27 @@
"twoFactorU2fAdd": {
"message": "Add a FIDO U2F security key to your account"
},
"twoFactorU2fPlugIn": {
"message": "Plug the security key into your computer's USB port."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "If the security key has a button, touch it."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when FIDO U2F cannot be used. Supported platforms:"
},
@@ -1225,11 +1264,11 @@
"twoFactorU2fWaiting": {
"message": "Waiting for you to touch the button on your security key"
},
"twoFactorU2fClickEnable": {
"message": "Click the \"Enable\" button below to enable this security key for two-step login."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "There was a problem reading the security key."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -1913,8 +1952,8 @@
"changedPassword": {
"message": "Changed account password."
},
"enabled2fa": {
"message": "Enabled two-step login."
"enabledUpdated2fa": {
"message": "Enabled/updated two-step login."
},
"disabled2fa": {
"message": "Disabled two-step login."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Contraseña"
},
"passphrase": {
"message": "Frase de contraseña"
},
"notes": {
"message": "Notas"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Longitud"
},
"numWords": {
"message": "Número de palabras"
},
"wordSeparator": {
"message": "Separador de palabras"
},
"passwordHistory": {
"message": "Historial de contraseñas"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Purgar caja fuerte"
},
"purgedOrganizationVault": {
"message": "Bóveda de organización purgada."
},
"purgeVaultDesc": {
"message": "Proceder eliminará todos los elementos y carpetas de tu caja fuerte. Los elementos que petenezcan a una organización con la que compartes contenido, no serán eliminados."
},
"purgeOrgVaultDesc": {
"message": "Proceda a continuación para eliminar todos los elementos de la bóveda de la organización."
},
"purgeVaultWarning": {
"message": "Purgar tu caja fuerte es permanente. No se puede deshacer."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "Llave U2F $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Soporte NFC"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Agregar una clave de seguridad U2F FIDO a su cuenta"
},
"twoFactorU2fPlugIn": {
"message": "Conecte la llave de seguridad al puerto USB de su computadora."
"removeU2fConfirmation": {
"message": "¿Estás seguro de que quieres eliminar esta clave de seguridad?"
},
"readKey": {
"message": "Leer llave"
},
"keyCompromised": {
"message": "La clave está comprometida."
},
"twoFactorU2fGiveName": {
"message": "Asigne un nombre descriptivo a la llave de seguridad."
},
"twoFactorU2fPlugInReadKey": {
"message": "Conecte la llave de seguridad al puerto USB de su ordenador y haga clic en el botón \"Leer llave\"."
},
"twoFactorU2fTouchButton": {
"message": "Si la clave de seguridad tiene un botón, tócalo."
},
"twoFactorU2fSaveForm": {
"message": "Guarda el formulario."
},
"twoFactorU2fWarning": {
"message": "Debido a limitaciones de la plataforma, FIDO U2F no puede ser usado en todas las aplicaciones de Bitwarden. Debería habilitar otro proveedor de inicio de sesión de dos pasos, para que pueda acceder a su cuenta cuando FIDO U2F no pueda ser utilizado. Plataformas soportadas:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Esperando que toque el botón de su clave de seguridad"
},
"twoFactorU2fClickEnable": {
"message": "Haga clic en el botón \"Habilitar\" a continuación para habilitar esta clave de seguridad para el inicio de sesión en dos pasos."
"twoFactorU2fClickSave": {
"message": "Haga clic en el botón \"guardar\" para habilitar esta clave de seguridad para el inicio de sesión de dos pasos."
},
"twoFactorU2fProblemReading": {
"message": "Hubo un problema leyendo la clave de seguridad."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Hubo un problema al leer la clave de seguridad. Inténtalo de nuevo."
},
"twoFactorRecoveryYourCode": {
"message": "Su código de recuperación de inicio de sesión de dos pasos Bitwarden"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Contraseña de la cuenta cambiada."
},
"enabled2fa": {
"message": "Autenticación en dos pasos habilitada."
"enabledUpdated2fa": {
"message": "Autenticación en dos pasos habilitado\/actualizado."
},
"disabled2fa": {
"message": "Autenticación en dos pasos deshabilitada."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Parool"
},
"passphrase": {
"message": "Paroolifraas"
},
"notes": {
"message": "Märkmed"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Pikkus"
},
"numWords": {
"message": "Sõnade arv"
},
"wordSeparator": {
"message": "Sõna eraldaja"
},
"passwordHistory": {
"message": "Paroolide ajalugu"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Likvideeri Hoidla"
},
"purgedOrganizationVault": {
"message": "Organisatsiooni hoidla on likvideeritud."
},
"purgeVaultDesc": {
"message": "Jätkates kustutatakse kõik hoidlas olevad kirjed ja kaustad. Andmed, mis kuuluvad organisatsioonile, jäävad puutumata."
},
"purgeOrgVaultDesc": {
"message": "Jätka allpool, et kõik organisatsiooni kirjed hoidlast likvideerida."
},
"purgeVaultWarning": {
"message": "Hoidla likvideerimine on alatine. Seda ei saa tagasi võtta."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F võtme $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFS tugi"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Lisa oma kontole FIDO U2F turvavõti"
},
"twoFactorU2fPlugIn": {
"message": "Sisesta turvavõti oma arvuti USB pessa."
"removeU2fConfirmation": {
"message": "Oled kindel, et soovid selle turvavõtme eemaldada?"
},
"readKey": {
"message": "Loe võtit"
},
"keyCompromised": {
"message": "Võti on ohus."
},
"twoFactorU2fGiveName": {
"message": "Anna turvavõtmele lihtne nimi, et seda oleks lihtsam ära tunda."
},
"twoFactorU2fPlugInReadKey": {
"message": "Sisesta turvavõti arvuti USB pessa ning kliki \"Loe võtit\" nupul."
},
"twoFactorU2fTouchButton": {
"message": "Kui turvavõtmel on nupp, siis vajuta seda."
},
"twoFactorU2fSaveForm": {
"message": "Salvesta vorm."
},
"twoFactorU2fWarning": {
"message": "Mõnede platvormi piirangute tõttu ei saa FIDO U2F-i kõikide Bitwardeni rakendustega kasutada. Võiksid kaaluda teise kaheastmelise kinnitamise aktiveerimist olukordadeks, kus FIDO U2F-i ei saa kasutada. Toetatud platvormid:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Ootame, kuni puudutad turvavõtmel olevat nuppu"
},
"twoFactorU2fClickEnable": {
"message": "Kliki all olevale \"Luba\" nupule, et kaheastmeline kinnitamine läbi turvavõtme sisse lülitada."
"twoFactorU2fClickSave": {
"message": "Kliki all olevale \"Luba\" nupule, et kaheastmeline kinnitamine läbi selle turvavõtme sisse lülitada."
},
"twoFactorU2fProblemReading": {
"message": "Turvavõtme lugemisel tekkis tõrge."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Turvavõtme lugemisel tekkis tõrge. Proovi uuesti."
},
"twoFactorRecoveryYourCode": {
"message": "Bitwardeni kaheastmelise logimise varukood"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Muuda konto parooli."
},
"enabled2fa": {
"message": "Lülita kaheastmeline kinnitamine sisse."
"enabledUpdated2fa": {
"message": "Lülitasime sisse\/uuendasime kaheastmelist kinnitamist."
},
"disabled2fa": {
"message": "Keela kaheastmeline kinnitamine."

File diff suppressed because it is too large Load Diff

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Mot de passe"
},
"passphrase": {
"message": "Phrase de passe"
},
"notes": {
"message": "Notes"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Longueur"
},
"numWords": {
"message": "Nombre de mots"
},
"wordSeparator": {
"message": "Séparateur de mots"
},
"passwordHistory": {
"message": "Historique des mots de passe"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Effacer le coffre"
},
"purgedOrganizationVault": {
"message": "Le coffre de l'organisation a été effacé."
},
"purgeVaultDesc": {
"message": "Poursuivez ci-dessous pour supprimer tous les éléments et dossiers de votre coffre. Les éléments qui appartiennent à une organisation avec laquelle vous partagez ne seront pas supprimés."
},
"purgeOrgVaultDesc": {
"message": "Poursuivez ci-dessous pour supprimer tous les éléments du coffre de votre organisation."
},
"purgeVaultWarning": {
"message": "L'effacement votre coffre est définitif. Cette action ne peut pas être annulée."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "Clé U2F $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Support du NFC"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Ajouter une clé de sécurité FIDO U2F à votre compte"
},
"twoFactorU2fPlugIn": {
"message": "Branchez la clé de sécurité sur un port USB de votre ordinateur."
"removeU2fConfirmation": {
"message": "Êtes-vous certain de vouloir retirer cette clé de sécurité ?"
},
"readKey": {
"message": "Lire la clé"
},
"keyCompromised": {
"message": "La clé est compromise."
},
"twoFactorU2fGiveName": {
"message": "Donnez un nom convivial à la clé de sécurité pour l'identifier."
},
"twoFactorU2fPlugInReadKey": {
"message": "Branchez la clé de sécurité sur un port USB de votre ordinateur et cliquez sur le bouton \"Lire la clé\"."
},
"twoFactorU2fTouchButton": {
"message": "Si la clé de sécurité a un bouton, touchez-le."
},
"twoFactorU2fSaveForm": {
"message": "Sauvegarder le contenu du formulaire."
},
"twoFactorU2fWarning": {
"message": "En raison de limitations de plateforme, FIDO U2F n'est pas utilisable sur toutes les applications Bitwarden. Vous devriez activer un autre fournisseur de connexion en deux étapes afin de pouvoir accéder à votre compte lorsque vous ne pouvez pas utiliser FIDO U2F. Plateformes prises en charge :"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Attente de l'appui sur le bouton de votre clé de sécurité"
},
"twoFactorU2fClickEnable": {
"message": "Cliquez sur le bouton « Activer » ci-dessous pour activer cette clé de sécurité pour une connexion en deux étapes."
"twoFactorU2fClickSave": {
"message": "Cliquez sur le bouton « Sauvegarder » ci-dessous pour activer cette clé de sécurité pour une connexion en deux étapes."
},
"twoFactorU2fProblemReading": {
"message": "Un problème est survenu lors de la lecture de la clé de sécurité."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Un problème est survenu lors de la lecture de la clé de sécurité. Veuillez réessayer."
},
"twoFactorRecoveryYourCode": {
"message": "Votre code de récupération de connexion en deux étapes Bitwarden"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Mot de passe changé."
},
"enabled2fa": {
"message": "Connexion en deux étapes activée."
"enabledUpdated2fa": {
"message": "Connexion en deux étapes activée\/mise à jour."
},
"disabled2fa": {
"message": "Connexion en deux étapes désactivée."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Jelszó"
},
"passphrase": {
"message": "Kulcsszó"
},
"notes": {
"message": "Jegyzetek"
},
@@ -164,48 +167,48 @@
"message": "Nincs kijelölve"
},
"noneFolder": {
"message": "No Folder",
"message": "Nincs mappa",
"description": "This is the folder for uncategorized items"
},
"addFolder": {
"message": "Add Folder"
"message": "Mappa hozzáadása"
},
"editFolder": {
"message": "Edit Folder"
"message": "Mappa szerkesztése"
},
"baseDomain": {
"message": "Base domain"
"message": "Alap domain"
},
"host": {
"message": "Host",
"message": "Hoszt",
"description": "A URL's host value. For example, the host of https:\/\/sub.domain.com:443 is 'sub.domain.com:443'."
},
"exact": {
"message": "Exact"
"message": "Pontos"
},
"startsWith": {
"message": "Starts with"
"message": "Ezzel kezdődik"
},
"regEx": {
"message": "Regular expression",
"message": "Reguláris kifejezés",
"description": "A programming term, also known as 'RegEx'."
},
"matchDetection": {
"message": "Match Detection",
"message": "Találatfelismerés",
"description": "URI match detection for auto-fill."
},
"defaultMatchDetection": {
"message": "Default match detection",
"message": "Alapértelmezett találatfelismerés",
"description": "Default URI match detection for auto-fill."
},
"never": {
"message": "Never"
"message": "Soha"
},
"toggleVisibility": {
"message": "Toggle Visibility"
"message": "Láthatóság váltása"
},
"generatePassword": {
"message": "Generate Password"
"message": "Jelszó generálása"
},
"checkPassword": {
"message": "Check if password has been exposed."
@@ -795,6 +798,12 @@
"length": {
"message": "Length"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Password History"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Purge Vault"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Proceed below to delete all items and folders in your vault. Items that belong to an organization that you share with will not be deleted."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Purging your vault is permanent. It cannot be undone."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC Support"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Add a FIDO U2F security key to your account"
},
"twoFactorU2fPlugIn": {
"message": "Plug the security key into your computer's USB port."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "If the security key has a button, touch it."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when FIDO U2F cannot be used. Supported platforms:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Waiting for you to touch the button on your security key"
},
"twoFactorU2fClickEnable": {
"message": "Click the \"Enable\" button below to enable this security key for two-step login."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "There was a problem reading the security key."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Changed account password."
},
"enabled2fa": {
"message": "Enabled two-step login."
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Disabled two-step login."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Password"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "Note"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Lunghezza"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Cronologia delle password"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Svuota Cassaforte"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Procedi in basso per eliminare tutti gli elementi e le cartelle nel Vault. Gli elementi che appartengono a un'organizzazione con cui condividi non verranno eliminati."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Svuotare la tua cassaforte è permanente. Questa azione non è reversibile."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Supporto per NFC"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Aggiungi una chiave di sicurezza di FIDO U2F al tuo account"
},
"twoFactorU2fPlugIn": {
"message": "Inserire la chiave di protezione nella porta USB del tuo computer."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "Se la chiave di protezione dispone di un pulsante, premilo."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "A causa di limitazioni della piattaforma, FIDO U2F non può essere utilizzato su tutte le applicazioni Bitwarden. Si consiglia di abilitare un altro metodo di verifica in due passaggi in modo da poter accedere al tuo account anche dove FIDO U2F non può essere usato. Piattaforme supportate:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "In attesa che venga premuto il pulsante della tua chiave di sicurezza"
},
"twoFactorU2fClickEnable": {
"message": "Fai click sul pulsante \"Abilita\" per abilitare questa chiave di sicurezza per la verifica in due passaggi."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "Si è verificato un problema durante la lettura della chiave di sicurezza."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Il tuo codice di recupero Bitwarden per la verifica in due passaggi"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Password dell'account modificata."
},
"enabled2fa": {
"message": "Verifica in due passaggi abilitata."
"enabledUpdated2fa": {
"message": "Verifica in due passaggi abilitata\/aggiornata."
},
"disabled2fa": {
"message": "Verifica in due passaggi disabilitata."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "パスワード"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "メモ"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Length"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Password History"
},
@@ -817,7 +826,7 @@
"message": "Code"
},
"changeEmailDesc": {
"message": "We have emailed a verification code to $EMAIL$. Please check your email for this code and enter it below to finalize your the email address change.",
"message": "認証コードのメールを $EMAIL$ に送信しました。メールアドレスの変更を完了するには、メールを確認してコードを以下に入力してください。",
"placeholders": {
"email": {
"content": "$1",
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Purge Vault"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Proceed below to delete all items and folders in your vault. Items that belong to an organization that you share with will not be deleted."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Purging your vault is permanent. It cannot be undone."
},
@@ -1136,7 +1151,7 @@
"message": "Add a new YubiKey to your account"
},
"twoFactorYubikeyPlugIn": {
"message": "Plug the YubiKey (NEO or 4 series) into your computer's USB port."
"message": "YubiKey をコンピューターの USB ポートに挿入してください。"
},
"twoFactorYubikeySelectKey": {
"message": "最初の未入力の YubiKey 入力フィールドを選択してください。"
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC Support"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Add a FIDO U2F security key to your account"
},
"twoFactorU2fPlugIn": {
"message": "Plug the security key into your computer's USB port."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "If the security key has a button, touch it."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when FIDO U2F cannot be used. Supported platforms:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Waiting for you to touch the button on your security key"
},
"twoFactorU2fClickEnable": {
"message": "Click the \"Enable\" button below to enable this security key for two-step login."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "There was a problem reading the security key."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Changed account password."
},
"enabled2fa": {
"message": "Enabled two-step login."
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Disabled two-step login."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "비밀번호"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "메모"
},
@@ -487,25 +490,25 @@
"message": "Log Out"
},
"ok": {
"message": "Ok"
"message": "확인"
},
"yes": {
"message": "Yes"
"message": ""
},
"no": {
"message": "No"
"message": "아니오"
},
"loginOrCreateNewAccount": {
"message": "Log in or create a new account to access your secure vault."
"message": "안전 보관함에 접근하려면 로그인하거나 새 계정을 만드세요."
},
"createAccount": {
"message": "Create Account"
"message": "계정 만들기"
},
"logIn": {
"message": "Log In"
"message": "로그인"
},
"submit": {
"message": "Submit"
"message": "보내기"
},
"emailAddressDesc": {
"message": "You'll use your email address to log in."
@@ -517,82 +520,82 @@
"message": "What should we call you?"
},
"masterPass": {
"message": "Master Password"
"message": "마스터 비밀번호"
},
"masterPassDesc": {
"message": "The master password is the password you use to access your vault. It is very important that you do not forget your master password. There is no way to recover the password in the event that you forget it."
"message": "마스터 비밀번호는 보관함을 열 때 필요한 비밀번호입니다. 절대 마스터 비밀번호를 잊어버리지 마세요. 잊어버리면 복구할 수 있는 방법이 없습니다."
},
"masterPassHintDesc": {
"message": "A master password hint can help you remember your password if you forget it."
"message": "마스터 비밀번호 힌트는 마스터 비밀번호를 잊었을 때 도움이 될 수 있습니다."
},
"reTypeMasterPass": {
"message": "Re-type Master Password"
"message": "마스터 비밀번호 다시 입력"
},
"masterPassHint": {
"message": "Master Password Hint (optional)"
"message": "마스터 비밀번호 힌트 (선택)"
},
"masterPassHintLabel": {
"message": "Master Password Hint"
"message": "마스터 비밀번호 힌트"
},
"settings": {
"message": "Settings"
"message": "설정"
},
"passwordHint": {
"message": "Password Hint"
"message": "비밀번호 힌트"
},
"enterEmailToGetHint": {
"message": "Enter your account email address to receive your master password hint."
"message": "마스터 비밀번호 힌트를 받으려면 계정의 이메일 주소를 입력하세요."
},
"getMasterPasswordHint": {
"message": "Get master password hint"
"message": "마스터 비밀번호 힌트 얻기"
},
"emailRequired": {
"message": "Email address is required."
"message": "이메일은 반드시 입력해야 합니다."
},
"invalidEmail": {
"message": "Invalid email address."
"message": "잘못된 이메일 주소입니다."
},
"masterPassRequired": {
"message": "Master password is required."
"message": "마스터 비밀번호는 반드시 입력해야 합니다."
},
"masterPassLength": {
"message": "Master password must be at least 8 characters long."
"message": "마스터 비밀번호는 최소 8자 이상이어야 합니다."
},
"masterPassDoesntMatch": {
"message": "Master password confirmation does not match."
"message": "마스터 비밀번호 확인과 마스터 비밀번호가 일치하지 않습니다."
},
"newAccountCreated": {
"message": "Your new account has been created! You may now log in."
"message": "계정 생성이 완료되었습니다! 이제 로그인하실 수 있습니다."
},
"masterPassSent": {
"message": "We've sent you an email with your master password hint."
"message": "마스터 비밀번호 힌트가 담긴 이메일을 보냈습니다."
},
"unexpectedError": {
"message": "An unexpected error has occurred."
"message": "예기치 못한 오류가 발생했습니다."
},
"emailAddress": {
"message": "Email Address"
"message": "이메일 주소"
},
"yourVaultIsLocked": {
"message": "Your vault is locked. Verify your master password to continue."
"message": "보관함이 잠겨 있습니다. 마스터 비밀번호를 입력하여 계속하세요."
},
"unlock": {
"message": "Unlock"
"message": "잠금 해제"
},
"invalidMasterPassword": {
"message": "Invalid master password"
"message": "잘못된 마스터 비밀번호"
},
"lockNow": {
"message": "Lock Now"
"message": "지금 잠그기"
},
"noItemsInList": {
"message": "There are no items to list."
"message": "항목이 없습니다."
},
"noCollectionsInList": {
"message": "There are no collections to list."
},
"noGroupsInList": {
"message": "There are no groups to list."
"message": "그룹이 없습니다."
},
"noUsersInList": {
"message": "There are no users to list."
@@ -601,7 +604,7 @@
"message": "There are no events to list."
},
"newOrganization": {
"message": "New Organization"
"message": "새 조직"
},
"noOrganizationsList": {
"message": "You do not belong to any organizations. Organizations allow you to securely share items with other users."
@@ -616,10 +619,10 @@
}
},
"enterVerificationCodeApp": {
"message": "Enter the 6 digit verification code from your authenticator app."
"message": "인증 앱에서 6자리 인증 코드를 입력하세요."
},
"enterVerificationCodeEmail": {
"message": "Enter the 6 digit verification code that was emailed to $EMAIL$.",
"message": "$EMAIL$ 주소로 전송된 6자리 인증 코드를 입력하세요.",
"placeholders": {
"email": {
"content": "$1",
@@ -628,7 +631,7 @@
}
},
"verificationCodeEmailSent": {
"message": "Verification email sent to $EMAIL$.",
"message": "$EMAIL$ 주소로 인증 이메일을 보냈습니다.",
"placeholders": {
"email": {
"content": "$1",
@@ -637,13 +640,13 @@
}
},
"rememberMe": {
"message": "Remember me"
"message": "기억하기"
},
"sendVerificationCodeEmailAgain": {
"message": "Send verification code email again"
"message": "인증 코드 이메일 다시 보내기"
},
"useAnotherTwoStepMethod": {
"message": "Use another two-step login method"
"message": "다른 2단계 인증 사용"
},
"insertYubiKey": {
"message": "YubiKey를 컴퓨터의 USB 포트에 삽입하고 버튼을 누르세요."
@@ -795,6 +798,12 @@
"length": {
"message": "길이"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "비밀번호 변경 기록"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Purge Vault"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Proceed below to delete all items and folders in your vault. Items that belong to an organization that you share with will not be deleted."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Purging your vault is permanent. It cannot be undone."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC 지원"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Add a FIDO U2F security key to your account"
},
"twoFactorU2fPlugIn": {
"message": "Plug the security key into your computer's USB port."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "If the security key has a button, touch it."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when FIDO U2F cannot be used. Supported platforms:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Waiting for you to touch the button on your security key"
},
"twoFactorU2fClickEnable": {
"message": "Click the \"Enable\" button below to enable this security key for two-step login."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "There was a problem reading the security key."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Changed account password."
},
"enabled2fa": {
"message": "Enabled two-step login."
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Disabled two-step login."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Passord"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "Notater"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Lengde"
},
"numWords": {
"message": "Antall ord"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Passordhistorikk"
},
@@ -853,16 +862,16 @@
"message": "Bekreft det nye superpassordet"
},
"encKeySettings": {
"message": "Encryption Key Settings"
"message": "Innstillinger for krypteringsnøkkel"
},
"kdfAlgorithm": {
"message": "KDF Algorithm"
"message": "KDF Algoritmen"
},
"kdfIterations": {
"message": "KDF Iterations"
"message": "KDF gjentakelser"
},
"kdfIterationsDesc": {
"message": "Higher KDF iterations can help protect your master password from being brute forced by an attacker. We recommend a value of $VALUE$ or more.",
"message": "Høyere KDF gjentakelser kan beskytte hovedpassordet fra blir brute tvunget av angriperen. Verdien $VALUE$ eller mer anbefales.",
"placeholders": {
"value": {
"content": "$1",
@@ -880,7 +889,7 @@
}
},
"changeKdf": {
"message": "Change KDF"
"message": "Endre KDF"
},
"encKeySettingsChanged": {
"message": "Encryption Key Settings Changed"
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Tøm hvelvet"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Fortsett nedenfor for å slette alle gjenstander og mapper i ditt hvelv. Gjenstander som tilhører en organisasjon som du deler med, vil ikke bli slettet."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Å tømme hvelvet ditt er permanent. Det kan ikke bli angret på."
},
@@ -1076,10 +1091,10 @@
"message": "Et Premium-medlemskap er påkrevd for å bruke denne funksjonen."
},
"youHavePremiumAccess": {
"message": "You have premium access"
"message": "Du har premium tilgang"
},
"alreadyPremiumFromOrg": {
"message": "You already have access to premium features because of an organization you are a member of."
"message": "Du har allerede tilgang til premiumfunksjoner på grunn av en organisasjon du er medlem av."
},
"manage": {
"message": "Behandle"
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC-støtte"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Legg til en FIDO U2F-sikkerhetsnøkkel til din konto"
},
"twoFactorU2fPlugIn": {
"message": "Sett inn sikkerhetsnøkkelen i din datamaskins USB-port."
"removeU2fConfirmation": {
"message": "Er du sikker på at du vil fjerne denne sikkerhetsnøkkelen?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "Dersom sikkerhetsnøkkelen har en knapp, trykk på den."
},
"twoFactorU2fSaveForm": {
"message": "Lagre skjemaet."
},
"twoFactorU2fWarning": {
"message": "På grunn av plattformbegrensninger, kan FIDO U2F ikke bli brukt på alle Bitwarden-apper. Du burde skru på en annen 2-trinnsinnloggingsleverandør, sånn at du kan få tilgang til din konto når FIDO U2F ikke kan bli brukt. Støttede plattformer:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Venter på at du skal trykke på knappen på din sikkerhetsnøkkel"
},
"twoFactorU2fClickEnable": {
"message": "Klikk på «Aktiver»-knappen nedenfor for å aktivere denne sikkerhetsnøkkelen for 2-trinnsinnlogging."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "Det var et problem med å lese sikkerhetsnøkkelen."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Din 2-trinnsinnloggingsgjenopprettingskode for Bitwarden"
@@ -1701,7 +1740,7 @@
"message": "Lokal betjening (valgfritt)"
},
"usersGetPremium": {
"message": "Users get access to premium membership features"
"message": "Brukerne får tilgang til premium medlemskap funksjoner"
},
"controlAccessWithGroups": {
"message": "Kontroller brukertilgang med grupper"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Endret kontopassordet."
},
"enabled2fa": {
"message": "Skrudde på 2-trinnsinnlogging."
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Skrudde av 2-trinnsinnlogging."
@@ -2142,10 +2181,10 @@
}
},
"confirmUsers": {
"message": "Confirm Users"
"message": "Bekreft brukere"
},
"usersNeedConfirmed": {
"message": "You have users that have accepted their invitation, but still need to be confirmed. Users will not have access to the organization until they are confirmed."
"message": "Du har brukere som har akseptert sin invitasjon, men må fortsatt bekreftes. Brukere vil ikke ha tilgang til organisasjonen før de er bekreftet."
},
"startDate": {
"message": "Startdato"

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Wachtwoord"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "Notities"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Lengte"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Wachtwoordgeschiedenis"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Kluis legen"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Ga hieronder verder om alle items en mappen in uw kluis te verwijderen. Items die behoren tot een organisatie waarmee u deelt, worden niet verwijderd."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Het leegmaken van uw webkluis is permanent en kan niet ongedaan worden gemaakt."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC ondersteuning"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Voeg een FIDO U2F beveiligingssleutel toe aan uw account"
},
"twoFactorU2fPlugIn": {
"message": "Stop de beveiligingssleutel in een USB-poort van uw computer."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "Druk op de knop van de beveiligingssleutel wanneer deze aanwezig is."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Vanwege platformbeperkingen kunnen FIDO U2F niet in alle Bitwarden applicaties gebruikt worden. U zou een andere tweestapsaanmeldingsaanbieder moeten instellen voor wanneer FIDO U2F niet gebruikt kunnen worden. De volgende platformen worden ondersteunt:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Wachten tot u op de knop van de beveiligingssleutel hebt gedrukt"
},
"twoFactorU2fClickEnable": {
"message": "Klik op de \"Activeren\"-knop hier beneden om deze beveiligingssleutel te activeren als tweestapsaanmeldingsmethode."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "Er was een probleem met het lezen van de beveiligingssleutel."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Uw Bitwarden tweestapsaanmelding herstelcode"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Veranderd account wachtwoord."
},
"enabled2fa": {
"message": "Tweestapsaanmelden geactiveerd."
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Tweestapsaanmelden uitgeschakeld."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Hasło"
},
"passphrase": {
"message": "Hasło"
},
"notes": {
"message": "Notatki"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Długość"
},
"numWords": {
"message": "Liczba słów"
},
"wordSeparator": {
"message": "Separator wyrazów"
},
"passwordHistory": {
"message": "Historia haseł"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Wyczyść sejf"
},
"purgedOrganizationVault": {
"message": "Wyczyszczono sejf organizacji."
},
"purgeVaultDesc": {
"message": "Kontynuuj poniżej, aby usunąć wszystkie elementy i foldery z Twojego sejfu. Elementy udostępnione organizacji nie zostaną usunięte."
},
"purgeOrgVaultDesc": {
"message": "Przejdź poniżej, aby usunąć wszystkie elementy z sejfu organizacji."
},
"purgeVaultWarning": {
"message": "Wykasowanie sejfu jest nieodwracalne. Akcja ta nie może być cofnięta."
},
@@ -1136,7 +1151,7 @@
"message": "Dodaj nowy klucz YubiKey do swojego konta"
},
"twoFactorYubikeyPlugIn": {
"message": "Włóż klucz YubiKey (NEO lub seria 4) do portu USB swojego komputera."
"message": "Włóż YubiKey do portu USB swojego komputera."
},
"twoFactorYubikeySelectKey": {
"message": "Wybierz poniżej pierwsze wolne pole YubiKey."
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "Klucz U2F $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Obsługa NFC"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Dodaj klucz bezpieczeństwa FIDO U2F do swojego konta"
},
"twoFactorU2fPlugIn": {
"message": "Włóż klucz bezpieczeństwa do portu USB swojego komputera."
"removeU2fConfirmation": {
"message": "Czy jesteś pewien, że chcesz usunąć ten klucz bezpieczeństwa?"
},
"readKey": {
"message": "Odczytaj klucz"
},
"keyCompromised": {
"message": "Klucz został złamany."
},
"twoFactorU2fGiveName": {
"message": "Nadaj kluczowi bezpieczeństwa przyjazną nazwę, aby go łatwiej zidentyfikować."
},
"twoFactorU2fPlugInReadKey": {
"message": "Podłącz klucz bezpieczeństwa do portu USB komputera i kliknij przycisk \"Odczytaj klucz\"."
},
"twoFactorU2fTouchButton": {
"message": "Jeśli klucz bezpieczeństwa posiada przycisk, dotknij go."
},
"twoFactorU2fSaveForm": {
"message": "Zapisz formularz."
},
"twoFactorU2fWarning": {
"message": "Z powodu ograniczeń platformy, FIDO U2F nie może być używany we wszystkich aplikacjach Bitwarden. Powinieneś włączyć inną metodę dwustopniowego logowania, tak abyś miał dostęp do swojego konta w sytuacji, gdy FIDO U2F nie będzie mógł zostać użyty. Wspierane platformy:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Oczekiwanie na dotknięcie klucza bezpieczeństwa"
},
"twoFactorU2fClickEnable": {
"message": "Kliknij przycisk \"Włącz\" poniżej, aby aktywować dwustopniowe logowanie za pomocą tego klucza bezpieczeństwa."
"twoFactorU2fClickSave": {
"message": "Kliknij przycisk \"Zapisz\" poniżej, aby włączyć ten klucz bezpieczeństwa dla dwustopniowego logowania."
},
"twoFactorU2fProblemReading": {
"message": "Wystąpił problem z odczytem klucza bezpieczeństwa."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Wystąpił problem z odczytem klucza bezpieczeństwa. Spróbuj ponownie."
},
"twoFactorRecoveryYourCode": {
"message": "Twój kod odzyskiwania Bitwarden"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Zmieniono hasło do konta."
},
"enabled2fa": {
"message": "Włączono dwustopniowe logowanie."
"enabledUpdated2fa": {
"message": "Włączono\/zaktualizowano dwustopniowe logowanie."
},
"disabled2fa": {
"message": "Wyłączono dwustopniowe logowanie."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Senha"
},
"passphrase": {
"message": "Frase Secreta"
},
"notes": {
"message": "Notas"
},
@@ -680,7 +683,7 @@
"message": "Chave de Segurança YubiKey OTP"
},
"yubiKeyDesc": {
"message": "Utilize um YubiKey para acessar a sua conta. Funciona com YubiKey 4, 4 Nano, 4C, e dispositivos NEO."
"message": "Utilize uma YubiKey para acessar a sua conta. Funciona com YubiKey 4, 4 Nano, 4C, e dispositivos NEO."
},
"duoDesc": {
"message": "Verifique com o Duo Security utilizando o aplicativo Duo Mobile, SMS, chamada telefônica, ou chave de segurança U2F.",
@@ -795,6 +798,12 @@
"length": {
"message": "Comprimento"
},
"numWords": {
"message": "Número de Palavras"
},
"wordSeparator": {
"message": "Separador de Palavra"
},
"passwordHistory": {
"message": "Histórico de Senha"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Limpar o Cofre"
},
"purgedOrganizationVault": {
"message": "Cofre da organização limpado."
},
"purgeVaultDesc": {
"message": "Continue abaixo para excluir todos os itens e pastas do seu cofre. Itens que pertencem a uma organização com a qual você compartilha não serão excluídos."
},
"purgeOrgVaultDesc": {
"message": "Continue abaixo para excluir todos os itens no cofre da organização."
},
"purgeVaultWarning": {
"message": "Limpando o seu cofre permanentemente. Não pode ser desfeito."
},
@@ -1136,7 +1151,7 @@
"message": "Adicionar um novo Yubikey à sua conta"
},
"twoFactorYubikeyPlugIn": {
"message": "Conecte o YubiKey (NEO ou 4 series) a porta USB do seu computador."
"message": "Conecte o YubiKey na porta USB do seu computador."
},
"twoFactorYubikeySelectKey": {
"message": "Selecione o YubiKey no primeiro campo vazio abaixo."
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "Chave U2F $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Suporte a NFC"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Adicione uma chave de segurança FIDO U2F à sua conta"
},
"twoFactorU2fPlugIn": {
"message": "Conecte a chave de segurança na porta USB do seu computador."
"removeU2fConfirmation": {
"message": "Tem certeza que deseja remover esta chave de segurança?"
},
"readKey": {
"message": "Chave de Leitura"
},
"keyCompromised": {
"message": "A chave está comprometida."
},
"twoFactorU2fGiveName": {
"message": "Dê à chave de segurança um nome amigável para identificá-la."
},
"twoFactorU2fPlugInReadKey": {
"message": "Conecte a chave de segurança na porta USB do seu computador e clique no botão \"Ler Chave\"."
},
"twoFactorU2fTouchButton": {
"message": "Se a chave de segurança tiver um botão, toque nele."
},
"twoFactorU2fSaveForm": {
"message": "Salvar o formulário."
},
"twoFactorU2fWarning": {
"message": "Devido as limitações da plataforma, o FIDO U2F não pode ser usado em todas os aplicativos do Bitwarden. Você deve habilitar outro provedor de login em duas etapas para poder acessar sua conta quando o FIDO U2F não puder ser usado. Plataformas Suportadas:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Esperando que você toque no botão da sua chave de segurança"
},
"twoFactorU2fClickEnable": {
"message": "Clique no botão \"Habilitar\" abaixo para ativar essa chave de segurança para o login em duas etapas."
"twoFactorU2fClickSave": {
"message": "Clique no botão \"Salvar\" abaixo para ativar essa chave de segurança para o login em duas etapas."
},
"twoFactorU2fProblemReading": {
"message": "Houve um problema ao ler a chave de segurança."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Houve um problema ao ler a chave de segurança. Tente novamente."
},
"twoFactorRecoveryYourCode": {
"message": "Seu código de recuperação de login em duas etapas do Bitwarden"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Senha da conta alterada."
},
"enabled2fa": {
"message": "Habilitar login em duas etapas."
"enabledUpdated2fa": {
"message": "Habilitado\/atualizado o login em duas etapas."
},
"disabled2fa": {
"message": "Desabilitar login em duas etapas."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Palavra-passe"
},
"passphrase": {
"message": "Frase-passe"
},
"notes": {
"message": "Notas"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Comprimento"
},
"numWords": {
"message": "Número de palavras"
},
"wordSeparator": {
"message": "Separador de palavras"
},
"passwordHistory": {
"message": "Histórico de Palavras-passe"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Esvaziar Cofre"
},
"purgedOrganizationVault": {
"message": "Cofre da organização purgado."
},
"purgeVaultDesc": {
"message": "Continue para eliminar todos os itens e pastas do seu cofre. Itens que pertençam a uma organização que partilhe não serão eliminados."
},
"purgeOrgVaultDesc": {
"message": "Proceda abaixo para apagar todos os itens no cofre da organização."
},
"purgeVaultWarning": {
"message": "Esvaziar o seu cofre é permanente. Não pode ser desfeito."
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "Chave $INDEX$ U2F",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Suporte NFC"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Adicione à sua conta uma chave de segurança FIDO U2F"
},
"twoFactorU2fPlugIn": {
"message": "Ligue a chave de segurança numa porta USB do seu computador."
"removeU2fConfirmation": {
"message": "Tem a certeza de que pretende remover esta chave de segurança?"
},
"readKey": {
"message": "Ler chave"
},
"keyCompromised": {
"message": "A chave foi comprometida."
},
"twoFactorU2fGiveName": {
"message": "Dê à chave de segurança um nome amigável para a identificar."
},
"twoFactorU2fPlugInReadKey": {
"message": "Coloque a chave de segurança na porta USB do seu computador e clique no botão \"Ler chave\"."
},
"twoFactorU2fTouchButton": {
"message": "Se a chave de segurança tiver um botão, toque-lhe."
},
"twoFactorU2fSaveForm": {
"message": "Guarde o formulário."
},
"twoFactorU2fWarning": {
"message": "Devido a limitações da plataforma, FIDO U2F não pode ser utilizado em todas as aplicações Bitwarden. Deverá escolher outro método de início de sessão em dois passos quando FIDO U2F não puder ser utilizado. Plataformas suportadas:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "A aguardar que toque no botão da sua chave de segurança"
},
"twoFactorU2fClickEnable": {
"message": "Clique no botão \"Ativar\" abaixo para ativar esta chave de segurança para o início de sessão em dois passos."
"twoFactorU2fClickSave": {
"message": "Clique no botão \"Guardar\" abaixo para ativar esta chave de segurança para o início de sessão em dois passos."
},
"twoFactorU2fProblemReading": {
"message": "Ocorreu um problema ao ler a chave de segurança."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Ocorreu um problema ao ler a chave de segurança. Tente novamente."
},
"twoFactorRecoveryYourCode": {
"message": "O seu código Bitwarden de recuperação de início de sessão em dois passos"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Palavra-passe da conta alterada."
},
"enabled2fa": {
"message": "Início de sessão em dois passos ativado."
"enabledUpdated2fa": {
"message": "Início de sessão em dois passos ativado\/atualizado."
},
"disabled2fa": {
"message": "Início de sessão em dois passos desativado."

View File

@@ -10,7 +10,7 @@
}
},
"whatTypeOfItem": {
"message": "Какой это тип элемента?"
"message": "Выберите тип элемента"
},
"name": {
"message": "Имя"
@@ -37,6 +37,9 @@
"password": {
"message": "Пароль"
},
"passphrase": {
"message": "Парольная фраза"
},
"notes": {
"message": "Заметки"
},
@@ -680,7 +683,7 @@
"message": "Ключ безопасности YubiKey OTP"
},
"yubiKeyDesc": {
"message": "Используйте YubiKey для доступа к вашей учетной записи. Работает с устройствами YubiKey 4, 4 Nano, 4C и NEO."
"message": "Используйте YubiKey для доступа к вашей учетной записи. Работает с устройствами YubiKey 4 серии, 5 серии и NEO."
},
"duoDesc": {
"message": "Подтвердите при помощи Duo Security, используя приложение Duo Mobile, SMS, телефонный звонок или ключ безопасности U2F.",
@@ -795,6 +798,12 @@
"length": {
"message": "Длина"
},
"numWords": {
"message": "Количество слов"
},
"wordSeparator": {
"message": "Разделитель слов"
},
"passwordHistory": {
"message": "История паролей"
},
@@ -826,7 +835,7 @@
}
},
"loggedOutWarning": {
"message": "При продолжении ваша сессия будет завершена и вам будет предложено авторизоваться повторно. Сеансы на других устройствах могут продолжать оставаться активными в течение одного часа."
"message": "В случае продолжения, ваша сессия будет завершена и вам будет предложено авторизоваться повторно. Сеансы на других устройствах могут продолжать оставаться активными в течение одного часа."
},
"emailChanged": {
"message": "Email изменен"
@@ -871,7 +880,7 @@
}
},
"kdfIterationsWarning": {
"message": "Установка слишком высоких итераций KDF может привести к снижению производительности при входе (и разблокировке) на устройствах с медленными процессорами. Мы рекомендуем увеличить значение с шагом $INCREMENT$, а затем проверить все ваши устройства.",
"message": "Установка слишком высоких итераций KDF может привести к снижению производительности при входе (и разблокировке) на устройствах с медленными процессорами. Мы рекомендуем увеличивать значение с шагом $INCREMENT$, а затем проверить все ваши устройства.",
"placeholders": {
"increment": {
"content": "$1",
@@ -889,16 +898,16 @@
"message": "Опасная зона"
},
"dangerZoneDesc": {
"message": "Осторожно, эти действия не обратимы!"
"message": "Будьте внимательны - эти действия не обратимы!"
},
"deauthorizeSessions": {
"message": "Деавторизовать сессии"
},
"deauthorizeSessionsDesc": {
"message": "Беспокоитесь о том, что ваша учетная запись авторизована на другом устройстве? Чтобы деавторизовать все ранее использовавшиеся компьютеры или устройства, выполните действие ниже. Этот шаг безопасности рекомендуется, если вы ранее использовали общедоступный компьютер или случайно сохранили свой пароль на устройстве, которое вам не принадлежит. Это действие также очистит все ранее сохраненные сессии двухфакторного входа."
"message": "Беспокоитесь о том, что ваша учетная запись авторизована на другом устройстве? Чтобы деавторизовать все ранее использовавшиеся компьютеры или устройства, выполните действие ниже. Этот шаг безопасности рекомендуется, если вы ранее использовали общедоступный компьютер или случайно сохранили свой пароль на устройстве, которое вам не принадлежит. Это действие также очистит все ранее сохраненные сессии двухфакторной аутентификации."
},
"deauthorizeSessionsWarning": {
"message": "При продолжении ваша сессия также будет завершена и вам будет предложено авторизоваться повторно. Также вам будет предложено повторно авторизоваться при помощи двухфакторной аутентификации, если она включена. Сеансы на других устройствах могут продолжать оставаться активными в течение одного часа."
"message": "В случае продолжения, ваша сессия будет завершена и вам будет предложено авторизоваться повторно. При активированной двухфакторной аутентификации вам потребуется ввести код. Сеансы на других устройствах могут продолжать оставаться активными в течение одного часа."
},
"sessionsDeauthorized": {
"message": "Все сессии деавторизованы"
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Очистить хранилище"
},
"purgedOrganizationVault": {
"message": "Хранилище организации очищено."
},
"purgeVaultDesc": {
"message": "Чтобы удалить все элементы и папки из вашего хранилища, выполните действие ниже. Элементы, принадлежащие организации, с которой вы делитесь, удалены не будут."
},
"purgeOrgVaultDesc": {
"message": "Для удаления всех элементов в хранилище организации выполните следующие действия."
},
"purgeVaultWarning": {
"message": "Очистка вашего хранилища необратима. Ее нельзя отменить."
},
@@ -993,7 +1008,7 @@
"description": "'Gravatar' is the name of a service. See www.gravatar.com"
},
"enableGravatarsDesc": {
"message": "Использовать аватары, загруженные с gravatar.com."
"message": "Использовать аватары с сайта gravatar.com."
},
"default": {
"message": "По умолчанию"
@@ -1112,7 +1127,7 @@
"message": "Устройства Windows"
},
"twoStepAuthenticatorAppsRecommended": {
"message": "Эти приложения рекомендуется, однако, другие приложения-аутентификаторы также будут работать."
"message": "Эти приложения рекомендуются, однако, другие приложения-аутентификаторы также будут работать."
},
"twoStepAuthenticatorScanCode": {
"message": "Сосканируйте этот QR-код вашим приложением-аутентификатором"
@@ -1136,7 +1151,7 @@
"message": "Добавить новый YubiKey в свою учетную запись"
},
"twoFactorYubikeyPlugIn": {
"message": "Подключите YubiKey (NEO или 4 серии) к USB-порту вашего компьютера."
"message": "Подключите YubiKey к USB-порту вашего компьютера."
},
"twoFactorYubikeySelectKey": {
"message": "Выберите первое пустое поле ввода YubiKey ниже."
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "Ключ U2F $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Поддержка NFC"
},
@@ -1175,7 +1199,7 @@
"message": "Если один из ваших YubiKey поддерживает NFC (например, YubiKey NEO), то при обнаружении доступности NFC на мобильном устройстве вам будет выдан запрос."
},
"yubikeysUpdated": {
"message": "YubiKeys обновлены"
"message": "YubiKey обновлены"
},
"disableAllKeys": {
"message": "Отключить все ключи"
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Добавьте в свою учетную запись ключ безопасности FIDO U2F"
},
"twoFactorU2fPlugIn": {
"message": "Подключите ключ безопасности к USB-порту вашего компьютера."
"removeU2fConfirmation": {
"message": "Вы действительно хотите удалить этот ключ безопасности?"
},
"readKey": {
"message": "Чтение ключа"
},
"keyCompromised": {
"message": "Ключ скомпрометирован."
},
"twoFactorU2fGiveName": {
"message": "Присвойте ключу безопасности понятное имя для его идентификации."
},
"twoFactorU2fPlugInReadKey": {
"message": "Подключите ключ безопасности к USB-порту компьютера и нажмите кнопку 'Чтение ключа'."
},
"twoFactorU2fTouchButton": {
"message": "Если у ключа безопасности есть кнопка, нажмите ее."
},
"twoFactorU2fSaveForm": {
"message": "Сохранить форму."
},
"twoFactorU2fWarning": {
"message": "Из-за ограничений платформы FIDO U2F нельзя использовать во всех приложениях Bitwarden. Вы должны включить другого провайдера двухфакторной аутентификации, чтобы иметь возможность получить доступ к своей учетной записи, когда FIDO U2F не может быть использован. Поддерживаемые платформы:"
},
@@ -1222,14 +1261,14 @@
"twoFactorU2fWaiting": {
"message": "В ожидании нажатия кнопки на ключе безопасности"
},
"twoFactorU2fClickEnable": {
"message": "Нажмите кнопку \"Включить\" ниже, чтобы активировать этот ключ безопасности для двухфакторной аутентификации."
"twoFactorU2fClickSave": {
"message": "Нажмите кнопку 'Сохранить' ниже, чтобы включить этот ключ безопасности для двухфакторной аутентификации."
},
"twoFactorU2fProblemReading": {
"message": "Не удалось прочитать ключ безопасности."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Не удалось прочитать ключ безопасности. Попробуйте снова."
},
"twoFactorRecoveryYourCode": {
"message": "Ваш код восстановления двухфакторной ауентификации Bitwarden"
"message": "Ваш код восстановления двухфакторной аутентификации Bitwarden"
},
"twoFactorRecoveryNoCode": {
"message": "Вы еще не включили ни одного провайдера двухфакторной аутентификации. После включения, вы можете вернуться сюда и проверить ваш код восстановления."
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Изменен пароль учетной записи."
},
"enabled2fa": {
"message": "Двухфакторная аутентификация включена."
"enabledUpdated2fa": {
"message": "Двухфакторная аутентификация включена\/обновлена."
},
"disabled2fa": {
"message": "Двухфакторная аутентификация выключена."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Heslo"
},
"passphrase": {
"message": "Heslo"
},
"notes": {
"message": "Poznámky"
},
@@ -795,6 +798,12 @@
"length": {
"message": "Dĺžka"
},
"numWords": {
"message": "Počet slov"
},
"wordSeparator": {
"message": "Oddeľovač slov"
},
"passwordHistory": {
"message": "História hesla"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Vyprázdniť trezor"
},
"purgedOrganizationVault": {
"message": "Trezor organizácie bol vyprázdnený."
},
"purgeVaultDesc": {
"message": "Pokračujte ďalej ak chcete odstrániť všetky položky a priečinky vo vašom trezore. Položky, ktoré ste zdieľali a patria k organizácii sa neodstránia."
},
"purgeOrgVaultDesc": {
"message": "Pokračujte ďalej ak chcete odstrániť všetky položky v trezore organizácie."
},
"purgeVaultWarning": {
"message": "Vyprázdnenie trezoru je trvalé. Operáciu nie je možné vrátiť späť."
},
@@ -1136,7 +1151,7 @@
"message": "Do svojho účtu pridať nový YubiKey"
},
"twoFactorYubikeyPlugIn": {
"message": "Zapojte YubiKey (NEO alebo 4 séria) do USB portu počítača."
"message": "Zapojte YubiKey do USB portu počítača."
},
"twoFactorYubikeySelectKey": {
"message": "Nižšie zvoľte prvé voľné pole na vašom YubiKey."
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F kľúč $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "Podpora NFC"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Pridajte FIDO U2F kľúč k vášmu účtu"
},
"twoFactorU2fPlugIn": {
"message": "Pripojte bezpečnostný kľúč k vášmu počítaču prostredníctvom USB portu."
"removeU2fConfirmation": {
"message": "Naozaj chcete odstrániť tento bezpečnostný kľúč?"
},
"readKey": {
"message": "Načítať kľúč"
},
"keyCompromised": {
"message": "Kľúč bol kompromitovaný."
},
"twoFactorU2fGiveName": {
"message": "Zadajte názov pre bezpečnostný kľúč pre jeho ľahšiu identifikáciu."
},
"twoFactorU2fPlugInReadKey": {
"message": "Zasuňte bezpečnostný kľúč do USB portu na vašom počítači a kliknite na tlačidlo \"Načítať kľúč\"."
},
"twoFactorU2fTouchButton": {
"message": "Ak má kľúč na sebe tlačidlo, stlačte ho."
},
"twoFactorU2fSaveForm": {
"message": "Ulož formulár."
},
"twoFactorU2fWarning": {
"message": "Vzhľadom na obmedzenia platform, FIDO U2F nemôže byť použitý vo všetkých Bitwarden aplikáciách. Mali by ste povoliť inú formu dvojitého overenia, aby ste sa mohli prihlásiť k svojmu účtu ak nie je možné použiť FIDO U2F. Podporované platformy:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Čaká sa na stlačenie tlačidla na vašom kľúči"
},
"twoFactorU2fClickEnable": {
"message": "Kliknite na tlačidlo \"Povoliť\" pre povolenie bezpečnostného kľúča pre dvojstupňové prihlásenie."
"twoFactorU2fClickSave": {
"message": "Kliknite na tlačidlo \"Uložiť\" pre povolenie bezpečnostného kľúča pre dvojstupňové prihlásenie."
},
"twoFactorU2fProblemReading": {
"message": "Problém pri čítaní bezpečnostného kľúča."
"twoFactorU2fProblemReadingTryAgain": {
"message": "Problém pri čítaní bezpečnostného kľúča. Skúste to znova."
},
"twoFactorRecoveryYourCode": {
"message": "Váš Bitwarden záchranný kód pre dvojstupňové overovanie"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Zmenené heslo k účtu."
},
"enabled2fa": {
"message": "Dvojstupňové prihlasovanie zapnuté."
"enabledUpdated2fa": {
"message": "Dvojstupňové prihlasovanie zapnuté\/aktualizované."
},
"disabled2fa": {
"message": "Dvojstupňové prihlasovanie vypnuté."

View File

@@ -37,6 +37,9 @@
"password": {
"message": "Lösenord"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "Anteckningar"
},
@@ -718,7 +721,7 @@
"message": "Välj en organisation som du vill dela dessa objekt med. Delning överför ägandet av objekten till organisationen. Du kommer inte längre att vara direkt ägare till dessa objekt när de har delats."
},
"collectionsDesc": {
"message": "Edit the collections that this item is being shared with. Only organization users with access to these collections will be able to see this item."
"message": "Redigera de samlingar som detta objekt delas med. Endast användare i organisationer som har tillgång till dessa samlingar kommer kunna se objektet."
},
"deleteSelectedItemsDesc": {
"message": "Du har valt $COUNT$ objekt att ta bort. Är du säker på att du vill ta bort alla dessa objekt?",
@@ -795,6 +798,12 @@
"length": {
"message": "Längd"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "Lösenordshistorik"
},
@@ -853,13 +862,13 @@
"message": "Bekräfta nytt huvudlösenord"
},
"encKeySettings": {
"message": "Encryption Key Settings"
"message": "Inställningar för krypteringsnyckel"
},
"kdfAlgorithm": {
"message": "KDF Algorithm"
"message": "KDF algoritm"
},
"kdfIterations": {
"message": "KDF Iterations"
"message": "KDF iterationer"
},
"kdfIterationsDesc": {
"message": "Higher KDF iterations can help protect your master password from being brute forced by an attacker. We recommend a value of $VALUE$ or more.",
@@ -880,10 +889,10 @@
}
},
"changeKdf": {
"message": "Change KDF"
"message": "Ändra KDF"
},
"encKeySettingsChanged": {
"message": "Encryption Key Settings Changed"
"message": "Inställningar för krypteringsnyckel ändrade"
},
"dangerZone": {
"message": "Högrisksområde"
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "Rensa valv"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Proceed below to delete all items and folders in your vault. Items that belong to an organization that you share with will not be deleted."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "Rensning av ditt valv är permanent. Det går inte att ångra."
},
@@ -1076,7 +1091,7 @@
"message": "Ett premium-medlemskap krävs för att använda den här funktionen."
},
"youHavePremiumAccess": {
"message": "You have premium access"
"message": "Du har premiumtillgång"
},
"alreadyPremiumFromOrg": {
"message": "You already have access to premium features because of an organization you are a member of."
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC-stöd"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "Lägg till en FIDO U2F säkerhetsnyckel till ditt konto"
},
"twoFactorU2fPlugIn": {
"message": "Sätt in säkerhetsnyckeln till din dators USB-port."
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "Om säkerhetsnyckeln har en knapp, tryck på den."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when FIDO U2F cannot be used. Supported platforms:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Waiting for you to touch the button on your security key"
},
"twoFactorU2fClickEnable": {
"message": "Click the \"Enable\" button below to enable this security key for two-step login."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "There was a problem reading the security key."
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "Your Bitwarden two-step login recovery code"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Ändrade kontolösenord."
},
"enabled2fa": {
"message": "Aktiverade tvåstegsverifiering."
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Inaktiverade tvåstegsverifiering."

2487
src/locales/tr/messages.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -37,6 +37,9 @@
"password": {
"message": "密码"
},
"passphrase": {
"message": "密码"
},
"notes": {
"message": "笔记"
},
@@ -795,6 +798,12 @@
"length": {
"message": "长度"
},
"numWords": {
"message": "字数"
},
"wordSeparator": {
"message": "单词分隔符"
},
"passwordHistory": {
"message": "密码历史记录"
},
@@ -906,9 +915,15 @@
"purgeVault": {
"message": "清空密码库"
},
"purgedOrganizationVault": {
"message": "已清除的组织密码库。"
},
"purgeVaultDesc": {
"message": "接下来的操作会删除密码库中的所有项目和文件夹。属于组织的共享项目将不会被删除。"
},
"purgeOrgVaultDesc": {
"message": "继续执行以下操作以删除组织的密码库中的所有项目。"
},
"purgeVaultWarning": {
"message": "清空密码库是永久性的。不能被撤消。"
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "YubiKey $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC 支持"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "在您的帐户中添加 FIDO U2F 安全密钥"
},
"twoFactorU2fPlugIn": {
"message": "将安全密钥插入电脑的 USB 端口。"
"removeU2fConfirmation": {
"message": "您确认要删除这个安全密钥?"
},
"readKey": {
"message": "读取密钥"
},
"keyCompromised": {
"message": "密钥被破坏。"
},
"twoFactorU2fGiveName": {
"message": "给安全密钥一个友好的名称来标识它。"
},
"twoFactorU2fPlugInReadKey": {
"message": "将安全密钥插入计算机的 USB 端口, 然后单击 \"读取密钥\" 按钮。"
},
"twoFactorU2fTouchButton": {
"message": "如果安全密钥有按钮,请按下它。"
},
"twoFactorU2fSaveForm": {
"message": "保存表单。"
},
"twoFactorU2fWarning": {
"message": "由于平台限制FIDO U2F 无法用于所有的 Bitwarden 应用。 您应启用另一个两步登录验证应用,以便在 FIDO U2F 不可用时,也能访问您的帐户。 支持的平台:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "请您按下安全密钥上的按钮"
},
"twoFactorU2fClickEnable": {
"message": "单击下面的 \"启用\" 按钮,启用此安全密钥进行两步登录。"
"twoFactorU2fClickSave": {
"message": "单击下面的 \"保存\" 按钮,启用此安全密钥进行两步登录。"
},
"twoFactorU2fProblemReading": {
"message": "读取安全密钥时出现问题。"
"twoFactorU2fProblemReadingTryAgain": {
"message": "读取安全密钥时出现问题,请再试一次。"
},
"twoFactorRecoveryYourCode": {
"message": "您的 Bitwarden 两步登录恢复代码"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "已更改帐户密码。"
},
"enabled2fa": {
"message": "已启用两步登录。"
"enabledUpdated2fa": {
"message": "已启用\/更新两步登录。"
},
"disabled2fa": {
"message": "已禁用两步登录。"

View File

@@ -37,6 +37,9 @@
"password": {
"message": "密碼"
},
"passphrase": {
"message": "Passphrase"
},
"notes": {
"message": "筆記"
},
@@ -718,10 +721,10 @@
"message": "選擇您希望分享這些項目的組織。這些項目的擁有權將會轉移到組織。一經分享,您將不再是這些項目的直接擁有者。"
},
"collectionsDesc": {
"message": "Edit the collections that this item is being shared with. Only organization users with access to these collections will be able to see this item."
"message": "編輯與此項目共享的集合。只有具有這些集合存取權限的組織使用者才能夠看到此項目。"
},
"deleteSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s) to delete. Are you sure you want to delete all of these items?",
"message": "您已經選取了 $COUNT$ 個項目要刪除。確定要刪除這些項目嗎 ?",
"placeholders": {
"count": {
"content": "$1",
@@ -730,7 +733,7 @@
}
},
"moveSelectedItemsDesc": {
"message": "Choose a folder that you would like to move the $COUNT$ selected item(s) to.",
"message": "選擇要將這 $COUNT$ 個項目移動到的資料夾。",
"placeholders": {
"count": {
"content": "$1",
@@ -739,7 +742,7 @@
}
},
"shareSelectedItemsDesc": {
"message": "You have selected $COUNT$ item(s). $SHAREABLE_COUNT$ items are sharable, $NONSHAREABLE_COUNT$ are not. Items with attachments must be shared individually.",
"message": "您已經選取了 $COUNT$ 個項目。 $SHAREABLE_COUNT$ 個項目是可以分享的,$NONSHAREABLE_COUNT$ 則否。有附件的的項目必須單獨分享。",
"placeholders": {
"count": {
"content": "$1",
@@ -795,6 +798,12 @@
"length": {
"message": "長度"
},
"numWords": {
"message": "Number of Words"
},
"wordSeparator": {
"message": "Word Separator"
},
"passwordHistory": {
"message": "密碼歷史記錄"
},
@@ -826,7 +835,7 @@
}
},
"loggedOutWarning": {
"message": "Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour."
"message": "接下來會登出目前的登入階段,並要求您重新登入。其他裝置上的登入階段最多會保持一個小時。"
},
"emailChanged": {
"message": "電子郵件已更改"
@@ -835,7 +844,7 @@
"message": "請重新登入。"
},
"logBackInOthersToo": {
"message": "Please log back in. If you are using other Bitwarden applications log out and back in to those as well."
"message": "請重新登入。如果您還在使用其他 Bitwarden 應用,也請登出並重新登入。"
},
"changeMasterPassword": {
"message": "變更主密碼"
@@ -853,16 +862,16 @@
"message": "確認新密碼"
},
"encKeySettings": {
"message": "Encryption Key Settings"
"message": "加密金鑰設定"
},
"kdfAlgorithm": {
"message": "KDF Algorithm"
"message": "KDF 演算法"
},
"kdfIterations": {
"message": "KDF Iterations"
"message": "KDF 疊代"
},
"kdfIterationsDesc": {
"message": "Higher KDF iterations can help protect your master password from being brute forced by an attacker. We recommend a value of $VALUE$ or more.",
"message": "較高的 KDF 遞代次數可以避免您的主密碼遭到暴力破解。我們建議 $VALUE$ 或更高。",
"placeholders": {
"value": {
"content": "$1",
@@ -871,7 +880,7 @@
}
},
"kdfIterationsWarning": {
"message": "Setting your KDF iterations too high could result in poor performance when logging into (and unlocking) Bitwarden on devices with slower CPUs. We recommend that you increase the value in increments of $INCREMENT$ and then test all of your devices.",
"message": "把 KDF 遞代次數設太高會導致在 CPU 較慢的裝置上登入 ( 與解鎖 ) Bitwarden 時降低效能。我們建議您增加 $INCREMENT$ 的值並且在所有的裝置上測試。",
"placeholders": {
"increment": {
"content": "$1",
@@ -880,10 +889,10 @@
}
},
"changeKdf": {
"message": "Change KDF"
"message": "變更 KDF"
},
"encKeySettingsChanged": {
"message": "Encryption Key Settings Changed"
"message": "加密金鑰設定已變更"
},
"dangerZone": {
"message": "危險區域"
@@ -892,23 +901,29 @@
"message": "小心, 這些動作是無法挽回的!"
},
"deauthorizeSessions": {
"message": "Deauthorize Sessions"
"message": "取消登入階段"
},
"deauthorizeSessionsDesc": {
"message": "Concerned your account is logged in on another device? Proceed below to deauthorize all computers or devices that you have previously used. This security step is recommended if you previously used a public PC or accidentally saved your password on a device that isn't yours. This step will also clear all previously remembered two-step login sessions."
},
"deauthorizeSessionsWarning": {
"message": "Proceeding will also log you out of your current session, requiring you to log back in. You will also be prompted for two-step login again, if enabled. Active sessions on other devices may continue to remain active for up to one hour."
"message": "接下來會登出目前的登入階段,並要求您重新登入。若您有設定兩步驟登入,也需重新驗證。其他裝置上的登入階段最多會保持一個小時。"
},
"sessionsDeauthorized": {
"message": "All Sessions Deauthorized"
"message": "已取消所有登入階段授權"
},
"purgeVault": {
"message": "清除密碼庫"
},
"purgedOrganizationVault": {
"message": "Purged organization vault."
},
"purgeVaultDesc": {
"message": "Proceed below to delete all items and folders in your vault. Items that belong to an organization that you share with will not be deleted."
},
"purgeOrgVaultDesc": {
"message": "Proceed below to delete all items in the organization's vault."
},
"purgeVaultWarning": {
"message": "清除密碼庫是永久性的。將無法被還原。"
},
@@ -1165,6 +1180,15 @@
}
}
},
"u2fkeyX": {
"message": "U2F Key $INDEX$",
"placeholders": {
"index": {
"content": "$1",
"example": "2"
}
}
},
"nfcSupport": {
"message": "NFC 支援"
},
@@ -1207,12 +1231,27 @@
"twoFactorU2fAdd": {
"message": "在您的帳戶中新增 FIDO U2F 安全金鑰"
},
"twoFactorU2fPlugIn": {
"message": "將安全金鑰插入電腦的 USB 連接埠。"
"removeU2fConfirmation": {
"message": "Are you sure you want to remove this security key?"
},
"readKey": {
"message": "Read Key"
},
"keyCompromised": {
"message": "Key is compromised."
},
"twoFactorU2fGiveName": {
"message": "Give the security key a friendly name to identify it."
},
"twoFactorU2fPlugInReadKey": {
"message": "Plug the security key into your computer's USB port and click the \"Read Key\" button."
},
"twoFactorU2fTouchButton": {
"message": "If the security key has a button, touch it."
},
"twoFactorU2fSaveForm": {
"message": "Save the form."
},
"twoFactorU2fWarning": {
"message": "Due to platform limitations, FIDO U2F cannot be used on all Bitwarden applications. You should enable another two-step login provider so that you can access your account when FIDO U2F cannot be used. Supported platforms:"
},
@@ -1222,11 +1261,11 @@
"twoFactorU2fWaiting": {
"message": "Waiting for you to touch the button on your security key"
},
"twoFactorU2fClickEnable": {
"message": "Click the \"Enable\" button below to enable this security key for two-step login."
"twoFactorU2fClickSave": {
"message": "Click the \"Save\" button below to enable this security key for two-step login."
},
"twoFactorU2fProblemReading": {
"message": "讀取安全金鑰時發生問題。"
"twoFactorU2fProblemReadingTryAgain": {
"message": "There was a problem reading the security key. Try again."
},
"twoFactorRecoveryYourCode": {
"message": "您的 Bitwarden 兩步登入復原碼"
@@ -1910,8 +1949,8 @@
"changedPassword": {
"message": "Changed account password."
},
"enabled2fa": {
"message": "Enabled two-step login."
"enabledUpdated2fa": {
"message": "Enabled\/updated two-step login."
},
"disabled2fa": {
"message": "Disabled two-step login."

View File

@@ -4,6 +4,7 @@ import { SweetAlert } from 'sweetalert/typings/core';
import { DeviceType } from 'jslib/enums/deviceType';
import { I18nService } from 'jslib/abstractions/i18n.service';
import { MessagingService } from 'jslib/abstractions/messaging.service';
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
import { Utils } from 'jslib/misc/utils';
@@ -16,7 +17,7 @@ export class WebPlatformUtilsService implements PlatformUtilsService {
private browserCache: DeviceType = null;
constructor(private i18nService: I18nService) { }
constructor(private i18nService: I18nService, private messagingService: MessagingService) { }
getDevice(): DeviceType {
if (this.browserCache != null) {
@@ -85,10 +86,6 @@ export class WebPlatformUtilsService implements PlatformUtilsService {
return 'UA-81915606-3';
}
getDomain(uriString: string): string {
return Utils.getHostname(uriString);
}
isViewOpen(): boolean {
return false;
}
@@ -143,8 +140,14 @@ export class WebPlatformUtilsService implements PlatformUtilsService {
return true;
}
showToast(type: 'error' | 'success' | 'warning' | 'info', title: string, text: string, global?: any): void {
throw new Error('showToast not implemented');
showToast(type: 'error' | 'success' | 'warning' | 'info', title: string, text: string | string[],
options?: any): void {
this.messagingService.send('showToast', {
text: text,
title: title,
type: type,
options: options,
});
}
async showDialog(text: string, title?: string, confirmText?: string, cancelText?: string, type?: string) {
@@ -199,6 +202,14 @@ export class WebPlatformUtilsService implements PlatformUtilsService {
return confirmed;
}
eventTrack(action: string, label?: string, options?: any) {
this.messagingService.send('analyticsEventTrack', {
action: action,
label: label,
options: options,
});
}
isDev(): boolean {
return process.env.ENV === 'development';
}

View File

@@ -16,18 +16,15 @@
"types": [],
"baseUrl": ".",
"paths": {
"tldjs": [
"jslib/src/misc/tldjs.noop"
],
"jslib/*": [
"jslib/src/*"
],
"@angular/*": [
"node_modules/@angular/*"
],
"angular2-toaster": [
"node_modules/angular2-toaster"
],
"angulartics2": [
"node_modules/angulartics2"
],
"node": [
"node_modules/@types/node"
]

View File

@@ -91,6 +91,7 @@ const plugins = [
chunks: ['connectors/u2f'],
}),
new CopyWebpackPlugin([
{ from: './src/.nojekyll' },
{ from: './src/manifest.json' },
{ from: './src/favicon.ico' },
{ from: './src/browserconfig.xml' },
@@ -130,22 +131,21 @@ if (ENV === 'production') {
});
}
// ref: https://webpack.js.org/configuration/dev-server/#devserver
let certSuffix = fs.existsSync('dev-server.local.pem') ? '.local' : '.shared';
const serve = {
const devServer = {
https: {
key: fs.readFileSync('dev-server' + certSuffix + '.pem'),
cert: fs.readFileSync('dev-server' + certSuffix + '.pem'),
},
// host: '192.168.1.9',
// host client has issues. ref: https://github.com/webpack-contrib/webpack-serve/issues/233
// hotClient: false,
hot: false,
};
const config = {
mode: ENV,
devtool: 'source-map',
serve: serve,
devServer: devServer,
entry: {
'app/polyfills': './src/app/polyfills.ts',
'app/main': './src/app/main.ts',
@@ -172,6 +172,7 @@ const config = {
extensions: ['.ts', '.js'],
alias: {
jslib: path.join(__dirname, 'jslib/src'),
tldjs: path.join(__dirname, 'jslib/src/misc/tldjs.noop'),
},
symlinks: false,
modules: [path.resolve('node_modules')],