1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-17 00:33:44 +00:00

Merge branch 'feature/SG-771-org-domain-claiming-web' into feature/SG-680-create-domain-verification-comp

This commit is contained in:
Jared Snider
2022-12-05 15:22:02 -05:00
358 changed files with 3788 additions and 2126 deletions

View File

@@ -21,4 +21,4 @@
## Documentation
Please refer to the [Web vault section](https://contributing.bitwarden.com/clients/web-vault/) of the [Contributing Documentation](https://contributing.bitwarden.com/) for build instructions, recommended tooling, code style tips, and lots of other great information to get you started.
Please refer to the [Web vault section](https://contributing.bitwarden.com/docs/clients/web-vault/) of the [Contributing Documentation](https://contributing.bitwarden.com/) for build instructions, recommended tooling, code style tips, and lots of other great information to get you started.

View File

@@ -17,6 +17,6 @@
},
"flags": {
"showTrial": true,
"showPasswordless": false
"showPasswordless": true
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@bitwarden/web-vault",
"version": "2022.10.2",
"version": "2022.11.2",
"scripts": {
"build:oss": "webpack",
"build:bit": "webpack -c ../../bitwarden_license/bit-web/webpack.config.js",

View File

@@ -78,7 +78,7 @@
<input
id="login_input_master-password"
bitInput
type="{{ showPassword ? 'text' : 'password' }}"
[type]="showPassword ? 'text' : 'password'"
formControlName="masterPassword"
appAutofocus
/>

View File

@@ -34,7 +34,7 @@
<input
id="register-form_input_master-password"
bitInput
type="{{ showPassword ? 'text' : 'password' }}"
[type]="showPassword ? 'text' : 'password'"
formControlName="masterPassword"
/>
<button type="button" bitSuffix bitButton (click)="togglePassword()">
@@ -65,7 +65,7 @@
<input
id="register-form_input_confirm-master-password"
bitInput
type="{{ showPassword ? 'text' : 'password' }}"
[type]="showPassword ? 'text' : 'password'"
formControlName="confirmMasterPassword"
/>
<button type="button" bitSuffix bitButton (click)="togglePassword()">

View File

@@ -55,7 +55,7 @@
<!-- Teams & Enterprise Body -->
<div *ngIf="layout === 'teams1' || layout === 'teams2' || layout === 'enterprise2'">
<h1>
Start Your <span *ngIf="layout === 'teams1' || layout === 'teams1'">Teams<br /></span
Start Your <span *ngIf="layout === 'teams1'">Teams<br /></span
><span *ngIf="layout === 'enterprise2'">Enterprise</span> Free Trial Now
</h1>
<h2>

View File

@@ -1,5 +1,7 @@
import { CdkStepper } from "@angular/cdk/stepper";
import { Component, Input } from "@angular/core";
import { Component, Input, QueryList } from "@angular/core";
import { VerticalStep } from "./vertical-step.component";
@Component({
selector: "app-vertical-stepper",
@@ -7,6 +9,8 @@ import { Component, Input } from "@angular/core";
providers: [{ provide: CdkStepper, useExisting: VerticalStepperComponent }],
})
export class VerticalStepperComponent extends CdkStepper {
readonly steps: QueryList<VerticalStep>;
@Input()
activeClass = "active";

View File

@@ -80,7 +80,7 @@
</ng-container>
<ng-container *ngIf="selectedProviderType === providerType.WebAuthn">
<div id="web-authn-frame" class="mb-3">
<iframe id="webauthn_iframe" [allow]="webAuthnAllow"></iframe>
<iframe id="webauthn_iframe" [attr.allow]="webAuthnAllow"></iframe>
</div>
</ng-container>
<ng-container

View File

@@ -4,6 +4,7 @@ import { map, Observable } from "rxjs";
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
import {
canAccessAdmin,
isNotProviderUser,
OrganizationService,
} from "@bitwarden/common/abstractions/organization/organization.service.abstraction";
import { Utils } from "@bitwarden/common/misc/utils";
@@ -23,6 +24,7 @@ export class OrganizationSwitcherComponent implements OnInit {
async ngOnInit() {
this.organizations$ = this.organizationService.organizations$.pipe(
map((orgs) => orgs.filter(isNotProviderUser)),
canAccessAdmin(this.i18nService),
map((orgs) => orgs.sort(Utils.getSortFunction(this.i18nService, "name")))
);

View File

@@ -0,0 +1,46 @@
<ng-container *ngIf="!usesKeyConnector">
<label for="masterPassword">{{ "masterPass" | i18n }}</label>
<input
id="masterPassword"
type="password"
name="MasterPasswordHash"
class="form-control"
[formControl]="secret"
required
appAutofocus
appInputVerbatim
/>
<small class="form-text text-muted">{{ "confirmIdentity" | i18n }}</small>
</ng-container>
<ng-container *ngIf="usesKeyConnector">
<div class="form-group">
<label class="d-block">{{ "sendVerificationCode" | i18n }}</label>
<button
type="button"
class="btn btn-outline-secondary"
(click)="requestOTP()"
[disabled]="disableRequestOTP"
>
{{ "sendCode" | i18n }}
</button>
<span class="ml-2 text-success" role="alert" @sent *ngIf="sentCode">
<i class="bwi bwi-check-circle" aria-hidden="true"></i>
{{ "codeSent" | i18n }}
</span>
</div>
<div class="form-group">
<label for="verificationCode">{{ "verificationCode" | i18n }}</label>
<input
id="verificationCode"
type="input"
name="verificationCode"
class="form-control"
[formControl]="secret"
required
appAutofocus
appInputVerbatim
/>
<small class="form-text text-muted">{{ "confirmIdentity" | i18n }}</small>
</div>
</ng-container>

View File

@@ -0,0 +1,23 @@
import { animate, style, transition, trigger } from "@angular/animations";
import { Component } from "@angular/core";
import { NG_VALUE_ACCESSOR } from "@angular/forms";
import { UserVerificationComponent as BaseComponent } from "@bitwarden/angular/components/user-verification.component";
@Component({
selector: "app-user-verification",
templateUrl: "user-verification.component.html",
providers: [
{
provide: NG_VALUE_ACCESSOR,
multi: true,
useExisting: UserVerificationComponent,
},
],
animations: [
trigger("sent", [
transition(":enter", [style({ opacity: 0 }), animate("100ms", style({ opacity: 1 }))]),
]),
],
})
export class UserVerificationComponent extends BaseComponent {}

View File

@@ -0,0 +1,115 @@
import { WebPlatformUtilsService } from "./web-platform-utils.service";
describe("Web Platform Utils Service", () => {
let webPlatformUtilsService: WebPlatformUtilsService;
beforeEach(() => {
webPlatformUtilsService = new WebPlatformUtilsService(null, null, null);
});
afterEach(() => {
delete process.env.APPLICATION_VERSION;
});
describe("getApplicationVersion", () => {
test("null", async () => {
delete process.env.APPLICATION_VERSION;
const result = await webPlatformUtilsService.getApplicationVersion();
expect(result).toBe("-");
});
test("<empty>", async () => {
process.env.APPLICATION_VERSION = "";
const result = await webPlatformUtilsService.getApplicationVersion();
expect(result).toBe("-");
});
test("{version number}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2";
const result = await webPlatformUtilsService.getApplicationVersion();
expect(result).toBe("2022.10.2");
});
test("{version number} - {git hash}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2 - 5f8c1c1";
const result = await webPlatformUtilsService.getApplicationVersion();
expect(result).toBe("2022.10.2 - 5f8c1c1");
});
test("{version number}-{git hash}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2-5f8c1c1";
const result = await webPlatformUtilsService.getApplicationVersion();
expect(result).toBe("2022.10.2-5f8c1c1");
});
test("{version number} + {git hash}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2 + 5f8c1c1";
const result = await webPlatformUtilsService.getApplicationVersion();
expect(result).toBe("2022.10.2 + 5f8c1c1");
});
test("{version number}+{git hash}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2+5f8c1c1";
const result = await webPlatformUtilsService.getApplicationVersion();
expect(result).toBe("2022.10.2+5f8c1c1");
});
});
describe("getApplicationVersionNumber", () => {
test("null", async () => {
delete process.env.APPLICATION_VERSION;
const result = await webPlatformUtilsService.getApplicationVersionNumber();
expect(result).toBe("");
});
test("<empty>", async () => {
process.env.APPLICATION_VERSION = "";
const result = await webPlatformUtilsService.getApplicationVersionNumber();
expect(result).toBe("");
});
test("{version number}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2";
const result = await webPlatformUtilsService.getApplicationVersionNumber();
expect(result).toBe("2022.10.2");
});
test("{version number} - {git hash}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2 - 5f8c1c1";
const result = await webPlatformUtilsService.getApplicationVersionNumber();
expect(result).toBe("2022.10.2");
});
test("{version number}-{git hash}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2-5f8c1c1";
const result = await webPlatformUtilsService.getApplicationVersionNumber();
expect(result).toBe("2022.10.2");
});
test("{version number} + {git hash}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2 + 5f8c1c1";
const result = await webPlatformUtilsService.getApplicationVersionNumber();
expect(result).toBe("2022.10.2");
});
test("{version number}+{git hash}", async () => {
process.env.APPLICATION_VERSION = "2022.10.2+5f8c1c1";
const result = await webPlatformUtilsService.getApplicationVersionNumber();
expect(result).toBe("2022.10.2");
});
});
});

View File

@@ -108,6 +108,10 @@ export class WebPlatformUtilsService implements PlatformUtilsService {
return Promise.resolve(process.env.APPLICATION_VERSION || "-");
}
async getApplicationVersionNumber(): Promise<string> {
return (await this.getApplicationVersion()).split(RegExp("[+|-]"))[0].trim();
}
supportsWebAuthn(win: Window): boolean {
return typeof PublicKeyCredential !== "undefined";
}

View File

@@ -1,10 +1,11 @@
import { Component, OnInit } from "@angular/core";
import { Observable } from "rxjs";
import { map, Observable } from "rxjs";
import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
import { MessagingService } from "@bitwarden/common/abstractions/messaging.service";
import {
canAccessAdmin,
isNotProviderUser,
OrganizationService,
} from "@bitwarden/common/abstractions/organization/organization.service.abstraction";
import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service";
@@ -54,6 +55,7 @@ export class NavbarComponent implements OnInit {
this.providers = await this.providerService.getAll();
this.organizations$ = this.organizationService.organizations$.pipe(
map((orgs) => orgs.filter(isNotProviderUser)),
canAccessAdmin(this.i18nService)
);
}

View File

@@ -44,7 +44,7 @@
class="btn btn-outline-secondary btn-submit"
(click)="reinstate()"
[appApiAction]="reinstatePromise"
[disabled]="reinstateBtn.loading"
[disabled]="$any(reinstateBtn).loading"
>
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>
<span>{{ "reinstateSubscription" | i18n }}</span>
@@ -113,8 +113,8 @@
</button>
<app-change-plan
[organizationId]="organizationId"
(onChanged)="closeChangePlan(true)"
(onCanceled)="closeChangePlan(false)"
(onChanged)="closeChangePlan()"
(onCanceled)="closeChangePlan()"
*ngIf="showChangePlan"
></app-change-plan>
</ng-container>
@@ -143,7 +143,7 @@
class="btn btn-outline-danger btn-submit"
(click)="removeSponsorship()"
[appApiAction]="removeSponsorshipPromise"
[disabled]="removeSponsorshipBtn.loading"
[disabled]="$any(removeSponsorshipBtn).loading"
*ngIf="isSponsoredSubscription"
>
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>
@@ -230,7 +230,7 @@
class="btn btn-outline-danger btn-submit ml-1"
(click)="cancel()"
[appApiAction]="cancelPromise"
[disabled]="cancelBtn.loading"
[disabled]="$any(cancelBtn).loading"
*ngIf="subscription && !subscription.cancelled && !subscriptionMarkedForCancel"
>
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>

View File

@@ -53,11 +53,13 @@
<div class="tw-flex tw-flex-col">
<div class="tw-text-sm">
{{ item.labelName }}
<span *ngIf="item.status == 0" bitBadge badgeType="secondary">
<span *ngIf="$any(item).status == 0" bitBadge badgeType="secondary">
{{ "invited" | i18n }}
</span>
</div>
<div class="tw-text-xs tw-text-muted" *ngIf="item.status != 0">{{ item.email }}</div>
<div class="tw-text-xs tw-text-muted" *ngIf="$any(item).status != 0">
{{ $any(item).email }}
</div>
</div>
</div>
@@ -110,11 +112,11 @@
</td>
<td bitCell *ngIf="showMemberRoles">
{{ item.role | userType: "-" }}
{{ $any(item).role | userType: "-" }}
</td>
<td bitCell *ngIf="showGroupColumn">
{{ item.viaGroupName ?? "-" }}
{{ $any(item).viaGroupName ?? "-" }}
</td>
<td bitCell>

View File

@@ -81,7 +81,7 @@
<td class="table-list-checkbox" (click)="check(g)">
<input
type="checkbox"
[(ngModel)]="g.checked"
[(ngModel)]="$any(g).checked"
name="Groups[{{ i }}].Checked"
[disabled]="g.accessAll || !this.canSave"
appStopProp
@@ -101,17 +101,17 @@
<td class="text-center">
<input
type="checkbox"
[(ngModel)]="g.hidePasswords"
[(ngModel)]="$any(g).hidePasswords"
name="Groups[{{ i }}].HidePasswords"
[disabled]="!g.checked || g.accessAll || !this.canSave"
[disabled]="!$any(g).checked || g.accessAll || !this.canSave"
/>
</td>
<td class="text-center">
<input
type="checkbox"
[(ngModel)]="g.readOnly"
[(ngModel)]="$any(g).readOnly"
name="Groups[{{ i }}].ReadOnly"
[disabled]="!g.checked || g.accessAll || !this.canSave"
[disabled]="!$any(g).checked || g.accessAll || !this.canSave"
/>
</td>
</tr>
@@ -140,17 +140,17 @@
class="btn btn-outline-danger"
appA11yTitle="{{ 'delete' | i18n }}"
*ngIf="editMode"
[disabled]="deleteBtn.loading"
[disabled]="$any(deleteBtn).loading"
[appApiAction]="deletePromise"
>
<i
class="bwi bwi-trash bwi-lg bwi-fw"
[hidden]="deleteBtn.loading"
[hidden]="$any(deleteBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
[hidden]="!deleteBtn.loading"
[hidden]="!$any(deleteBtn).loading"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>

View File

@@ -52,11 +52,11 @@
type="button"
class="btn btn-sm btn-outline-primary ml-3"
(click)="loadEvents(true)"
[disabled]="loaded && refreshBtn.loading"
[disabled]="loaded && $any(refreshBtn).loading"
>
<i
class="bwi bwi-refresh bwi-fw"
[ngClass]="{ 'bwi-spin': loaded && refreshBtn.loading }"
[ngClass]="{ 'bwi-spin': loaded && $any(refreshBtn).loading }"
aria-hidden="true"
></i>
{{ "refresh" | i18n }}
@@ -101,7 +101,7 @@
type="button"
class="btn btn-block btn-link btn-submit"
(click)="loadEvents(false)"
[disabled]="loaded && moreBtn.loading"
[disabled]="loaded && $any(moreBtn).loading"
*ngIf="continuationToken"
>
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>

View File

@@ -95,7 +95,7 @@
bitButton
buttonType="primary"
(click)="loadEvents(false)"
[disabled]="loaded && moreBtn.loading"
[disabled]="loaded && $any(moreBtn).loading"
*ngIf="continuationToken"
>
<i

View File

@@ -119,7 +119,7 @@
<td class="table-list-checkbox" (click)="check(c)">
<input
type="checkbox"
[(ngModel)]="c.checked"
[(ngModel)]="$any(c).checked"
name="Collection[{{ i }}].Checked"
appStopProp
/>
@@ -132,7 +132,7 @@
type="checkbox"
[(ngModel)]="c.hidePasswords"
name="Collection[{{ i }}].HidePasswords"
[disabled]="!c.checked"
[disabled]="!$any(c).checked"
/>
</td>
<td class="text-center">
@@ -140,7 +140,7 @@
type="checkbox"
[(ngModel)]="c.readOnly"
name="Collection[{{ i }}].ReadOnly"
[disabled]="!c.checked"
[disabled]="!$any(c).checked"
/>
</td>
</tr>
@@ -164,17 +164,17 @@
class="btn btn-outline-danger"
appA11yTitle="{{ 'delete' | i18n }}"
*ngIf="editMode"
[disabled]="deleteBtn.loading"
[disabled]="$any(deleteBtn).loading"
[appApiAction]="deletePromise"
>
<i
class="bwi bwi-trash bwi-lg bwi-fw"
[hidden]="deleteBtn.loading"
[hidden]="$any(deleteBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
[hidden]="!deleteBtn.loading"
[hidden]="!$any(deleteBtn).loading"
aria-hidden="true"
title="{{ 'loading' | i18n }}"
></i>

View File

@@ -341,7 +341,7 @@
<td class="table-list-checkbox" (click)="check(c)">
<input
type="checkbox"
[(ngModel)]="c.checked"
[(ngModel)]="$any(c).checked"
name="Collection[{{ i }}].Checked"
appStopProp
/>
@@ -354,7 +354,7 @@
type="checkbox"
[(ngModel)]="c.hidePasswords"
name="Collection[{{ i }}].HidePasswords"
[disabled]="!c.checked"
[disabled]="!$any(c).checked"
/>
</td>
<td class="text-center">
@@ -362,7 +362,7 @@
type="checkbox"
[(ngModel)]="c.readOnly"
name="Collection[{{ i }}].ReadOnly"
[disabled]="!c.checked"
[disabled]="!$any(c).checked"
/>
</td>
</tr>
@@ -416,17 +416,17 @@
class="btn btn-outline-danger"
appA11yTitle="{{ 'delete' | i18n }}"
*ngIf="editMode"
[disabled]="deleteBtn.loading"
[disabled]="$any(deleteBtn).loading"
[appApiAction]="deletePromise"
>
<i
class="bwi bwi-trash bwi-lg bwi-fw"
[hidden]="deleteBtn.loading"
[hidden]="$any(deleteBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
[hidden]="!deleteBtn.loading"
[hidden]="!$any(deleteBtn).loading"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>

View File

@@ -34,7 +34,7 @@
<td class="table-list-checkbox" (click)="check(g)">
<input
type="checkbox"
[(ngModel)]="g.checked"
[(ngModel)]="$any(g).checked"
name="Groups[{{ i }}].Checked"
appStopProp
/>

View File

@@ -29,7 +29,7 @@ export class PoliciesComponent implements OnInit {
organization: Organization;
private orgPolicies: PolicyResponse[];
private policiesEnabledMap: Map<PolicyType, boolean> = new Map<PolicyType, boolean>();
protected policiesEnabledMap: Map<PolicyType, boolean> = new Map<PolicyType, boolean>();
constructor(
private route: ActivatedRoute,

View File

@@ -18,7 +18,6 @@ import { StateService } from "@bitwarden/common/abstractions/state.service";
import { TotpService } from "@bitwarden/common/abstractions/totp.service";
import { CipherData } from "@bitwarden/common/models/data/cipher.data";
import { Cipher } from "@bitwarden/common/models/domain/cipher";
import { Organization } from "@bitwarden/common/models/domain/organization";
import { CipherCreateRequest } from "@bitwarden/common/models/request/cipher-create.request";
import { CipherRequest } from "@bitwarden/common/models/request/cipher.request";
@@ -29,7 +28,6 @@ import { AddEditComponent as BaseAddEditComponent } from "../../vault/add-edit.c
templateUrl: "../../vault/add-edit.component.html",
})
export class AddEditComponent extends BaseAddEditComponent {
organization: Organization;
originalCipher: Cipher = null;
constructor(

View File

@@ -12,7 +12,6 @@ import { SearchService } from "@bitwarden/common/abstractions/search.service";
import { StateService } from "@bitwarden/common/abstractions/state.service";
import { TokenService } from "@bitwarden/common/abstractions/token.service";
import { TotpService } from "@bitwarden/common/abstractions/totp.service";
import { Organization } from "@bitwarden/common/models/domain/organization";
import { CipherView } from "@bitwarden/common/models/view/cipher.view";
import { VaultItemsComponent as BaseVaultItemsComponent } from "../../vault/vault-items.component";
@@ -24,9 +23,6 @@ import { VaultItemsComponent as BaseVaultItemsComponent } from "../../vault/vaul
export class VaultItemsComponent extends BaseVaultItemsComponent {
@Output() onEventsClicked = new EventEmitter<CipherView>();
organization: Organization;
accessEvents = false;
protected allCiphers: CipherView[] = [];
constructor(
@@ -86,6 +82,7 @@ export class VaultItemsComponent extends BaseVaultItemsComponent {
async search(timeout: number = null) {
await super.search(timeout, this.allCiphers);
}
events(c: CipherView) {
this.onEventsClicked.emit(c);
}

View File

@@ -19,7 +19,7 @@
<h1>
{{ "vaultItems" | i18n }}
<small #actionSpinner [appApiAction]="vaultItemsComponent.actionPromise">
<ng-container *ngIf="actionSpinner.loading">
<ng-container *ngIf="$any(actionSpinner).loading">
<i
class="bwi bwi-spinner bwi-spin text-muted"
title="{{ 'loading' | i18n }}"

View File

@@ -1,5 +1,6 @@
import { NgModule } from "@angular/core";
import { OrganizationBadgeModule } from "../../vault/organization-badge/organization-badge.module";
import { VaultSharedModule } from "../../vault/shared/vault-shared.module";
import { VaultFilterModule } from "./vault-filter/vault-filter.module";
@@ -8,7 +9,7 @@ import { VaultRoutingModule } from "./vault-routing.module";
import { VaultComponent } from "./vault.component";
@NgModule({
imports: [VaultSharedModule, VaultRoutingModule, VaultFilterModule],
imports: [VaultSharedModule, VaultRoutingModule, VaultFilterModule, OrganizationBadgeModule],
declarations: [VaultComponent, VaultItemsComponent],
exports: [VaultComponent],
})

View File

@@ -8,6 +8,7 @@ import { PasswordRepromptService } from "@bitwarden/common/abstractions/password
import { StateService } from "@bitwarden/common/abstractions/state.service";
import { CipherType } from "@bitwarden/common/enums/cipherType";
import { CipherView } from "@bitwarden/common/models/view/cipher.view";
import { BadgeTypes } from "@bitwarden/components";
import { CipherReportComponent } from "./cipher-report.component";
@@ -16,7 +17,7 @@ import { CipherReportComponent } from "./cipher-report.component";
templateUrl: "weak-passwords-report.component.html",
})
export class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {
passwordStrengthMap = new Map<string, [string, string]>();
passwordStrengthMap = new Map<string, [string, BadgeTypes]>();
private passwordStrengthCache = new Map<string, number>();
@@ -110,7 +111,7 @@ export class WeakPasswordsReportComponent extends CipherReportComponent implemen
return true;
}
private scoreKey(score: number): [string, string] {
private scoreKey(score: number): [string, BadgeTypes] {
switch (score) {
case 4:
return ["strong", "success"];

View File

@@ -1,5 +1,7 @@
import { Component, Input } from "@angular/core";
import { Icon } from "@bitwarden/components";
import { ReportVariant } from "../models/report-variant";
@Component({
@@ -10,7 +12,7 @@ export class ReportCardComponent {
@Input() title: string;
@Input() description: string;
@Input() route: string;
@Input() icon: string;
@Input() icon: Icon;
@Input() variant: ReportVariant;
protected get disabled() {

View File

@@ -81,7 +81,7 @@
id="text"
rows="8"
name="Text"
[(ngModel)]="sendText"
[ngModel]="sendText"
class="form-control"
readonly
></textarea>

View File

@@ -55,7 +55,7 @@
name="Type_{{ o.value }}"
id="type_{{ o.value }}"
[value]="o.value"
(change)="typeChanged(o)"
(change)="typeChanged()"
[checked]="send.type === o.value"
/>
<label class="form-check-label" for="type_{{ o.value }}">
@@ -120,14 +120,7 @@
<h3 class="mt-5">{{ "share" | i18n }}</h3>
<div class="form-group" *ngIf="link">
<label for="link">{{ "sendLinkLabel" | i18n }}</label>
<input
type="text"
readonly
id="link"
name="Link"
[(ngModel)]="link"
class="form-control"
/>
<input type="text" readonly id="link" name="Link" [ngModel]="link" class="form-control" />
</div>
<div class="form-group">
<div class="form-check">
@@ -286,17 +279,17 @@
class="btn btn-outline-danger"
appA11yTitle="{{ 'delete' | i18n }}"
*ngIf="editMode"
[disabled]="deleteBtn.loading"
[disabled]="$any(deleteBtn).loading"
[appApiAction]="deletePromise"
>
<i
class="bwi bwi-trash bwi-lg bwi-fw"
[hidden]="deleteBtn.loading"
[hidden]="$any(deleteBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
[hidden]="!deleteBtn.loading"
[hidden]="!$any(deleteBtn).loading"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>

View File

@@ -13,7 +13,6 @@
formControlName="fallbackDeletionDate"
required
placeholder="MM/DD/YYYY"
[readOnly]="disableSend"
data-date-format="mm/dd/yyyy"
/>
<input
@@ -24,7 +23,6 @@
formControlName="fallbackDeletionTime"
required
placeholder="HH:MM AM/PM"
[readOnly]="disableSend"
/>
</div>
</ng-container>
@@ -38,7 +36,6 @@
formControlName="fallbackDeletionDate"
required
placeholder="MM/DD/YYYY"
[readOnly]="disableSend"
data-date-format="mm/dd/yyyy"
/>
<select

View File

@@ -59,7 +59,7 @@
<h1>
{{ "send" | i18n }}
<small #actionSpinner [appApiAction]="actionPromise">
<ng-container *ngIf="actionSpinner.loading">
<ng-container *ngIf="$any(actionSpinner).loading">
<i
class="bwi bwi-spinner bwi-spin text-muted"
title="{{ 'loading' | i18n }}"

View File

@@ -121,16 +121,16 @@
(click)="delete()"
appA11yTitle="{{ 'delete' | i18n }}"
*ngIf="editMode"
[disabled]="deleteBtn.loading"
[disabled]="$any(deleteBtn).loading"
>
<i
class="bwi bwi-trash bwi-lg bwi-fw"
[hidden]="deleteBtn.loading"
[hidden]="$any(deleteBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
[hidden]="!deleteBtn.loading"
[hidden]="!$any(deleteBtn).loading"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>

View File

@@ -240,14 +240,6 @@
{{ "monthAbbr" | i18n }} =
{{ additionalStorageTotal(selectablePlan) | currency: "$" }} /{{ "year" | i18n }}
</small>
<small *ngIf="selectablePlan.hasPremiumAccessOption && premiumAccessAddon">
{{ "premiumAccess" | i18n }}:
{{ selectablePlan.premiumAccessOptionCost / 12 | currency: "$" }} &times; 12
{{ "monthAbbr" | i18n }}
=
{{ 40 | currency: "$" }}
/{{ "year" | i18n }}
</small>
</ng-container>
<ng-container *ngIf="!selectablePlan.isAnnual">
{{ "monthly" | i18n }}
@@ -272,17 +264,6 @@
{{ "monthAbbr" | i18n }} =
{{ additionalStorageTotal(selectablePlan) | currency: "$" }} /{{ "month" | i18n }}
</small>
<small
*ngIf="
selectablePlan.hasPremiumAccessOption &&
formGroup.controls['premiumAccessAddon'].value
"
>
{{ "premiumAccess" | i18n }}:
{{ selectablePlan.premiumAccessOptionCost | currency: "$" }} {{ "monthAbbr" | i18n }} =
{{ 40 | currency: "$" }}
/{{ "month" | i18n }}
</small>
</ng-container>
</label>
</div>

View File

@@ -25,7 +25,7 @@
*ngIf="!isSelfHosted && !sponsoringOrg.familySponsorshipValidUntil"
[appApiAction]="resendEmailPromise"
class="dropdown-item btn-submit"
[disabled]="resendEmailBtn.loading"
[disabled]="$any(resendEmailBtn).loading"
(click)="resendEmail()"
[attr.aria-label]="'resendEmailLabel' | i18n: sponsoringOrg.familySponsorshipFriendlyName"
>
@@ -36,7 +36,7 @@
#revokeSponsorshipBtn
[appApiAction]="revokeSponsorshipPromise"
class="dropdown-item text-danger btn-submit"
[disabled]="revokeSponsorshipBtn.loading"
[disabled]="$any(revokeSponsorshipBtn).loading"
(click)="revokeSponsorship()"
[attr.aria-label]="'revokeAccount' | i18n: sponsoringOrg.familySponsorshipFriendlyName"
>

View File

@@ -18,7 +18,7 @@
<app-two-factor-verify
[organizationId]="organizationId"
[type]="type"
(onAuthed)="auth($event)"
(onAuthed)="auth($any($event))"
*ngIf="!authed"
>
</app-two-factor-verify>

View File

@@ -18,7 +18,7 @@
<app-two-factor-verify
[organizationId]="organizationId"
[type]="type"
(onAuthed)="auth($event)"
(onAuthed)="auth($any($event))"
*ngIf="!authed"
>
</app-two-factor-verify>

View File

@@ -18,7 +18,7 @@
<app-two-factor-verify
[organizationId]="organizationId"
[type]="type"
(onAuthed)="auth($event)"
(onAuthed)="auth($any($event))"
*ngIf="!authed"
>
</app-two-factor-verify>
@@ -61,7 +61,7 @@
class="btn btn-outline-primary btn-sm btn-submit align-self-start"
(click)="sendEmail()"
[appApiAction]="emailPromise"
[disabled]="sendBtn.loading"
[disabled]="$any(sendBtn).loading"
>
<i
class="bwi bwi-spinner bwi-spin"

View File

@@ -15,12 +15,7 @@
<span aria-hidden="true">&times;</span>
</button>
</div>
<app-two-factor-verify
[organizationId]="organizationId"
[type]="type"
(onAuthed)="auth($event)"
*ngIf="!authed"
>
<app-two-factor-verify [type]="type" (onAuthed)="auth($event)" *ngIf="!authed">
</app-two-factor-verify>
<ng-container *ngIf="authed">
<div class="modal-body text-center">

View File

@@ -18,7 +18,7 @@
<app-two-factor-verify
[organizationId]="organizationId"
[type]="type"
(onAuthed)="auth($event)"
(onAuthed)="auth($any($event))"
*ngIf="!authed"
>
</app-two-factor-verify>
@@ -54,7 +54,7 @@
<i class="bwi bwi-li bwi-key"></i>
<strong *ngIf="!k.configured || !k.name">{{ "webAuthnkeyX" | i18n: i + 1 }}</strong>
<strong *ngIf="k.configured && k.name">{{ k.name }}</strong>
<ng-container *ngIf="k.configured && !removeKeyBtn.loading">
<ng-container *ngIf="k.configured && !$any(removeKeyBtn).loading">
<ng-container *ngIf="k.migrated">
<span>{{ "webAuthnMigrated" | i18n }}</span>
</ng-container>
@@ -63,7 +63,7 @@
<i
class="bwi bwi-spin bwi-spinner text-muted bwi-fw"
title="{{ 'loading' | i18n }}"
*ngIf="removeKeyBtn.loading"
*ngIf="$any(removeKeyBtn).loading"
aria-hidden="true"
></i>
-
@@ -96,16 +96,16 @@
type="button"
(click)="readKey()"
class="btn btn-outline-secondary mr-2"
[disabled]="readKeyBtn.loading || webAuthnListening || !keyIdAvailable"
[disabled]="$any(readKeyBtn).loading || webAuthnListening || !keyIdAvailable"
#readKeyBtn
[appApiAction]="challengePromise"
>
{{ "readKey" | i18n }}
</button>
<ng-container *ngIf="readKeyBtn.loading">
<ng-container *ngIf="$any(readKeyBtn).loading">
<i class="bwi bwi-spinner bwi-spin text-muted" aria-hidden="true"></i>
</ng-container>
<ng-container *ngIf="!readKeyBtn.loading">
<ng-container *ngIf="!$any(readKeyBtn).loading">
<ng-container *ngIf="webAuthnListening">
<i class="bwi bwi-spinner bwi-spin text-muted" aria-hidden="true"></i>
{{ "twoFactorU2fWaiting" | i18n }}...
@@ -138,8 +138,7 @@
#disableBtn
type="button"
class="btn btn-outline-secondary btn-submit"
[appApiAction]="disablePromise"
[disabled]="disableBtn.loading"
[disabled]="$any(disableBtn).loading"
(click)="disable()"
*ngIf="enabled"
>

View File

@@ -18,7 +18,7 @@
<app-two-factor-verify
[organizationId]="organizationId"
[type]="type"
(onAuthed)="auth($event)"
(onAuthed)="auth($any($event))"
*ngIf="!authed"
>
</app-two-factor-verify>
@@ -104,7 +104,7 @@
type="button"
class="btn btn-outline-secondary btn-submit"
[appApiAction]="disablePromise"
[disabled]="disableBtn.loading"
[disabled]="$any(disableBtn).loading"
(click)="disable()"
*ngIf="enabled"
>

View File

@@ -46,7 +46,7 @@
class="btn-submit"
(click)="reinstate()"
[appApiAction]="reinstatePromise"
[disabled]="reinstateBtn.loading"
[disabled]="$any(reinstateBtn).loading"
>
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>
<span>{{ "reinstateSubscription" | i18n }}</span>
@@ -147,7 +147,7 @@
class="btn-submit tw-ml-auto"
(click)="cancel()"
[appApiAction]="cancelPromise"
[disabled]="cancelBtn.loading"
[disabled]="$any(cancelBtn).loading"
*ngIf="subscription && !subscription.cancelled && !subscriptionMarkedForCancel"
>
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>

View File

@@ -9,7 +9,7 @@
class="btn btn-block btn-outline-secondary btn-submit"
#sendBtn
[appApiAction]="actionPromise"
[disabled]="sendBtn.loading"
[disabled]="$any(sendBtn).loading"
(click)="send()"
>
<i class="bwi bwi-spin bwi-spinner" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>

View File

@@ -1,7 +1,5 @@
import { NgModule } from "@angular/core";
import { UserVerificationComponent } from "@bitwarden/angular/components/user-verification.component";
import { AcceptEmergencyComponent } from "../accounts/accept-emergency.component";
import { AcceptOrganizationComponent } from "../accounts/accept-organization.component";
import { HintComponent } from "../accounts/hint.component";
@@ -24,6 +22,7 @@ import { OrganizationSwitcherComponent } from "../components/organization-switch
import { PasswordRepromptComponent } from "../components/password-reprompt.component";
import { PremiumBadgeComponent } from "../components/premium-badge.component";
import { UserVerificationPromptComponent } from "../components/user-verification-prompt.component";
import { UserVerificationComponent } from "../components/user-verification.component";
import { FooterComponent } from "../layouts/footer.component";
import { FrontendLayoutComponent } from "../layouts/frontend-layout.component";
import { NavbarComponent } from "../layouts/navbar.component";
@@ -124,7 +123,6 @@ import { BulkRestoreComponent } from "../vault/bulk-restore.component";
import { BulkShareComponent } from "../vault/bulk-share.component";
import { CollectionsComponent } from "../vault/collections.component";
import { FolderAddEditComponent } from "../vault/folder-add-edit.component";
import { OrganizationBadgeModule } from "../vault/organization-badge/organization-badge.module";
import { ShareComponent } from "../vault/share.component";
import { VaultFilterModule } from "../vault/vault-filter/vault-filter.module";
@@ -133,13 +131,7 @@ import { SharedModule } from ".";
// Please do not add to this list of declarations - we should refactor these into modules when doing so makes sense until there are none left.
// If you are building new functionality, please create or extend a feature module instead.
@NgModule({
imports: [
SharedModule,
VaultFilterModule,
OrganizationBadgeModule,
OrganizationCreateModule,
RegisterFormModule,
],
imports: [SharedModule, VaultFilterModule, OrganizationCreateModule, RegisterFormModule],
declarations: [
PremiumBadgeComponent,
AcceptEmergencyComponent,

View File

@@ -299,7 +299,7 @@
id="duckduckgo-apikey"
class="form-control"
type="password"
name="DuckDudkGoApiKey"
name="DuckDuckGoApiKey"
[(ngModel)]="usernameOptions.forwardedDuckDuckGoToken"
(blur)="saveUsernameOptions()"
/>
@@ -408,7 +408,7 @@
type="button"
class="btn btn-submit btn-primary"
(click)="regenerate()"
[disabled]="form.loading"
[disabled]="$any(form).loading"
>
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>
<span>{{ "regenerateUsername" | i18n }}</span>

View File

@@ -89,7 +89,7 @@
<bit-label>{{ "filePassword" | i18n }}</bit-label>
<input
bitInput
type="{{ showFilePassword ? 'text' : 'password' }}"
[type]="showFilePassword ? 'text' : 'password'"
id="filePassword"
formControlName="filePassword"
name="password"
@@ -123,7 +123,7 @@
<bit-label>{{ "confirmFilePassword" | i18n }}</bit-label>
<input
bitInput
type="{{ showConfirmFilePassword ? 'text' : 'password' }}"
[type]="showConfirmFilePassword ? 'text' : 'password'"
id="confirmFilePassword"
formControlName="confirmFilePassword"
name="confirmFilePassword"
@@ -157,7 +157,8 @@
<button
type="submit"
class="btn btn-primary btn-submit"
[disabled]="form.loading || disabled"
[disabled]="form.loading || disabledByPolicy"
[ngClass]="{ manual: disabledByPolicy }"
>
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>
<span>{{ "confirmFormat" | i18n }}</span>

View File

@@ -19,7 +19,7 @@
<input
bitInput
required
type="{{ showFilePassword ? 'text' : 'password' }}"
[type]="showFilePassword ? 'text' : 'password'"
name="filePassword"
[formControl]="filePassword"
appAutofocus

View File

@@ -80,11 +80,13 @@
right) and select "Settings". Go to "Export" and find the "Export to .csv File" option. Click
"Export" to save the CSV file.
</ng-container>
<!--
<ng-container *ngIf="format === 'keeperjson'">
Log into the Keeper web vault (keepersecurity.com/vault). Click on your "account email" (top
right) and select "Settings". Go to "Export" and find the "Export to .json File" option. Click
"Export" to save the JSON file.
</ng-container>
-->
<ng-container
*ngIf="format === 'chromecsv' || format === 'operacsv' || format === 'vivaldicsv'"
>

View File

@@ -122,8 +122,8 @@
[(ngModel)]="f.value"
*ngIf="f.type === fieldType.Boolean"
appTrueFalseValue
trueValue="true"
falseValue="false"
[trueValue]="true"
[falseValue]="false"
[disabled]="cipher.isDeleted || viewOnly"
attr.aria-describedby="fieldName{{ i }}"
/>

View File

@@ -118,13 +118,13 @@
>
<i
class="bwi bwi-lg bwi-fw bwi-check-circle"
[hidden]="checkPasswordBtn.loading"
[hidden]="$any(checkPasswordBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-lg bwi-fw bwi-spinner bwi-spin"
aria-hidden="true"
[hidden]="!checkPasswordBtn.loading"
[hidden]="!$any(checkPasswordBtn).loading"
title="{{ 'loading' | i18n }}"
></i>
</a>
@@ -838,7 +838,7 @@
<input
class="form-check-input"
type="checkbox"
[(ngModel)]="c.checked"
[(ngModel)]="$any(c).checked"
id="collection-{{ i }}"
name="Collection[{{ i }}].Checked"
[disabled]="cipher.isDeleted || viewOnly"
@@ -935,17 +935,17 @@
class="btn btn-outline-danger"
appA11yTitle="{{ (cipher.isDeleted ? 'permanentlyDelete' : 'delete') | i18n }}"
*ngIf="editMode && !cloneMode && !(!cipher.edit && editMode)"
[disabled]="deleteBtn.loading"
[disabled]="$any(deleteBtn).loading"
[appApiAction]="deletePromise"
>
<i
class="bwi bwi-trash bwi-lg bwi-fw"
[hidden]="deleteBtn.loading"
[hidden]="$any(deleteBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
[hidden]="!deleteBtn.loading"
[hidden]="!$any(deleteBtn).loading"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>

View File

@@ -26,10 +26,14 @@
<tbody>
<tr *ngFor="let a of cipher.attachments">
<td class="table-list-icon">
<i class="bwi bwi-fw bwi-lg bwi-file" *ngIf="!a.downloading" aria-hidden="true"></i>
<i
class="bwi bwi-fw bwi-lg bwi-file"
*ngIf="!$any(a).downloading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-lg bwi-fw bwi-spin"
*ngIf="a.downloading"
*ngIf="$any(a).downloading"
aria-hidden="true"
></i>
</td>
@@ -55,7 +59,7 @@
(click)="reupload(a)"
#reuploadBtn
[appApiAction]="reuploadPromises[a.id]"
[disabled]="reuploadBtn.loading"
[disabled]="$any(reuploadBtn).loading"
>
{{ "fix" | i18n }}
</button>
@@ -72,16 +76,16 @@
(click)="delete(a)"
#deleteBtn
[appApiAction]="deletePromises[a.id]"
[disabled]="deleteBtn.loading"
[disabled]="$any(deleteBtn).loading"
>
<i
class="bwi bwi-trash bwi-lg bwi-fw"
[hidden]="deleteBtn.loading"
[hidden]="$any(deleteBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
[hidden]="!deleteBtn.loading"
[hidden]="!$any(deleteBtn).loading"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>

View File

@@ -54,7 +54,7 @@
<td class="table-list-checkbox">
<input
type="checkbox"
[(ngModel)]="c.checked"
[(ngModel)]="$any(c).checked"
name="Collection[{{ i }}].Checked"
appStopProp
/>

View File

@@ -37,7 +37,7 @@
<td class="table-list-checkbox">
<input
type="checkbox"
[(ngModel)]="c.checked"
[(ngModel)]="$any(c).checked"
name="Collection[{{ i }}].Checked"
appStopProp
/>

View File

@@ -46,17 +46,17 @@
class="btn btn-outline-danger"
appA11yTitle="{{ 'delete' | i18n }}"
*ngIf="editMode"
[disabled]="deleteBtn.loading"
[disabled]="$any(deleteBtn).loading"
[appApiAction]="deletePromise"
>
<i
class="bwi bwi-trash bwi-lg bwi-fw"
[hidden]="deleteBtn.loading"
[hidden]="$any(deleteBtn).loading"
aria-hidden="true"
></i>
<i
class="bwi bwi-spinner bwi-spin bwi-lg bwi-fw"
[hidden]="!deleteBtn.loading"
[hidden]="!$any(deleteBtn).loading"
title="{{ 'loading' | i18n }}"
aria-hidden="true"
></i>

View File

@@ -167,7 +167,6 @@
<i
*ngIf="!organization.enabled"
class="org-options bwi bwi-fw bwi-exclamation-triangle text-danger"
aria-label="{{ 'organizationIsDisabled' | i18n }}"
appA11yTitle="{{ 'organizationIsDisabled' | i18n }}"
></i
><button [bitMenuTriggerFor]="orgMenu" class="org-options">

View File

@@ -1,6 +1,9 @@
import { NgModule } from "@angular/core";
import { SharedModule } from "../../../shared";
import { LinkSsoComponent } from "../organization-filter/link-sso.component";
import { OrganizationFilterComponent } from "../organization-filter/organization-filter.component";
import { OrganizationOptionsComponent } from "../organization-filter/organization-options.component";
import { CollectionFilterComponent } from "./collection-filter/collection-filter.component";
import { FolderFilterComponent } from "./folder-filter/folder-filter.component";
@@ -15,6 +18,9 @@ import { VaultFilterService } from "./vault-filter.service";
FolderFilterComponent,
StatusFilterComponent,
TypeFilterComponent,
OrganizationFilterComponent,
OrganizationOptionsComponent,
LinkSsoComponent,
],
exports: [
SharedModule,
@@ -22,6 +28,9 @@ import { VaultFilterService } from "./vault-filter.service";
FolderFilterComponent,
StatusFilterComponent,
TypeFilterComponent,
OrganizationFilterComponent,
OrganizationOptionsComponent,
LinkSsoComponent,
],
providers: [VaultFilterService],
})

View File

@@ -1,19 +1,11 @@
import { NgModule } from "@angular/core";
import { LinkSsoComponent } from "./organization-filter/link-sso.component";
import { OrganizationFilterComponent } from "./organization-filter/organization-filter.component";
import { OrganizationOptionsComponent } from "./organization-filter/organization-options.component";
import { VaultFilterSharedModule } from "./shared/vault-filter-shared.module";
import { VaultFilterComponent } from "./vault-filter.component";
@NgModule({
imports: [VaultFilterSharedModule],
declarations: [
VaultFilterComponent,
OrganizationFilterComponent,
OrganizationOptionsComponent,
LinkSsoComponent,
],
declarations: [VaultFilterComponent],
exports: [VaultFilterComponent],
})
export class VaultFilterModule {}

View File

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

View File

@@ -289,6 +289,10 @@ export class VaultItemsComponent extends BaseVaultItemsComponent implements OnDe
this.onOrganzationBadgeClicked.emit(organizationId);
}
events(c: CipherView) {
// TODO: This should be removed but is needed since we reuse the same template
}
protected deleteCipher(id: string, permanent: boolean) {
return permanent
? this.cipherService.deleteWithServer(id)

View File

@@ -21,7 +21,7 @@
<h1>
{{ "vaultItems" | i18n }}
<small #actionSpinner [appApiAction]="vaultItemsComponent.actionPromise">
<ng-container *ngIf="actionSpinner.loading">
<ng-container *ngIf="$any(actionSpinner).loading">
<i
class="bwi bwi-spinner bwi-spin text-muted"
title="{{ 'loading' | i18n }}"

View File

@@ -3668,7 +3668,7 @@
"message": "Skjul adgangskoder"
},
"countryPostalCodeRequiredDesc": {
"message": "Vi benytter udelukkende disse oplysninger til beregning af moms og finansiel rapportering."
"message": "Disse oplysninger benyttes udelukkende til momsberegning og finansiel rapportering."
},
"includeVAT": {
"message": "Inkludér momsoplysninger (valgfrit)"
@@ -3731,31 +3731,31 @@
"message": "Tilknyt SSO"
},
"singleOrg": {
"message": "Enkel organisation"
"message": "Enkeltorganisation"
},
"singleOrgDesc": {
"message": "Begræns medlemmer fra at blive medlem af andre organisationer."
"message": "Begræns medlemmer i at tilmelde sig andre organisationer."
},
"singleOrgBlockCreateMessage": {
"message": "Den nuværende organisationspolitik tillader dig ikke at deltage i mere end én organisation. Kontakt organisationsadministratorerne eller benyt en anden Bitwarden-konto under tilmelding."
"message": "Den nuværende organisationspolitik tillader dig ikke at deltage i mere end én organisation. Kontakt organisationens admins eller benyt en anden Bitwarden-konto under tilmelding."
},
"singleOrgPolicyWarning": {
"message": "Organisationsmedlemmer, som ikke er ejere eller admins og allerede medlem af en anden organisation, fjernes fra organisationen."
"message": "Organisationsmedlemmer, undtagen ejere eller admins, som allerede er medlem af en anden organisation, fjernes fra organisationen."
},
"requireSso": {
"message": "Kræv single sign-on godkendelse"
},
"requireSsoPolicyDesc": {
"message": "Kræv at medlemmer logger ind vha. Virksomheds single sign-on metoden."
"message": "Kræv, at medlemmer logger ind vha. Virksomheds single sign-on metoden."
},
"prerequisite": {
"message": "Forudsætning"
},
"requireSsoPolicyReq": {
"message": "Enkel organisation virksomhedspolitikken skal være aktiveret, før denne politik aktiveres."
"message": "Enkeltorganisations Virksomhedspolitik skal være aktiveret, før denne politik aktiveres."
},
"requireSsoPolicyReqError": {
"message": "Single organization-politik er ikke opsat."
"message": "Enkeltorganisationspolitik er ikke opsat."
},
"requireSsoExemption": {
"message": "Denne politik håndhæves ikke for organisationsejere og -admins."
@@ -3791,7 +3791,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"deleteSendConfirmation": {
"message": "Er du sikker på, at du vil slette denne Send?",
"message": "Sikker på, at denne Send skal slettes?",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"whatTypeOfSend": {
@@ -3802,7 +3802,7 @@
"message": "Sletningsdato"
},
"deletionDateDesc": {
"message": "Send slettes permanent på den angivne dato og tidspunkt.",
"message": "Denne Send slettes permanent på den angivne dato og tidspunkt.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"expirationDate": {
@@ -3837,7 +3837,7 @@
"message": "Tilbagekaldt"
},
"sendLink": {
"message": "Send link",
"message": "Send-link",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"copySendLink": {
@@ -3851,7 +3851,7 @@
"message": "Adgangskode fjernet"
},
"removePasswordConfirmation": {
"message": "Er du sikker på, at du vil fjerne adgangskoden?"
"message": "Sikker på, at adgangskoden skal fjernes?"
},
"hideEmail": {
"message": "Skjul min e-mailadresse for modtagere."
@@ -3878,7 +3878,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendProtectedPassword": {
"message": "Denne Send er beskyttet med en adgangskode. Indtast adgangskoden nedenfor for at fortsætte.",
"message": "Denne Send er adgangskodebeskyttet. Angiv adgangskoden nedenfor for at fortsætte.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendProtectedPasswordDontKnow": {
@@ -3893,11 +3893,11 @@
"message": "Download fil"
},
"sendAccessUnavailable": {
"message": "Den Send, du forsøger at tilgå, findes ikke eller er ikke længere tilgængelig.",
"message": "Den Send, der forsøges tilgået, findes ikke, eller er ikke længere tilgængelig.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"missingSendFile": {
"message": "Filen, der er knyttet til denne Send, blev ikke fundet.",
"message": "Filen tilknyttet denne Send kunne ikke findes.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"noSendsInList": {
@@ -3908,7 +3908,7 @@
"message": "Nødadgang"
},
"emergencyAccessDesc": {
"message": "Tildel og håndtér nødadgang for betroede kontakter. Betroede kontakter kan anmode om adgang til enten at se eller overtage din konto i nødstilfælde. Besøg vores hjælpeside for mere information og detaljer om, hvordan nul-videndeling fungerer."
"message": "Tildel og håndtér nødadgang for betroede kontakter. Betroede kontakter kan anmode om adgang til enten at se eller overtage din konto i nødstilfælde. Besøg vores hjælpeside for mere information og detaljer om, hvordan nul-vidensdeling fungerer."
},
"emergencyAccessOwnerWarning": {
"message": "Du er ejer af en eller flere organisationer. Tildeler du overtagelsesrettighed til en nødkontakt, kan vedkommende bruge alle dine tilladelser som ejer efter en overtagelse."
@@ -3917,7 +3917,7 @@
"message": "Betroede nødkontakter"
},
"noTrustedContacts": {
"message": "Du har endnu ikke tilføjet nødkontakter. Invitér en betroet kontakt for at komme i gang."
"message": "Ingen nødkontakter tilføjet endnu. Invitér en betroet kontakt for at komme i gang."
},
"addEmergencyContact": {
"message": "Tilføj nødkontakt"
@@ -3935,7 +3935,7 @@
"message": "Redigér nødkontakt"
},
"inviteEmergencyContactDesc": {
"message": "Invitér en ny nødkontakt ved at angive e-mailadressen på vedkommendes Bitwarden-konto nedenfor. Har vedkommende ikke allerede en Bitwarden-konto, anmoders vedkommende om at oprette én."
"message": "Invitér en ny nødkontakt ved at angive e-mailadressen på vedkommendes Bitwarden-konto nedenfor. Har vedkommende endnu ikke en Bitwarden-konto, anmoders vedkommende om at oprette en."
},
"emergencyAccessRecoveryInitiated": {
"message": "Nødadgang igangsat"
@@ -3944,7 +3944,7 @@
"message": "Nødadgang godkendt"
},
"viewDesc": {
"message": "Kan se alle elementer i din egen boks."
"message": "Kan se alle emner i din egen boks."
},
"takeover": {
"message": "Overtagelse"
@@ -3995,7 +3995,7 @@
"message": "Anmod om adgang"
},
"requestAccessConfirmation": {
"message": "Er du sikker på, at du vil anmode om nødadgang? Du vil opnå adgang efter $WAITTIME$ dag(e) eller når brugeren godkender anmodningen.",
"message": "Sikker på, at du vil anmode om nødadgang? Du tildeles adgang efter $WAITTIME$ dag(e), eller når brugeren godkender anmodningen.",
"placeholders": {
"waittime": {
"content": "$1",
@@ -4019,7 +4019,7 @@
"message": "Afvis"
},
"approveAccessConfirmation": {
"message": "Er du sikker på, at du vil godkende nødadgang? Dette vil tillade $USER$ at $ACTION$ din konto.",
"message": "Sikker på, at du vil godkende nødadgang? Dette vil tillade $USER$ at $ACTION$ din konto.",
"placeholders": {
"user": {
"content": "$1",
@@ -4035,7 +4035,7 @@
"message": "Nødadgang godkendt"
},
"emergencyRejected": {
"message": "Nødadgang afvist"
"message": "Nødadgang nægtet"
},
"passwordResetFor": {
"message": "Adgangskode nulstillet for $USER$. Du kan nu logge ind med den nye adgangskode.",
@@ -4050,7 +4050,7 @@
"message": "Fjern individuel boks"
},
"personalOwnershipPolicyDesc": {
"message": "Kræv at medlemmer gemmer elementer i en organisation ved at fjerne muligheden for individuelle bokse."
"message": "Kræv, at medlemmer gemmer emner i en organisation ved at fjerne muligheden for individuelle bokse."
},
"personalOwnershipExemption": {
"message": "Organisationsejere og administratorer er undtaget fra denne politik."
@@ -4066,7 +4066,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"disableSendExemption": {
"message": "Organisationsbrugere, der kan håndtere organisationens politikker, er undtaget fra denne politiks håndhævelse."
"message": "Organisationsbrugere, som kan håndtere organisationens politikker, er undtaget fra håndhævelsen af denne politik."
},
"sendDisabled": {
"message": "Send fjernet",
@@ -4085,7 +4085,7 @@
"description": "'Sends' is a plural noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendOptionsExemption": {
"message": "Organisationsbrugere, som kan håndtere organisationens politikker, er undtaget fra denne politiks håndhævelse."
"message": "Organisationsbrugere, som kan håndtere organisationens politikker, er undtaget fra håndhævelsen af denne politik."
},
"disableHideEmail": {
"message": "Vis altid medlemmets e-mailadresse med modtagere, når Sends oprettes eller redigeres.",
@@ -4095,7 +4095,7 @@
"message": "Følgende organisationspolitikker er i øjeblikket gældende:"
},
"sendDisableHideEmailInEffect": {
"message": "Brugere har ikke lov til at skjule deres e-mailadresser for modtagere når en Send oprettes eller redigeres.",
"message": "Brugere har ikke lov til at skjule deres e-mailadresser for modtagere, når en Send oprettes eller redigeres.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"modifiedPolicyId": {
@@ -4108,7 +4108,7 @@
}
},
"planPrice": {
"message": "Abonnementspris"
"message": "Abonnementstypepris"
},
"estimatedTax": {
"message": "Anslået moms"
@@ -4202,17 +4202,17 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendNameDesc": {
"message": "Et venligt navn til at beskrive denne Send.",
"message": "Et logisk navn til at beskrive denne Send.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"sendTextDesc": {
"message": "Den tekst, du vil sende."
"message": "Teksten, du vil sende."
},
"sendFileDesc": {
"message": "Den fil, du vil sende."
"message": "Filen, du vil sende."
},
"copySendLinkOnSave": {
"message": "Kopier linket for at dele denne Send til min udklipsholder ved gem."
"message": "Kopiér linket for at dele denne Send til udklipsholden ved gem."
},
"sendLinkLabel": {
"message": "Send link",
@@ -4266,7 +4266,7 @@
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more about Bitwarden Send or sign up to **try it today.**'"
},
"sendCreatorIdentifier": {
"message": "Bitwarden bruger $USER_IDENTIFIER$ delte følgende med dig",
"message": "Bitwarden-bruger $USER_IDENTIFIER$ delte flg. med dig",
"placeholders": {
"user_identifier": {
"content": "$1",
@@ -4275,7 +4275,7 @@
}
},
"viewSendHiddenEmailWarning": {
"message": "Bitwarden-brugeren, der oprettede denne Send, har valgt at skjule sin e-mailadresse. Du bør sikre dig, at du stoler på kilden til dette link, inden du bruger eller downloader dets indhold.",
"message": "Bitwarden-brugeren, der oprettede denne Send, har valgt at skjule sin e-mailadresse. Du bør sikre dig, at du stoler på kilden til dette link, inden dets indhold downloades/benyttes.",
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"expirationDateIsInvalid": {
@@ -4285,13 +4285,13 @@
"message": "Den angivne sletningsdato er ugyldig."
},
"expirationDateAndTimeRequired": {
"message": "Der kræves en udløbsdato og -tid."
"message": "Udløbsdato og -tidspunkt er obligatorisk."
},
"deletionDateAndTimeRequired": {
"message": "En sletningsdato og -tid er påkrævet."
"message": "Sletningsdato og -tidspunkt er obligatorisk."
},
"dateParsingError": {
"message": "Der opstod en fejl under forsøget på at gemme dine sletnings- og udløbsdatoer."
"message": "En fejl opstod under forsøget på at gemme sletnings- og udløbsdatoer."
},
"webAuthnFallbackMsg": {
"message": "Klik på knappen nedenfor for at bekræfte din 2FA."
@@ -4324,7 +4324,7 @@
"message": "Afmelding lykkedes!"
},
"eventEnrollPasswordReset": {
"message": "Bruger $ID$ tilmeldt hjælp til nulstilling af adgangskode.",
"message": "Bruger $ID$ tilmeldt adgangskodenulstilling.",
"placeholders": {
"id": {
"content": "$1",
@@ -4333,7 +4333,7 @@
}
},
"eventWithdrawPasswordReset": {
"message": "Bruger $ID$ afmeldt hjælp til nulstilling af adgangskode.",
"message": "Bruger $ID$ afmeldt adgangskodenulstilling.",
"placeholders": {
"id": {
"content": "$1",
@@ -4372,7 +4372,7 @@
"message": "Nulstil adgangskode"
},
"resetPasswordLoggedOutWarning": {
"message": "Ved at fortsætte logges $NAME$ ud af sin nuværende session, hvilket kræver, at vedkommende logger ind igen. Aktive sessioner på andre enheder forbliver muligvis aktive i op til en time.",
"message": "Fortsættes, logges der ud af $NAME$s nuværende session (vil kræve genindlogning). Aktive sessioner på andre enheder kan forbliver aktive i op til en time.",
"placeholders": {
"name": {
"content": "$1",
@@ -4384,37 +4384,37 @@
"message": "denne bruger"
},
"resetPasswordMasterPasswordPolicyInEffect": {
"message": "Én eller flere organisationspolitikker kræver, at hovedadgangskoden opfylder følgende krav:"
"message": "Én eller flere organisationspolitikker kræver, at hovedadgangskoden opfylder flg. krav:"
},
"resetPasswordSuccess": {
"message": "Adgangskode nulstillet!"
},
"resetPasswordEnrollmentWarning": {
"message": "Indrullering giver organisationsadministratorer mulighed for at ændre din hovedadgangskode"
"message": "Indrullering vil tillade organisationsadministratorer at ændre din hovedadgangskode"
},
"resetPasswordPolicy": {
"message": "Nulstil hovedadgangskode"
"message": "Nulstilling af hovedadgangskode"
},
"resetPasswordPolicyDescription": {
"message": "Tillad administratorer at nulstille hovedadgangskoder for medlemmer."
"message": "Tillad admins at nulstille hovedadgangskoder for medlemmer."
},
"resetPasswordPolicyWarning": {
"message": "Brugere i organisationen skal selvindrullere eller være auto-indrulleret, før administratorer kan nulstille deres hovedadgangskode."
"message": "Organisationsmedlemmer skal selvindrullere eller være auto-indrulleret, før admins kan nulstille deres hovedadgangskode."
},
"resetPasswordPolicyAutoEnroll": {
"message": "Auto-indrullering"
},
"resetPasswordPolicyAutoEnrollDescription": {
"message": "Alle brugere vil automatisk blive tilmeldt adgangskodenulstilling, når deres invitation er accepteret og vil ikke have lov til at afmelde sig."
"message": "Adgangskodenulstilling indrullerer automatisk alle medlemmer (uden mulighed for afmelding), når deres invitation accepteres."
},
"resetPasswordPolicyAutoEnrollWarning": {
"message": "Brugere, som allerede er i organisationen, opsættes ikke med tilbagevirkende kraft til adgangskodenulstilling. De skal selvindrullere, før administratorer kan nulstille deres hovedadgangskode."
"message": "Adgangskodenulstilling indrullerer ikke allerede eksisterernde organisationmedlemmer med tilbagevirkende kraft. De skal selvindrullere, før admins kan nulstille deres hovedadgangskode."
},
"resetPasswordPolicyAutoEnrollCheckbox": {
"message": "Kræv at nye brugere automatisk indrulleres"
"message": "Kræv auto-indrullering af nye brugere"
},
"resetPasswordAutoEnrollInviteWarning": {
"message": "Denne organisation har en virksomhedspolitik, der auto-opsætter dig til adgangskodenulstilling. Opsætningen giver organisationsadministratorer mulighed for at ændre din hovedadgangskode."
"message": "Denne organisation har en Virksomhedspolitik, der auto-indrullerer dig i adgangskodenulstilling. Tilmeldingen giver organisationsadminis mulighed for at ændre din hovedadgangskode."
},
"resetPasswordOrgKeysError": {
"message": "Organisationsnøgler svar er null"
@@ -4423,10 +4423,10 @@
"message": "Nulstil adgangskode detaljer svar er null"
},
"trashCleanupWarning": {
"message": "Elementer, som har været i papirkurven i mere end 30 dage, slettes automatisk."
"message": "Emner, som har været i papirkurven i flere end 30 dage, slettes automatisk."
},
"trashCleanupWarningSelfHosted": {
"message": "Elementer, som har været i papirkurven i et stykke tid, slettes automatisk."
"message": "Emner, som har befundet i papirkurven i et stykke tid, slettes automatisk."
},
"passwordPrompt": {
"message": "Genanmodning om hovedadgangskode"
@@ -4444,16 +4444,16 @@
"message": "Gensend notifikation"
},
"noSelectedUsersApplicable": {
"message": "Denne handling er ikke anvendelig for nogen af de valgte brugere."
"message": "Denne handling er ikke relevant for de valgte brugere."
},
"removeUsersWarning": {
"message": "Er du sikker på, at du vil fjerne følgende brugere? Processen kan tage et par sekunder at fuldføre og kan ikke afbrydes eller annulleres."
"message": "Sikker på, at flg. brugere skal fjerne? Processen kan tage nogle sekunder at fuldføre og kan hverken afbrydes eller annulleres."
},
"removeOrgUsersConfirmation": {
"message": "Når medlemmer fjernes, har de ikke længere adgang til organisationsdata, og denne handling er irreversibel. For at gentilføje medlemmer til organisationen, skal de inviteres og onboardes igen. Processen kan tage et par sekunder at udføre og kan ikke afbrydes eller annulleres."
"message": "Når medlemmer fjernes — en handling, der er irreversibel— kan de ikke længere til organisationsdata. For at gentilføje medlemmer til organisationen, skal de inviteres og onboardes igen. Processen, og der hverken kan afbrydes eller annulleres, kan tage nogle sekunder at fuldføre."
},
"revokeUsersWarning": {
"message": "Når medlemmers adgang tilbagekaldes, har de ikke længere adgang til organisationsdata. For hurtigt at genoprette medlemsadgang, så gå til fanen Tilbagekaldt. Processen kan tage et par sekunder at udføre og kan ikke afbrydes."
"message": "Ophæves medlemsstatusser, kan medlemmer ikke længere til organisationsdata. For hurtigt at genoprette medlemsadgang — en process, der ikke kan afbrydes eller annulleres og tager nogle sekunder at udføre —, så gå til fanen Ophævet."
},
"theme": {
"message": "Tema"
@@ -4474,25 +4474,25 @@
"message": "Bekræft valgte"
},
"bulkConfirmStatus": {
"message": "Status for massehandling"
"message": "Massehandlingsstatus"
},
"bulkConfirmMessage": {
"message": "Bekræftet med succes."
"message": "Hermed bekræftet."
},
"bulkReinviteMessage": {
"message": "Geninviteret med succes."
"message": "Hermed geninviteret."
},
"bulkRemovedMessage": {
"message": "Fjernet med succes"
"message": "Hermed fjernet"
},
"bulkRevokedMessage": {
"message": "Organisationsadgang tilbagekaldt"
"message": "Organisationsadgang ophævet"
},
"bulkRestoredMessage": {
"message": "Organisationsadgang genetableret"
"message": "Organisationsadgang hermed genetableret"
},
"bulkFilteredMessage": {
"message": "Udelukket, ikke anvendeligt til denne handling."
"message": "Udelukket, ikke anvendelig til denne handling"
},
"fingerprint": {
"message": "Fingeraftryk"
@@ -4501,31 +4501,31 @@
"message": "Fjern brugere"
},
"revokeUsers": {
"message": "Ophæv brugeradgang"
"message": "Ophæv status som bruger"
},
"restoreUsers": {
"message": "Genetablér brugeradgang"
"message": "Gendan status som bruger"
},
"error": {
"message": "Fejl"
},
"resetPasswordManageUsers": {
"message": "Administrér brugere skal også være aktiveret med tilladelsen Håndtér adgangskodenulstilling"
"message": "\"Håndtér brugere\" skal også tildeles med tilladelsen \"Håndtér adgangskodenulstilling\""
},
"setupProvider": {
"message": "Udbyderopsætning"
},
"setupProviderLoginDesc": {
"message": "Du er blevet inviteret til at oprette en ny udbyder. For at fortsætte skal du logge ind eller oprette en ny Bitwarden-konto."
"message": "Du er inviteret til at optte en ny udbyder. Log ind/opret en ny Bitwarden-konto for at fortsætte."
},
"setupProviderDesc": {
"message": "Angiv venligst nedenstående oplysninger for at fuldføre udbyderopsætningen. Kontakt kundesupport, hvis du har spørgsmål."
"message": "Angiv nedenstående oplysninger for at fuldføre udbyderopsætningen. Kontakt kundesupporten ved evt. spørgsmål."
},
"providerName": {
"message": "Udbydernavn"
},
"providerSetup": {
"message": "Udbyderen er nu opsat."
"message": "Udbyderen hermed opsat"
},
"clients": {
"message": "Klienter"
@@ -4535,7 +4535,7 @@
"description": "This is used as a table header to describe which client application created an event log."
},
"providerAdmin": {
"message": "Udbyder admin"
"message": "Udbyder-admin"
},
"providerAdminDesc": {
"message": "Brugeren med den højeste adgang, der kan håndtere alle aspekter af din udbyder samt tilgå og håndtere klientorganisationer."
@@ -4544,25 +4544,25 @@
"message": "Tjenestebruger"
},
"serviceUserDesc": {
"message": "Servicebrugere kan få adgang til samt administrere alle klientorganisationer."
"message": "Tjenestebrugere kan til samt håndtere alle klientorganisationer."
},
"providerInviteUserDesc": {
"message": "Invitér en ny bruger til din udbyder ved at angive deres Bitwarden-konto e-mailadresse nedenfor. Hvis de ikke allerede har en Bitwarden-konto, bliver de bedt om at oprette en ny konto."
"message": "Invitér en ny bruger til din udbyder ved at angive deres Bitwarden-konto e-mailadresse nedenfor. Har personen ikke allerede har en Bitwarden-konto, anmodes vedkommende om at oprette én."
},
"joinProvider": {
"message": "Tilmeld dig udbyder"
},
"joinProviderDesc": {
"message": "Du er blevet inviteret til at tilmelde dig udbyderen ovenfor. For at acceptere invitationen skal du logge ind eller oprette en ny Bitwarden-konto."
"message": "Du er inviteret til at tilmelde dig udbyderen ovenfor. Log ind eller opret en ny Bitwarden-konto for at acceptere invitationen."
},
"providerInviteAcceptFailed": {
"message": "Kan ikke acceptere invitationen. Bed en udbyder-admin om at sende en ny invitation."
"message": "Kan ikke acceptere invitationen. Bed en udbyder-admin sende en ny invitation."
},
"providerInviteAcceptedDesc": {
"message": "Du kan få adgang til denne udbyder, når en administrator bekræfter dit medlemskab. Vi sender dig en e-mail, når det sker."
"message": "Denne udbyder kan tilgås, når en admin bekræfter dit medlemskab. Du tilsendes en e-mail, når dette sker."
},
"providerUsersNeedConfirmed": {
"message": "Du har brugere, der har accepteret deres invitation, men som stadig skal bekræftes. Brugere vil ikke have adgang til udbyderen, før de er bekræftet."
"message": "Du har brugere, som har accepteret deres invitation uden endnu at være bekræftet. Brugere kan ikke til udbyderen, før de er bekræftet."
},
"provider": {
"message": "Udbyder"
@@ -4571,7 +4571,7 @@
"message": "Ny klientorganisation"
},
"newClientOrganizationDesc": {
"message": "Opret en ny klientorganisation, der vil blive knyttet til dig som udbyder. Du vil kunne tilgå og håndtere denne organisation."
"message": "Opret en ny klientorganisation, der tilknyttes dig som udbyderen. Du vil kunne tilgå og håndtere denne organisation."
},
"addExistingOrganization": {
"message": "Tilføj eksisterende organisation"
@@ -4580,7 +4580,7 @@
"message": "Min udbyder"
},
"addOrganizationConfirmation": {
"message": "Er du sikker på, at du vil tilføje $ORGANIZATION$ som klient til $PROVIDER$?",
"message": "Sikker på, at du vil tilføje $ORGANIZATION$ som en klient til $PROVIDER$?",
"placeholders": {
"organization": {
"content": "$1",
@@ -4593,10 +4593,10 @@
}
},
"organizationJoinedProvider": {
"message": "Organisation blev tilføjet udbyderen"
"message": "Organisation hermed tilføjet udbyderen"
},
"accessingUsingProvider": {
"message": "Tilgår organisation ved hjælp af udbyderen $PROVIDER$",
"message": "Tilgår organisation vha. udbyderen $PROVIDER$",
"placeholders": {
"provider": {
"content": "$1",
@@ -4605,10 +4605,10 @@
}
},
"providerIsDisabled": {
"message": "Udbyder er deaktiveret."
"message": "Udbyder suspenderet"
},
"providerUpdated": {
"message": "Udbyder opdateret"
"message": "Udbyder gemt"
},
"yourProviderIs": {
"message": "Din udbyder er $PROVIDER$. De har administrative- og faktureringsrettigheder for din organisation.",
@@ -4629,22 +4629,22 @@
}
},
"detachOrganizationConfirmation": {
"message": "Er du sikker på, at du vil frigøre denne organisation? Organisationen vil fortsætte med at eksistere, men vil ikke længere blive håndteret af udbyderen."
"message": "Sikker på, at du vil frigøre denne organisation? Organisationen vil fortsat eksistere, men håndteres ikke længere af udbyderen."
},
"add": {
"message": "Tilføj"
},
"updatedMasterPassword": {
"message": "Hovedadgangskode opdateret"
"message": "Hovedadgangskode gemt"
},
"updateMasterPassword": {
"message": "Opdatér hovedadgangskode"
},
"updateMasterPasswordWarning": {
"message": "Dit hovedadgangskode blev for nylig ændret af en administrator i din organisation. For at få adgang til boksen skal du opdatere din hovedadgangskode nu. Hvis du fortsætter, logges du ud af din nuværende session, hvilket kræver, at du logger ind igen. Aktive sessioner på andre enheder kan fortsætte med at være aktive i op til én time."
"message": "Din hovedadgangskode blev for nylig ændret af en admin i din organisation. Opdatér hovedadgangskoden nu for at tilgå boksen. Fortsættes, logges der ud af den nuværende session, og du vil skulle logge ind igen. Aktive sessioner på andre enheder kan forblive aktive i op til én time."
},
"masterPasswordInvalidWarning": {
"message": "Din hovedadgangskode opfylder ikke organisationspolitikken. For at blive medlem af organisationen skal du opdatere din hovedadgangskode først. Hvis du fortsætter, logges du ud af din aktuelle session, hvilket kræver, at du logger ind igen. Aktive sessioner på andre enheder kan fortsat være aktive i op til én time."
"message": "Din hovedadgangskode opfylder ikke organisationspolitikkens krav. For at kunne blive organisationsmedlem, skal din hovedadgangskode derfor opdateres nu. Fortsættes, logges der ud af den nuværende session, og du vil skulle logge ind igen. Aktive sessioner på andre enheder kan forblive aktive i op til én time."
},
"maximumVaultTimeout": {
"message": "Boks-timeout"
@@ -4665,7 +4665,7 @@
"message": "Minutter"
},
"vaultTimeoutPolicyInEffect": {
"message": "Din organisations politikker påvirker din boks-timeout. Maksimalt tilladt boks-timeout er $HOURS$ time(r) og $MINUTES$ minut(ter)",
"message": "Organisationspolitikkerne påvirker din boks-timeout. Maks. tilladt boks-timeout udgør $HOURS$ time(r) og $MINUTES$ minut(ter)",
"placeholders": {
"hours": {
"content": "$1",
@@ -4681,25 +4681,25 @@
"message": "Tilpasset boks-timeout"
},
"vaultTimeoutToLarge": {
"message": "Din boks-timeout overskrider den begrænsning, der er fastsat af din organisation."
"message": "Din boks-timeout overskrider den organisationsfastsatte begrænsning."
},
"vaultCustomTimeoutMinimum": {
"message": "Minimum brugerdefineret timeout er 1 minut."
"message": "Tilpasset minimumstimeout udgør 1 minut."
},
"vaultTimeoutRangeError": {
"message": "Boks-timeout er ikke inden for det tilladte interval."
},
"disablePersonalVaultExport": {
"message": "Deaktivér individuel bokseksport"
"message": "Fjern individuel bokseksport"
},
"disablePersonalVaultExportDesc": {
"message": "Tillad ikke medlemmer at eksportere deres individuelle boksdata."
},
"vaultExportDisabled": {
"message": "Bokseksport deaktiveret"
"message": "Bokseksport fjernet"
},
"personalVaultExportPolicyInEffect": {
"message": "En eller flere organisationspolitikker forhindrer dig i at eksportere din personlige boks."
"message": "En eller flere organisationspolitikker forhindrer eksport af din personlige boks."
},
"selectType": {
"message": "Vælg SSO-type"
@@ -4708,7 +4708,7 @@
"message": "Type"
},
"openIdConnectConfig": {
"message": "OpenID-forbindelsesopsætning"
"message": "OpenID Connect-opsætning"
},
"samlSpConfig": {
"message": "SAML-tjenesteudbyderopsætning"
@@ -4720,10 +4720,10 @@
"message": "Callback-sti"
},
"signedOutCallbackPath": {
"message": "Udlogget Callback-sti"
"message": "Udlogget callback-sti"
},
"authority": {
"message": "Myndighed"
"message": "Godkender"
},
"clientId": {
"message": "Klient-ID"
@@ -4738,10 +4738,10 @@
"message": "OIDC-omdirigeringsadfærd"
},
"getClaimsFromUserInfoEndpoint": {
"message": "Hent claims fra endpoint for brugeroplysninger"
"message": "Hent claims fra brugerinfo-slutpunkt"
},
"additionalScopes": {
"message": "Brugerdefinerede omfang"
"message": "Tilpassede scopes (omfang)"
},
"additionalUserIdClaimTypes": {
"message": "Tilpassede bruger-id claim-typer"
@@ -4750,16 +4750,16 @@
"message": "E-mail claim-typer"
},
"additionalNameClaimTypes": {
"message": "Tilpassede navne-claimtyper"
"message": "Tilpassede navne claim-typer"
},
"acrValues": {
"message": "Anmodet godkendelseskontekst klassereferenceværdier"
},
"expectedReturnAcrValue": {
"message": "Forventet \"acr\"-claimværdi i svar"
"message": "Forventet \"acr\" claim-værdi i svar"
},
"spEntityId": {
"message": "SP Enheds-ID"
"message": "SP enheds-ID"
},
"spMetadataUrl": {
"message": "SAML 2.0 Metadata-URL"
@@ -4792,10 +4792,10 @@
"message": "Bindingstype"
},
"idpSingleSignOnServiceUrl": {
"message": "Single Sign-On tjeneste URL"
"message": "Single Sign-On tjeneste-URL"
},
"idpSingleLogoutServiceUrl": {
"message": "Single Log Out-tjeneste URL"
"message": "Single Log Out tjeneste-URL"
},
"idpX509PublicCert": {
"message": "X509 offentligt certifikat"
@@ -4813,7 +4813,7 @@
"message": "Signér godkendelsesanmodninger"
},
"ssoSettingsSaved": {
"message": "Single Sign-On opsætning blev gemt."
"message": "Single Sign-On opsætning gemt"
},
"sponsoredFamilies": {
"message": "Gratis Bitwarden Familier"
@@ -4837,31 +4837,31 @@
"message": "Linket er ikke længere gyldigt. Bed sponsoren sende et nyt tilbud."
},
"reclaimedFreePlan": {
"message": "Konvertér til gratis abonnement"
"message": "Genindløst gratis abonnement"
},
"redeem": {
"message": "Indløs"
},
"sponsoredFamiliesSelectOffer": {
"message": "Vælg den organisation, du gerne vil have sponsoreret"
"message": "Vælg organisation, du vil sponsorere"
},
"familiesSponsoringOrgSelect": {
"message": "Hvilket gratis Familier-tilbud vil du gerne indløse?"
},
"sponsoredFamiliesEmail": {
"message": "Angiv din personlige e-mail for at indløse Bitwarden Familier"
"message": "Angiv personlig e-mail for at indløse Bitwarden Families"
},
"sponsoredFamiliesLeaveCopy": {
"message": "Hvis du fjerner et tilbud eller bliver fjernet fra sponsororganisationen, udløber dit Familier-abonnement ved næste fornyelsesdato."
"message": "Fjerner du et tilbud eller fjernes du fra sponsororganisationen, udløber dit Familier-abonnement ved næste fornyelsesdato."
},
"acceptBitwardenFamiliesHelp": {
"message": "Acceptér tilbud for en eksisterende organisation, eller opret en ny Familier-organisation."
},
"setupSponsoredFamiliesLoginDesc": {
"message": "Du er blevet tilbudt en gratis Bitwarden Familier-abonnement organisation. For at fortsætte skal du logge ind på den konto, der modtog tilbuddet."
"message": "Du er blevet tilbudt en gratis Bitwarden Familier-abonnementsorganisation. Log ind på den konto, der modtog tilbuddet, for at fortsætte."
},
"sponsoredFamiliesAcceptFailed": {
"message": "Tilbuddet kan ikke accepteres. Gensend venligst tilbudsmailen fra din virksomhedskonto, og forsøg igen."
"message": "Tilbud kan ikke accepteres. Gensend tilbudsmailen fra din Virksomhedskonto, og forsøg igen."
},
"sponsoredFamiliesAcceptFailedShort": {
"message": "Kan ikke acceptere tilbud. $DESCRIPTION$",
@@ -4876,16 +4876,16 @@
"message": "Acceptér gratis Bitwarden Familier"
},
"sponsoredFamiliesOfferRedeemed": {
"message": "Gratis Bitwarden Familier-tilbud er blevet indløst"
"message": "Gratis Bitwarden Familier-tilbud hermed indløst"
},
"redeemed": {
"message": "Indløst"
},
"redeemedAccount": {
"message": "Indløst konto"
"message": "Konto indløst"
},
"revokeAccount": {
"message": "Ophæv kontoen $NAME$",
"message": "Ophæv konto $NAME$",
"placeholders": {
"name": {
"content": "$1",
@@ -4894,7 +4894,7 @@
}
},
"resendEmailLabel": {
"message": "Gensend sponsorat-e-mail til $NAME$ sponsorat",
"message": "Gensend sponsoratmail til $NAME$-sponsorat",
"placeholders": {
"name": {
"content": "$1",
@@ -4915,7 +4915,7 @@
"message": "Fjern sponsorat"
},
"removeSponsorshipConfirmation": {
"message": "Efter at have fjernet et sponsorat, vil du være ansvarlig for dette abonnement og relaterede fakturaer. Er du sikker på, at du vil fortsætte?"
"message": "Efter fjernelse af et sponsorat vil du være ansvarlig for abonnementet og relaterede fakturaer. Sikker på, at du vil fortsætte?"
},
"sponsorshipCreated": {
"message": "Sponsorat oprettet"
@@ -4924,7 +4924,7 @@
"message": "E-mail sendt"
},
"revokeSponsorshipConfirmation": {
"message": "Efter at have fjernet denne konto, udløber familie-abonnementets sponsorat ved slutningen af faktureringsperioden. Du vil ikke kunne indløse et nyt sponsortilbud, før det eksisterende udløber. Er du sikker på, at du vil fortsætte?"
"message": "Efter fjernelse af denne konto udløber Familie-abonnementets sponsorat ved slutningen af faktureringsperioden. Du vil ikke kunne indløse et nyt sponsortilbud, før det eksisterende udløber. Sikker på, at du vil fortsætte?"
},
"removeSponsorshipSuccess": {
"message": "Sponsoratet fjernet"
@@ -4951,13 +4951,13 @@
"message": "Bekræft din identitet for at fortsætte."
},
"verificationCodeRequired": {
"message": "Bekræftelseskode er påkrævet."
"message": "Bekræftelseskode kræves."
},
"invalidVerificationCode": {
"message": "Ugyldig bekræftelseskode"
},
"convertOrganizationEncryptionDesc": {
"message": "$ORGANIZATION$ bruger SSO med en selv-hostet nøgleserver. En hovedadgangskode er ikke længere påkrævet for at logge ind for medlemmer af denne organisation.",
"message": "$ORGANIZATION$ anvender SSO med en selv-hostet nøgleserver. Organisationsmedlemmer afkræves ikke længere en hovedadgangskode for at logge ind.",
"placeholders": {
"organization": {
"content": "$1",
@@ -4978,14 +4978,14 @@
"message": "Tillad SSO-godkendelse"
},
"allowSsoDesc": {
"message": "Når den er indstillet, vil din konfiguration blive gemt, og medlemmer vil være i stand til at autentificere ved hjælp af deres identitetsudbyder-akkreditiver."
"message": "Når indstillet, gemmes opsætningen, og medlemmer vil kunne godkendes vha. deres identitetsudbyderlegitimationsoplysninger."
},
"ssoPolicyHelpStart": {
"message": "Brug",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Use the require single-sign-on authentication policy to require all members to log in with SSO.'"
},
"ssoPolicyHelpLink": {
"message": "kræv enkelt-logon-godkendelsespolitik",
"message": "kræv Single Sign-On godkendelsespolitik",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Use the require single-sign-on authentication policy to require all members to log in with SSO.'"
},
"ssoPolicyHelpEnd": {
@@ -4993,22 +4993,22 @@
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Use the require single-sign-on authentication policy to require all members to log in with SSO.'"
},
"ssoPolicyHelpKeyConnector": {
"message": "Kræv SSO-godkendelse og enkeltorganisationspolitikker er påkrævet for at konfigurere Key Connector-dekryptering."
"message": "\"Kræv SSO-godkendelse\" samt enkeltorganisationspolitikker kræves for opsætning af Key Connector-dekryptering."
},
"memberDecryptionOption": {
"message": "Medlemsdekrypteringsindstillinger"
},
"memberDecryptionPassDesc": {
"message": "Når godkendt, dekrypterer medlemmer boks-data ved hjælp af deres hovedadgangskode."
"message": "Når godkendt, dekrypterer medlemmer boks-data vha. deres hovedadgangskode."
},
"keyConnector": {
"message": "Key Connector"
},
"memberDecryptionKeyConnectorDesc": {
"message": "Forbind Login med SSO til din selv-hostede dekrypteringsnøgleserver. Ved at bruge denne mulighed behøver medlemmer ikke at bruge deres hovedadgangskoder til at dekryptere boksdata. Kontakt Bitwarden support for at få hjælp til opsætning."
"message": "Forbind login med SSO til din selv-hostet dekrypteringsnøgleserver. Muligheden overflødiggør medlemmers brug af hovedadgangskode ifm. boks-datadekryptering. Kontakt Bitwarden Support for hjælp til opsætningen."
},
"keyConnectorPolicyRestriction": {
"message": "\"Login med SSO og Key Connector-dekryptering\" er aktiveret. Denne politik omfatter kun ejere og Admins."
"message": "\"Login med SSO og Key Connector-dekryptering\" er aktiveret. Denne politik omfatter kun ejere og admins."
},
"enabledSso": {
"message": "SSO aktiveret"
@@ -5023,7 +5023,7 @@
"message": "Key Connector deaktiveret"
},
"keyConnectorWarning": {
"message": "Når medlemmer begynder at bruge Key Connector, kan din organisation ikke vende tilbage til hovedadgangskode-dekryptering. Fortsæt kun, hvis du er fortrolig med at implementere og administrere en nøgleserver."
"message": "Når medlemmer begynder at bruge Key Connector, kan din organisation ikke vende tilbage til hovedadgangskode-dekryptering. Fortsæt kun, hvis du er fortrolig med at implementere og håndtere en nøgleserver."
},
"migratedKeyConnector": {
"message": "Migreret til Key Connector"
@@ -5032,7 +5032,7 @@
"message": "Angiv en betalingsmetode der skal tilknyttes organisationen. Bare rolig, vi vil ikke opkræve dig noget, medmindre du vælger yderligere funktioner, eller dit sponsorat udløber."
},
"orgCreatedSponsorshipInvalid": {
"message": "Sponsortilbuddet er udløbet. Du kan slette den organisation, du har oprettet, for at undgå en opkrævning ved udløbet af din 7-dages prøveperiode. Ellers kan du lukke denne prompt for at beholde organisationen og påtage dig faktureringsansvaret."
"message": "Sponsortilbuddet er udløbet. Den oprettede organisation kan slettes for at undgå opkrævning ved udkøb af den 7-dages prøveperiode. Ellers luk denne prompt for at beholde organisationen og påtage dig faktureringsforpligtigelsen."
},
"newFamiliesOrganization": {
"message": "Ny Familier-organisation"
@@ -5047,7 +5047,7 @@
"message": "Test"
},
"keyConnectorTestSuccess": {
"message": "Succes! Key Connector nået."
"message": "Lykkedes! Key Connector nået."
},
"keyConnectorTestFail": {
"message": "Key Connector kan ikke nås. Tjek URL'en."
@@ -5083,16 +5083,16 @@
"message": "Rotér token"
},
"rotateBillingSyncTokenWarning": {
"message": "Hvis du fortsætter, skal du genopsætte faktureringssynk på din selvhostede server."
"message": "Fortsættes, vil faktureringssynk skulle genopsættes på din selvhostede server."
},
"rotateBillingSyncTokenTitle": {
"message": "Rotation af faktureringssynk-token vil ugyldiggøre det foregående token."
"message": "Rotering af faktureringssynk-tokenet vil ugyldiggøre det foregående token."
},
"selfHostingTitle": {
"message": "Selvhosting"
},
"selfHostingEnterpriseOrganizationSectionCopy": {
"message": "For at opsætte din organisation på din egen server, skal du uploade din licensfil. For at understøtte gratis familieabonnementer og avancerede faktureringsmuligheder for din selv-hostede organisation, skal du konfigurere faktureringssynk."
"message": "For at opsætte din organisation på egen server, så upload din licensfil. Opsæt faktureringssynk for at understøtte gratis Familier-abonnementstyper og avancerede faktureringsmuligheder for din selvhostede organisation."
},
"billingSyncApiKeyRotated": {
"message": "Token roteret."
@@ -5101,10 +5101,10 @@
"message": "Faktureringssynk"
},
"billingSyncDesc": {
"message": "Faktureringssynk giver gratis familieabonnementer til medlemmer og avancerede faktureringsmuligheder ved at linke din selvhostede Bitwarden til Bitwarden-cloudserveren."
"message": "Faktureringssynk giver gratis Familier-abonnementstyper til medlemmer samt avancerede faktureringsmuligheder ved at linke din selvhostede Bitwarden til Bitwarden-cloudserveren."
},
"billingSyncKeyDesc": {
"message": "Et faktureringssynk-token fra din cloud-organisations abonnementsindstillinger er påkrævet for at udfylde denne formular."
"message": "Et faktureringssynk-token fra din cloud-organisations abonnementsindstillinger kræves for at udfylde denne formular."
},
"billingSyncKey": {
"message": "Faktureringssynk-token"
@@ -5137,10 +5137,10 @@
}
},
"formErrorSummarySingle": {
"message": "1 felt ovenfor kræver din opmærksomhed."
"message": "1 felt ovenfor kræver opmærksomhed."
},
"fieldRequiredError": {
"message": "$FIELDNAME$ er påkrævet.",
"message": "$FIELDNAME$ er obligatorisk.",
"placeholders": {
"fieldname": {
"content": "$1",
@@ -5149,31 +5149,31 @@
}
},
"required": {
"message": "krævet"
"message": "obligatorisk"
},
"idpSingleSignOnServiceUrlRequired": {
"message": "Krævet, hvis enheds-id ikke er en URL."
"message": "Obligatorisk, såfremt Enheds-ID ikke er en URL."
},
"openIdOptionalCustomizations": {
"message": "Valgfrie tilpasninger"
},
"openIdAuthorityRequired": {
"message": "Påkrævet, hvis autoriteten ikke er gyldig."
"message": "Obligatorisk, såfremt Godkender ikke er gyldig."
},
"separateMultipleWithComma": {
"message": "Adskil flere med et komma."
},
"sessionTimeout": {
"message": "Din session er udløbet. Gå tilbage og prøv at logge ind igen."
"message": "Session udløbet. Gå tilbage og prøv at logge ind igen."
},
"exportingPersonalVaultTitle": {
"message": "Eksporterer personlig boks"
"message": "Eksport af individuel boks"
},
"exportingOrganizationVaultTitle": {
"message": "Eksporterer organisationsboks"
"message": "Eksport af organisationsboks"
},
"exportingPersonalVaultDescription": {
"message": "Kun de personlige bokselementer tilknyttet $EMAIL$ eksporteres. Organisationsbokseelementer medtages ikke.",
"message": "Kun individuelle boksemner tilknyttet $EMAIL$ eksporteres. Organisationsboksemner medtages ikke.",
"placeholders": {
"email": {
"content": "$1",
@@ -5182,7 +5182,7 @@
}
},
"exportingOrganizationVaultDescription": {
"message": "Kun organisationsboksen tilknyttet $ORGANIZATION$ eksporteres. Personlige bokseelementer, samt elementer fra andre organisationer, medtages ikke.",
"message": "Kun organisationsboksen tilknyttet $ORGANIZATION$ eksporteres. Individuelle boksemner, samt emner fra andre organisationer, medtages ikke.",
"placeholders": {
"organization": {
"content": "$1",
@@ -5191,7 +5191,7 @@
}
},
"accessDenied": {
"message": "Adgang nægtet. Du har ikke tilladelse til at se denne side."
"message": "Adgang nægtet. Nødvendig tilladelse til at se siden mangler."
},
"masterPassword": {
"message": "Hovedadgangskode"

File diff suppressed because it is too large Load Diff

View File

@@ -1297,17 +1297,17 @@
"message": "Ziurtatu zure kontua saioa hastean beste urrats bat egitea eskatuz."
},
"twoStepLoginOrganizationDescStart": {
"message": "Enforce Bitwarden Two-step Login options for members by using the ",
"message": "Behartu kideei Bitwardenen saioa hasteko bi urratseko aukera, hau erabiliz",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enforce Bitwarden Two-step Login options for members by using the Two-step Login Policy.'"
},
"twoStepLoginPolicy": {
"message": "Two-step Login Policy"
"message": "Bi urratseko saio hasieraren politika"
},
"twoStepLoginOrganizationDuoDesc": {
"message": "To enforce Two-step Login through Duo, use the options below."
"message": "Duo bidezko bi urratseko saio hasiera behartzeko, erabili hurrengo aukerak."
},
"twoStepLoginOrganizationSsoDesc": {
"message": "If you have setup SSO or plan to, Two-step Login may already be enforced through your Identity Provider."
"message": "SSO ezarrita baduzu edo hori egiteko asmoa baduzu, baliteke bi urratseko saio-hasiera iada zure identitate-hornitzailearen bidez erabiltzen aritzea."
},
"twoStepLoginRecoveryWarning": {
"message": "Bi urratseko saio hasiera gaitzeak betirako blokea dezake Bitwarden kontura sartzea. Berreskuratze-kode baten bidez, zure kontura sar zaitezke, bi urratseko saio hasierako hornitzailea erabili ezin baduzu (adb. gailua galtzen baduzu). Bitwarden-ek ezingo dizu lagundu zure konturako sarbidea galtzen baduzu. Berreskuratze-kodea idatzi edo inprimatzea eta leku seguruan edukitzea gomendatzen dugu."
@@ -1557,7 +1557,7 @@
"description": "Vault health reports can be used to evaluate the security of your Bitwarden individual or organization vault."
},
"orgsReportsDesc": {
"message": "Identify and close security gaps in your organization's accounts by clicking the reports below.",
"message": "Identifikatu eta itxi erakundetako kontuetako segurtasun hutsuneak, ondorengo txostenetan klik eginez.",
"description": "Vault health reports can be used to evaluate the security of your Bitwarden individual or organization Vault."
},
"unsecuredWebsitesReport": {
@@ -2597,7 +2597,7 @@
}
},
"viewedCardNumberItemId": {
"message": "Viewed Card Number for item $ID$.",
"message": "$ID$ elementuko txartel zenbakia ikusia.",
"placeholders": {
"id": {
"content": "$1",
@@ -3017,7 +3017,7 @@
"message": "Nire erakundea"
},
"organizationInfo": {
"message": "Organization info"
"message": "Erakundearen informazioa"
},
"deleteOrganization": {
"message": "Ezabatu erakundea"
@@ -3345,7 +3345,7 @@
"description": "ex. Date this item was updated"
},
"dateCreated": {
"message": "Created",
"message": "Sortuta",
"description": "ex. Date this item was created"
},
"datePasswordUpdated": {
@@ -3716,10 +3716,10 @@
"message": "Erakundearen identifikatzailea beharrezkoa da."
},
"ssoIdentifier": {
"message": "SSO identifier"
"message": "SSO identifikatzailea"
},
"ssoIdentifierHint": {
"message": "Provide this ID to your members to login with SSO."
"message": "Eman ID hau kideei, SSOrekin saioa hasteko."
},
"unlinkSso": {
"message": "SSO deskonektatu"
@@ -4123,7 +4123,7 @@
"message": "Baimenak"
},
"permission": {
"message": "Permission"
"message": "Baimena"
},
"managerPermissions": {
"message": "Kudeatu baimenak"
@@ -4531,7 +4531,7 @@
"message": "Bezeroa"
},
"client": {
"message": "Client",
"message": "Bezeroa",
"description": "This is used as a table header to describe which client application created an event log."
},
"providerAdmin": {
@@ -5419,7 +5419,7 @@
}
},
"inputMaxLength": {
"message": "Input must not exceed $COUNT$ characters in length.",
"message": "Sarrerak ezin ditu $COUNT$ karaktere baino gehiago eduki.",
"placeholders": {
"count": {
"content": "$1",
@@ -5443,10 +5443,10 @@
"message": "Piztuta"
},
"members": {
"message": "Members"
"message": "Kideak"
},
"reporting": {
"message": "Reporting"
"message": "Informatzen"
},
"cardBrandMir": {
"message": "Mir"
@@ -5455,57 +5455,57 @@
"message": "Erabiltzaile kopurua"
},
"loggingInAs": {
"message": "Logging in as"
"message": "Honela hasi saioa"
},
"notYou": {
"message": "Not you?"
"message": "Ez zara zu?"
},
"multiSelectPlaceholder": {
"message": "-- Type to Filter --"
"message": "-- Idatzi iragazteko --"
},
"multiSelectLoading": {
"message": "Retrieving options..."
"message": "Aukerak berreskuratzen..."
},
"multiSelectNotFound": {
"message": "No items found"
"message": "Ez da elementurik aurkitu"
},
"multiSelectClearAll": {
"message": "Clear all"
"message": "Ezabatu dena"
},
"from": {
"message": "From"
"message": "Igorlea"
},
"to": {
"message": "To"
"message": "Nora"
},
"member": {
"message": "Member"
"message": "Kidea"
},
"update": {
"message": "Update"
"message": "Eguneratu"
},
"role": {
"message": "Role"
"message": "Rola"
},
"canView": {
"message": "Can view"
"message": "Ikus dezake"
},
"canViewExceptPass": {
"message": "Can view, except passwords"
"message": "Ikus dezake, pasahitza izan ezik"
},
"canEdit": {
"message": "Can edit"
"message": "Editatu dezake"
},
"canEditExceptPass": {
"message": "Can edit, except passwords"
"message": "Editatu dezake, pasahitza izan ezik"
},
"group": {
"message": "Group"
"message": "Taldea"
},
"groupAccessAll": {
"message": "This group can access and modify all items."
"message": "Talde hau elementu guztietara sartu eta aldaketak egin ditzake."
},
"memberAccessAll": {
"message": "This member can access and modify all items."
"message": "Kide hau elementu guztietara sartu eta aldaketak egin ditzake."
}
}

View File

@@ -2948,7 +2948,7 @@
"message": "Sprawdź swoją skrzynkę e-mail, aby uzyskać kod weryfikacyjny."
},
"emailVerified": {
"message": "Twój adres e-mail został zweryfikowany."
"message": "Adres e-mail został zweryfikowany"
},
"emailVerifiedFailed": {
"message": "Nie możemy zweryfikować Twojego adresu e-mail. Spróbuj ponownie wysłać wiadomość weryfikacyjną."
@@ -4477,7 +4477,7 @@
"message": "Status akcji zbiorczej"
},
"bulkConfirmMessage": {
"message": "Potwierdzono."
"message": "Potwierdzono"
},
"bulkReinviteMessage": {
"message": "Zaproszony ponownie."
@@ -4635,7 +4635,7 @@
"message": "Dodaj"
},
"updatedMasterPassword": {
"message": "Hasło główne zostało zaktualizowane"
"message": "Hasło główne zostało zapisane"
},
"updateMasterPassword": {
"message": "Zaktualizuj hasło główne"
@@ -4972,7 +4972,7 @@
"message": "Usuń hasło główne"
},
"removedMasterPassword": {
"message": "Hasło główne zostało usunięte."
"message": "Hasło główne zostało usunięte"
},
"allowSso": {
"message": "Zezwalaj na logowanie jednokrotne SSO"

View File

@@ -1884,10 +1884,10 @@
"description": "Short abbreviation for 'month'"
},
"paymentChargedAnnually": {
"message": "Ваш метод оплаты будет активирован немедленно и использоваться ежегодно. Вы можете отменить это в любой момент."
"message": "Необходимая сумма с вашего метода оплаты будет списана немедленно, а затем с периодичностью каждый год. Можно отменить в любой момент."
},
"paymentCharged": {
"message": "Ваш метод оплаты будет активирован немедленно и использоваться каждый $INTERVAL$. Вы можете отменить это в любой момент.",
"message": "Необходимая сумма с вашего метода оплаты будет списана немедленно, а затем с периодичностью $INTERVAL$. Можно отменить в любой момент.",
"placeholders": {
"interval": {
"content": "$1",
@@ -2020,7 +2020,7 @@
"message": "Нет транзакций."
},
"chargeNoun": {
"message": "Списание",
"message": "Платеж",
"description": "Noun. A charge from a payment method."
},
"refundNoun": {
@@ -3278,7 +3278,7 @@
"message": "Загрузка"
},
"upgrade": {
"message": "Обновить"
"message": "Перейти"
},
"upgradeOrganization": {
"message": "Обновить организацию"

View File

@@ -1291,23 +1291,23 @@
"message": "Дво-коракна лозинка"
},
"twoStepLoginEnforcement": {
"message": "Two-step Login Enforcement"
"message": "Спровођење пријаве у два корака"
},
"twoStepLoginDesc": {
"message": "Заштитите свој налог захтевањем додатног корака приликом пријављивања."
},
"twoStepLoginOrganizationDescStart": {
"message": "Enforce Bitwarden Two-step Login options for members by using the ",
"message": "Примени Bitwarden опције за пријаву у два корака за чланове користећи ",
"description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enforce Bitwarden Two-step Login options for members by using the Two-step Login Policy.'"
},
"twoStepLoginPolicy": {
"message": "Two-step Login Policy"
"message": "Опције дво-коракне политике"
},
"twoStepLoginOrganizationDuoDesc": {
"message": "To enforce Two-step Login through Duo, use the options below."
"message": "Да бисте спровели пријаву у два корака Duoупотребите опције испод."
},
"twoStepLoginOrganizationSsoDesc": {
"message": "If you have setup SSO or plan to, Two-step Login may already be enforced through your Identity Provider."
"message": "Ако сте поставили SSO или планирате, Пријава у два корака је можда већ принуђена преко вашег добављача идентитета."
},
"twoStepLoginRecoveryWarning": {
"message": "Омогућавање пријаве у два корака може вас трајно закључати са вашег Bitwarden-а налога. Код за опоравак омогућава вам приступ вашем налогу у случају да више не можете да користите свог уобичајеног добављача услуге пријављивања у два корака (нпр. ако изгубите уређај). Подршка Bitwarden-а неће вам моћи помоћи ако изгубите приступ свом налогу. Препоручујемо да запишете или одштампате код за опоравак и сачувате га на сигурном месту."
@@ -1557,7 +1557,7 @@
"description": "Vault health reports can be used to evaluate the security of your Bitwarden individual or organization vault."
},
"orgsReportsDesc": {
"message": "Identify and close security gaps in your organization's accounts by clicking the reports below.",
"message": "Идентификујте и затворите безбедносне празнине у вашим налозима организације кликом на извештаје у наставку.",
"description": "Vault health reports can be used to evaluate the security of your Bitwarden individual or organization Vault."
},
"unsecuredWebsitesReport": {
@@ -1591,7 +1591,7 @@
"message": "Нађене пријаве без 2FA"
},
"inactive2faFoundDesc": {
"message": "We found $COUNT$ website(s) in your vault that may not be configured with two-step login (according to 2fa.directory). To further protect these accounts, you should set up two-step login.",
"message": "Нашли смо $COUNT$ сајта у вашем сефу који можда нису конфигурисани за пријаву у два корака (према 2fa.directory). Да бисте додатно заштитили ове налоге, требало би да подесите пријаву у два корака.",
"placeholders": {
"count": {
"content": "$1",
@@ -2360,10 +2360,10 @@
"message": "Да ли сте сигурни да желите да уклоните овог корисника?"
},
"removeOrgUserConfirmation": {
"message": "When a member is removed, they no longer have access to organization data and this action is irreversible. To add the member back to the organization, they must be invited and onboarded again."
"message": "Када се члан уклони, он више нема приступ подацима организације и ова радња је неповратна. Да бисте поново додали члана у организацију, они морају бити позвани и поново укључени."
},
"revokeUserConfirmation": {
"message": "When a member is revoked, they no longer have access to organization data. To quickly restore member access, go to the Revoked tab."
"message": "Када се члан опозове, он више нема приступ подацима организације. Да бисте брзо вратили приступ члановима, идите на картицу Опозвано."
},
"removeUserConfirmationKeyConnector": {
"message": "Упозорење! Овај корисник захтева Key Connector да управља њиховом шифровањем. Уклањање овог корисника из ваше организације трајно ће онемогућити њихов рачун. Ова радња се не може поништити. Да ли желите да наставите?"
@@ -2732,7 +2732,7 @@
}
},
"revokedUserId": {
"message": "Revoked organization access for $ID$.",
"message": "Опозван приступ организацији за $ID$.",
"placeholders": {
"id": {
"content": "$1",
@@ -2741,7 +2741,7 @@
}
},
"restoredUserId": {
"message": "Restored organization access for $ID$.",
"message": "Враћен приступ организацији за $ID$.",
"placeholders": {
"id": {
"content": "$1",
@@ -2750,7 +2750,7 @@
}
},
"revokeUserId": {
"message": "Revoke $ID$ access",
"message": "Опозови приступ „$ID$“",
"placeholders": {
"id": {
"content": "$1",
@@ -3345,7 +3345,7 @@
"description": "ex. Date this item was updated"
},
"dateCreated": {
"message": "Created",
"message": "Креирано",
"description": "ex. Date this item was created"
},
"datePasswordUpdated": {
@@ -3426,7 +3426,7 @@
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
},
"fingerprintMatchInfo": {
"message": "Please make sure your vault is unlocked and Fingerprint phrase matches the other device."
"message": "Уверите се да је ваш сеф откључан и да се фраза отиска прста подудара на другом уређају."
},
"fingerprintPhraseHeader": {
"message": "Сигурносна фраза сефа"
@@ -3716,10 +3716,10 @@
"message": "Потребан је идентификатор организације."
},
"ssoIdentifier": {
"message": "SSO identifier"
"message": "SSO идентификација"
},
"ssoIdentifierHint": {
"message": "Provide this ID to your members to login with SSO."
"message": "Дајте овај ИД својим члановима за пријаву са SSO."
},
"unlinkSso": {
"message": "Откачи SSO"
@@ -4486,10 +4486,10 @@
"message": "Успешно уклоњено"
},
"bulkRevokedMessage": {
"message": "Revoked organization access successfully"
"message": "Успешно опозван приступ организацији"
},
"bulkRestoredMessage": {
"message": "Restored organization access successfully"
"message": "Успешно враћен приступ организацији"
},
"bulkFilteredMessage": {
"message": "Искључено, није применљиво за ову акцију."
@@ -5035,13 +5035,13 @@
"message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility."
},
"newFamiliesOrganization": {
"message": "New Families organization"
"message": "Нова организација Families"
},
"acceptOffer": {
"message": "Прихвати понуду"
},
"sponsoringOrg": {
"message": "Sponsoring organization"
"message": "Спонзорска организација"
},
"keyConnectorTest": {
"message": "Тест"
@@ -5089,7 +5089,7 @@
"message": "Rotating the billing sync token will invalidate the previous token."
},
"selfHostingTitle": {
"message": "Self-hosting"
"message": "Ауто-хстинг"
},
"selfHostingEnterpriseOrganizationSectionCopy": {
"message": "To set-up your organization on your own server, you will need to upload your license file. To support Free Families plans and advanced billing capabilities for your self-hosted organization, you will need to set up billing sync."
@@ -5152,13 +5152,13 @@
"message": "обавезно"
},
"idpSingleSignOnServiceUrlRequired": {
"message": "Required if Entity ID is not a URL."
"message": "Потребно ако Entity ID није УРЛ."
},
"openIdOptionalCustomizations": {
"message": "Опциона подешавања"
},
"openIdAuthorityRequired": {
"message": "Required if Authority is not valid."
"message": "Потребно ако Authority није добро."
},
"separateMultipleWithComma": {
"message": "Вишеструко одвојите зарезом."
@@ -5392,15 +5392,15 @@
"description": "the text, 'SCIM' and 'URL', are acronymns and should not be translated."
},
"scimUrl": {
"message": "SCIM URL",
"message": "SCIM УРЛ",
"description": "the text, 'SCIM' and 'URL', are acronymns and should not be translated."
},
"scimApiKeyRotated": {
"message": "SCIM API key successfully rotated",
"message": "SCIM API кључ успешно ротиран",
"description": "the text, 'SCIM' and 'API', are acronymns and should not be translated."
},
"scimSettingsSaved": {
"message": "SCIM settings saved",
"message": "SCIM подешавања сачувана",
"description": "the text, 'SCIM', is an acronymn and should not be translated."
},
"inputRequired": {
@@ -5419,7 +5419,7 @@
}
},
"inputMaxLength": {
"message": "Input must not exceed $COUNT$ characters in length.",
"message": "Унос не сме бити већи од $COUNT$ карактера.",
"placeholders": {
"count": {
"content": "$1",

View File

@@ -181,7 +181,7 @@
"description": "This is the folder for uncategorized items"
},
"addFolder": {
"message": "Skapa mapp"
"message": "Lägg till mapp"
},
"editFolder": {
"message": "Redigera mapp"
@@ -1351,7 +1351,7 @@
"message": "Hantera"
},
"disable": {
"message": "Inaktivera"
"message": "Stäng av"
},
"revokeAccess": {
"message": "Återkalla åtkomst"
@@ -1639,7 +1639,7 @@
}
},
"weakPasswordsReport": {
"message": "Rapport om svaga lösenord"
"message": "Svaga lösenord"
},
"weakPasswordsReportDesc": {
"message": "Svaga lösenord kan enkelt gissas av hackare och automatiserade verktyg som används för att knäcka lösenord. Bitwardens lösenordsgenerator kan hjälpa dig att skapa starka lösenord."
@@ -2567,7 +2567,7 @@
}
},
"viewAllLoginOptions": {
"message": "View all log in options"
"message": "Visa alla inloggningsalternativ"
},
"viewedItemId": {
"message": "Visade objektet $ID$.",
@@ -2960,7 +2960,7 @@
"message": "Du måste verifiera din e-post för att använda den här funktionen."
},
"updateBrowser": {
"message": "Uppdatera webbläsaren"
"message": "Uppdatera webbläsare"
},
"updateBrowserDesc": {
"message": "Du använder en webbläsare som inte stöds. Webbvalvet kanske inte fungerar som det ska."
@@ -3345,7 +3345,7 @@
"description": "ex. Date this item was updated"
},
"dateCreated": {
"message": "Created",
"message": "Skapad",
"description": "ex. Date this item was created"
},
"datePasswordUpdated": {
@@ -4702,7 +4702,7 @@
"message": "One or more organization policies prevents you from exporting your individual vault."
},
"selectType": {
"message": "Select SSO type"
"message": "Välj SSO-typ"
},
"type": {
"message": "Typ"
@@ -5110,10 +5110,10 @@
"message": "Billing sync token"
},
"active": {
"message": "Active"
"message": "Aktiv"
},
"inactive": {
"message": "Inactive"
"message": "Inaktiv"
},
"sentAwaitingSync": {
"message": "Sent (awaiting sync)"
@@ -5266,7 +5266,7 @@
"message": "You cannot redeem for the active account. Enter a different email."
},
"revokeWhenExpired": {
"message": "Expires $DATE$",
"message": "Upphör $DATE$",
"placeholders": {
"date": {
"content": "$1",
@@ -5358,7 +5358,7 @@
"description": "the text, 'SCIM', is an acronymn and should not be translated."
},
"scimEnabledCheckboxDesc": {
"message": "Enable SCIM",
"message": "Aktivera SCIM",
"description": "the text, 'SCIM', is an acronymn and should not be translated."
},
"scimEnabledCheckboxDescHelpText": {
@@ -5440,7 +5440,7 @@
"message": "Turn on"
},
"on": {
"message": "On"
"message": ""
},
"members": {
"message": "Medlemmar"
@@ -5467,7 +5467,7 @@
"message": "Retrieving options..."
},
"multiSelectNotFound": {
"message": "No items found"
"message": "Inga objekt hittades"
},
"multiSelectClearAll": {
"message": "Clear all"

View File

@@ -4390,13 +4390,13 @@
"message": "Parola başarıyla sıfırlandı."
},
"resetPasswordEnrollmentWarning": {
"message": "Katılmak kuruluş yöneticilerinin ana parolanızı değiştirmesine izin verir. Katılmak istediğinize emin misiniz?"
"message": "Katılmak kuruluş yöneticilerinin ana parolanızı değiştirmesine izin verir"
},
"resetPasswordPolicy": {
"message": "Ana parola sıfırlama"
},
"resetPasswordPolicyDescription": {
"message": "Kuruluş yöneticilerinin kuruluş kullanıcılarının ana parolalarını sıfırlamasına izin ver."
"message": "Kuruluş yöneticilerinin üyelerin ana parolalarını sıfırlamasına izin ver."
},
"resetPasswordPolicyWarning": {
"message": "Yöneticilerin kullanıcıların ana parolalarını sıfırlayabilmesi önce kuruluştaki kullanıcıların kendileri katılmaları veya otomatik eklenmeleri gerekir."
@@ -4492,7 +4492,7 @@
"message": "Kuruluş erişimi başarıyla geri getirildi"
},
"bulkFilteredMessage": {
"message": "İstisna. Bu eylem için geçerli değildir."
"message": "İstisna. Bu eylem için geçerli değildir"
},
"fingerprint": {
"message": "Parmak izi"
@@ -4608,7 +4608,7 @@
"message": "Sağlayıcı devre dışı."
},
"providerUpdated": {
"message": "Sağlayıcı güncellendi"
"message": "Sağlayıcı kaydedildi"
},
"yourProviderIs": {
"message": "Sağlayıcınız: $PROVIDER$. Kuruluşunuzun yönetim ve ödeme yetkileri sağlayıcınıza aittir.",
@@ -4708,13 +4708,13 @@
"message": "Tür"
},
"openIdConnectConfig": {
"message": "OpenID Connect Yapılandırması"
"message": "OpenID Connect yapılandırması"
},
"samlSpConfig": {
"message": "SAML Servis Sağlayıcı Yapılandırması"
"message": "SAML servis sağlayıcı yapılandırması"
},
"samlIdpConfig": {
"message": "SAML Kimlik Sağlayıcı Yapılandırması"
"message": "SAML kimlik sağlayıcı yapılandırması"
},
"callbackPath": {
"message": "Callback yolu"

View File

@@ -434,7 +434,7 @@
"message": "Kho"
},
"vaults": {
"message": "Vaults"
"message": "Kho"
},
"vaultItems": {
"message": "Vault items"
@@ -936,22 +936,22 @@
"message": "Set a password to encrypt the export and import it to any Bitwarden account using the password for decryption."
},
"fileTypeHeading": {
"message": "File type"
"message": "Loại tệp"
},
"accountBackup": {
"message": "Account backup"
"message": "Sao lưu tài khoản"
},
"passwordProtected": {
"message": "Password protected"
"message": "Mật khẩu đã được bảo vệ"
},
"filePasswordAndConfirmFilePasswordDoNotMatch": {
"message": "“File password” and “Confirm file password“ do not match."
},
"confirmVaultImport": {
"message": "Confirm vault import"
"message": "Xác nhận nhập kho lưu trữ"
},
"confirmVaultImportDesc": {
"message": "This file is password-protected. Please enter the file password to import data."
"message": "Tập tin này được mật khẩu bảo vệ. Vui lòng nhập mật khẩu tệp để nhập dữ liệu."
},
"exportSuccess": {
"message": "Dữ liệu kho cảu bạn đã được trích xuất."
@@ -979,15 +979,15 @@
"message": "Độ dài"
},
"uppercase": {
"message": "Uppercase (A-Z)",
"message": "Chữ in hoa (A-Z)",
"description": "Include uppercase letters in the password generator."
},
"lowercase": {
"message": "Lowercase (a-z)",
"message": "Chữ in thường (a-z)",
"description": "Include lowercase letters in the password generator."
},
"numbers": {
"message": "Numbers (0-9)"
"message": "Số (0-9)"
},
"specialCharacters": {
"message": "Special characters (!@#$%^&*)"
@@ -1787,10 +1787,10 @@
"description": "Another way of saying \"Get a Premium membership\""
},
"premiumUpdated": {
"message": "You've upgraded to Premium."
"message": "Bạn đã nâng cấp lên Cao Cấp."
},
"premiumUpgradeUnlockFeatures": {
"message": "Upgrade your account to a Premium membership and unlock some great additional features."
"message": "Nâng cấp tài khoản của bạn lên thành viên Cao Cấp và mở khóa một số tính năng bổ sung tuyệt vời."
},
"premiumSignUpStorage": {
"message": "1 GB encrypted storage for file attachments."
@@ -2990,7 +2990,7 @@
}
},
"rememberEmail": {
"message": "Remember email"
"message": "Ghi nhớ đăng nhập"
},
"recoverAccountTwoStepDesc": {
"message": "If you cannot access your account through your normal two-step login methods, you can use your two-step login recovery code to turn off all two-step providers on your account."
@@ -3278,13 +3278,13 @@
"message": "Loading"
},
"upgrade": {
"message": "Upgrade"
"message": "Nâng cấp"
},
"upgradeOrganization": {
"message": "Upgrade organization"
},
"upgradeOrganizationDesc": {
"message": "This feature is not available for free organizations. Switch to a paid plan to unlock more features."
"message": "Tính năng này không có sẵn cho các tổ chức miễn phí. Chuyển sang gói trả phí để mở khóa nhiều tính năng hơn."
},
"createOrganizationStep1": {
"message": "Create organization: Step 1"
@@ -3311,7 +3311,7 @@
"message": "Privacy Policy"
},
"filters": {
"message": "Filters"
"message": "Bộ lọc"
},
"vaultTimeout": {
"message": "Vault timeout"
@@ -3486,7 +3486,7 @@
"message": "Minimum length"
},
"clone": {
"message": "Clone"
"message": "Tạo bản sao"
},
"masterPassPolicyTitle": {
"message": "Master password requirements"

View File

@@ -1121,7 +1121,7 @@
"message": "清空密码库"
},
"purgedOrganizationVault": {
"message": "组织密码库已清空。"
"message": "清空了组织密码库。"
},
"vaultAccessedByProvider": {
"message": "密码库被提供商访问。"
@@ -2522,7 +2522,7 @@
"message": "登录失败,两步登录不正确。"
},
"exportedVault": {
"message": "导出了密码库"
"message": "导出了密码库"
},
"exportedOrganizationVault": {
"message": "导出了组织密码库。"
@@ -2651,7 +2651,7 @@
}
},
"createdCollectionId": {
"message": "创建集合 $ID$。",
"message": "创建集合 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2660,7 +2660,7 @@
}
},
"editedCollectionId": {
"message": "编辑集合 $ID$。",
"message": "编辑集合 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2669,7 +2669,7 @@
}
},
"deletedCollectionId": {
"message": "删除集合 $ID$。",
"message": "删除集合 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2678,7 +2678,7 @@
}
},
"editedPolicyId": {
"message": "编辑策略 $ID$。",
"message": "编辑策略 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2687,7 +2687,7 @@
}
},
"createdGroupId": {
"message": "创建群组 $ID$。",
"message": "创建群组 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2696,7 +2696,7 @@
}
},
"editedGroupId": {
"message": "编辑群组 $ID$。",
"message": "编辑群组 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2705,7 +2705,7 @@
}
},
"deletedGroupId": {
"message": "删除群组 $ID$。",
"message": "删除群组 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2714,7 +2714,7 @@
}
},
"removedUserId": {
"message": "移除用户 $ID$。",
"message": "移除用户 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2723,7 +2723,7 @@
}
},
"removeUserIdAccess": {
"message": "移除 $ID$ 的访问权限",
"message": "移除 $ID$ 的访问权限",
"placeholders": {
"id": {
"content": "$1",
@@ -2732,7 +2732,7 @@
}
},
"revokedUserId": {
"message": "撤销 $ID$ 的组织访问权限。",
"message": "撤销 $ID$ 的组织访问权限。",
"placeholders": {
"id": {
"content": "$1",
@@ -2741,7 +2741,7 @@
}
},
"restoredUserId": {
"message": "恢复 $ID$ 的组织访问权限。",
"message": "恢复 $ID$ 的组织访问权限。",
"placeholders": {
"id": {
"content": "$1",
@@ -2759,7 +2759,7 @@
}
},
"createdAttachmentForItem": {
"message": "为项目 $ID$ 创建附件。",
"message": "为项目 $ID$ 创建附件。",
"placeholders": {
"id": {
"content": "$1",
@@ -2768,7 +2768,7 @@
}
},
"deletedAttachmentForItem": {
"message": "删除项目 $ID$ 的附件。",
"message": "删除项目 $ID$ 的附件。",
"placeholders": {
"id": {
"content": "$1",
@@ -2777,7 +2777,7 @@
}
},
"editedCollectionsForItem": {
"message": "已为项目 $ID$ 编辑集合。",
"message": "编辑了项目 $ID$ 集合。",
"placeholders": {
"id": {
"content": "$1",
@@ -2786,7 +2786,7 @@
}
},
"invitedUserId": {
"message": "邀请用户 $ID$。",
"message": "邀请用户 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2795,7 +2795,7 @@
}
},
"confirmedUserId": {
"message": "确认用户 $ID$。",
"message": "确认用户 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2804,7 +2804,7 @@
}
},
"editedUserId": {
"message": "编辑用户 $ID$。",
"message": "编辑用户 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2813,7 +2813,7 @@
}
},
"editedGroupsForUser": {
"message": "已为用户 $ID$ 编辑群组。",
"message": "编辑了用户 $ID$ 群组。",
"placeholders": {
"id": {
"content": "$1",
@@ -2831,7 +2831,7 @@
}
},
"createdOrganizationId": {
"message": "创建组织 $ID$。",
"message": "创建组织 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2840,7 +2840,7 @@
}
},
"addedOrganizationId": {
"message": "添加组织 $ID$。",
"message": "添加组织 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2849,7 +2849,7 @@
}
},
"removedOrganizationId": {
"message": "移除组织 $ID$。",
"message": "移除组织 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -2858,7 +2858,7 @@
}
},
"accessedClientVault": {
"message": "访问 $ID$ 组织密码库。",
"message": "访问 $ID$ 组织密码库。",
"placeholders": {
"id": {
"content": "$1",
@@ -3611,7 +3611,7 @@
}
},
"permanentlyDeletedItemId": {
"message": "项目 $ID$ 已永久删除",
"message": "永久删除了项目 $ID$",
"placeholders": {
"id": {
"content": "$1",
@@ -3650,7 +3650,7 @@
}
},
"restoredItemId": {
"message": "项目 $ID$ 已恢复",
"message": "恢复了项目 $ID$",
"placeholders": {
"id": {
"content": "$1",
@@ -4099,7 +4099,7 @@
"description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated."
},
"modifiedPolicyId": {
"message": "策略 $ID$ 已修改。",
"message": "修改了策略 $ID$。",
"placeholders": {
"id": {
"content": "$1",
@@ -4342,7 +4342,7 @@
}
},
"eventAdminPasswordReset": {
"message": "重置用户 $ID$ 的主密码。",
"message": "重置用户 $ID$ 的主密码。",
"placeholders": {
"id": {
"content": "$1",

View File

@@ -12,6 +12,7 @@
}
},
"angularCompilerOptions": {
"strictTemplates": true,
"preserveWhitespaces": true
},
"files": ["src/polyfills.ts", "src/main.ts", "../../bitwarden_license/bit-web/src/main.ts"],